@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,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decision-completeness
|
|
3
|
+
description: Verifying all architectural decisions are recorded, justified, and non-contradictory
|
|
4
|
+
topics: [validation, decisions, adrs, completeness, contradictions]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Decision Completeness
|
|
8
|
+
|
|
9
|
+
Decision completeness validation ensures that every architectural and design decision made during the pipeline has been explicitly recorded in an ADR, that no decisions contradict each other, and that no deferred decisions remain unresolved before implementation begins.
|
|
10
|
+
|
|
11
|
+
## Why Decision Completeness Matters
|
|
12
|
+
|
|
13
|
+
Unrecorded decisions become tribal knowledge. When AI agents implement the system, they have no tribal knowledge — only documented decisions. Every implicit "we agreed that..." or "obviously we'd use..." that is not in an ADR is a gap that will cause agents to guess, and guesses introduce inconsistency.
|
|
14
|
+
|
|
15
|
+
## What to Check
|
|
16
|
+
|
|
17
|
+
### 1. Explicit Decision Extraction
|
|
18
|
+
|
|
19
|
+
Walk through every artifact and extract every explicit decision.
|
|
20
|
+
|
|
21
|
+
**Where explicit decisions live:**
|
|
22
|
+
- **ADRs** — The primary home. Each ADR records a decision, its context, and consequences.
|
|
23
|
+
- **Architecture document** — Technology choices, pattern selections, component organization.
|
|
24
|
+
- **Database schema** — Choice of database type, normalization level, indexing strategy.
|
|
25
|
+
- **API contracts** — Choice of API style (REST/GraphQL), versioning strategy, auth mechanism.
|
|
26
|
+
- **UX spec** — Framework choice, design system decisions, accessibility level target.
|
|
27
|
+
- **Task breakdown** — Sequencing decisions, parallelization choices.
|
|
28
|
+
- **Testing strategy** — Test framework, coverage targets, test environment setup.
|
|
29
|
+
- **Operations runbook** — Deployment strategy, CI/CD tool choice, monitoring approach.
|
|
30
|
+
|
|
31
|
+
**Process:**
|
|
32
|
+
1. Read each artifact sequentially.
|
|
33
|
+
2. For every statement that represents a choice between alternatives, extract it:
|
|
34
|
+
- "We use PostgreSQL" — this is a decision.
|
|
35
|
+
- "Authentication is handled via JWT tokens" — this is a decision.
|
|
36
|
+
- "The frontend uses React" — this is a decision.
|
|
37
|
+
- "We follow trunk-based development" — this is a decision.
|
|
38
|
+
3. Record the decision, the artifact it appears in, and whether it has a corresponding ADR.
|
|
39
|
+
|
|
40
|
+
### 2. Implied Decision Mining
|
|
41
|
+
|
|
42
|
+
Many decisions are implied rather than stated. These are harder to find but equally important.
|
|
43
|
+
|
|
44
|
+
**Techniques for finding implied decisions:**
|
|
45
|
+
|
|
46
|
+
**Absence-based detection** — Ask "what was NOT chosen?" If the architecture uses REST, there is an implied decision not to use GraphQL. If the schema uses PostgreSQL, there is an implied decision not to use MongoDB. Each such absence is a decision that may need an ADR.
|
|
47
|
+
|
|
48
|
+
**Convention-based detection** — When an artifact follows a specific pattern without justification, that is an implied decision. "All endpoints return JSON" — decided but not documented. "Errors follow RFC 7807" — decided but not documented.
|
|
49
|
+
|
|
50
|
+
**Technology-stack detection** — Extract the full technology stack from all artifacts. Each technology is a decision. Common technologies that often lack ADRs:
|
|
51
|
+
- Package manager (npm vs yarn vs pnpm)
|
|
52
|
+
- ORM or query builder
|
|
53
|
+
- Logging library
|
|
54
|
+
- Date/time library
|
|
55
|
+
- Validation library
|
|
56
|
+
- State management approach
|
|
57
|
+
- Test runner and assertion library
|
|
58
|
+
- CSS approach (modules, Tailwind, styled-components)
|
|
59
|
+
- Linter and formatter configuration
|
|
60
|
+
|
|
61
|
+
**Pattern-based detection** — Scan for phrases that indicate undocumented decisions:
|
|
62
|
+
- "We decided to..." (but no ADR exists)
|
|
63
|
+
- "The approach is..." (implies alternatives were considered)
|
|
64
|
+
- "For simplicity..." (implies a trade-off was made)
|
|
65
|
+
- "Following best practices..." (implies a specific practice was chosen)
|
|
66
|
+
- "Using the standard..." (implies a standard was selected)
|
|
67
|
+
|
|
68
|
+
**Assumption-based detection** — When one artifact assumes something about another, there may be an undocumented decision behind the assumption. "The API assumes eventual consistency for order status updates" — was that decided? By whom? What are the consequences?
|
|
69
|
+
|
|
70
|
+
### 3. ADR Coverage Verification
|
|
71
|
+
|
|
72
|
+
For every extracted decision (explicit and implied), verify:
|
|
73
|
+
|
|
74
|
+
1. **An ADR exists** — The decision is recorded in a numbered ADR document.
|
|
75
|
+
2. **The ADR has context** — Why was this decision needed? What problem was being solved?
|
|
76
|
+
3. **The ADR has rationale** — Why was this option chosen over alternatives?
|
|
77
|
+
4. **Alternatives were considered** — At least for significant decisions, alternatives should be listed.
|
|
78
|
+
5. **Consequences are documented** — What are the positive and negative consequences?
|
|
79
|
+
6. **Status is current** — The ADR status is "accepted" (not "proposed" or "deprecated" without a replacement).
|
|
80
|
+
|
|
81
|
+
### 4. Contradiction Detection
|
|
82
|
+
|
|
83
|
+
Contradictions occur when two decisions conflict. They are especially dangerous because each may be internally consistent — the conflict only appears when both are considered together.
|
|
84
|
+
|
|
85
|
+
**Where contradictions hide:**
|
|
86
|
+
|
|
87
|
+
**Cross-ADR contradictions** — Two ADRs make conflicting choices. Example: ADR-005 mandates "all inter-service communication via REST" and ADR-012 mandates "order events are published to a message queue." These may or may not contradict depending on whether the message queue counts as inter-service communication.
|
|
88
|
+
|
|
89
|
+
**ADR-vs-artifact contradictions** — An ADR mandates one approach, but an artifact implements a different one. Example: ADR-003 says "use bcrypt for password hashing" but the auth service implementation task references "argon2."
|
|
90
|
+
|
|
91
|
+
**Cross-artifact contradictions** — Two artifacts make different assumptions about the same thing. Example: API contracts define pagination with `page` and `pageSize` parameters, but the UX spec assumes cursor-based pagination with `after` tokens.
|
|
92
|
+
|
|
93
|
+
**Detection process:**
|
|
94
|
+
1. Group decisions by topic (database, authentication, API style, deployment, etc.).
|
|
95
|
+
2. Within each topic, compare all decisions for consistency.
|
|
96
|
+
3. For each pair of potentially conflicting decisions, determine:
|
|
97
|
+
- Are they actually about the same thing?
|
|
98
|
+
- Can both be true simultaneously?
|
|
99
|
+
- If not, which takes precedence and why?
|
|
100
|
+
|
|
101
|
+
### 5. Deferred Decision Resolution
|
|
102
|
+
|
|
103
|
+
During earlier pipeline phases, some decisions may have been explicitly deferred with "we'll decide later" or "TBD" annotations. By validation time, these should be resolved.
|
|
104
|
+
|
|
105
|
+
**Process:**
|
|
106
|
+
1. Search all artifacts for deferred-decision indicators:
|
|
107
|
+
- "TBD", "TODO", "to be decided", "to be determined"
|
|
108
|
+
- "deferred", "will decide later", "pending decision"
|
|
109
|
+
- "open question", "needs investigation", "spike needed"
|
|
110
|
+
- Question marks in decision contexts ("PostgreSQL or MongoDB?")
|
|
111
|
+
2. For each deferred item, determine:
|
|
112
|
+
- Has it been silently resolved in a later artifact? (If so, add the ADR.)
|
|
113
|
+
- Is it still genuinely unresolved? (If so, it must be resolved before implementation.)
|
|
114
|
+
- Was it rendered moot by another decision? (If so, document why.)
|
|
115
|
+
|
|
116
|
+
## Decision Categories Checklist
|
|
117
|
+
|
|
118
|
+
Use this checklist to verify that all common decision categories have been addressed:
|
|
119
|
+
|
|
120
|
+
### Infrastructure & Platform
|
|
121
|
+
- [ ] Cloud provider / hosting platform
|
|
122
|
+
- [ ] Programming language(s) and version(s)
|
|
123
|
+
- [ ] Runtime environment (Node.js version, Python version, etc.)
|
|
124
|
+
- [ ] Package manager
|
|
125
|
+
- [ ] Containerization approach (Docker, etc.)
|
|
126
|
+
- [ ] CI/CD pipeline tool
|
|
127
|
+
|
|
128
|
+
### Data
|
|
129
|
+
- [ ] Primary database type and product
|
|
130
|
+
- [ ] Caching strategy and product (if applicable)
|
|
131
|
+
- [ ] Search engine (if applicable)
|
|
132
|
+
- [ ] Message queue / event bus (if applicable)
|
|
133
|
+
- [ ] File/blob storage (if applicable)
|
|
134
|
+
- [ ] Data migration strategy
|
|
135
|
+
|
|
136
|
+
### API & Communication
|
|
137
|
+
- [ ] API style (REST, GraphQL, gRPC)
|
|
138
|
+
- [ ] API versioning strategy
|
|
139
|
+
- [ ] Authentication mechanism
|
|
140
|
+
- [ ] Authorization model
|
|
141
|
+
- [ ] Real-time communication (WebSockets, SSE, polling)
|
|
142
|
+
|
|
143
|
+
### Frontend (if applicable)
|
|
144
|
+
- [ ] Frontend framework
|
|
145
|
+
- [ ] State management approach
|
|
146
|
+
- [ ] CSS / styling approach
|
|
147
|
+
- [ ] Component library (build vs buy)
|
|
148
|
+
- [ ] Routing approach (client-side, server-side, hybrid)
|
|
149
|
+
- [ ] Build tool
|
|
150
|
+
|
|
151
|
+
### Quality
|
|
152
|
+
- [ ] Test framework(s) and runner(s)
|
|
153
|
+
- [ ] Coverage targets
|
|
154
|
+
- [ ] Linting and formatting tools
|
|
155
|
+
- [ ] Code review process
|
|
156
|
+
- [ ] Error tracking / monitoring tool
|
|
157
|
+
|
|
158
|
+
### Operations
|
|
159
|
+
- [ ] Deployment strategy (rolling, blue-green, canary)
|
|
160
|
+
- [ ] Environment management (staging, production)
|
|
161
|
+
- [ ] Logging approach and tool
|
|
162
|
+
- [ ] Monitoring and alerting tool
|
|
163
|
+
- [ ] Secret management approach
|
|
164
|
+
- [ ] Backup and disaster recovery
|
|
165
|
+
|
|
166
|
+
### Process
|
|
167
|
+
- [ ] Branching strategy (trunk-based, GitFlow, feature branches)
|
|
168
|
+
- [ ] Commit message format
|
|
169
|
+
- [ ] PR and merge strategy
|
|
170
|
+
- [ ] Release versioning scheme
|
|
171
|
+
|
|
172
|
+
## Output Format
|
|
173
|
+
|
|
174
|
+
### Decision Inventory
|
|
175
|
+
|
|
176
|
+
```markdown
|
|
177
|
+
| # | Decision | Source | ADR? | Status |
|
|
178
|
+
|---|----------|--------|------|--------|
|
|
179
|
+
| 1 | Use PostgreSQL 16 | Architecture doc §4.2 | ADR-007 | Covered |
|
|
180
|
+
| 2 | JWT for auth | API contracts §2.1 | ADR-003 | Covered |
|
|
181
|
+
| 3 | React 19 for frontend | UX spec §1.1 | MISSING | Needs ADR |
|
|
182
|
+
| 4 | Use pnpm | Task breakdown §setup | MISSING | Needs ADR |
|
|
183
|
+
| 5 | TBD: caching strategy | Architecture doc §5.3 | — | Unresolved |
|
|
184
|
+
| 6 | REST for all APIs | ADR-005 | ADR-005 | Contradicted by ADR-012 |
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Contradiction Report
|
|
188
|
+
|
|
189
|
+
```markdown
|
|
190
|
+
## Contradiction: API Communication Style
|
|
191
|
+
|
|
192
|
+
**Decision A:** ADR-005 — "All inter-service communication uses REST endpoints"
|
|
193
|
+
**Decision B:** ADR-012 — "Order state changes are published to a message queue for downstream consumers"
|
|
194
|
+
|
|
195
|
+
**Analysis:** These decisions conflict if message queue communication is considered inter-service communication. If ADR-005 intends only synchronous request-response, the contradiction is real.
|
|
196
|
+
|
|
197
|
+
**Recommended Resolution:** Amend ADR-005 to clarify scope: "Synchronous inter-service communication uses REST. Asynchronous event distribution uses the message queue per ADR-012."
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Deferred Decision Report
|
|
201
|
+
|
|
202
|
+
```markdown
|
|
203
|
+
## Unresolved: Caching Strategy
|
|
204
|
+
|
|
205
|
+
**Source:** Architecture document §5.3 — "Caching strategy TBD based on load testing results"
|
|
206
|
+
**Impact:** Without a caching decision, the operations runbook cannot define cache invalidation procedures, and the architecture cannot specify cache layers.
|
|
207
|
+
**Recommendation:** Make a provisional decision (e.g., Redis with read-through caching for frequently accessed entities) and record as an ADR. Note that it may be revisited after load testing.
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Prioritizing Findings
|
|
211
|
+
|
|
212
|
+
Not all missing ADRs are equally important. Prioritize by impact:
|
|
213
|
+
|
|
214
|
+
- **Critical** — Decisions that affect system architecture, data model, or security. Missing these leads to incompatible implementations.
|
|
215
|
+
- **Major** — Decisions that affect developer workflow, tooling, or operational procedures. Missing these leads to inconsistent practices.
|
|
216
|
+
- **Minor** — Decisions about conventions, formatting, or low-impact library choices. Missing these is annoying but not dangerous.
|
|
217
|
+
|
|
218
|
+
Focus resolution on critical and major findings. Minor findings can be resolved during implementation as they arise, as long as they are documented when made.
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dependency-validation
|
|
3
|
+
description: Verifying dependency graphs are acyclic, complete, and correctly ordered
|
|
4
|
+
topics: [validation, dependencies, graphs, cycles, ordering, parallelization]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dependency Validation
|
|
8
|
+
|
|
9
|
+
Dependency validation extracts all dependency relationships between implementation tasks, builds a graph, checks for correctness, and verifies that the ordering matches architectural constraints. A valid dependency graph ensures that tasks can be executed in an order that never requires unbuilt dependencies.
|
|
10
|
+
|
|
11
|
+
## What a Dependency Graph Represents
|
|
12
|
+
|
|
13
|
+
Each node in the graph is an implementation task. Each directed edge represents a "must complete before" relationship: if task A depends on task B, then B must be completed before A can start.
|
|
14
|
+
|
|
15
|
+
The graph encodes:
|
|
16
|
+
- **Sequencing constraints** — What must happen before what.
|
|
17
|
+
- **Parallelization opportunities** — Tasks with no dependency relationship can run simultaneously.
|
|
18
|
+
- **Critical path** — The longest chain of sequential dependencies, which determines minimum project duration.
|
|
19
|
+
- **Blocking risk** — Tasks that many other tasks depend on, whose delay blocks the most work.
|
|
20
|
+
|
|
21
|
+
## How to Extract Dependencies
|
|
22
|
+
|
|
23
|
+
### From the Task Breakdown
|
|
24
|
+
|
|
25
|
+
Implementation tasks should have explicit dependency declarations. Extract these directly:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Task T-012: Set up database schema
|
|
29
|
+
Depends on: T-010 (database connection config)
|
|
30
|
+
|
|
31
|
+
Task T-015: Implement user registration endpoint
|
|
32
|
+
Depends on: T-012 (user table must exist), T-011 (auth middleware)
|
|
33
|
+
|
|
34
|
+
Task T-020: Build sign-up form
|
|
35
|
+
Depends on: T-015 (registration endpoint must exist)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### From Architecture Data Flows
|
|
39
|
+
|
|
40
|
+
Data flow diagrams imply dependencies. If Component A sends data to Component B, then Component B's implementation depends on Component A's interface being defined (though not necessarily fully implemented — interface-first development can decouple this).
|
|
41
|
+
|
|
42
|
+
### From Schema Dependencies
|
|
43
|
+
|
|
44
|
+
Database schema has inherent ordering:
|
|
45
|
+
- Tables with foreign keys depend on the referenced tables.
|
|
46
|
+
- Migration scripts must run in order.
|
|
47
|
+
- Seed data depends on table creation.
|
|
48
|
+
|
|
49
|
+
### From API Contract Dependencies
|
|
50
|
+
|
|
51
|
+
API implementation depends on:
|
|
52
|
+
- Schema (data layer must exist for the API to read/write)
|
|
53
|
+
- Auth middleware (if endpoints are protected)
|
|
54
|
+
- External service clients (if the endpoint calls external services)
|
|
55
|
+
|
|
56
|
+
### Implicit Dependencies to Look For
|
|
57
|
+
|
|
58
|
+
Some dependencies are not stated but are real:
|
|
59
|
+
|
|
60
|
+
1. **Shared configuration** — Multiple tasks may depend on environment setup, config files, or shared constants that no task explicitly produces.
|
|
61
|
+
2. **Shared libraries** — Multiple tasks may depend on utility functions, custom error classes, or helper modules.
|
|
62
|
+
3. **Framework scaffolding** — All tasks may depend on the initial project setup (package.json, tsconfig, linting config) which may or may not be its own task.
|
|
63
|
+
4. **Test infrastructure** — Tests depend on test utilities, fixtures, and configuration that must be set up first.
|
|
64
|
+
|
|
65
|
+
## Graph Validation Checks
|
|
66
|
+
|
|
67
|
+
### 1. Cycle Detection
|
|
68
|
+
|
|
69
|
+
A cycle means task A depends on B, B depends on C, and C depends on A. No task in the cycle can ever start because each is waiting for another.
|
|
70
|
+
|
|
71
|
+
**Detection algorithm (Kahn's algorithm):**
|
|
72
|
+
1. Compute the in-degree (number of incoming edges) for each node.
|
|
73
|
+
2. Add all nodes with in-degree 0 to a queue.
|
|
74
|
+
3. While the queue is not empty:
|
|
75
|
+
a. Remove a node from the queue.
|
|
76
|
+
b. For each outgoing edge from that node, decrement the in-degree of the target.
|
|
77
|
+
c. If the target's in-degree reaches 0, add it to the queue.
|
|
78
|
+
4. If all nodes have been processed, the graph is acyclic.
|
|
79
|
+
5. If nodes remain unprocessed, they are part of cycles.
|
|
80
|
+
|
|
81
|
+
**What to do when cycles are found:**
|
|
82
|
+
- Identify the minimal cycle (the smallest set of tasks that form a loop).
|
|
83
|
+
- Determine which dependency is weakest — can it be broken by splitting a task or defining an interface?
|
|
84
|
+
- Common resolution: split a task into "define interface" and "implement interface" — other tasks can depend on the interface definition without waiting for the full implementation.
|
|
85
|
+
|
|
86
|
+
### 2. Completeness Check
|
|
87
|
+
|
|
88
|
+
Every task referenced as a dependency must exist in the task list.
|
|
89
|
+
|
|
90
|
+
**Process:**
|
|
91
|
+
1. Collect all task IDs from the implementation tasks.
|
|
92
|
+
2. Collect all task IDs referenced in dependency declarations.
|
|
93
|
+
3. Any referenced ID not in the task list is an orphaned dependency.
|
|
94
|
+
|
|
95
|
+
**Common causes:**
|
|
96
|
+
- Task was removed or renamed but its dependents were not updated.
|
|
97
|
+
- Dependency references a task from a different phase or project.
|
|
98
|
+
- Typo in the task ID.
|
|
99
|
+
|
|
100
|
+
### 3. Ordering vs. Architectural Constraints
|
|
101
|
+
|
|
102
|
+
The dependency ordering should match the architecture's layered structure:
|
|
103
|
+
|
|
104
|
+
**Layer ordering (typical):**
|
|
105
|
+
1. Infrastructure setup (database, message queue, cache)
|
|
106
|
+
2. Schema creation (tables, indexes, constraints)
|
|
107
|
+
3. Core domain logic (entities, business rules, domain services)
|
|
108
|
+
4. Repository/data access layer
|
|
109
|
+
5. Service layer (application services, orchestration)
|
|
110
|
+
6. API layer (endpoints, middleware, serialization)
|
|
111
|
+
7. Frontend components (if applicable)
|
|
112
|
+
8. Integration and E2E tests
|
|
113
|
+
|
|
114
|
+
Verify that no task in a lower layer depends on a task in a higher layer (e.g., schema creation should not depend on an API endpoint).
|
|
115
|
+
|
|
116
|
+
**Exceptions:** Some cross-cutting concerns (logging, auth, error handling) may be set up early and used by all layers. This is acceptable as long as the dependency is on the shared infrastructure, not on a specific feature in a higher layer.
|
|
117
|
+
|
|
118
|
+
### 4. Parallel Task Independence
|
|
119
|
+
|
|
120
|
+
Tasks that can run in parallel (no dependency relationship between them) should not share mutable state.
|
|
121
|
+
|
|
122
|
+
**Process:**
|
|
123
|
+
1. Identify all task pairs that have no dependency path between them (neither A→B nor B→A exists).
|
|
124
|
+
2. For each parallel pair, verify:
|
|
125
|
+
- They do not modify the same files.
|
|
126
|
+
- They do not modify the same database tables in conflicting ways.
|
|
127
|
+
- They do not depend on the same external service configuration.
|
|
128
|
+
- They do not modify the same API endpoints.
|
|
129
|
+
|
|
130
|
+
**What findings look like:**
|
|
131
|
+
- "Tasks T-015 and T-018 can run in parallel but both modify `src/middleware/auth.ts`. If both agents work simultaneously, they will produce merge conflicts."
|
|
132
|
+
- "Tasks T-020 and T-022 both add columns to the `users` table. Parallel execution will cause migration conflicts."
|
|
133
|
+
|
|
134
|
+
**Resolution options:**
|
|
135
|
+
- Add a dependency between the conflicting tasks (breaking the parallelism).
|
|
136
|
+
- Split the shared resource into separate modules that can be independently modified.
|
|
137
|
+
- Sequence the conflicting tasks and note that parallelism is not available.
|
|
138
|
+
|
|
139
|
+
### 5. Critical Path Analysis
|
|
140
|
+
|
|
141
|
+
The critical path is the longest chain of sequential dependencies. It determines the minimum time to complete all tasks, even with unlimited parallelism.
|
|
142
|
+
|
|
143
|
+
**How to find it:**
|
|
144
|
+
1. Perform a topological sort of the graph.
|
|
145
|
+
2. For each node, compute the longest path from any root (node with no dependencies) to that node.
|
|
146
|
+
3. The node with the longest path is the end of the critical path.
|
|
147
|
+
4. Trace backward from that node along the longest incoming path to find the full critical path.
|
|
148
|
+
|
|
149
|
+
**Why it matters:**
|
|
150
|
+
- Tasks on the critical path cannot be parallelized — any delay directly extends the project.
|
|
151
|
+
- Tasks NOT on the critical path have slack — they can be delayed without extending the project.
|
|
152
|
+
- Optimization efforts should focus on the critical path: Can any critical-path task be split? Can any dependency be relaxed?
|
|
153
|
+
|
|
154
|
+
### 6. Fan-in and Fan-out Analysis
|
|
155
|
+
|
|
156
|
+
**High fan-in tasks** (many tasks depend on them):
|
|
157
|
+
- These are blockers. If they are delayed, many downstream tasks are blocked.
|
|
158
|
+
- They should be prioritized and possibly split into smaller deliverables.
|
|
159
|
+
- Example: "Set up authentication middleware" — 15 API tasks depend on it.
|
|
160
|
+
|
|
161
|
+
**High fan-out tasks** (depend on many other tasks):
|
|
162
|
+
- These can only start late in the project.
|
|
163
|
+
- They should be reviewed for whether all dependencies are truly necessary.
|
|
164
|
+
- Example: "E2E test suite" depends on all API and frontend tasks.
|
|
165
|
+
|
|
166
|
+
## Graph Visualization
|
|
167
|
+
|
|
168
|
+
For communication, represent the dependency graph visually:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
T-001 (Project setup)
|
|
172
|
+
├─> T-010 (DB config)
|
|
173
|
+
│ └─> T-012 (Schema creation)
|
|
174
|
+
│ ├─> T-015 (User registration endpoint)
|
|
175
|
+
│ │ └─> T-020 (Sign-up form)
|
|
176
|
+
│ └─> T-016 (Product CRUD endpoints)
|
|
177
|
+
│ └─> T-021 (Product listing page)
|
|
178
|
+
└─> T-011 (Auth middleware)
|
|
179
|
+
├─> T-015 (User registration endpoint)
|
|
180
|
+
└─> T-016 (Product CRUD endpoints)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Or as a dependency table:
|
|
184
|
+
|
|
185
|
+
```markdown
|
|
186
|
+
| Task | Depends On | Depended On By | Parallelizable With |
|
|
187
|
+
|------|-----------|----------------|---------------------|
|
|
188
|
+
| T-001 | — | T-010, T-011 | — |
|
|
189
|
+
| T-010 | T-001 | T-012 | T-011 |
|
|
190
|
+
| T-011 | T-001 | T-015, T-016 | T-010, T-012 |
|
|
191
|
+
| T-012 | T-010 | T-015, T-016 | T-011 |
|
|
192
|
+
| T-015 | T-012, T-011 | T-020 | T-016 |
|
|
193
|
+
| T-016 | T-012, T-011 | T-021 | T-015 |
|
|
194
|
+
| T-020 | T-015 | — | T-016, T-021 |
|
|
195
|
+
| T-021 | T-016 | — | T-015, T-020 |
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Output Format
|
|
199
|
+
|
|
200
|
+
### Validation Summary
|
|
201
|
+
|
|
202
|
+
```markdown
|
|
203
|
+
## Dependency Graph Validation Results
|
|
204
|
+
|
|
205
|
+
**Total tasks:** 45
|
|
206
|
+
**Total dependencies:** 72
|
|
207
|
+
**Graph is acyclic:** Yes / No
|
|
208
|
+
**Cycles found:** [list if any]
|
|
209
|
+
**Orphaned dependencies:** [list if any]
|
|
210
|
+
**Critical path length:** 12 tasks
|
|
211
|
+
**Critical path:** T-001 → T-010 → T-012 → T-015 → T-025 → ... → T-045
|
|
212
|
+
**Maximum parallelism:** 6 tasks simultaneously (at step 4 of topological sort)
|
|
213
|
+
**High fan-in tasks (>5 dependents):** T-001, T-011, T-012
|
|
214
|
+
**Parallel conflicts found:** 3 (listed below)
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Finding Report
|
|
218
|
+
|
|
219
|
+
```markdown
|
|
220
|
+
## Finding: Parallel Conflict Between T-020 and T-022
|
|
221
|
+
|
|
222
|
+
**Type:** Parallel task conflict
|
|
223
|
+
**Severity:** Major
|
|
224
|
+
**Description:** Both tasks modify `src/models/User.ts` — T-020 adds email verification fields, T-022 adds profile fields. Parallel execution will cause merge conflicts.
|
|
225
|
+
**Recommendation:** Add dependency T-020 → T-022 (or vice versa) to serialize these tasks.
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## When to Run Dependency Validation
|
|
229
|
+
|
|
230
|
+
- After the implementation tasks are complete.
|
|
231
|
+
- After any task is added, removed, or modified.
|
|
232
|
+
- Before starting implementation — the dependency graph is the work scheduler.
|
|
233
|
+
- When agents report being blocked — verify the blockage is real and not a missing dependency resolution.
|