Skip to content

docs: migrate feature specs to flow-first use-case docs#142

Merged
phuongnse merged 23 commits into
mainfrom
cursor/docs-i18n-theme-85d6
May 28, 2026
Merged

docs: migrate feature specs to flow-first use-case docs#142
phuongnse merged 23 commits into
mainfrom
cursor/docs-i18n-theme-85d6

Conversation

@phuongnse

@phuongnse phuongnse commented May 27, 2026

Copy link
Copy Markdown
Owner

Summary

Migrates product specs from the legacy docs/epics/E0N-name/features/F0N-*.md layout to flow-first use cases: one folder per use case under docs/use-cases/{domain}/{short-slug}/ with README.md + co-located .excalidraw / .svg assets. Strips legacy spec IDs (US-NNN, E0N, F0N) from C# / proto comments.

Terminology: Acceptance Criteria (domain), domain README/open work, PROGRESS.md headings by domain slug, dependency links without E0N IDs.

Structure: keep top-level docs/diagrams/ (platform architecture diagrams) and docs/wireframes/ (shared kit: _template, app-shell). All domain-specific screens + flows live next to their use case (docs/use-cases/{domain}/{slug}/*.excalidraw|.svg).

Tooling:

  • New: scripts/check-use-case-docs.py (run by check-doc-drift.sh) — validates use-case structure + flags template placeholders + counts stub Main-flow files.
  • New: scripts/regenerate-domain-readme-index.py — regenerates each domain's ## Use Cases section with word-boundary summary truncation.
  • One-shot migration helpers moved to scripts/_archive/ with a README explaining they should not be re-run.

Linked spec

Requirements & rules followed

  • Gate 2 — docs updated in same PR
  • Doc drift + use-case structure checks green

cursoragent and others added 2 commits May 27, 2026 11:18
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented May 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 204 files, which is 54 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4d7fb482-55e1-433e-ae51-a6ea9393dbc5

📥 Commits

Reviewing files that changed from the base of the PR and between bf3d0ec and 71bba1d.

⛔ Files ignored due to path filters (22)
  • docs/use-cases/data-modeling/create-model/data-model.svg is excluded by !**/*.svg
  • docs/use-cases/form-builder/create-form/form-model.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/accept-invite/accept-invitation.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/change-password/change-password.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/reset-password/forgot-password.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/sign-in/auth-flow.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/delete-org/settings-org-delete-modal.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/delete-org/settings-org-delete-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/org-profile/settings-org-profile-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/org-settings/settings-org-access-denied.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/org-settings/settings-org-free-plan.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/org-settings/settings-org-usage-error.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/provision-tenant/tenant-provisioning.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/provision-tenant/workspace-provisioning.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/register-org/register-org-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/register-org/register-org.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/verify-email/verify-email-rate-limit.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/verify-email/verify-email.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/view-plans/pricing.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-builder/create-workflow/workflow-model.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-engine/isolated-steps/execution-detail.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-engine/start-execution/execution-flow.svg is excluded by !**/*.svg
📒 Files selected for processing (204)
  • .github/PULL_REQUEST_TEMPLATE.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • docs/ARCHITECTURE.md
  • docs/PROGRESS.md
  • docs/README.md
  • docs/TECH_STACK.md
  • docs/WORKAROUNDS.md
  • docs/diagrams/generate-diagrams.mjs
  • docs/playbooks/agent-checklist.md
  • docs/playbooks/docs-style.md
  • docs/playbooks/patterns.md
  • docs/playbooks/process.md
  • docs/playbooks/testing.md
  • docs/playbooks/wireframes.md
  • docs/scripts/generate-diagrams.ps1
  • docs/scripts/generate-wireframes.ps1
  • docs/use-cases/README.md
  • docs/use-cases/USE_CASE_TEMPLATE.md
  • docs/use-cases/data-modeling/README.md
  • docs/use-cases/data-modeling/add-field/README.md
  • docs/use-cases/data-modeling/bulk-records/README.md
  • docs/use-cases/data-modeling/create-data-class/README.md
  • docs/use-cases/data-modeling/create-model/README.md
  • docs/use-cases/data-modeling/create-model/data-model.excalidraw
  • docs/use-cases/data-modeling/create-record/README.md
  • docs/use-cases/data-modeling/data-class-field/README.md
  • docs/use-cases/data-modeling/delete-data-class/README.md
  • docs/use-cases/data-modeling/delete-model/README.md
  • docs/use-cases/data-modeling/delete-record/README.md
  • docs/use-cases/data-modeling/edit-data-class/README.md
  • docs/use-cases/data-modeling/edit-model/README.md
  • docs/use-cases/data-modeling/edit-record/README.md
  • docs/use-cases/data-modeling/field-validation/README.md
  • docs/use-cases/data-modeling/list-models/README.md
  • docs/use-cases/data-modeling/list-records/README.md
  • docs/use-cases/data-modeling/reorder-fields/README.md
  • docs/use-cases/data-modeling/search-records/README.md
  • docs/use-cases/form-builder/README.md
  • docs/use-cases/form-builder/add-form-field/README.md
  • docs/use-cases/form-builder/assignment-notify/README.md
  • docs/use-cases/form-builder/create-form/README.md
  • docs/use-cases/form-builder/create-form/form-model.excalidraw
  • docs/use-cases/form-builder/delete-form/README.md
  • docs/use-cases/form-builder/edit-form/README.md
  • docs/use-cases/form-builder/form-field-validation/README.md
  • docs/use-cases/form-builder/form-timeout/README.md
  • docs/use-cases/form-builder/link-form-step/README.md
  • docs/use-cases/form-builder/list-forms/README.md
  • docs/use-cases/form-builder/map-submission-context/README.md
  • docs/use-cases/form-builder/pending-tasks/README.md
  • docs/use-cases/form-builder/prepopulate-fields/README.md
  • docs/use-cases/form-builder/reorder-form-fields/README.md
  • docs/use-cases/form-builder/section-divider/README.md
  • docs/use-cases/form-builder/submit-assigned-form/README.md
  • docs/use-cases/identity-access/README.md
  • docs/use-cases/identity-access/accept-invite/README.md
  • docs/use-cases/identity-access/accept-invite/accept-invitation.excalidraw
  • docs/use-cases/identity-access/api-permissions/README.md
  • docs/use-cases/identity-access/assign-role/README.md
  • docs/use-cases/identity-access/change-password/README.md
  • docs/use-cases/identity-access/change-password/change-password.excalidraw
  • docs/use-cases/identity-access/create-role/README.md
  • docs/use-cases/identity-access/deactivate-user/README.md
  • docs/use-cases/identity-access/edit-role/README.md
  • docs/use-cases/identity-access/invite-user/README.md
  • docs/use-cases/identity-access/language/README.md
  • docs/use-cases/identity-access/list-roles/README.md
  • docs/use-cases/identity-access/reset-password/README.md
  • docs/use-cases/identity-access/reset-password/forgot-password.excalidraw
  • docs/use-cases/identity-access/sessions/README.md
  • docs/use-cases/identity-access/sign-in/README.md
  • docs/use-cases/identity-access/sign-in/auth-flow.excalidraw
  • docs/use-cases/identity-access/sign-out/README.md
  • docs/use-cases/identity-access/theme/README.md
  • docs/use-cases/identity-access/token-refresh/README.md
  • docs/use-cases/identity-access/ui-permissions/README.md
  • docs/use-cases/identity-access/user-profile/README.md
  • docs/use-cases/page-builder/README.md
  • docs/use-cases/platform-foundation/README.md
  • docs/use-cases/platform-foundation/admin-change-plan/README.md
  • docs/use-cases/platform-foundation/delete-org/README.md
  • docs/use-cases/platform-foundation/delete-org/settings-org-delete-modal.excalidraw
  • docs/use-cases/platform-foundation/delete-org/settings-org-delete-states.excalidraw
  • docs/use-cases/platform-foundation/enforce-limits/README.md
  • docs/use-cases/platform-foundation/org-profile/README.md
  • docs/use-cases/platform-foundation/org-profile/settings-org-profile-states.excalidraw
  • docs/use-cases/platform-foundation/org-settings/README.md
  • docs/use-cases/platform-foundation/org-settings/settings-org-access-denied.excalidraw
  • docs/use-cases/platform-foundation/org-settings/settings-org-free-plan.excalidraw
  • docs/use-cases/platform-foundation/org-settings/settings-org-usage-error.excalidraw
  • docs/use-cases/platform-foundation/plan-at-signup/README.md
  • docs/use-cases/platform-foundation/provision-tenant/README.md
  • docs/use-cases/platform-foundation/provision-tenant/tenant-provisioning.excalidraw
  • docs/use-cases/platform-foundation/provision-tenant/workspace-provisioning.excalidraw
  • docs/use-cases/platform-foundation/register-org/README.md
  • docs/use-cases/platform-foundation/register-org/register-org-states.excalidraw
  • docs/use-cases/platform-foundation/register-org/register-org.excalidraw
  • docs/use-cases/platform-foundation/tenant-from-jwt/README.md
  • docs/use-cases/platform-foundation/tenant-scope/README.md
  • docs/use-cases/platform-foundation/verify-email/README.md
  • docs/use-cases/platform-foundation/verify-email/verify-email-rate-limit.excalidraw
  • docs/use-cases/platform-foundation/verify-email/verify-email.excalidraw
  • docs/use-cases/platform-foundation/view-plans/README.md
  • docs/use-cases/platform-foundation/view-plans/pricing.excalidraw
  • docs/use-cases/workflow-builder/README.md
  • docs/use-cases/workflow-builder/add-canvas-step/README.md
  • docs/use-cases/workflow-builder/archive-workflow/README.md
  • docs/use-cases/workflow-builder/bulk-export/README.md
  • docs/use-cases/workflow-builder/canvas-nav/README.md
  • docs/use-cases/workflow-builder/canvas-undo/README.md
  • docs/use-cases/workflow-builder/condition-step/README.md
  • docs/use-cases/workflow-builder/connect-steps/README.md
  • docs/use-cases/workflow-builder/create-workflow/README.md
  • docs/use-cases/workflow-builder/create-workflow/workflow-model.excalidraw
  • docs/use-cases/workflow-builder/delete-draft/README.md
  • docs/use-cases/workflow-builder/duplicate-workflow/README.md
  • docs/use-cases/workflow-builder/event-trigger/README.md
  • docs/use-cases/workflow-builder/export-json/README.md
  • docs/use-cases/workflow-builder/fan-in-join/README.md
  • docs/use-cases/workflow-builder/form-step/README.md
  • docs/use-cases/workflow-builder/http-step/README.md
  • docs/use-cases/workflow-builder/if-else-branch/README.md
  • docs/use-cases/workflow-builder/import-json/README.md
  • docs/use-cases/workflow-builder/list-workflows/README.md
  • docs/use-cases/workflow-builder/manual-trigger/README.md
  • docs/use-cases/workflow-builder/merge-branches/README.md
  • docs/use-cases/workflow-builder/multi-branch/README.md
  • docs/use-cases/workflow-builder/notification-step/README.md
  • docs/use-cases/workflow-builder/parallel-group/README.md
  • docs/use-cases/workflow-builder/parallel-results/README.md
  • docs/use-cases/workflow-builder/publish-workflow/README.md
  • docs/use-cases/workflow-builder/schedule-trigger/README.md
  • docs/use-cases/workflow-builder/script-step/README.md
  • docs/use-cases/workflow-builder/step-side-panel/README.md
  • docs/use-cases/workflow-builder/webhook-trigger/README.md
  • docs/use-cases/workflow-engine/README.md
  • docs/use-cases/workflow-engine/cancel-execution/README.md
  • docs/use-cases/workflow-engine/error-channels/README.md
  • docs/use-cases/workflow-engine/error-detail/README.md
  • docs/use-cases/workflow-engine/execution-detail/README.md
  • docs/use-cases/workflow-engine/failure-notify/README.md
  • docs/use-cases/workflow-engine/isolated-steps/README.md
  • docs/use-cases/workflow-engine/isolated-steps/execution-detail.excalidraw
  • docs/use-cases/workflow-engine/org-execution-history/README.md
  • docs/use-cases/workflow-engine/retry-execution/README.md
  • docs/use-cases/workflow-engine/retry-history/README.md
  • docs/use-cases/workflow-engine/retry-with-context/README.md
  • docs/use-cases/workflow-engine/start-execution/README.md
  • docs/use-cases/workflow-engine/start-execution/execution-flow.excalidraw
  • docs/use-cases/workflow-engine/track-execution/README.md
  • docs/use-cases/workflow-engine/workflow-history/README.md
  • docs/wireframes/components.mjs
  • docs/wireframes/generate-screens.mjs
  • frontend/src/features/auth/api.ts
  • scripts/check-doc-drift.sh
  • scripts/check-doc-link-targets.py
  • scripts/check-use-case-docs.py
  • scripts/regenerate-domain-readme-index.py
  • src/Axis.Api/Endpoints/AuthEndpoints.cs
  • src/Axis.Api/Endpoints/OrganizationEndpoints.cs
  • src/Axis.Api/Endpoints/PlanEndpoints.cs
  • src/Axis.Api/Endpoints/PlatformOrganizationEndpoints.cs
  • src/Axis.Api/Infrastructure/TenantDataApiPaths.cs
  • src/Axis.Api/Middleware/TenantOrganizationAccessMiddleware.cs
  • src/Axis.Api/Program.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/AddField/AddFieldCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/AddField/AddFieldHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/AddFieldToDataClass/AddFieldToDataClassCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/AddFieldToDataClass/AddFieldToDataClassHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/BulkDeleteRecords/BulkDeleteRecordsCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/BulkDeleteRecords/BulkDeleteRecordsHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/CreateDataClass/CreateDataClassCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/CreateDataClass/CreateDataClassHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/CreateModel/CreateModelCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/CreateModel/CreateModelHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/CreateRecord/CreateRecordCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/CreateRecord/CreateRecordHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/DeleteDataClass/DeleteDataClassCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/DeleteDataClass/DeleteDataClassHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/DeleteModel/DeleteModelCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/DeleteModel/DeleteModelHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/DeleteRecord/DeleteRecordCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/DeleteRecord/DeleteRecordHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/RemoveField/RemoveFieldCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/RemoveField/RemoveFieldHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/RemoveFieldFromDataClass/RemoveFieldFromDataClassCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/RemoveFieldFromDataClass/RemoveFieldFromDataClassHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/ReorderFields/ReorderFieldsCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/ReorderFields/ReorderFieldsHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateDataClass/UpdateDataClassCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateDataClass/UpdateDataClassHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateField/UpdateFieldCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateField/UpdateFieldHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateModel/UpdateModelCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateModel/UpdateModelHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateRecord/UpdateRecordCommand.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Commands/UpdateRecord/UpdateRecordHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Queries/ExportRecordsCsv/ExportRecordsCsvHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Queries/ExportRecordsCsv/ExportRecordsCsvQuery.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Queries/GetDataClass/GetDataClassHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Queries/GetDataClass/GetDataClassQuery.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Queries/GetDataClasses/GetDataClassesHandler.cs
  • src/Modules/DataModeling/Axis.DataModeling.Application/Queries/GetDataClasses/GetDataClassesQuery.cs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR migrates the documentation architecture from epic-centered (docs/epics/) to use-case-centered (docs/use-cases/) organization. It establishes new authoring conventions, validation tooling, and systematically reorganizes all domain feature specifications and content files, while updating workflows, playbooks, and code generators to work with the new structure.

Changes

Epic-to-Use-Cases Documentation Migration

Layer / File(s) Summary
Use-cases directory foundation and conventions
docs/use-cases/README.md, docs/use-cases/_template-use-case.md
Establishes the use-cases documentation directory structure with authoring rules, status symbol legend, domain phase/scope definitions, required update sequencing, and prescribed file layouts (Purpose/Actor/Trigger/Flows/Acceptance Criteria/Wireframes/Diagrams/Implementation status).
Use-case validation and CI integration
scripts/check-use-case-docs.py, scripts/check-doc-drift.sh, .github/workflows/build-and-test.yml
Adds check-use-case-docs.py CLI validation script, removes legacy normalize-feature-docs.py, updates check-doc-drift.sh to enforce use-cases structure, and integrates use-cases into CI workflow change detection.
Documentation governance and workflow playbook updates
CLAUDE.md, CONTRIBUTING.md, docs/playbooks/*, .github/PULL_REQUEST_TEMPLATE.md
Updates governance documentation to reference use-cases as the feature-spec contract, revises playbooks (docs-style, agent-checklist, process, patterns, wireframes) to point to use-case paths and validate use-case structure, and adjusts PR template gate wording.
Navigation and reference documentation updates
docs/README.md, docs/PROGRESS.md, docs/ARCHITECTURE.md, docs/TECH_STACK.md, docs/epics/README.md
Updates docs/README.md navigation from Epics to Use Cases link and reorganizes domain overview tables, removes docs/epics/README.md, updates reference docs to point to use-cases paths, and revises docs/PROGRESS.md to reference use-cases and add localization/theming scope callout.
Domain README and navigation restructuring
docs/use-cases/*/README.md
Updates all domain README files from epic-style headers/back-links to use-case headers, replaces Features tables with Use Cases tables, and updates all dependency/dependent link paths to use clean domain-relative paths.
Use-case markdown content migration
docs/use-cases/**/*.md (data-modeling, form-builder, identity-access, platform-foundation, workflow-builder, workflow-engine)
Converts all feature markdown files from detailed User Stories (US-0NN) format with full acceptance criteria into templated Use Case format with Purpose/Primary actor/Trigger/Main flow/Alternate flows scaffolding, updates wireframe/navigation link paths throughout all domains.
New feature documentation: localization & theming
docs/use-cases/identity-access/localization-and-theming.md
Adds comprehensive localization-and-theming use-case documentation with sections for language switching (English/Vietnamese) and theme switching (light/dark/system), acceptance criteria, frontend implementation status, and recorded decisions.
Diagram generation updates
docs/diagrams/generate-diagrams.mjs, docs/scripts/generate-diagrams.ps1
Updates diagram generator to introduce domainDir() helper and retarget all domain-level diagrams from epic-level to domain-level output paths, dynamically discovers docs/use-cases/*/diagrams/ directories.
Wireframe generation updates
docs/wireframes/generate-screens.mjs, docs/scripts/generate-wireframes.ps1
Updates wireframe generator write() function to route outputs to use-cases/{domain}/wireframes/ by path pattern, changes ~40 genScreen() outputs from epic prefixes to domain folder names, removes docs/epics scanning and adds docs/use-cases recursive discovery.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • phuongnse/axis#128: Modifies the same docs/playbooks/agent-checklist.md—both PRs update Gate 0–3 guidance with the main PR shifting it to docs/use-cases/ while the related PR adds anti-pattern/audit rules.
  • phuongnse/axis#48: Both PRs update the agent/documentation gate tooling through .github/*, docs/playbooks/agent-checklist.md, and scripts/check-doc-drift.sh to enforce docs-first workflows.
  • phuongnse/axis#129: Directly related through removal of scripts/normalize-feature-docs.py and replacement with check-use-case-docs.py in the drift-checking pipeline.

🐰 From epic tales to use-case flows, the docs now grow,
Clean domains, clear conventions, let the structure show!
Wireframes and diagrams migrate with grace,
Every screenshot finds its rightful place. 🎬

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/docs-i18n-theme-85d6

@phuongnse phuongnse marked this pull request as ready for review May 27, 2026 11:22
cursoragent and others added 2 commits May 27, 2026 14:47
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
@cursor cursor Bot changed the title docs(e02): add localization and theming feature spec docs: migrate feature specs to flow-first use-case docs May 27, 2026
cursoragent and others added 2 commits May 28, 2026 00:36
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/use-cases/workflow-engine/execution-history.md (1)

59-67: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix inconsistent API implementation status in this use case.

Line 62 shows API | ✅, but Line 65 says API work is still pending. Please align the status table with the stated gaps.

Suggested edit
-> | API | ✅ |
+> | API | ⚠️ |

As per coding guidelines docs/use-cases/**/*.md: Update use-case feature file ACs and Implementation status callout in same PR as code changes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/use-cases/workflow-engine/execution-history.md` around lines 59 - 67,
Update the "API" status in the execution-history use case to match the described
gaps: change the table checkbox at the top to reflect that API work is pending
(remove the ✅ for "API" or mark it as ⏳/Pending) and add a short note
referencing the outstanding API items (GET /api/executions paging/filters and
running-first sort) so it aligns with the paragraph that follows; also ensure
the Implementation status callout and the acceptance criteria (ACs) in the same
document are updated in this PR to mention that
GetExecutionsByWorkflowHandler/GetAllExecutionsHandler currently rely on
IExecutionRepository.GetPagedByWorkflowAsync/GetPagedAsync with server-side
pagination and that date-range and trigger-type filters remain to be implemented
at the API layer.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLAUDE.md`:
- Line 90: The grep pattern currently used (grep -r "Application:
⚠️\|Infrastructure: ⚠️" docs/use-cases/) won't match status table rows like "|
Application | ⚠️ |"; update the command to search for the table format instead,
for example replace the quoted pattern with a regex that looks for table cells
(e.g. a pattern matching '\| *(Application|Infrastructure) *\| *⚠️ *\|') so the
command finds rows in docs/use-cases/ where Application or Infrastructure have
the warning status.

In `@docs/playbooks/process.md`:
- Line 139: Replace the current guidance that instructs contributors to add a
single `> **Wireframe**` callout with instructions to instead update the `##
Wireframes` table in the use-case file (i.e., remove the `> **Wireframe**`
callout text and replace it with a directive to populate or update the `##
Wireframes` table rows); also add a reminder that ACs and the `Implementation
status` callout in the use-case markdown must be updated in the same PR as the
code changes to match the flow-first format.

In `@docs/use-cases/data-modeling/model-definition.md`:
- Line 53: Broken/brittle relative link to the Import/Export doc in the line
containing "[E04 F07 Import/Export]": remove the unnecessary
"../../E04-workflow-builder/../../" hop and replace it with a direct relative
path from docs/use-cases/data-modeling/model-definition.md to the
workflow-builder doc (use ../workflow-builder/import-export.md so the link
target is docs/use-cases/workflow-builder/import-export.md); update the markdown
link text accordingly and verify the link resolves locally.

In `@docs/use-cases/data-modeling/README.md`:
- Around line 23-24: The table header currently defines two columns ("Use case"
and "Description") but the separator row has three delimiters; update the
separator row to match two columns by using exactly two column separators (e.g.,
"|---|---|") so the header and separator align and remove the extra pipe that
creates the third column.

In `@docs/use-cases/form-builder/form-definition.md`:
- Line 214: The documentation decision to have IsReferencedByWorkflowAsync run a
raw SQL cross-module query against workflow_definitions.steps should be removed
and replaced with a module-bound approach: stop querying workflow_definitions
from the Form Builder module and instead implement either an event-driven
projection/read-model that the Form Builder can query (populate the projection
from workflow events) or a clear API boundary the Form Builder calls to ask "Is
this form referenced?"; update references to IsReferencedByWorkflowAsync and any
mention of workflow_definitions.steps to point to the new projection or API, and
document using the established cross-module communication mechanisms (Kafka
events for projections, RabbitMQ for commands/sagas, or gRPC for sync RPC) as
the recommended patterns.

In `@docs/use-cases/form-builder/README.md`:
- Around line 23-24: The Markdown table header has two columns ("Use case" and
"Description") but the separator row has the wrong number of delimiters; update
the separator row under the header so it has exactly two column separators
(e.g., change the existing separator to "|---|---|" to match the "Use case" and
"Description" header columns).

In `@docs/use-cases/identity-access/README.md`:
- Around line 23-24: The Markdown table header row "| Use case | Description |"
has a trailing pipe but the separator row uses "|---|---|" without the final
pipe, causing a column delimiter mismatch; update the separator to include the
trailing pipe so it reads "|---|---|" -> "|---|---|" (i.e., change the separator
to "|---|---|") ensuring the separator aligns with the two-column header string
"Use case | Description".

In `@docs/use-cases/page-builder/README.md`:
- Around line 25-27: The Markdown table header declares two columns ("Use case"
and "Description") but the separator row in the diff has three cells; update the
separator row under the header to match two columns (i.e., change the current
three-cell separator to a two-cell separator) so the table lines up correctly
with the "Use case | Description" header.

In `@docs/use-cases/platform-foundation/README.md`:
- Around line 23-24: The Markdown table's separator row has three columns while
the header has two, causing a column mismatch; fix the table by changing the
separator row from "|---|---|---|" (or any 3-column variant) to a two-column
separator "|---|---|" so the header row "| Use case | Description |" and the
separator match, ensuring the table renders correctly.

In `@docs/use-cases/README.md`:
- Line 18: The table row contains unescaped pipe characters inside the cell (the
grep command string) which breaks Markdown table parsing; update that cell by
wrapping the entire command in backticks (e.g., surround the grep command shown
with backticks) or by escaping each pipe inside the command as \| so the row
remains a single table cell—target the table row containing the grep command
string `grep -rE "\\| Application \\| ⚠️\\|\\| Infrastructure \\| ⚠️\\|\\| API
\\| ⚠️" docs/use-cases/` and replace it with the backticked (or pipe-escaped)
version.

In `@docs/use-cases/workflow-builder/README.md`:
- Around line 23-24: The markdown table header line "| Use case | Description |"
has two columns but the delimiter row "|---|---|---|" declares three; update the
delimiter to match two columns by changing "|---|---|---|" to "|---|---|" (or
alternatively add a third header cell to the header row) so the number of
pipe-separated columns in the delimiter matches the header; locate and edit the
lines containing the exact strings "| Use case | Description |" and
"|---|---|---|" in README.md.

In `@docs/use-cases/workflow-builder/triggers.md`:
- Around line 1-35: The top-level use-case section "Use Case Group — Trigger
Configuration" is missing the required Implementation status callout; either add
an "Implementation status" callout (e.g., a brief callout block stating Not
started / In progress / Done and a short implementation note) near the
"Acceptance Criteria" or remove this partial scaffold entirely; update the
section under the header "Use Case Group — Trigger Configuration" and ensure the
new callout appears alongside the "Acceptance Criteria" block so the
docs/use-cases update rule is satisfied.

In `@docs/use-cases/workflow-engine/README.md`:
- Around line 23-24: The table delimiter row is one column too many; update the
second line so the delimiter matches the header "Use case | Description" by
replacing the current "|---|---|---|" (or "|---|---|") row with a two-column
delimiter "|---|---|" so the table has exactly two columns.

---

Outside diff comments:
In `@docs/use-cases/workflow-engine/execution-history.md`:
- Around line 59-67: Update the "API" status in the execution-history use case
to match the described gaps: change the table checkbox at the top to reflect
that API work is pending (remove the ✅ for "API" or mark it as ⏳/Pending) and
add a short note referencing the outstanding API items (GET /api/executions
paging/filters and running-first sort) so it aligns with the paragraph that
follows; also ensure the Implementation status callout and the acceptance
criteria (ACs) in the same document are updated in this PR to mention that
GetExecutionsByWorkflowHandler/GetAllExecutionsHandler currently rely on
IExecutionRepository.GetPagedByWorkflowAsync/GetPagedAsync with server-side
pagination and that date-range and trigger-type filters remain to be implemented
at the API layer.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fe5c13b4-61e0-4886-b46c-0c640691a707

📥 Commits

Reviewing files that changed from the base of the PR and between d957b0a and bf3d0ec.

⛔ Files ignored due to path filters (41)
  • docs/use-cases/data-modeling/diagrams/data-model.svg is excluded by !**/*.svg
  • docs/use-cases/data-modeling/wireframes/data-classes.svg is excluded by !**/*.svg
  • docs/use-cases/data-modeling/wireframes/data-models.svg is excluded by !**/*.svg
  • docs/use-cases/data-modeling/wireframes/records.svg is excluded by !**/*.svg
  • docs/use-cases/form-builder/diagrams/form-model.svg is excluded by !**/*.svg
  • docs/use-cases/form-builder/wireframes/form-editor.svg is excluded by !**/*.svg
  • docs/use-cases/form-builder/wireframes/form-submission.svg is excluded by !**/*.svg
  • docs/use-cases/form-builder/wireframes/forms.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/diagrams/auth-flow.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/accept-invitation.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/change-password.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/forgot-password.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/login-unverified.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/login.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/register.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/settings-roles.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/settings-security.svg is excluded by !**/*.svg
  • docs/use-cases/identity-access/wireframes/settings-users.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/diagrams/tenant-provisioning.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/email-confirmation.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/pricing.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/register-org-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/register-org.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-access-denied.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-delete-modal.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-delete-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-deletion-scheduled.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-free-plan.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-profile-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-upload-states.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org-usage-error.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/settings-org.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/verify-email-rate-limit.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/verify-email.svg is excluded by !**/*.svg
  • docs/use-cases/platform-foundation/wireframes/workspace-provisioning.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-builder/diagrams/workflow-model.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-builder/wireframes/workflow-editor.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-builder/wireframes/workflows.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-engine/diagrams/execution-flow.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-engine/wireframes/execution-detail.svg is excluded by !**/*.svg
  • docs/use-cases/workflow-engine/wireframes/executions.svg is excluded by !**/*.svg
📒 Files selected for processing (101)
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/workflows/build-and-test.yml
  • CLAUDE.md
  • CONTRIBUTING.md
  • docs/ARCHITECTURE.md
  • docs/PROGRESS.md
  • docs/README.md
  • docs/TECH_STACK.md
  • docs/diagrams/generate-diagrams.mjs
  • docs/epics/README.md
  • docs/epics/_template-feature-us.md
  • docs/playbooks/agent-checklist.md
  • docs/playbooks/docs-style.md
  • docs/playbooks/patterns.md
  • docs/playbooks/process.md
  • docs/playbooks/wireframes.md
  • docs/scripts/generate-diagrams.ps1
  • docs/scripts/generate-wireframes.ps1
  • docs/use-cases/README.md
  • docs/use-cases/data-modeling/README.md
  • docs/use-cases/data-modeling/data-classes.md
  • docs/use-cases/data-modeling/data-records.md
  • docs/use-cases/data-modeling/diagrams/data-model.excalidraw
  • docs/use-cases/data-modeling/field-types.md
  • docs/use-cases/data-modeling/model-definition.md
  • docs/use-cases/data-modeling/wireframes/data-classes.excalidraw
  • docs/use-cases/data-modeling/wireframes/data-models.excalidraw
  • docs/use-cases/data-modeling/wireframes/records.excalidraw
  • docs/use-cases/form-builder/README.md
  • docs/use-cases/form-builder/diagrams/form-model.excalidraw
  • docs/use-cases/form-builder/form-definition.md
  • docs/use-cases/form-builder/form-fields.md
  • docs/use-cases/form-builder/form-submission.md
  • docs/use-cases/form-builder/wireframes/form-editor.excalidraw
  • docs/use-cases/form-builder/wireframes/form-submission.excalidraw
  • docs/use-cases/form-builder/wireframes/forms.excalidraw
  • docs/use-cases/form-builder/workflow-integration.md
  • docs/use-cases/identity-access/README.md
  • docs/use-cases/identity-access/authentication.md
  • docs/use-cases/identity-access/diagrams/auth-flow.excalidraw
  • docs/use-cases/identity-access/localization-and-theming.md
  • docs/use-cases/identity-access/password-security.md
  • docs/use-cases/identity-access/permissions.md
  • docs/use-cases/identity-access/role-management.md
  • docs/use-cases/identity-access/user-management.md
  • docs/use-cases/identity-access/wireframes/accept-invitation.excalidraw
  • docs/use-cases/identity-access/wireframes/change-password.excalidraw
  • docs/use-cases/identity-access/wireframes/forgot-password.excalidraw
  • docs/use-cases/identity-access/wireframes/login-unverified.excalidraw
  • docs/use-cases/identity-access/wireframes/login.excalidraw
  • docs/use-cases/identity-access/wireframes/register.excalidraw
  • docs/use-cases/identity-access/wireframes/settings-roles.excalidraw
  • docs/use-cases/identity-access/wireframes/settings-security.excalidraw
  • docs/use-cases/identity-access/wireframes/settings-users.excalidraw
  • docs/use-cases/page-builder/README.md
  • docs/use-cases/platform-foundation/README.md
  • docs/use-cases/platform-foundation/diagrams/tenant-provisioning.excalidraw
  • docs/use-cases/platform-foundation/organization-management.md
  • docs/use-cases/platform-foundation/subscription-plans.md
  • docs/use-cases/platform-foundation/tenant-isolation.md
  • docs/use-cases/platform-foundation/tenant-registration.md
  • docs/use-cases/platform-foundation/wireframes/email-confirmation.excalidraw
  • docs/use-cases/platform-foundation/wireframes/pricing.excalidraw
  • docs/use-cases/platform-foundation/wireframes/register-org-states.excalidraw
  • docs/use-cases/platform-foundation/wireframes/register-org.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-access-denied.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-delete-modal.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-delete-states.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-deletion-scheduled.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-free-plan.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-profile-states.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-upload-states.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org-usage-error.excalidraw
  • docs/use-cases/platform-foundation/wireframes/settings-org.excalidraw
  • docs/use-cases/platform-foundation/wireframes/verify-email-rate-limit.excalidraw
  • docs/use-cases/platform-foundation/wireframes/verify-email.excalidraw
  • docs/use-cases/platform-foundation/wireframes/workspace-provisioning.excalidraw
  • docs/use-cases/workflow-builder/README.md
  • docs/use-cases/workflow-builder/branching.md
  • docs/use-cases/workflow-builder/diagrams/workflow-model.excalidraw
  • docs/use-cases/workflow-builder/import-export.md
  • docs/use-cases/workflow-builder/parallel-execution.md
  • docs/use-cases/workflow-builder/step-types.md
  • docs/use-cases/workflow-builder/triggers.md
  • docs/use-cases/workflow-builder/visual-canvas.md
  • docs/use-cases/workflow-builder/wireframes/workflow-editor.excalidraw
  • docs/use-cases/workflow-builder/wireframes/workflows.excalidraw
  • docs/use-cases/workflow-builder/workflow-definition.md
  • docs/use-cases/workflow-engine/README.md
  • docs/use-cases/workflow-engine/diagrams/execution-flow.excalidraw
  • docs/use-cases/workflow-engine/error-handling.md
  • docs/use-cases/workflow-engine/execution-history.md
  • docs/use-cases/workflow-engine/execution-management.md
  • docs/use-cases/workflow-engine/manual-retry.md
  • docs/use-cases/workflow-engine/step-handlers.md
  • docs/use-cases/workflow-engine/wireframes/execution-detail.excalidraw
  • docs/use-cases/workflow-engine/wireframes/executions.excalidraw
  • docs/wireframes/generate-screens.mjs
  • scripts/check-doc-drift.sh
  • scripts/check-use-case-docs.py
  • scripts/normalize-feature-docs.py
💤 Files with no reviewable changes (3)
  • docs/epics/README.md
  • scripts/normalize-feature-docs.py
  • docs/epics/_template-feature-us.md
✅ Files skipped from review due to trivial changes (17)
  • .github/workflows/build-and-test.yml
  • docs/use-cases/identity-access/localization-and-theming.md
  • docs/ARCHITECTURE.md
  • docs/PROGRESS.md
  • docs/TECH_STACK.md
  • docs/playbooks/patterns.md
  • docs/use-cases/data-modeling/field-types.md
  • docs/use-cases/workflow-builder/branching.md
  • docs/use-cases/workflow-builder/parallel-execution.md
  • docs/use-cases/identity-access/user-management.md
  • docs/playbooks/wireframes.md
  • docs/use-cases/workflow-builder/step-types.md
  • docs/use-cases/workflow-builder/import-export.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • docs/use-cases/workflow-builder/workflow-definition.md
  • docs/use-cases/data-modeling/data-records.md
  • docs/use-cases/data-modeling/data-classes.md

Comment thread CLAUDE.md
**Workarounds:** if you intentionally ship code that violates a P0/P1 rule (because the proper solution is blocked), record it in [`docs/WORKAROUNDS.md`](docs/WORKAROUNDS.md) **in the same PR** with a cleanup trigger. Add a `// WORKAROUND: see docs/WORKAROUNDS.md#<slug>` comment at the violation site. The drift script and the architecture fitness tests (`tests/Architecture/Axis.Architecture.Tests`) enforce both ends.

**Work priority:** (1) gaps/bugs/failing tests (2) finish current layer (3) next layer in order. Before API work: `grep -r "Application: ⚠️\|Infrastructure: ⚠️" docs/epics/` — resolve or document deferrals ([process.md § 4.5](docs/playbooks/process.md)).
**Work priority:** (1) gaps/bugs/failing tests (2) finish current layer (3) next layer in order. Before API work: `grep -r "Application: ⚠️\|Infrastructure: ⚠️" docs/use-cases/` — resolve or document deferrals ([process.md § 4.5](docs/playbooks/process.md)).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use-case gap-sweep grep pattern is mismatched to the actual status table format.

At Line 90, the pattern searches Application: ⚠️ / Infrastructure: ⚠️, but status is recorded in table rows (for example | Application | ⚠️ |). This command will often return no hits.

Suggested fix
-**Work priority:** (1) gaps/bugs/failing tests (2) finish current layer (3) next layer in order. Before API work: `grep -r "Application: ⚠️\|Infrastructure: ⚠️" docs/use-cases/` — resolve or document deferrals ([process.md § 4.5](docs/playbooks/process.md)).
+**Work priority:** (1) gaps/bugs/failing tests (2) finish current layer (3) next layer in order. Before API work: `grep -rE "\| Application \| ⚠️\|\| Infrastructure \| ⚠️" docs/use-cases/` — resolve or document deferrals ([process.md § 4.5](docs/playbooks/process.md)).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CLAUDE.md` at line 90, The grep pattern currently used (grep -r "Application:
⚠️\|Infrastructure: ⚠️" docs/use-cases/) won't match status table rows like "|
Application | ⚠️ |"; update the command to search for the table format instead,
for example replace the quoted pattern with a regex that looks for table cells
(e.g. a pattern matching '\| *(Application|Infrastructure) *\| *⚠️ *\|') so the
command finds rows in docs/use-cases/ where Application or Infrastructure have
the warning status.

Comment thread docs/playbooks/process.md Outdated
Comment thread docs/use-cases/data-modeling/model-definition.md Outdated
Comment thread docs/use-cases/data-modeling/README.md Outdated
Comment thread docs/use-cases/form-builder/form-definition.md Outdated
Comment thread docs/use-cases/platform-foundation/README.md Outdated
Comment thread docs/use-cases/README.md
| 1 | Domain **Open work** in `docs/use-cases/{domain}/README.md` | Prioritized gaps (backend vs frontend) |
| 2 | `docs/use-cases/{domain}/*.md` | Per-use-case ACs + `> **Implementation status**` + `Gaps vs spec` / `**Deferred:**` |
| 3 | `docs/PROGRESS.md` | Module layer summary; cross-cutting foundation phases |
| 4 | `grep -rE "\\| Application \\| ⚠️\\|\\| Infrastructure \\| ⚠️\\|\\| API \\| ⚠️" docs/use-cases/` | Use cases with partial backend layers ([agent-checklist](../playbooks/agent-checklist.md)) |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix broken table row parsing in the grep command example.

The command at Line 18 contains unescaped table separators (|) in a table cell, so Markdown parsers split it into extra columns and truncate content. Wrap the command in backticks (or escape pipes) to keep the row valid.

Suggested fix
-| 4 | `grep -rE "\\| Application \\| ⚠️\\|\\| Infrastructure \\| ⚠️\\|\\| API \\| ⚠️" docs/use-cases/` | Use cases with partial backend layers ([agent-checklist](../playbooks/agent-checklist.md)) |
+| 4 | `grep -rE "\| Application \| ⚠️\|\| Infrastructure \| ⚠️\|\| API \| ⚠️" docs/use-cases/` | Use cases with partial backend layers ([agent-checklist](../playbooks/agent-checklist.md)) |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| 4 | `grep -rE "\\| Application \\| ⚠️\\|\\| Infrastructure \\| ⚠️\\|\\| API \\| ⚠️" docs/use-cases/` | Use cases with partial backend layers ([agent-checklist](../playbooks/agent-checklist.md)) |
| 4 | `grep -rE "\| Application \| ⚠️\|\| Infrastructure \| ⚠️\|\| API \| ⚠️" docs/use-cases/` | Use cases with partial backend layers ([agent-checklist](../playbooks/agent-checklist.md)) |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 18-18: Table column count
Expected: 3; Actual: 11; Too many cells, extra data will be missing

(MD056, table-column-count)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/use-cases/README.md` at line 18, The table row contains unescaped pipe
characters inside the cell (the grep command string) which breaks Markdown table
parsing; update that cell by wrapping the entire command in backticks (e.g.,
surround the grep command shown with backticks) or by escaping each pipe inside
the command as \| so the row remains a single table cell—target the table row
containing the grep command string `grep -rE "\\| Application \\| ⚠️\\|\\|
Infrastructure \\| ⚠️\\|\\| API \\| ⚠️" docs/use-cases/` and replace it with the
backticked (or pipe-escaped) version.

Comment thread docs/use-cases/workflow-builder/README.md Outdated
Comment thread docs/use-cases/workflow-builder/triggers.md Outdated
Comment thread docs/use-cases/workflow-engine/README.md Outdated
cursoragent and others added 17 commits May 28, 2026 00:50
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Co-authored-by: Phuong Nguyen <phuongnse@users.noreply.github.com>
Review-finding fixes:
- Repoint 5 domain READMEs' diagram refs to real per-use-case file paths
- Replace self-link ./README.md in Open work tables with actual use-case slugs
- docs/README.md: drop missing login.excalidraw, list real wireframes
- USE_CASE_TEMPLATE + docs-style: flat asset layout (no ./wireframes/, ./diagrams/)
- regenerate-domain-readme-index.py: truncate at word boundary (was 100-char mid-word)
- Expand 23 truncated summary rows across 5 domain READMEs from real Purpose
- strip-spec-ids: stop stripping legitimate () in code comments
- Restore () in 8 source/test comments + drop stale stub comment in HttpStepExecutor
- Fill real Purpose/Actor/Trigger/flow for delete-data-class, language, theme
- Sweep Gaps vs spec: split Done content out; drop "see gaps below" artifact
- check-doc-drift.sh: rename labels from E0N to domain slugs

Doc-tree consistency for new agents:
- CLAUDE.md + PR template: "feature file" -> "use-case file" (example path too)
- patterns.md / process.md / wireframes.md: drop > **Wireframe**: callout,
  point at ## Wireframes table; refresh ASCII tree to flat layout
- Fix agent-checklist broken anchor (use-cases README, not docs README)

CI hardening (so the next migration can't slip these past):
- New scripts/check-doc-link-targets.py — verifies every `![alt](./path)` and
  `[text](./path)` relative target exists. Closes the broken-image-ref gap
  that lychee missed in PR #142. Wired into check-doc-drift.sh.
- check-use-case-docs.py: flag placeholder Purpose/Actor/Trigger; flag
  self-link [name](./README.md) in domain READMEs; flag truncated
  ## Use Cases summary rows; count use cases still on the stock Main flow.
- check-doc-drift.sh: stale-terminology guard ("feature file", "see gaps
  below", > **Wireframe**:, docs/epics/, _template-feature-us).

Cleanup:
- Delete 6 one-shot migration scripts (no longer needed post-migration)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- check-doc-link-targets.py: strip fenced code blocks and inline backtick
  spans before scanning for links. Without this, illustrative examples like
  `[text](./file.md)` inside backticks or markdown code fences trip as
  "broken link" — exactly what CI flagged on the first push.
- agent-checklist.md: rephrase the stale-terminology guard description so
  the bullet doesn't restate the forbidden phrases in plain text (the bash
  grep can't distinguish backtick content). The current pattern list lives
  in scripts/check-doc-drift.sh; the playbook now points there instead.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@phuongnse phuongnse merged commit b4a11c6 into main May 28, 2026
8 checks passed
phuongnse added a commit that referenced this pull request May 29, 2026
Comments that cite a specific PR ("landed in PR #142", "ships in PR #97")
go stale as the codebase evolves and duplicate provenance that git history
already owns. Keep the durable rationale, drop the PR pointers. Also widen
the doc-drift-scope CI filter to glob scripts/** instead of enumerating each
checker, so a new checker triggers the job without a manual list edit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants