@zigrivers/scaffold 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +477 -0
- package/dist/cli/commands/adopt.d.ts +12 -0
- package/dist/cli/commands/adopt.d.ts.map +1 -0
- package/dist/cli/commands/adopt.js +107 -0
- package/dist/cli/commands/adopt.js.map +1 -0
- package/dist/cli/commands/adopt.test.d.ts +2 -0
- package/dist/cli/commands/adopt.test.d.ts.map +1 -0
- package/dist/cli/commands/adopt.test.js +277 -0
- package/dist/cli/commands/adopt.test.js.map +1 -0
- package/dist/cli/commands/build.d.ts +12 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +105 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/build.test.d.ts +2 -0
- package/dist/cli/commands/build.test.d.ts.map +1 -0
- package/dist/cli/commands/build.test.js +272 -0
- package/dist/cli/commands/build.test.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +14 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +102 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/dashboard.test.d.ts +2 -0
- package/dist/cli/commands/dashboard.test.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.test.js +142 -0
- package/dist/cli/commands/dashboard.test.js.map +1 -0
- package/dist/cli/commands/decisions.d.ts +13 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +62 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/decisions.test.d.ts +2 -0
- package/dist/cli/commands/decisions.test.d.ts.map +1 -0
- package/dist/cli/commands/decisions.test.js +154 -0
- package/dist/cli/commands/decisions.test.js.map +1 -0
- package/dist/cli/commands/info.d.ts +12 -0
- package/dist/cli/commands/info.d.ts.map +1 -0
- package/dist/cli/commands/info.js +110 -0
- package/dist/cli/commands/info.js.map +1 -0
- package/dist/cli/commands/info.test.d.ts +2 -0
- package/dist/cli/commands/info.test.d.ts.map +1 -0
- package/dist/cli/commands/info.test.js +392 -0
- package/dist/cli/commands/info.test.js.map +1 -0
- package/dist/cli/commands/init.d.ts +13 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +46 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/init.test.d.ts +2 -0
- package/dist/cli/commands/init.test.d.ts.map +1 -0
- package/dist/cli/commands/init.test.js +156 -0
- package/dist/cli/commands/init.test.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +4 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +346 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/knowledge.test.d.ts +2 -0
- package/dist/cli/commands/knowledge.test.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.test.js +293 -0
- package/dist/cli/commands/knowledge.test.js.map +1 -0
- package/dist/cli/commands/list.d.ts +12 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +73 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/list.test.d.ts +2 -0
- package/dist/cli/commands/list.test.d.ts.map +1 -0
- package/dist/cli/commands/list.test.js +166 -0
- package/dist/cli/commands/list.test.js.map +1 -0
- package/dist/cli/commands/next.d.ts +12 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +75 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/next.test.d.ts +2 -0
- package/dist/cli/commands/next.test.d.ts.map +1 -0
- package/dist/cli/commands/next.test.js +236 -0
- package/dist/cli/commands/next.test.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +13 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +105 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/reset.test.d.ts +2 -0
- package/dist/cli/commands/reset.test.d.ts.map +1 -0
- package/dist/cli/commands/reset.test.js +211 -0
- package/dist/cli/commands/reset.test.js.map +1 -0
- package/dist/cli/commands/run.d.ts +14 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +379 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/run.test.d.ts +2 -0
- package/dist/cli/commands/run.test.d.ts.map +1 -0
- package/dist/cli/commands/run.test.js +535 -0
- package/dist/cli/commands/run.test.js.map +1 -0
- package/dist/cli/commands/skip.d.ts +13 -0
- package/dist/cli/commands/skip.d.ts.map +1 -0
- package/dist/cli/commands/skip.js +123 -0
- package/dist/cli/commands/skip.js.map +1 -0
- package/dist/cli/commands/skip.test.d.ts +2 -0
- package/dist/cli/commands/skip.test.d.ts.map +1 -0
- package/dist/cli/commands/skip.test.js +339 -0
- package/dist/cli/commands/skip.test.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +79 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/status.test.d.ts +2 -0
- package/dist/cli/commands/status.test.d.ts.map +1 -0
- package/dist/cli/commands/status.test.js +245 -0
- package/dist/cli/commands/status.test.js.map +1 -0
- package/dist/cli/commands/update.d.ts +11 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +159 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/update.test.d.ts +2 -0
- package/dist/cli/commands/update.test.d.ts.map +1 -0
- package/dist/cli/commands/update.test.js +140 -0
- package/dist/cli/commands/update.test.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +12 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +65 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/validate.test.d.ts +2 -0
- package/dist/cli/commands/validate.test.d.ts.map +1 -0
- package/dist/cli/commands/validate.test.js +159 -0
- package/dist/cli/commands/validate.test.js.map +1 -0
- package/dist/cli/commands/version.d.ts +13 -0
- package/dist/cli/commands/version.d.ts.map +1 -0
- package/dist/cli/commands/version.js +89 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/version.test.d.ts +2 -0
- package/dist/cli/commands/version.test.d.ts.map +1 -0
- package/dist/cli/commands/version.test.js +63 -0
- package/dist/cli/commands/version.test.js.map +1 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +72 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.test.d.ts +2 -0
- package/dist/cli/index.test.d.ts.map +1 -0
- package/dist/cli/index.test.js +8 -0
- package/dist/cli/index.test.js.map +1 -0
- package/dist/cli/middleware/output-mode.d.ts +21 -0
- package/dist/cli/middleware/output-mode.d.ts.map +1 -0
- package/dist/cli/middleware/output-mode.js +27 -0
- package/dist/cli/middleware/output-mode.js.map +1 -0
- package/dist/cli/middleware/output-mode.test.d.ts +2 -0
- package/dist/cli/middleware/output-mode.test.d.ts.map +1 -0
- package/dist/cli/middleware/output-mode.test.js +41 -0
- package/dist/cli/middleware/output-mode.test.js.map +1 -0
- package/dist/cli/middleware/project-root.d.ts +21 -0
- package/dist/cli/middleware/project-root.d.ts.map +1 -0
- package/dist/cli/middleware/project-root.js +54 -0
- package/dist/cli/middleware/project-root.js.map +1 -0
- package/dist/cli/middleware/project-root.test.d.ts +2 -0
- package/dist/cli/middleware/project-root.test.d.ts.map +1 -0
- package/dist/cli/middleware/project-root.test.js +112 -0
- package/dist/cli/middleware/project-root.test.js.map +1 -0
- package/dist/cli/output/auto.d.ts +18 -0
- package/dist/cli/output/auto.d.ts.map +1 -0
- package/dist/cli/output/auto.js +43 -0
- package/dist/cli/output/auto.js.map +1 -0
- package/dist/cli/output/context.d.ts +19 -0
- package/dist/cli/output/context.d.ts.map +1 -0
- package/dist/cli/output/context.js +15 -0
- package/dist/cli/output/context.js.map +1 -0
- package/dist/cli/output/context.test.d.ts +2 -0
- package/dist/cli/output/context.test.d.ts.map +1 -0
- package/dist/cli/output/context.test.js +335 -0
- package/dist/cli/output/context.test.js.map +1 -0
- package/dist/cli/output/error-display.d.ts +31 -0
- package/dist/cli/output/error-display.d.ts.map +1 -0
- package/dist/cli/output/error-display.js +79 -0
- package/dist/cli/output/error-display.js.map +1 -0
- package/dist/cli/output/error-display.test.d.ts +2 -0
- package/dist/cli/output/error-display.test.d.ts.map +1 -0
- package/dist/cli/output/error-display.test.js +230 -0
- package/dist/cli/output/error-display.test.js.map +1 -0
- package/dist/cli/output/interactive.d.ts +22 -0
- package/dist/cli/output/interactive.d.ts.map +1 -0
- package/dist/cli/output/interactive.js +126 -0
- package/dist/cli/output/interactive.js.map +1 -0
- package/dist/cli/output/json.d.ts +17 -0
- package/dist/cli/output/json.d.ts.map +1 -0
- package/dist/cli/output/json.js +62 -0
- package/dist/cli/output/json.js.map +1 -0
- package/dist/cli/types.d.ts +11 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/loader.d.ts +22 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +159 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/loader.test.d.ts +2 -0
- package/dist/config/loader.test.d.ts.map +1 -0
- package/dist/config/loader.test.js +226 -0
- package/dist/config/loader.test.js.map +1 -0
- package/dist/config/migration.d.ts +15 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +39 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/migration.test.d.ts +2 -0
- package/dist/config/migration.test.d.ts.map +1 -0
- package/dist/config/migration.test.js +44 -0
- package/dist/config/migration.test.js.map +1 -0
- package/dist/config/schema.d.ts +121 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +22 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/schema.test.d.ts +2 -0
- package/dist/config/schema.test.d.ts.map +1 -0
- package/dist/config/schema.test.js +126 -0
- package/dist/config/schema.test.js.map +1 -0
- package/dist/core/adapters/adapter.d.ts +64 -0
- package/dist/core/adapters/adapter.d.ts.map +1 -0
- package/dist/core/adapters/adapter.js +25 -0
- package/dist/core/adapters/adapter.js.map +1 -0
- package/dist/core/adapters/adapter.test.d.ts +2 -0
- package/dist/core/adapters/adapter.test.d.ts.map +1 -0
- package/dist/core/adapters/adapter.test.js +175 -0
- package/dist/core/adapters/adapter.test.js.map +1 -0
- package/dist/core/adapters/claude-code.d.ts +9 -0
- package/dist/core/adapters/claude-code.d.ts.map +1 -0
- package/dist/core/adapters/claude-code.js +34 -0
- package/dist/core/adapters/claude-code.js.map +1 -0
- package/dist/core/adapters/claude-code.test.d.ts +2 -0
- package/dist/core/adapters/claude-code.test.d.ts.map +1 -0
- package/dist/core/adapters/claude-code.test.js +100 -0
- package/dist/core/adapters/claude-code.test.js.map +1 -0
- package/dist/core/adapters/codex.d.ts +10 -0
- package/dist/core/adapters/codex.d.ts.map +1 -0
- package/dist/core/adapters/codex.js +61 -0
- package/dist/core/adapters/codex.js.map +1 -0
- package/dist/core/adapters/codex.test.d.ts +2 -0
- package/dist/core/adapters/codex.test.d.ts.map +1 -0
- package/dist/core/adapters/codex.test.js +122 -0
- package/dist/core/adapters/codex.test.js.map +1 -0
- package/dist/core/adapters/universal.d.ts +10 -0
- package/dist/core/adapters/universal.d.ts.map +1 -0
- package/dist/core/adapters/universal.js +45 -0
- package/dist/core/adapters/universal.js.map +1 -0
- package/dist/core/adapters/universal.test.d.ts +2 -0
- package/dist/core/adapters/universal.test.d.ts.map +1 -0
- package/dist/core/adapters/universal.test.js +121 -0
- package/dist/core/adapters/universal.test.js.map +1 -0
- package/dist/core/assembly/context-gatherer.d.ts +17 -0
- package/dist/core/assembly/context-gatherer.d.ts.map +1 -0
- package/dist/core/assembly/context-gatherer.js +49 -0
- package/dist/core/assembly/context-gatherer.js.map +1 -0
- package/dist/core/assembly/context-gatherer.test.d.ts +2 -0
- package/dist/core/assembly/context-gatherer.test.d.ts.map +1 -0
- package/dist/core/assembly/context-gatherer.test.js +252 -0
- package/dist/core/assembly/context-gatherer.test.js.map +1 -0
- package/dist/core/assembly/depth-resolver.d.ts +11 -0
- package/dist/core/assembly/depth-resolver.d.ts.map +1 -0
- package/dist/core/assembly/depth-resolver.js +23 -0
- package/dist/core/assembly/depth-resolver.js.map +1 -0
- package/dist/core/assembly/depth-resolver.test.d.ts +2 -0
- package/dist/core/assembly/depth-resolver.test.d.ts.map +1 -0
- package/dist/core/assembly/depth-resolver.test.js +100 -0
- package/dist/core/assembly/depth-resolver.test.js.map +1 -0
- package/dist/core/assembly/engine.d.ts +22 -0
- package/dist/core/assembly/engine.d.ts.map +1 -0
- package/dist/core/assembly/engine.js +215 -0
- package/dist/core/assembly/engine.js.map +1 -0
- package/dist/core/assembly/engine.test.d.ts +2 -0
- package/dist/core/assembly/engine.test.d.ts.map +1 -0
- package/dist/core/assembly/engine.test.js +462 -0
- package/dist/core/assembly/engine.test.js.map +1 -0
- package/dist/core/assembly/instruction-loader.d.ts +16 -0
- package/dist/core/assembly/instruction-loader.d.ts.map +1 -0
- package/dist/core/assembly/instruction-loader.js +40 -0
- package/dist/core/assembly/instruction-loader.js.map +1 -0
- package/dist/core/assembly/instruction-loader.test.d.ts +2 -0
- package/dist/core/assembly/instruction-loader.test.d.ts.map +1 -0
- package/dist/core/assembly/instruction-loader.test.js +109 -0
- package/dist/core/assembly/instruction-loader.test.js.map +1 -0
- package/dist/core/assembly/knowledge-loader.d.ts +34 -0
- package/dist/core/assembly/knowledge-loader.d.ts.map +1 -0
- package/dist/core/assembly/knowledge-loader.js +204 -0
- package/dist/core/assembly/knowledge-loader.js.map +1 -0
- package/dist/core/assembly/knowledge-loader.test.d.ts +2 -0
- package/dist/core/assembly/knowledge-loader.test.d.ts.map +1 -0
- package/dist/core/assembly/knowledge-loader.test.js +205 -0
- package/dist/core/assembly/knowledge-loader.test.js.map +1 -0
- package/dist/core/assembly/meta-prompt-loader.d.ts +13 -0
- package/dist/core/assembly/meta-prompt-loader.d.ts.map +1 -0
- package/dist/core/assembly/meta-prompt-loader.js +91 -0
- package/dist/core/assembly/meta-prompt-loader.js.map +1 -0
- package/dist/core/assembly/meta-prompt-loader.test.d.ts +2 -0
- package/dist/core/assembly/meta-prompt-loader.test.d.ts.map +1 -0
- package/dist/core/assembly/meta-prompt-loader.test.js +232 -0
- package/dist/core/assembly/meta-prompt-loader.test.js.map +1 -0
- package/dist/core/assembly/methodology-change.d.ts +27 -0
- package/dist/core/assembly/methodology-change.d.ts.map +1 -0
- package/dist/core/assembly/methodology-change.js +41 -0
- package/dist/core/assembly/methodology-change.js.map +1 -0
- package/dist/core/assembly/methodology-change.test.d.ts +2 -0
- package/dist/core/assembly/methodology-change.test.d.ts.map +1 -0
- package/dist/core/assembly/methodology-change.test.js +145 -0
- package/dist/core/assembly/methodology-change.test.js.map +1 -0
- package/dist/core/assembly/methodology-resolver.d.ts +11 -0
- package/dist/core/assembly/methodology-resolver.d.ts.map +1 -0
- package/dist/core/assembly/methodology-resolver.js +19 -0
- package/dist/core/assembly/methodology-resolver.js.map +1 -0
- package/dist/core/assembly/methodology-resolver.test.d.ts +2 -0
- package/dist/core/assembly/methodology-resolver.test.d.ts.map +1 -0
- package/dist/core/assembly/methodology-resolver.test.js +87 -0
- package/dist/core/assembly/methodology-resolver.test.js.map +1 -0
- package/dist/core/assembly/preset-loader.d.ts +26 -0
- package/dist/core/assembly/preset-loader.d.ts.map +1 -0
- package/dist/core/assembly/preset-loader.js +146 -0
- package/dist/core/assembly/preset-loader.js.map +1 -0
- package/dist/core/assembly/preset-loader.test.d.ts +2 -0
- package/dist/core/assembly/preset-loader.test.d.ts.map +1 -0
- package/dist/core/assembly/preset-loader.test.js +107 -0
- package/dist/core/assembly/preset-loader.test.js.map +1 -0
- package/dist/core/assembly/update-mode.d.ts +25 -0
- package/dist/core/assembly/update-mode.d.ts.map +1 -0
- package/dist/core/assembly/update-mode.js +70 -0
- package/dist/core/assembly/update-mode.js.map +1 -0
- package/dist/core/assembly/update-mode.test.d.ts +2 -0
- package/dist/core/assembly/update-mode.test.d.ts.map +1 -0
- package/dist/core/assembly/update-mode.test.js +235 -0
- package/dist/core/assembly/update-mode.test.js.map +1 -0
- package/dist/core/dependency/dependency.d.ts +20 -0
- package/dist/core/dependency/dependency.d.ts.map +1 -0
- package/dist/core/dependency/dependency.js +104 -0
- package/dist/core/dependency/dependency.js.map +1 -0
- package/dist/core/dependency/dependency.test.d.ts +2 -0
- package/dist/core/dependency/dependency.test.d.ts.map +1 -0
- package/dist/core/dependency/dependency.test.js +166 -0
- package/dist/core/dependency/dependency.test.js.map +1 -0
- package/dist/core/dependency/eligibility.d.ts +17 -0
- package/dist/core/dependency/eligibility.d.ts.map +1 -0
- package/dist/core/dependency/eligibility.js +60 -0
- package/dist/core/dependency/eligibility.js.map +1 -0
- package/dist/core/dependency/eligibility.test.d.ts +2 -0
- package/dist/core/dependency/eligibility.test.d.ts.map +1 -0
- package/dist/core/dependency/eligibility.test.js +198 -0
- package/dist/core/dependency/eligibility.test.js.map +1 -0
- package/dist/core/dependency/graph.d.ts +12 -0
- package/dist/core/dependency/graph.d.ts.map +1 -0
- package/dist/core/dependency/graph.js +34 -0
- package/dist/core/dependency/graph.js.map +1 -0
- package/dist/core/knowledge/knowledge-update-assembler.d.ts +24 -0
- package/dist/core/knowledge/knowledge-update-assembler.d.ts.map +1 -0
- package/dist/core/knowledge/knowledge-update-assembler.js +46 -0
- package/dist/core/knowledge/knowledge-update-assembler.js.map +1 -0
- package/dist/core/knowledge/knowledge-update-assembler.test.d.ts +2 -0
- package/dist/core/knowledge/knowledge-update-assembler.test.d.ts.map +1 -0
- package/dist/core/knowledge/knowledge-update-assembler.test.js +93 -0
- package/dist/core/knowledge/knowledge-update-assembler.test.js.map +1 -0
- package/dist/core/knowledge/knowledge-update-template.md +55 -0
- package/dist/dashboard/generator.d.ts +37 -0
- package/dist/dashboard/generator.d.ts.map +1 -0
- package/dist/dashboard/generator.js +42 -0
- package/dist/dashboard/generator.js.map +1 -0
- package/dist/dashboard/generator.test.d.ts +2 -0
- package/dist/dashboard/generator.test.d.ts.map +1 -0
- package/dist/dashboard/generator.test.js +186 -0
- package/dist/dashboard/generator.test.js.map +1 -0
- package/dist/dashboard/template.d.ts +4 -0
- package/dist/dashboard/template.d.ts.map +1 -0
- package/dist/dashboard/template.js +190 -0
- package/dist/dashboard/template.js.map +1 -0
- package/dist/e2e/commands.test.d.ts +9 -0
- package/dist/e2e/commands.test.d.ts.map +1 -0
- package/dist/e2e/commands.test.js +499 -0
- package/dist/e2e/commands.test.js.map +1 -0
- package/dist/e2e/init.test.d.ts +10 -0
- package/dist/e2e/init.test.d.ts.map +1 -0
- package/dist/e2e/init.test.js +180 -0
- package/dist/e2e/init.test.js.map +1 -0
- package/dist/e2e/knowledge.test.d.ts +2 -0
- package/dist/e2e/knowledge.test.d.ts.map +1 -0
- package/dist/e2e/knowledge.test.js +103 -0
- package/dist/e2e/knowledge.test.js.map +1 -0
- package/dist/e2e/pipeline.test.d.ts +8 -0
- package/dist/e2e/pipeline.test.d.ts.map +1 -0
- package/dist/e2e/pipeline.test.js +295 -0
- package/dist/e2e/pipeline.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/project/adopt.d.ts +28 -0
- package/dist/project/adopt.d.ts.map +1 -0
- package/dist/project/adopt.js +49 -0
- package/dist/project/adopt.js.map +1 -0
- package/dist/project/adopt.test.d.ts +2 -0
- package/dist/project/adopt.test.d.ts.map +1 -0
- package/dist/project/adopt.test.js +220 -0
- package/dist/project/adopt.test.js.map +1 -0
- package/dist/project/claude-md.d.ts +33 -0
- package/dist/project/claude-md.d.ts.map +1 -0
- package/dist/project/claude-md.js +112 -0
- package/dist/project/claude-md.js.map +1 -0
- package/dist/project/claude-md.test.d.ts +2 -0
- package/dist/project/claude-md.test.d.ts.map +1 -0
- package/dist/project/claude-md.test.js +151 -0
- package/dist/project/claude-md.test.js.map +1 -0
- package/dist/project/detector.d.ts +7 -0
- package/dist/project/detector.d.ts.map +1 -0
- package/dist/project/detector.js +78 -0
- package/dist/project/detector.js.map +1 -0
- package/dist/project/detector.test.d.ts +2 -0
- package/dist/project/detector.test.d.ts.map +1 -0
- package/dist/project/detector.test.js +137 -0
- package/dist/project/detector.test.js.map +1 -0
- package/dist/project/frontmatter.d.ts +17 -0
- package/dist/project/frontmatter.d.ts.map +1 -0
- package/dist/project/frontmatter.js +236 -0
- package/dist/project/frontmatter.js.map +1 -0
- package/dist/project/frontmatter.test.d.ts +2 -0
- package/dist/project/frontmatter.test.d.ts.map +1 -0
- package/dist/project/frontmatter.test.js +218 -0
- package/dist/project/frontmatter.test.js.map +1 -0
- package/dist/project/signals.d.ts +12 -0
- package/dist/project/signals.d.ts.map +1 -0
- package/dist/project/signals.js +2 -0
- package/dist/project/signals.js.map +1 -0
- package/dist/state/completion.d.ts +22 -0
- package/dist/state/completion.d.ts.map +1 -0
- package/dist/state/completion.js +82 -0
- package/dist/state/completion.js.map +1 -0
- package/dist/state/completion.test.d.ts +2 -0
- package/dist/state/completion.test.d.ts.map +1 -0
- package/dist/state/completion.test.js +246 -0
- package/dist/state/completion.test.js.map +1 -0
- package/dist/state/decision-logger.d.ts +16 -0
- package/dist/state/decision-logger.d.ts.map +1 -0
- package/dist/state/decision-logger.js +80 -0
- package/dist/state/decision-logger.js.map +1 -0
- package/dist/state/decision-logger.test.d.ts +2 -0
- package/dist/state/decision-logger.test.d.ts.map +1 -0
- package/dist/state/decision-logger.test.js +182 -0
- package/dist/state/decision-logger.test.js.map +1 -0
- package/dist/state/lock-manager.d.ts +18 -0
- package/dist/state/lock-manager.d.ts.map +1 -0
- package/dist/state/lock-manager.js +134 -0
- package/dist/state/lock-manager.js.map +1 -0
- package/dist/state/lock-manager.test.d.ts +2 -0
- package/dist/state/lock-manager.test.d.ts.map +1 -0
- package/dist/state/lock-manager.test.js +190 -0
- package/dist/state/lock-manager.test.js.map +1 -0
- package/dist/state/state-manager.d.ts +37 -0
- package/dist/state/state-manager.d.ts.map +1 -0
- package/dist/state/state-manager.js +125 -0
- package/dist/state/state-manager.js.map +1 -0
- package/dist/state/state-manager.test.d.ts +2 -0
- package/dist/state/state-manager.test.d.ts.map +1 -0
- package/dist/state/state-manager.test.js +240 -0
- package/dist/state/state-manager.test.js.map +1 -0
- package/dist/types/adapter.d.ts +24 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/adapter.js +2 -0
- package/dist/types/adapter.js.map +1 -0
- package/dist/types/assembly.d.ts +89 -0
- package/dist/types/assembly.d.ts.map +1 -0
- package/dist/types/assembly.js +2 -0
- package/dist/types/assembly.js.map +1 -0
- package/dist/types/claude-md.d.ts +11 -0
- package/dist/types/claude-md.d.ts.map +1 -0
- package/dist/types/claude-md.js +2 -0
- package/dist/types/claude-md.js.map +1 -0
- package/dist/types/cli.d.ts +15 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +2 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +40 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/decision.d.ts +14 -0
- package/dist/types/decision.d.ts.map +1 -0
- package/dist/types/decision.js +2 -0
- package/dist/types/decision.js.map +1 -0
- package/dist/types/dependency.d.ts +12 -0
- package/dist/types/dependency.d.ts.map +1 -0
- package/dist/types/dependency.js +2 -0
- package/dist/types/dependency.js.map +1 -0
- package/dist/types/enums.d.ts +23 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +11 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/enums.test.d.ts +2 -0
- package/dist/types/enums.test.d.ts.map +1 -0
- package/dist/types/enums.test.js +13 -0
- package/dist/types/enums.test.js.map +1 -0
- package/dist/types/errors.d.ts +24 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +2 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/frontmatter.d.ts +43 -0
- package/dist/types/frontmatter.d.ts.map +1 -0
- package/dist/types/frontmatter.js +2 -0
- package/dist/types/frontmatter.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lock.d.ts +10 -0
- package/dist/types/lock.d.ts.map +1 -0
- package/dist/types/lock.js +2 -0
- package/dist/types/lock.js.map +1 -0
- package/dist/types/state.d.ts +49 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +2 -0
- package/dist/types/state.js.map +1 -0
- package/dist/types/wizard.d.ts +14 -0
- package/dist/types/wizard.d.ts.map +1 -0
- package/dist/types/wizard.js +2 -0
- package/dist/types/wizard.js.map +1 -0
- package/dist/utils/errors.d.ts +42 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +232 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/errors.test.d.ts +2 -0
- package/dist/utils/errors.test.d.ts.map +1 -0
- package/dist/utils/errors.test.js +91 -0
- package/dist/utils/errors.test.js.map +1 -0
- package/dist/utils/fs.d.ts +11 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +20 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/fs.test.d.ts +2 -0
- package/dist/utils/fs.test.d.ts.map +1 -0
- package/dist/utils/fs.test.js +93 -0
- package/dist/utils/fs.test.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/levenshtein.d.ts +11 -0
- package/dist/utils/levenshtein.d.ts.map +1 -0
- package/dist/utils/levenshtein.js +37 -0
- package/dist/utils/levenshtein.js.map +1 -0
- package/dist/utils/levenshtein.test.d.ts +2 -0
- package/dist/utils/levenshtein.test.d.ts.map +1 -0
- package/dist/utils/levenshtein.test.js +34 -0
- package/dist/utils/levenshtein.test.js.map +1 -0
- package/dist/validation/config-validator.d.ts +10 -0
- package/dist/validation/config-validator.d.ts.map +1 -0
- package/dist/validation/config-validator.js +11 -0
- package/dist/validation/config-validator.js.map +1 -0
- package/dist/validation/dependency-validator.d.ts +10 -0
- package/dist/validation/dependency-validator.d.ts.map +1 -0
- package/dist/validation/dependency-validator.js +34 -0
- package/dist/validation/dependency-validator.js.map +1 -0
- package/dist/validation/frontmatter-validator.d.ts +12 -0
- package/dist/validation/frontmatter-validator.d.ts.map +1 -0
- package/dist/validation/frontmatter-validator.js +50 -0
- package/dist/validation/frontmatter-validator.js.map +1 -0
- package/dist/validation/index.d.ts +19 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +64 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/index.test.d.ts +2 -0
- package/dist/validation/index.test.d.ts.map +1 -0
- package/dist/validation/index.test.js +241 -0
- package/dist/validation/index.test.js.map +1 -0
- package/dist/validation/state-validator.d.ts +15 -0
- package/dist/validation/state-validator.d.ts.map +1 -0
- package/dist/validation/state-validator.js +104 -0
- package/dist/validation/state-validator.js.map +1 -0
- package/dist/wizard/questions.d.ts +18 -0
- package/dist/wizard/questions.d.ts.map +1 -0
- package/dist/wizard/questions.js +46 -0
- package/dist/wizard/questions.js.map +1 -0
- package/dist/wizard/suggestion.d.ts +10 -0
- package/dist/wizard/suggestion.d.ts.map +1 -0
- package/dist/wizard/suggestion.js +17 -0
- package/dist/wizard/suggestion.js.map +1 -0
- package/dist/wizard/wizard.d.ts +19 -0
- package/dist/wizard/wizard.d.ts.map +1 -0
- package/dist/wizard/wizard.js +104 -0
- package/dist/wizard/wizard.js.map +1 -0
- package/dist/wizard/wizard.test.d.ts +2 -0
- package/dist/wizard/wizard.test.d.ts.map +1 -0
- package/dist/wizard/wizard.test.js +167 -0
- package/dist/wizard/wizard.test.js.map +1 -0
- package/knowledge/core/adr-craft.md +281 -0
- package/knowledge/core/api-design.md +501 -0
- package/knowledge/core/database-design.md +380 -0
- package/knowledge/core/domain-modeling.md +317 -0
- package/knowledge/core/operations-runbook.md +513 -0
- package/knowledge/core/security-review.md +523 -0
- package/knowledge/core/system-architecture.md +402 -0
- package/knowledge/core/task-decomposition.md +372 -0
- package/knowledge/core/testing-strategy.md +409 -0
- package/knowledge/core/user-stories.md +337 -0
- package/knowledge/core/user-story-innovation.md +171 -0
- package/knowledge/core/ux-specification.md +380 -0
- package/knowledge/finalization/apply-fixes-and-freeze.md +93 -0
- package/knowledge/finalization/developer-onboarding.md +376 -0
- package/knowledge/finalization/implementation-playbook.md +404 -0
- package/knowledge/product/gap-analysis.md +305 -0
- package/knowledge/product/prd-craft.md +324 -0
- package/knowledge/product/prd-innovation.md +204 -0
- package/knowledge/review/review-adr.md +203 -0
- package/knowledge/review/review-api-contracts.md +233 -0
- package/knowledge/review/review-database-schema.md +229 -0
- package/knowledge/review/review-domain-modeling.md +288 -0
- package/knowledge/review/review-implementation-tasks.md +202 -0
- package/knowledge/review/review-methodology.md +215 -0
- package/knowledge/review/review-operations.md +212 -0
- package/knowledge/review/review-prd.md +235 -0
- package/knowledge/review/review-security.md +213 -0
- package/knowledge/review/review-system-architecture.md +296 -0
- package/knowledge/review/review-testing-strategy.md +176 -0
- package/knowledge/review/review-user-stories.md +172 -0
- package/knowledge/review/review-ux-spec.md +208 -0
- package/knowledge/validation/critical-path-analysis.md +203 -0
- package/knowledge/validation/cross-phase-consistency.md +181 -0
- package/knowledge/validation/decision-completeness.md +218 -0
- package/knowledge/validation/dependency-validation.md +233 -0
- package/knowledge/validation/implementability-review.md +252 -0
- package/knowledge/validation/scope-management.md +223 -0
- package/knowledge/validation/traceability.md +198 -0
- package/methodology/custom-defaults.yml +43 -0
- package/methodology/deep.yml +42 -0
- package/methodology/mvp.yml +42 -0
- package/package.json +58 -0
- package/pipeline/architecture/review-architecture.md +44 -0
- package/pipeline/architecture/system-architecture.md +45 -0
- package/pipeline/decisions/adrs.md +45 -0
- package/pipeline/decisions/review-adrs.md +39 -0
- package/pipeline/finalization/apply-fixes-and-freeze.md +39 -0
- package/pipeline/finalization/developer-onboarding-guide.md +36 -0
- package/pipeline/finalization/implementation-playbook.md +45 -0
- package/pipeline/modeling/domain-modeling.md +57 -0
- package/pipeline/modeling/review-domain-modeling.md +41 -0
- package/pipeline/planning/implementation-tasks.md +57 -0
- package/pipeline/planning/review-tasks.md +38 -0
- package/pipeline/pre/create-prd.md +45 -0
- package/pipeline/pre/innovate-prd.md +47 -0
- package/pipeline/pre/innovate-user-stories.md +47 -0
- package/pipeline/pre/review-prd.md +44 -0
- package/pipeline/pre/review-user-stories.md +43 -0
- package/pipeline/pre/user-stories.md +48 -0
- package/pipeline/quality/operations.md +42 -0
- package/pipeline/quality/review-operations.md +37 -0
- package/pipeline/quality/review-security.md +40 -0
- package/pipeline/quality/review-testing.md +39 -0
- package/pipeline/quality/security.md +44 -0
- package/pipeline/quality/testing-strategy.md +42 -0
- package/pipeline/specification/api-contracts.md +44 -0
- package/pipeline/specification/database-schema.md +41 -0
- package/pipeline/specification/review-api.md +40 -0
- package/pipeline/specification/review-database.md +39 -0
- package/pipeline/specification/review-ux.md +38 -0
- package/pipeline/specification/ux-spec.md +43 -0
- package/pipeline/validation/critical-path-walkthrough.md +37 -0
- package/pipeline/validation/cross-phase-consistency.md +35 -0
- package/pipeline/validation/decision-completeness.md +36 -0
- package/pipeline/validation/dependency-graph-validation.md +36 -0
- package/pipeline/validation/implementability-dry-run.md +36 -0
- package/pipeline/validation/scope-creep-check.md +38 -0
- package/pipeline/validation/traceability-matrix.md +36 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-ux-spec
|
|
3
|
+
description: Failure modes and review passes specific to UI/UX specification artifacts
|
|
4
|
+
topics: [review, ux, design, accessibility, responsive]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review: UX Specification
|
|
8
|
+
|
|
9
|
+
The UX specification translates user journeys from the PRD and component architecture from the system architecture into concrete screens, interactions, and components. It must cover every user-facing feature, handle all interaction states (including errors and edge cases), and align with the design system. This review uses 7 passes targeting the specific ways UX specs fail.
|
|
10
|
+
|
|
11
|
+
Follows the review process defined in `review-methodology.md`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Pass 1: User Journey Coverage vs PRD
|
|
16
|
+
|
|
17
|
+
### What to Check
|
|
18
|
+
|
|
19
|
+
Every user-facing feature in the PRD has a corresponding screen, flow, or interaction in the UX spec. No PRD feature is left without a UX design.
|
|
20
|
+
|
|
21
|
+
### Why This Matters
|
|
22
|
+
|
|
23
|
+
Features without UX design get implemented with ad hoc interfaces. The implementing agent invents the UI on the fly, producing inconsistent interactions, unclear navigation, and confusing user flows. UX coverage is the bridge between "what the system does" (PRD) and "how the user does it" (implementation).
|
|
24
|
+
|
|
25
|
+
### How to Check
|
|
26
|
+
|
|
27
|
+
1. List every user-facing feature from the PRD (user stories, feature descriptions, use cases)
|
|
28
|
+
2. For each feature, trace to its UX representation: which screens, which interactions, which flow?
|
|
29
|
+
3. Flag features with no UX mapping — these are coverage gaps
|
|
30
|
+
4. Check for PRD features that were split across multiple UX flows — is the split logical and complete?
|
|
31
|
+
5. Verify that non-happy-path journeys are covered: what happens when the user makes a mistake, changes their mind, or encounters an error?
|
|
32
|
+
6. Check that onboarding/first-time-use flows exist for features that require setup or learning
|
|
33
|
+
|
|
34
|
+
### What a Finding Looks Like
|
|
35
|
+
|
|
36
|
+
- P0: "PRD feature 'user can manage payment methods' has no corresponding screen in the UX spec. No flow for adding, editing, or removing payment methods exists."
|
|
37
|
+
- P1: "PRD describes a 'password reset' flow, but the UX spec only covers the email entry step. The verification code entry, new password, and confirmation steps are missing."
|
|
38
|
+
- P2: "PRD mentions 'user preferences' but the UX spec provides only a single settings screen with no detail on what preferences are available or how they are organized."
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Pass 2: Accessibility Compliance
|
|
43
|
+
|
|
44
|
+
### What to Check
|
|
45
|
+
|
|
46
|
+
The UX spec addresses accessibility at the specification level. WCAG compliance level is stated. Keyboard navigation is designed. Screen reader support is considered. Color contrast meets requirements.
|
|
47
|
+
|
|
48
|
+
### Why This Matters
|
|
49
|
+
|
|
50
|
+
Accessibility retrofitted after implementation is 5-10x more expensive than designing it in. When the UX spec does not address accessibility, implementing agents build inaccessible interfaces. Retrofitting means redesigning interaction patterns, adding ARIA attributes to components that were not designed for them, and restructuring HTML semantics.
|
|
51
|
+
|
|
52
|
+
### How to Check
|
|
53
|
+
|
|
54
|
+
1. Verify the target WCAG level is stated (A, AA, or AAA)
|
|
55
|
+
2. For each interactive component, check: is keyboard navigation specified? (Tab order, keyboard shortcuts, focus management)
|
|
56
|
+
3. Check that form elements have associated labels (not just placeholder text)
|
|
57
|
+
4. Verify that interactive elements have sufficient touch target size (44x44 CSS pixels minimum)
|
|
58
|
+
5. Check color usage: is information conveyed by color alone? (Must also use text, icons, or patterns)
|
|
59
|
+
6. Check that screen reader behavior is specified for dynamic content (live regions, state announcements, navigation landmarks)
|
|
60
|
+
7. Verify that focus management is specified for modals, dropdowns, and dynamic content changes
|
|
61
|
+
|
|
62
|
+
### What a Finding Looks Like
|
|
63
|
+
|
|
64
|
+
- P0: "No WCAG compliance level is stated. Implementing agents do not know what accessibility standard to target."
|
|
65
|
+
- P1: "Modal dialogs do not specify focus management. When a modal opens, where does focus go? When it closes, where does focus return? Without this, keyboard users get lost."
|
|
66
|
+
- P1: "Status indicators use only color (green/yellow/red) with no text or icon alternative. Users with color blindness cannot distinguish states."
|
|
67
|
+
- P2: "Tab order is not specified for the main navigation. Default DOM order may not match the visual layout."
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Pass 3: Interaction State Completeness
|
|
72
|
+
|
|
73
|
+
### What to Check
|
|
74
|
+
|
|
75
|
+
Every interactive component has all its states defined: empty, loading, populated, error, disabled, hover, focus, active. Every user action has a clear response.
|
|
76
|
+
|
|
77
|
+
### Why This Matters
|
|
78
|
+
|
|
79
|
+
Implementing agents default to the "happy path populated" state when other states are not specified. The result is a UI that looks good with data but shows blank screens on empty states, has no loading indicators, and displays raw error messages. State completeness is what separates a polished UI from a prototype.
|
|
80
|
+
|
|
81
|
+
### How to Check
|
|
82
|
+
|
|
83
|
+
For each interactive component or data display:
|
|
84
|
+
1. **Empty state** — What does it look like when there is no data? (Empty list, no results, new user with no history)
|
|
85
|
+
2. **Loading state** — What does the user see while data is being fetched? (Skeleton, spinner, progressive loading)
|
|
86
|
+
3. **Populated state** — The normal view with data (usually designed)
|
|
87
|
+
4. **Error state** — What does the user see when a request fails? (Error message, retry button, fallback content)
|
|
88
|
+
5. **Partial state** — What if some data loaded but part failed? (Component-level errors vs. page-level errors)
|
|
89
|
+
6. **Disabled state** — When is the component not interactive, and what does it look like?
|
|
90
|
+
7. **Edge states** — Very long text (truncation?), very large numbers (formatting?), very long lists (virtualization?)
|
|
91
|
+
|
|
92
|
+
### What a Finding Looks Like
|
|
93
|
+
|
|
94
|
+
- P0: "The dashboard shows charts and metrics but has no empty state design. A new user with no data will see empty chart containers with no guidance."
|
|
95
|
+
- P1: "The order list component has no loading state. When orders are being fetched, the user sees either nothing or a flash of the empty state before data appears."
|
|
96
|
+
- P1: "Form submission has a success state (redirect to confirmation) but no error state. What does the user see when the submission fails?"
|
|
97
|
+
- P2: "No specification for how very long product names are handled in the product card. Truncation? Wrapping? Tooltip?"
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Pass 4: Design System Consistency
|
|
102
|
+
|
|
103
|
+
### What to Check
|
|
104
|
+
|
|
105
|
+
The UX spec uses design system tokens consistently. Colors, spacing, typography, and component styles reference the design system rather than using one-off values.
|
|
106
|
+
|
|
107
|
+
### Why This Matters
|
|
108
|
+
|
|
109
|
+
One-off values create visual inconsistency and maintenance burden. If one button uses `#3B82F6` and another uses `--color-primary`, they will diverge when the design system is updated. Consistent token usage means the design system is the single source of truth for visual properties.
|
|
110
|
+
|
|
111
|
+
### How to Check
|
|
112
|
+
|
|
113
|
+
1. Verify that a design system is referenced or defined (color tokens, spacing scale, typography scale, component library)
|
|
114
|
+
2. Check that color values in the UX spec reference design system tokens, not hex values or named colors
|
|
115
|
+
3. Check that spacing values reference the spacing scale, not arbitrary pixel values
|
|
116
|
+
4. Check that typography (font sizes, weights, line heights) uses the type scale
|
|
117
|
+
5. Verify that component specifications reference design system components, not custom one-off designs
|
|
118
|
+
6. Look for visual elements that have no design system mapping — these are either gaps in the design system or violations
|
|
119
|
+
|
|
120
|
+
### What a Finding Looks Like
|
|
121
|
+
|
|
122
|
+
- P1: "The notification banner uses background color '#FEF3C7' which is not in the design system color tokens. Should use the warning surface token."
|
|
123
|
+
- P1: "Button in the settings page has 14px padding. The design system spacing scale uses 12px and 16px. This creates visual inconsistency."
|
|
124
|
+
- P2: "The modal component has a custom shadow that differs from the design system elevation tokens."
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Pass 5: Responsive Breakpoint Coverage
|
|
129
|
+
|
|
130
|
+
### What to Check
|
|
131
|
+
|
|
132
|
+
Behavior is defined for all responsive breakpoints. Every screen specifies how it adapts to mobile, tablet, and desktop viewports. Navigation changes across breakpoints are documented.
|
|
133
|
+
|
|
134
|
+
### Why This Matters
|
|
135
|
+
|
|
136
|
+
Responsive behavior that is not specified gets improvised during implementation. The implementing agent makes layout decisions on the fly, producing inconsistent responsive behavior across screens. Some screens may collapse to single-column while others try to maintain two columns, creating a jarring experience.
|
|
137
|
+
|
|
138
|
+
### How to Check
|
|
139
|
+
|
|
140
|
+
1. Verify that responsive breakpoints are defined (e.g., mobile < 768px, tablet 768-1024px, desktop > 1024px)
|
|
141
|
+
2. For each screen, check that layout behavior is specified for each breakpoint
|
|
142
|
+
3. Check navigation: does it collapse to a hamburger menu on mobile? At what breakpoint?
|
|
143
|
+
4. Check data tables: how do they display on mobile? (Horizontal scroll, card layout, column hiding)
|
|
144
|
+
5. Check form layouts: do multi-column forms stack on mobile?
|
|
145
|
+
6. Check images and media: are they responsive? What aspect ratio at each breakpoint?
|
|
146
|
+
7. Check for touch vs. pointer interactions: hover states need touch alternatives on mobile
|
|
147
|
+
|
|
148
|
+
### What a Finding Looks Like
|
|
149
|
+
|
|
150
|
+
- P0: "No responsive breakpoints are defined anywhere in the UX spec. Implementing agents have no guidance on how any screen should adapt to mobile."
|
|
151
|
+
- P1: "The dashboard screen has a desktop layout with three columns of charts but no mobile specification. Three columns at 375px is unreadable."
|
|
152
|
+
- P2: "Data table on the orders screen specifies horizontal scroll on mobile, but no indication of which columns to show vs. hide for quick scanning."
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Pass 6: Error State Handling
|
|
157
|
+
|
|
158
|
+
### What to Check
|
|
159
|
+
|
|
160
|
+
Every user action that can fail has a designed error state. Error messages are user-friendly. Recovery paths are clear.
|
|
161
|
+
|
|
162
|
+
### Why This Matters
|
|
163
|
+
|
|
164
|
+
Error handling is the most-skipped aspect of UX design. When error states are not designed, implementing agents show browser alerts, raw API error messages, or nothing at all. Users encounter errors frequently (network issues, validation failures, permissions), and the quality of error handling directly impacts user trust and task completion.
|
|
165
|
+
|
|
166
|
+
### How to Check
|
|
167
|
+
|
|
168
|
+
1. List every user action that involves an API call or data mutation
|
|
169
|
+
2. For each action, verify an error state is designed: what does the user see on failure?
|
|
170
|
+
3. Check that error messages are user-friendly (not "Error 422" or "CONSTRAINT_VIOLATION")
|
|
171
|
+
4. Verify recovery paths: can the user retry? Is there a back button? Is progress lost?
|
|
172
|
+
5. Check for network error handling: what happens when the user loses connectivity mid-action?
|
|
173
|
+
6. Check for validation error display: inline (next to the field) or summary (top of form)?
|
|
174
|
+
7. Verify that error states for destructive actions are especially clear: "delete failed" should not look like "delete succeeded"
|
|
175
|
+
|
|
176
|
+
### What a Finding Looks Like
|
|
177
|
+
|
|
178
|
+
- P0: "Payment processing flow has no error state design. If payment fails, what does the user see? Can they retry? Is the order in a partial state?"
|
|
179
|
+
- P1: "Form validation errors are not specified as inline or summary. This is a fundamental interaction pattern decision that affects implementation architecture."
|
|
180
|
+
- P2: "Network connectivity loss is not addressed. Long-running operations (file upload, report generation) need offline/reconnection handling."
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Pass 7: Component Hierarchy vs Architecture
|
|
185
|
+
|
|
186
|
+
### What to Check
|
|
187
|
+
|
|
188
|
+
Frontend components in the UX spec align with the frontend architecture from the system architecture document. Component boundaries match. State management aligns with the architectural approach.
|
|
189
|
+
|
|
190
|
+
### Why This Matters
|
|
191
|
+
|
|
192
|
+
When the UX spec designs components that do not match the architecture's component structure, implementing agents must reconcile two conflicting visions. Either they follow the UX spec (violating the architecture) or the architecture (deviating from the UX spec). Alignment prevents this conflict.
|
|
193
|
+
|
|
194
|
+
### How to Check
|
|
195
|
+
|
|
196
|
+
1. List frontend components from the system architecture document
|
|
197
|
+
2. List UI components from the UX spec
|
|
198
|
+
3. Verify alignment: do the UX spec's components map to the architecture's component boundaries?
|
|
199
|
+
4. Check that data flow assumptions in the UX spec match the architecture's state management approach
|
|
200
|
+
5. Verify that reusable components in the UX spec align with the architecture's component library structure
|
|
201
|
+
6. Check that page-level components in the UX spec correspond to routes or views in the architecture
|
|
202
|
+
7. Verify that the UX spec's component composition (which components contain which) matches the architecture's component tree
|
|
203
|
+
|
|
204
|
+
### What a Finding Looks Like
|
|
205
|
+
|
|
206
|
+
- P1: "The UX spec designs an 'OrderSummaryWidget' that combines order details, customer info, and payment status. The architecture separates these into three independent components (OrderComponent, CustomerComponent, PaymentComponent) with separate data sources."
|
|
207
|
+
- P1: "The UX spec assumes global state for user preferences (accessible from any component), but the architecture specifies component-local state with prop drilling."
|
|
208
|
+
- P2: "The UX spec's 'ProductCard' component bundles product image, price, and add-to-cart button. The architecture models 'ProductDisplay' and 'CartAction' as separate concerns."
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: critical-path-analysis
|
|
3
|
+
description: Tracing critical user journeys end-to-end across all specifications
|
|
4
|
+
topics: [validation, critical-path, user-journeys, end-to-end, gaps]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Critical Path Analysis
|
|
8
|
+
|
|
9
|
+
Critical path analysis walks through the most important user journeys end-to-end across every specification artifact. For each journey, it verifies that every component, endpoint, query, screen, and task needed to make the journey work actually exists and is consistent.
|
|
10
|
+
|
|
11
|
+
## What a Critical Path Is
|
|
12
|
+
|
|
13
|
+
A critical path is a user journey that represents core functionality — the features that, if broken, would make the product unusable or fail its primary value proposition. These are not edge cases. They are the main flows that most users will execute most of the time.
|
|
14
|
+
|
|
15
|
+
## Identifying Critical Journeys
|
|
16
|
+
|
|
17
|
+
### Sources for Critical Journeys
|
|
18
|
+
|
|
19
|
+
1. **PRD success criteria** — Any measurable outcome in the PRD implies a user journey. "Users can complete checkout in under 3 clicks" implies a checkout journey.
|
|
20
|
+
2. **PRD user stories** — Primary user stories describe the most important journeys.
|
|
21
|
+
3. **PRD personas** — Each persona's primary need implies a journey. A "buyer" persona implies a purchasing journey.
|
|
22
|
+
4. **Architecture data flows** — Major data flows in the architecture document represent the system-level view of critical paths.
|
|
23
|
+
5. **Revenue/value paths** — Journeys that directly relate to the product's revenue model or primary value proposition.
|
|
24
|
+
|
|
25
|
+
### Prioritizing Which Journeys to Trace
|
|
26
|
+
|
|
27
|
+
Not every user journey needs end-to-end tracing. Prioritize:
|
|
28
|
+
|
|
29
|
+
1. **Happy path of core features** — The primary flow that delivers the product's main value. For an e-commerce app: browse → add to cart → checkout → payment → confirmation.
|
|
30
|
+
2. **Authentication flows** — Sign up, sign in, password reset. Nearly every product has these and they touch many components.
|
|
31
|
+
3. **Primary CRUD operations** — The main data creation and retrieval flows. For a project management tool: create project → add tasks → assign → update status → complete.
|
|
32
|
+
4. **Cross-cutting journeys** — Flows that cross multiple bounded contexts or services. These are where integration gaps hide.
|
|
33
|
+
5. **Error-recovery journeys** — What happens when payment fails? When a network request times out? When a form has validation errors?
|
|
34
|
+
|
|
35
|
+
A typical project should trace 5-10 critical journeys. More than 15 usually means the scope is too broad or the granularity is too fine.
|
|
36
|
+
|
|
37
|
+
## How to Trace a Journey
|
|
38
|
+
|
|
39
|
+
### Step 1: Define the Journey
|
|
40
|
+
|
|
41
|
+
Write a one-sentence description of the journey and list its steps from the user's perspective:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Journey: User registers and completes first purchase
|
|
45
|
+
1. User visits landing page
|
|
46
|
+
2. User clicks "Sign Up"
|
|
47
|
+
3. User fills registration form (email, password)
|
|
48
|
+
4. User receives verification email
|
|
49
|
+
5. User clicks verification link
|
|
50
|
+
6. User browses product catalog
|
|
51
|
+
7. User views product detail
|
|
52
|
+
8. User adds item to cart
|
|
53
|
+
9. User views cart
|
|
54
|
+
10. User initiates checkout
|
|
55
|
+
11. User enters shipping address
|
|
56
|
+
12. User enters payment information
|
|
57
|
+
13. User confirms order
|
|
58
|
+
14. User sees order confirmation
|
|
59
|
+
15. User receives confirmation email
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Step 2: Map Each Step to Specifications
|
|
63
|
+
|
|
64
|
+
For each step, identify the concrete artifacts that support it:
|
|
65
|
+
|
|
66
|
+
| Step | UX Component | API Endpoint | Architecture Component | Database Query | Task ID |
|
|
67
|
+
|------|-------------|-------------|----------------------|----------------|---------|
|
|
68
|
+
| 1. Visit landing | LandingPage | GET /products/featured | ProductService | SELECT featured products | T-040 |
|
|
69
|
+
| 2. Click Sign Up | SignUpForm | — | — | — | T-013 |
|
|
70
|
+
| 3. Fill registration | SignUpForm | POST /auth/register | AuthService | INSERT INTO users | T-012 |
|
|
71
|
+
| 4. Verification email | — | — | EmailService | INSERT INTO verification_tokens | T-016 |
|
|
72
|
+
| 5. Click verify link | VerifyPage | POST /auth/verify | AuthService | UPDATE users SET verified | T-017 |
|
|
73
|
+
| ... | ... | ... | ... | ... | ... |
|
|
74
|
+
|
|
75
|
+
### Step 3: Check Each Mapping
|
|
76
|
+
|
|
77
|
+
For each cell in the table, verify:
|
|
78
|
+
|
|
79
|
+
1. **Existence** — Does the referenced artifact actually exist in the specifications? Is there actually a `POST /auth/register` endpoint in the API contracts? Is there actually a `SignUpForm` component in the UX spec?
|
|
80
|
+
|
|
81
|
+
2. **Completeness** — Does the artifact cover what this step needs? Does the `POST /auth/register` endpoint accept `email` and `password`? Does it return a response that the `SignUpForm` component can use?
|
|
82
|
+
|
|
83
|
+
3. **Connectivity** — Does the output of step N connect to the input of step N+1? If step 3 returns `{user, token}`, does step 6 (browse catalog) know how to use that token for authenticated requests?
|
|
84
|
+
|
|
85
|
+
4. **Error handling** — What happens if this step fails? Is the failure mode documented? Is there a recovery path? If `POST /auth/register` returns 409 (email exists), does the UX spec define what the user sees?
|
|
86
|
+
|
|
87
|
+
### Step 4: Identify Gaps
|
|
88
|
+
|
|
89
|
+
Gaps take several forms:
|
|
90
|
+
|
|
91
|
+
**Missing component** — A step requires a component that does not exist in any specification. Example: "User receives verification email" requires an email-sending service, but no such service is in the architecture.
|
|
92
|
+
|
|
93
|
+
**Missing endpoint** — A step requires an API endpoint that is not in the contracts. Example: "User views cart" requires a `GET /cart` endpoint, but only `POST /cart/items` is defined.
|
|
94
|
+
|
|
95
|
+
**Missing query** — A step requires a database query pattern, but no index supports it. Example: "User browses by category" requires a category-based product listing, but the products table has no category index.
|
|
96
|
+
|
|
97
|
+
**Missing screen** — A step requires a UI screen or component that is not in the UX spec. Example: "User enters shipping address" requires an address form, but the UX spec jumps from cart to payment.
|
|
98
|
+
|
|
99
|
+
**Missing task** — A step requires implementation work that has no task in the implementation tasks.
|
|
100
|
+
|
|
101
|
+
**Broken connection** — The output of one step does not connect to the input of the next. Example: The registration endpoint returns a session cookie, but the product catalog endpoint expects a Bearer token.
|
|
102
|
+
|
|
103
|
+
**Missing error path** — A step can fail, but there is no specification for what happens on failure.
|
|
104
|
+
|
|
105
|
+
## Journey Tracing Template
|
|
106
|
+
|
|
107
|
+
Use this template for each critical journey:
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
## Journey: [Name]
|
|
111
|
+
|
|
112
|
+
**Description:** [One sentence]
|
|
113
|
+
**PRD Source:** [Section reference]
|
|
114
|
+
**Priority:** Critical | High | Medium
|
|
115
|
+
|
|
116
|
+
### Steps
|
|
117
|
+
|
|
118
|
+
#### Step 1: [User action]
|
|
119
|
+
- **UX:** [Component/screen] — [status: found/missing/incomplete]
|
|
120
|
+
- **API:** [Endpoint] — [status]
|
|
121
|
+
- **Architecture:** [Component] — [status]
|
|
122
|
+
- **Data:** [Query/mutation] — [status]
|
|
123
|
+
- **Task:** [Task ID] — [status]
|
|
124
|
+
- **Error path:** [What happens on failure] — [status]
|
|
125
|
+
- **Connection to next:** [How output feeds step 2] — [status]
|
|
126
|
+
|
|
127
|
+
#### Step 2: [User action]
|
|
128
|
+
...
|
|
129
|
+
|
|
130
|
+
### Gaps Found
|
|
131
|
+
1. [Gap description, severity, recommendation]
|
|
132
|
+
2. ...
|
|
133
|
+
|
|
134
|
+
### Journey Assessment
|
|
135
|
+
- [ ] All steps have UX components
|
|
136
|
+
- [ ] All steps have API endpoints (where applicable)
|
|
137
|
+
- [ ] All steps have architecture components
|
|
138
|
+
- [ ] All steps have data support (where applicable)
|
|
139
|
+
- [ ] All steps have implementation tasks
|
|
140
|
+
- [ ] All step-to-step connections verified
|
|
141
|
+
- [ ] All error paths documented
|
|
142
|
+
- [ ] End-to-end data shape consistency verified
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Common Gap Patterns
|
|
146
|
+
|
|
147
|
+
### 1. The "Handoff Gap"
|
|
148
|
+
|
|
149
|
+
Where one bounded context ends and another begins, there is often no specification for how data moves between them. The order service creates an order, but how does the fulfillment service learn about it? Is there an event? A synchronous call? A shared database?
|
|
150
|
+
|
|
151
|
+
**How to find it:** Look for steps where the "Architecture Component" column changes. Each change is a boundary crossing that needs an integration mechanism.
|
|
152
|
+
|
|
153
|
+
### 2. The "State Transition Gap"
|
|
154
|
+
|
|
155
|
+
A user journey involves entity state changes (order: created → paid → shipped → delivered), but the specifications do not fully document all transitions, especially error transitions (paid → refunded, shipped → returned).
|
|
156
|
+
|
|
157
|
+
**How to find it:** For each entity that changes state during the journey, extract the state machine and verify every transition has API support and UX feedback.
|
|
158
|
+
|
|
159
|
+
### 3. The "Async Gap"
|
|
160
|
+
|
|
161
|
+
Steps that involve asynchronous processing (sending email, processing payment, generating report) often lack specification for: how long the user waits, what they see while waiting, how they are notified of completion, and what happens if the async process fails.
|
|
162
|
+
|
|
163
|
+
**How to find it:** Flag every step where the API response does not contain the final result (e.g., 202 Accepted, polling endpoints, WebSocket notifications).
|
|
164
|
+
|
|
165
|
+
### 4. The "First-Time User Gap"
|
|
166
|
+
|
|
167
|
+
Many journeys are specified assuming the user already has data (an account, items in cart, previous orders). The first-time user journey — where the system has no data for this user — often reveals missing empty states, onboarding flows, and default configurations.
|
|
168
|
+
|
|
169
|
+
**How to find it:** Trace the journey assuming zero prior state. Does the product catalog work with zero products? Does the dashboard work with zero data points?
|
|
170
|
+
|
|
171
|
+
### 5. The "Permission Gap"
|
|
172
|
+
|
|
173
|
+
Some steps require specific permissions (admin actions, premium features), but the specifications do not define how the user acquires those permissions or what happens when they lack them.
|
|
174
|
+
|
|
175
|
+
**How to find it:** For each step, ask "who is allowed to do this?" and verify that the auth model in the API contracts supports the answer.
|
|
176
|
+
|
|
177
|
+
## Output Format
|
|
178
|
+
|
|
179
|
+
### Summary Table
|
|
180
|
+
|
|
181
|
+
```markdown
|
|
182
|
+
| Journey | Steps | Gaps Found | Critical Gaps | Assessment |
|
|
183
|
+
|---------|-------|-----------|---------------|------------|
|
|
184
|
+
| User registration + first purchase | 15 | 4 | 1 (email service missing) | Needs work |
|
|
185
|
+
| Returning user purchase | 8 | 1 | 0 | Mostly complete |
|
|
186
|
+
| Admin manages products | 12 | 3 | 2 (admin auth, bulk operations) | Needs work |
|
|
187
|
+
| User manages account | 6 | 0 | 0 | Complete |
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Detailed Findings
|
|
191
|
+
|
|
192
|
+
Each gap should be reported with:
|
|
193
|
+
- Which journey and step it affects
|
|
194
|
+
- What is missing or inconsistent
|
|
195
|
+
- What the impact would be if not fixed (agent would be unable to implement, or would implement incorrectly)
|
|
196
|
+
- Recommended fix (which artifact to update, what to add)
|
|
197
|
+
|
|
198
|
+
## When to Run Critical Path Analysis
|
|
199
|
+
|
|
200
|
+
- After all pipeline steps (modeling through planning) are complete.
|
|
201
|
+
- Before implementation tasks are finalized (gaps found here may require new tasks).
|
|
202
|
+
- When PRD changes significantly (new features may introduce new critical journeys).
|
|
203
|
+
- As a final check before freezing docs in the finalization phase.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cross-phase-consistency
|
|
3
|
+
description: Auditing consistency across pipeline phases — naming, assumptions, data flows, interface contracts
|
|
4
|
+
topics: [validation, consistency, naming, data-flow, contracts]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Cross-Phase Consistency
|
|
8
|
+
|
|
9
|
+
Cross-phase consistency validation ensures that artifacts produced across different pipeline phases agree with each other. Inconsistencies compound: a renamed entity in one phase propagates confusion into every downstream artifact. This document covers what to check, how to check it, and what findings look like.
|
|
10
|
+
|
|
11
|
+
## Why Inconsistencies Happen
|
|
12
|
+
|
|
13
|
+
Each pipeline phase is authored at a different time, possibly by different agents, with evolving understanding of the project. Common causes:
|
|
14
|
+
|
|
15
|
+
- An entity gets renamed during architecture but the domain model still uses the old name.
|
|
16
|
+
- A field is added to an API contract that does not exist in the database schema.
|
|
17
|
+
- An ADR constrains behavior that is contradicted by a later UX specification.
|
|
18
|
+
- A domain event defined in modeling is never consumed by any component in architecture.
|
|
19
|
+
- Units or formats differ (e.g., timestamps as ISO strings in the API but Unix integers in the schema).
|
|
20
|
+
|
|
21
|
+
## What to Check
|
|
22
|
+
|
|
23
|
+
### 1. Naming Consistency
|
|
24
|
+
|
|
25
|
+
Trace every named concept through all artifacts where it appears.
|
|
26
|
+
|
|
27
|
+
**Process:**
|
|
28
|
+
1. Extract all named entities from the domain model (aggregates, entities, value objects, events, invariants).
|
|
29
|
+
2. For each name, search every downstream artifact: ADRs, architecture, schema, API contracts, UX spec, implementation tasks.
|
|
30
|
+
3. Flag any spelling variations, abbreviations, or synonyms (e.g., "User" vs "Account" vs "Member" referring to the same concept).
|
|
31
|
+
4. Flag any name that appears in a downstream artifact but not in the domain model (potential undocumented concept).
|
|
32
|
+
|
|
33
|
+
**What findings look like:**
|
|
34
|
+
- "Domain model uses `PaymentTransaction` but API contracts call it `Payment` and database schema calls it `payment_txn`."
|
|
35
|
+
- "The entity `SubscriptionPlan` appears in the implementation tasks but is not in the domain model."
|
|
36
|
+
|
|
37
|
+
**Resolution:** Establish one canonical name per concept. Update all artifacts to use it.
|
|
38
|
+
|
|
39
|
+
### 2. Shared Assumptions
|
|
40
|
+
|
|
41
|
+
Later phases often assume properties that earlier phases did not explicitly specify.
|
|
42
|
+
|
|
43
|
+
**Process:**
|
|
44
|
+
1. For each phase from architecture onward, identify every assumption about earlier artifacts.
|
|
45
|
+
2. Verify each assumption is actually stated in the referenced artifact.
|
|
46
|
+
3. Pay special attention to: cardinality (one-to-many vs many-to-many), optionality (required vs optional), ordering (ordered vs unordered), uniqueness constraints, temporal assumptions (real-time vs eventual consistency).
|
|
47
|
+
|
|
48
|
+
**What findings look like:**
|
|
49
|
+
- "Architecture assumes `Order` has a `status` field with enum values, but the domain model defines `Order` without specifying lifecycle states."
|
|
50
|
+
- "API contracts assume paginated results, but architecture data flow diagrams show unbounded queries."
|
|
51
|
+
|
|
52
|
+
**Resolution:** Either add the assumption to the source artifact or update the downstream artifact to not depend on it.
|
|
53
|
+
|
|
54
|
+
### 3. Data Shape Consistency
|
|
55
|
+
|
|
56
|
+
Trace a data shape from domain model through schema through API through UI.
|
|
57
|
+
|
|
58
|
+
**Process:**
|
|
59
|
+
1. Pick a core entity (e.g., `User`).
|
|
60
|
+
2. Extract its shape from each layer:
|
|
61
|
+
- Domain model: attributes, relationships, invariants
|
|
62
|
+
- Database schema: columns, types, constraints, indexes
|
|
63
|
+
- API contract: request/response fields, types, validation rules
|
|
64
|
+
- UX spec: displayed fields, form inputs, validation messages
|
|
65
|
+
3. Verify field-by-field alignment:
|
|
66
|
+
- Every domain attribute should map to a schema column (or have a documented reason for omission).
|
|
67
|
+
- Every schema column exposed externally should appear in an API contract field.
|
|
68
|
+
- Every API response field displayed to users should appear in UX spec.
|
|
69
|
+
- Types should be compatible (e.g., domain `Money` value object maps to `DECIMAL(10,2)` in schema, `string` formatted as currency in API, formatted display in UX).
|
|
70
|
+
|
|
71
|
+
**What findings look like:**
|
|
72
|
+
- "Domain model `Product.price` is a `Money` value object (amount + currency), but schema has only `price_cents INTEGER` — currency is missing."
|
|
73
|
+
- "API returns `created_at` as ISO 8601 string but UX spec references `createdAt` as a Unix timestamp."
|
|
74
|
+
|
|
75
|
+
### 4. Interface Contract Matching
|
|
76
|
+
|
|
77
|
+
Verify that component interfaces defined in architecture match their implementations in API contracts and database schema.
|
|
78
|
+
|
|
79
|
+
**Process:**
|
|
80
|
+
1. Extract every component interface from the architecture document (method signatures, event subscriptions, data flows).
|
|
81
|
+
2. For each interface, find its concrete definition in API contracts or internal service contracts.
|
|
82
|
+
3. Verify:
|
|
83
|
+
- All interface methods have corresponding endpoints or functions.
|
|
84
|
+
- Parameter names and types match.
|
|
85
|
+
- Return types match.
|
|
86
|
+
- Error cases defined at the interface level are handled at the implementation level.
|
|
87
|
+
|
|
88
|
+
**What findings look like:**
|
|
89
|
+
- "Architecture defines `NotificationService.sendBatch(notifications[])` but API contracts only define `POST /notifications` for single notifications."
|
|
90
|
+
- "Architecture component `PaymentGateway` has an `onPaymentFailed` event handler, but no component publishes `PaymentFailed` events."
|
|
91
|
+
|
|
92
|
+
### 5. Data Flow Completeness
|
|
93
|
+
|
|
94
|
+
Verify that data flows described in architecture are implementable with the defined APIs and schemas.
|
|
95
|
+
|
|
96
|
+
**Process:**
|
|
97
|
+
1. For each data flow diagram in architecture, walk through step by step.
|
|
98
|
+
2. At each step, verify:
|
|
99
|
+
- The source component has an API or interface that provides the data.
|
|
100
|
+
- The target component has an API or interface that accepts the data.
|
|
101
|
+
- The data shape at the source matches the data shape at the target.
|
|
102
|
+
- Any transformation between source and target is documented.
|
|
103
|
+
3. Check for orphaned components — components that appear in data flows but have no API endpoints or database tables.
|
|
104
|
+
|
|
105
|
+
**What findings look like:**
|
|
106
|
+
- "Data flow shows `OrderService -> InventoryService: reserve items`, but InventoryService API has no reservation endpoint."
|
|
107
|
+
- "Data flow shows `AnalyticsCollector` receiving events from `UserService`, but the architecture has no event bus or pub/sub mechanism defined."
|
|
108
|
+
|
|
109
|
+
### 6. Constraint Propagation
|
|
110
|
+
|
|
111
|
+
ADR constraints should be respected in all downstream artifacts.
|
|
112
|
+
|
|
113
|
+
**Process:**
|
|
114
|
+
1. Extract all constraints from ADRs (technology choices, architectural patterns, non-functional requirements).
|
|
115
|
+
2. For each constraint, verify it is reflected in relevant downstream artifacts:
|
|
116
|
+
- Technology choice ADRs should align with architecture component technology annotations.
|
|
117
|
+
- Pattern ADRs (e.g., "use event sourcing for Order aggregate") should be reflected in schema design and API contracts.
|
|
118
|
+
- NFR ADRs should have corresponding test criteria in testing strategy.
|
|
119
|
+
|
|
120
|
+
**What findings look like:**
|
|
121
|
+
- "ADR-007 mandates PostgreSQL, but database schema uses MongoDB-style document references."
|
|
122
|
+
- "ADR-012 requires CQRS for order processing, but architecture shows a single read/write path."
|
|
123
|
+
|
|
124
|
+
## How to Structure the Audit
|
|
125
|
+
|
|
126
|
+
### Pass 1: Build an Entity Registry
|
|
127
|
+
|
|
128
|
+
Create a table of every named concept with its appearance in each artifact:
|
|
129
|
+
|
|
130
|
+
| Concept | Domain Model | ADRs | Architecture | Schema | API | UX | Tasks |
|
|
131
|
+
|---------|-------------|------|-------------|--------|-----|-----|-------|
|
|
132
|
+
| User | `User` entity | — | `UserService` | `users` table | `/users` resource | User Profile screen | Task #12-#15 |
|
|
133
|
+
| Order | `Order` aggregate | ADR-012 CQRS | `OrderService` | `orders` table | `/orders` resource | Order History screen | Task #20-#28 |
|
|
134
|
+
|
|
135
|
+
Flag any row with missing cells or naming inconsistencies.
|
|
136
|
+
|
|
137
|
+
### Pass 2: Data Shape Tracing
|
|
138
|
+
|
|
139
|
+
For each entity in the registry, trace its shape layer by layer. Build a field-level comparison table:
|
|
140
|
+
|
|
141
|
+
| Field | Domain | Schema | API | UX |
|
|
142
|
+
|-------|--------|--------|-----|-----|
|
|
143
|
+
| id | UUID | `id UUID PK` | `id: string (uuid)` | hidden |
|
|
144
|
+
| email | Email (value object) | `email VARCHAR(255) UNIQUE` | `email: string (email)` | text input, validated |
|
|
145
|
+
| role | UserRole enum | `role VARCHAR(20) CHECK(...)` | `role: "admin" | "user"` | dropdown |
|
|
146
|
+
|
|
147
|
+
Flag mismatches in type, optionality, naming, or format.
|
|
148
|
+
|
|
149
|
+
### Pass 3: Flow Walking
|
|
150
|
+
|
|
151
|
+
Walk each data flow end-to-end, verifying every step has concrete API/schema support.
|
|
152
|
+
|
|
153
|
+
### Pass 4: Constraint Verification
|
|
154
|
+
|
|
155
|
+
Cross-reference every ADR constraint against downstream artifacts.
|
|
156
|
+
|
|
157
|
+
## Output Format
|
|
158
|
+
|
|
159
|
+
Findings should be structured as:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
## Finding: [Short Description]
|
|
163
|
+
|
|
164
|
+
**Severity:** Critical | Major | Minor
|
|
165
|
+
**Phases Involved:** [list of phases]
|
|
166
|
+
**Description:** [What the inconsistency is]
|
|
167
|
+
**Evidence:**
|
|
168
|
+
- In [artifact]: [what it says]
|
|
169
|
+
- In [artifact]: [what it says differently]
|
|
170
|
+
**Recommended Fix:** [Which artifact to update and how]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Common Patterns Worth Special Attention
|
|
174
|
+
|
|
175
|
+
1. **Enum drift** — Enum values defined in domain model, schema, API, and UX often diverge. One phase adds a new status value without updating others.
|
|
176
|
+
2. **Optionality mismatch** — Domain model says a field is required, but API contract makes it optional, or vice versa.
|
|
177
|
+
3. **Orphaned events** — Domain events defined but never consumed (or consumed but never published).
|
|
178
|
+
4. **Ghost requirements** — Features appear in UX spec or implementation tasks that trace to no PRD requirement.
|
|
179
|
+
5. **Format divergence** — Dates, money, identifiers represented differently across layers without documented transformation rules.
|
|
180
|
+
6. **Soft-delete vs hard-delete** — One phase assumes records are soft-deleted, another assumes they are gone.
|
|
181
|
+
7. **Pagination assumptions** — API paginates but UX assumes all data is available; or API returns all but architecture assumed streaming.
|