forgecraft-mcp 1.4.0 → 1.7.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 +67 -0
- package/README.md +527 -525
- package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
- package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
- package/dist/analyzers/anchors/anchor-loader.js +113 -0
- package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
- package/dist/analyzers/anti-pattern.d.ts.map +1 -1
- package/dist/analyzers/anti-pattern.js +38 -26
- package/dist/analyzers/anti-pattern.js.map +1 -1
- package/dist/analyzers/completeness-helpers.d.ts +5 -0
- package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
- package/dist/analyzers/completeness-helpers.js +17 -0
- package/dist/analyzers/completeness-helpers.js.map +1 -1
- package/dist/analyzers/completeness.d.ts.map +1 -1
- package/dist/analyzers/completeness.js +4 -4
- package/dist/analyzers/completeness.js.map +1 -1
- package/dist/analyzers/gs-scorer.d.ts +3 -1
- package/dist/analyzers/gs-scorer.d.ts.map +1 -1
- package/dist/analyzers/gs-scorer.js +5 -2
- package/dist/analyzers/gs-scorer.js.map +1 -1
- package/dist/analyzers/package-json.d.ts.map +1 -1
- package/dist/analyzers/package-json.js +194 -34
- package/dist/analyzers/package-json.js.map +1 -1
- package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
- package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/composable-scorer.js +50 -2
- package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
- package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
- package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/executable-scorer.js +64 -4
- package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
- package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
- package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
- package/dist/analyzers/scorers/scorer-utils.js +34 -9
- package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
- package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
- package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
- package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
- package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
- package/dist/cli/help.js +51 -51
- package/dist/disciplines/catalog.d.ts +16 -0
- package/dist/disciplines/catalog.d.ts.map +1 -0
- package/dist/disciplines/catalog.js +196 -0
- package/dist/disciplines/catalog.js.map +1 -0
- package/dist/disciplines/runner.d.ts +13 -0
- package/dist/disciplines/runner.d.ts.map +1 -0
- package/dist/disciplines/runner.js +35 -0
- package/dist/disciplines/runner.js.map +1 -0
- package/dist/registry/composer.d.ts.map +1 -1
- package/dist/registry/composer.js +9 -4
- package/dist/registry/composer.js.map +1 -1
- package/dist/registry/loader-tag.d.ts.map +1 -1
- package/dist/registry/loader-tag.js +1 -0
- package/dist/registry/loader-tag.js.map +1 -1
- package/dist/registry/remote-gates.js +1 -1
- package/dist/registry/remote-gates.js.map +1 -1
- package/dist/registry/renderer-skeletons.js +92 -92
- package/dist/registry/sentinel-renderer.js +299 -20
- package/dist/registry/sentinel-renderer.js.map +1 -1
- package/dist/sentinel/detect.d.ts +41 -0
- package/dist/sentinel/detect.d.ts.map +1 -0
- package/dist/sentinel/detect.js +122 -0
- package/dist/sentinel/detect.js.map +1 -0
- package/dist/sentinel/write.d.ts +54 -0
- package/dist/sentinel/write.d.ts.map +1 -0
- package/dist/sentinel/write.js +75 -0
- package/dist/sentinel/write.js.map +1 -0
- package/dist/shared/cnt-health.d.ts +16 -0
- package/dist/shared/cnt-health.d.ts.map +1 -1
- package/dist/shared/cnt-health.js +55 -8
- package/dist/shared/cnt-health.js.map +1 -1
- package/dist/shared/config.d.ts +14 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +45 -0
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/gs-score-logger.js +6 -6
- package/dist/shared/hook-installer.d.ts +58 -0
- package/dist/shared/hook-installer.d.ts.map +1 -0
- package/dist/shared/hook-installer.js +316 -0
- package/dist/shared/hook-installer.js.map +1 -0
- package/dist/shared/project-gates-helpers.d.ts +9 -0
- package/dist/shared/project-gates-helpers.d.ts.map +1 -1
- package/dist/shared/project-gates-helpers.js +35 -0
- package/dist/shared/project-gates-helpers.js.map +1 -1
- package/dist/shared/types/config.d.ts +7 -1
- package/dist/shared/types/config.d.ts.map +1 -1
- package/dist/shared/types/gates.d.ts +34 -0
- package/dist/shared/types/gates.d.ts.map +1 -1
- package/dist/shared/types/project.d.ts +68 -2
- package/dist/shared/types/project.d.ts.map +1 -1
- package/dist/shared/types/project.js +1 -0
- package/dist/shared/types/project.js.map +1 -1
- package/dist/shared/types/templates.d.ts +8 -1
- package/dist/shared/types/templates.d.ts.map +1 -1
- package/dist/shared/types/verify.d.ts +51 -1
- package/dist/shared/types/verify.d.ts.map +1 -1
- package/dist/shared/types/verify.js +37 -1
- package/dist/shared/types/verify.js.map +1 -1
- package/dist/tools/add-hook.d.ts.map +1 -1
- package/dist/tools/add-hook.js +8 -1
- package/dist/tools/add-hook.js.map +1 -1
- package/dist/tools/add-module.js +123 -123
- package/dist/tools/advice-registry.d.ts.map +1 -1
- package/dist/tools/advice-registry.js +108 -18
- package/dist/tools/advice-registry.js.map +1 -1
- package/dist/tools/advise-session-advisor.d.ts +16 -0
- package/dist/tools/advise-session-advisor.d.ts.map +1 -0
- package/dist/tools/advise-session-advisor.js +89 -0
- package/dist/tools/advise-session-advisor.js.map +1 -0
- package/dist/tools/advise-session-signals.d.ts +21 -0
- package/dist/tools/advise-session-signals.d.ts.map +1 -0
- package/dist/tools/advise-session-signals.js +113 -0
- package/dist/tools/advise-session-signals.js.map +1 -0
- package/dist/tools/advise-session.d.ts +22 -0
- package/dist/tools/advise-session.d.ts.map +1 -0
- package/dist/tools/advise-session.js +31 -0
- package/dist/tools/advise-session.js.map +1 -0
- package/dist/tools/analyze-harness.d.ts +18 -0
- package/dist/tools/analyze-harness.d.ts.map +1 -0
- package/dist/tools/analyze-harness.js +298 -0
- package/dist/tools/analyze-harness.js.map +1 -0
- package/dist/tools/audit.d.ts.map +1 -1
- package/dist/tools/audit.js +19 -0
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/change-request.d.ts +53 -0
- package/dist/tools/change-request.d.ts.map +1 -0
- package/dist/tools/change-request.js +395 -0
- package/dist/tools/change-request.js.map +1 -0
- package/dist/tools/check-cascade-contracts.d.ts +13 -0
- package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
- package/dist/tools/check-cascade-contracts.js +73 -2
- package/dist/tools/check-cascade-contracts.js.map +1 -1
- package/dist/tools/check-cascade-report.js +64 -64
- package/dist/tools/check-cascade-steps.d.ts +3 -0
- package/dist/tools/check-cascade-steps.d.ts.map +1 -1
- package/dist/tools/check-cascade-steps.js +104 -15
- package/dist/tools/check-cascade-steps.js.map +1 -1
- package/dist/tools/check-cascade.d.ts +4 -3
- package/dist/tools/check-cascade.d.ts.map +1 -1
- package/dist/tools/check-cascade.js +30 -12
- package/dist/tools/check-cascade.js.map +1 -1
- package/dist/tools/check-derivation-chain.d.ts +37 -0
- package/dist/tools/check-derivation-chain.d.ts.map +1 -0
- package/dist/tools/check-derivation-chain.js +418 -0
- package/dist/tools/check-derivation-chain.js.map +1 -0
- package/dist/tools/check-spec-consistency.d.ts +25 -0
- package/dist/tools/check-spec-consistency.d.ts.map +1 -0
- package/dist/tools/check-spec-consistency.js +339 -0
- package/dist/tools/check-spec-consistency.js.map +1 -0
- package/dist/tools/check-t4.d.ts +54 -0
- package/dist/tools/check-t4.d.ts.map +1 -0
- package/dist/tools/check-t4.js +305 -0
- package/dist/tools/check-t4.js.map +1 -0
- package/dist/tools/close-cycle.d.ts +11 -0
- package/dist/tools/close-cycle.d.ts.map +1 -1
- package/dist/tools/close-cycle.js +364 -4
- package/dist/tools/close-cycle.js.map +1 -1
- package/dist/tools/cnt-add-routing.d.ts +31 -0
- package/dist/tools/cnt-add-routing.d.ts.map +1 -0
- package/dist/tools/cnt-add-routing.js +99 -0
- package/dist/tools/cnt-add-routing.js.map +1 -0
- package/dist/tools/configure-mcp.d.ts.map +1 -1
- package/dist/tools/configure-mcp.js +52 -2
- package/dist/tools/configure-mcp.js.map +1 -1
- package/dist/tools/consolidate-status.d.ts +31 -0
- package/dist/tools/consolidate-status.d.ts.map +1 -1
- package/dist/tools/consolidate-status.js +105 -0
- package/dist/tools/consolidate-status.js.map +1 -1
- package/dist/tools/executable-gates.d.ts +52 -0
- package/dist/tools/executable-gates.d.ts.map +1 -0
- package/dist/tools/executable-gates.js +333 -0
- package/dist/tools/executable-gates.js.map +1 -0
- package/dist/tools/extract-adrs-from-spec.d.ts +33 -0
- package/dist/tools/extract-adrs-from-spec.d.ts.map +1 -0
- package/dist/tools/extract-adrs-from-spec.js +410 -0
- package/dist/tools/extract-adrs-from-spec.js.map +1 -0
- package/dist/tools/extract-adrs-history.d.ts +47 -0
- package/dist/tools/extract-adrs-history.d.ts.map +1 -0
- package/dist/tools/extract-adrs-history.js +265 -0
- package/dist/tools/extract-adrs-history.js.map +1 -0
- package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch-extended.js +137 -0
- package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
- package/dist/tools/forgecraft-dispatch.js +16 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -1
- package/dist/tools/forgecraft-schema-params.d.ts +174 -2
- package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema-params.js +197 -0
- package/dist/tools/forgecraft-schema-params.js.map +1 -1
- package/dist/tools/forgecraft-schema.d.ts +179 -7
- package/dist/tools/forgecraft-schema.d.ts.map +1 -1
- package/dist/tools/forgecraft-schema.js +37 -0
- package/dist/tools/forgecraft-schema.js.map +1 -1
- package/dist/tools/generate-adr.js +6 -6
- package/dist/tools/generate-adr.js.map +1 -1
- package/dist/tools/generate-decision.d.ts +77 -0
- package/dist/tools/generate-decision.d.ts.map +1 -0
- package/dist/tools/generate-decision.js +162 -0
- package/dist/tools/generate-decision.js.map +1 -0
- package/dist/tools/generate-env-probe.d.ts +49 -0
- package/dist/tools/generate-env-probe.d.ts.map +1 -0
- package/dist/tools/generate-env-probe.js +365 -0
- package/dist/tools/generate-env-probe.js.map +1 -0
- package/dist/tools/generate-harness.d.ts +53 -0
- package/dist/tools/generate-harness.d.ts.map +1 -0
- package/dist/tools/generate-harness.js +395 -0
- package/dist/tools/generate-harness.js.map +1 -0
- package/dist/tools/generate-roadmap.d.ts +1 -1
- package/dist/tools/generate-roadmap.d.ts.map +1 -1
- package/dist/tools/generate-roadmap.js +38 -4
- package/dist/tools/generate-roadmap.js.map +1 -1
- package/dist/tools/generate-session-prompt.d.ts +3 -3
- package/dist/tools/generate-session-prompt.d.ts.map +1 -1
- package/dist/tools/generate-session-prompt.js +9 -1
- package/dist/tools/generate-session-prompt.js.map +1 -1
- package/dist/tools/generate-slo-probe.d.ts +53 -0
- package/dist/tools/generate-slo-probe.d.ts.map +1 -0
- package/dist/tools/generate-slo-probe.js +366 -0
- package/dist/tools/generate-slo-probe.js.map +1 -0
- package/dist/tools/layer-status-gates.d.ts +24 -0
- package/dist/tools/layer-status-gates.d.ts.map +1 -0
- package/dist/tools/layer-status-gates.js +151 -0
- package/dist/tools/layer-status-gates.js.map +1 -0
- package/dist/tools/layer-status.d.ts +126 -0
- package/dist/tools/layer-status.d.ts.map +1 -0
- package/dist/tools/layer-status.js +647 -0
- package/dist/tools/layer-status.js.map +1 -0
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +9 -5
- package/dist/tools/list.js.map +1 -1
- package/dist/tools/postcondition-coverage.d.ts +57 -0
- package/dist/tools/postcondition-coverage.d.ts.map +1 -0
- package/dist/tools/postcondition-coverage.js +256 -0
- package/dist/tools/postcondition-coverage.js.map +1 -0
- package/dist/tools/probe-runners.d.ts +21 -0
- package/dist/tools/probe-runners.d.ts.map +1 -0
- package/dist/tools/probe-runners.js +246 -0
- package/dist/tools/probe-runners.js.map +1 -0
- package/dist/tools/probe-templates.d.ts +27 -0
- package/dist/tools/probe-templates.d.ts.map +1 -0
- package/dist/tools/probe-templates.js +279 -0
- package/dist/tools/probe-templates.js.map +1 -0
- package/dist/tools/propose-session.d.ts +28 -0
- package/dist/tools/propose-session.d.ts.map +1 -0
- package/dist/tools/propose-session.js +333 -0
- package/dist/tools/propose-session.js.map +1 -0
- package/dist/tools/refresh-output.js +14 -14
- package/dist/tools/review-stubs.d.ts +29 -0
- package/dist/tools/review-stubs.d.ts.map +1 -0
- package/dist/tools/review-stubs.js +173 -0
- package/dist/tools/review-stubs.js.map +1 -0
- package/dist/tools/roadmap-builder.d.ts +49 -1
- package/dist/tools/roadmap-builder.d.ts.map +1 -1
- package/dist/tools/roadmap-builder.js +210 -5
- package/dist/tools/roadmap-builder.js.map +1 -1
- package/dist/tools/run-env-probe.d.ts +57 -0
- package/dist/tools/run-env-probe.d.ts.map +1 -0
- package/dist/tools/run-env-probe.js +270 -0
- package/dist/tools/run-env-probe.js.map +1 -0
- package/dist/tools/run-harness.d.ts +52 -0
- package/dist/tools/run-harness.d.ts.map +1 -0
- package/dist/tools/run-harness.js +279 -0
- package/dist/tools/run-harness.js.map +1 -0
- package/dist/tools/run-slo-probe.d.ts +50 -0
- package/dist/tools/run-slo-probe.d.ts.map +1 -0
- package/dist/tools/run-slo-probe.js +281 -0
- package/dist/tools/run-slo-probe.js.map +1 -0
- package/dist/tools/scaffold-spec-stubs.js +115 -115
- package/dist/tools/scaffold-templates.js +62 -62
- package/dist/tools/scaffold-writer.d.ts.map +1 -1
- package/dist/tools/scaffold-writer.js +9 -0
- package/dist/tools/scaffold-writer.js.map +1 -1
- package/dist/tools/score-rubric.d.ts +19 -0
- package/dist/tools/score-rubric.d.ts.map +1 -0
- package/dist/tools/score-rubric.js +411 -0
- package/dist/tools/score-rubric.js.map +1 -0
- package/dist/tools/session-prompt-builders.d.ts +20 -0
- package/dist/tools/session-prompt-builders.d.ts.map +1 -1
- package/dist/tools/session-prompt-builders.js +78 -5
- package/dist/tools/session-prompt-builders.js.map +1 -1
- package/dist/tools/session-prompt-sections.d.ts +4 -2
- package/dist/tools/session-prompt-sections.d.ts.map +1 -1
- package/dist/tools/session-prompt-sections.js +22 -10
- package/dist/tools/session-prompt-sections.js.map +1 -1
- package/dist/tools/setup-artifact-writers.d.ts +69 -4
- package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
- package/dist/tools/setup-artifact-writers.js +681 -5
- package/dist/tools/setup-artifact-writers.js.map +1 -1
- package/dist/tools/setup-cnt-builders.d.ts.map +1 -1
- package/dist/tools/setup-cnt-builders.js +162 -34
- package/dist/tools/setup-cnt-builders.js.map +1 -1
- package/dist/tools/setup-monitoring.d.ts +41 -0
- package/dist/tools/setup-monitoring.d.ts.map +1 -0
- package/dist/tools/setup-monitoring.js +364 -0
- package/dist/tools/setup-monitoring.js.map +1 -0
- package/dist/tools/setup-phase1.d.ts.map +1 -1
- package/dist/tools/setup-phase1.js +14 -1
- package/dist/tools/setup-phase1.js.map +1 -1
- package/dist/tools/setup-phase2.d.ts +14 -0
- package/dist/tools/setup-phase2.d.ts.map +1 -1
- package/dist/tools/setup-phase2.js +130 -3
- package/dist/tools/setup-phase2.js.map +1 -1
- package/dist/tools/setup-project.d.ts +8 -0
- package/dist/tools/setup-project.d.ts.map +1 -1
- package/dist/tools/setup-project.js +52 -2
- package/dist/tools/setup-project.js.map +1 -1
- package/dist/tools/spec-parser-tags.d.ts.map +1 -1
- package/dist/tools/spec-parser-tags.js +1 -0
- package/dist/tools/spec-parser-tags.js.map +1 -1
- package/dist/tools/verify-formatter.d.ts.map +1 -1
- package/dist/tools/verify-formatter.js +15 -1
- package/dist/tools/verify-formatter.js.map +1 -1
- package/dist/tools/verify.d.ts.map +1 -1
- package/dist/tools/verify.js +3 -0
- package/dist/tools/verify.js.map +1 -1
- package/package.json +98 -89
- package/templates/analytics/instructions.yaml +37 -37
- package/templates/analytics/mcp-servers.yaml +11 -11
- package/templates/analytics/structure.yaml +25 -25
- package/templates/api/harness/uc-template.hurl +20 -0
- package/templates/api/instructions.yaml +231 -231
- package/templates/api/mcp-servers.yaml +22 -22
- package/templates/api/nfr.yaml +23 -23
- package/templates/api/review.yaml +103 -103
- package/templates/api/structure.yaml +34 -34
- package/templates/api/verification.yaml +132 -132
- package/templates/cli/instructions.yaml +31 -31
- package/templates/cli/mcp-servers.yaml +11 -11
- package/templates/cli/review.yaml +53 -53
- package/templates/cli/structure.yaml +16 -16
- package/templates/data-lineage/instructions.yaml +28 -28
- package/templates/data-lineage/mcp-servers.yaml +22 -22
- package/templates/data-pipeline/instructions.yaml +84 -84
- package/templates/data-pipeline/mcp-servers.yaml +13 -13
- package/templates/data-pipeline/nfr.yaml +39 -39
- package/templates/data-pipeline/structure.yaml +23 -23
- package/templates/docs-manifest.yaml +227 -0
- package/templates/fintech/hooks.yaml +55 -55
- package/templates/fintech/instructions.yaml +112 -112
- package/templates/fintech/mcp-servers.yaml +13 -13
- package/templates/fintech/nfr.yaml +46 -46
- package/templates/fintech/playbook.yaml +210 -210
- package/templates/fintech/verification.yaml +239 -239
- package/templates/game/harness/uc-template.sim.ts +29 -0
- package/templates/game/instructions.yaml +289 -289
- package/templates/game/mcp-servers.yaml +38 -38
- package/templates/game/nfr.yaml +64 -64
- package/templates/game/playbook.yaml +214 -214
- package/templates/game/review.yaml +97 -97
- package/templates/game/structure.yaml +67 -67
- package/templates/game/verification.yaml +174 -174
- package/templates/healthcare/instructions.yaml +42 -42
- package/templates/healthcare/mcp-servers.yaml +13 -13
- package/templates/healthcare/nfr.yaml +47 -47
- package/templates/hipaa/instructions.yaml +41 -41
- package/templates/hipaa/mcp-servers.yaml +13 -13
- package/templates/infra/instructions.yaml +104 -104
- package/templates/infra/mcp-servers.yaml +20 -20
- package/templates/infra/nfr.yaml +46 -46
- package/templates/infra/review.yaml +65 -65
- package/templates/infra/structure.yaml +25 -25
- package/templates/library/instructions.yaml +36 -36
- package/templates/library/mcp-servers.yaml +20 -20
- package/templates/library/review.yaml +56 -56
- package/templates/library/structure.yaml +19 -19
- package/templates/medallion-architecture/instructions.yaml +41 -41
- package/templates/medallion-architecture/mcp-servers.yaml +22 -22
- package/templates/ml/instructions.yaml +85 -85
- package/templates/ml/mcp-servers.yaml +11 -11
- package/templates/ml/nfr.yaml +39 -39
- package/templates/ml/structure.yaml +25 -25
- package/templates/ml/verification.yaml +156 -156
- package/templates/mobile/instructions.yaml +44 -44
- package/templates/mobile/mcp-servers.yaml +11 -11
- package/templates/mobile/nfr.yaml +49 -49
- package/templates/mobile/structure.yaml +27 -27
- package/templates/mobile/verification.yaml +121 -121
- package/templates/observability-xray/instructions.yaml +40 -40
- package/templates/observability-xray/mcp-servers.yaml +15 -15
- package/templates/realtime/instructions.yaml +42 -42
- package/templates/realtime/mcp-servers.yaml +13 -13
- package/templates/soc2/instructions.yaml +41 -41
- package/templates/soc2/mcp-servers.yaml +24 -24
- package/templates/social/instructions.yaml +43 -43
- package/templates/social/mcp-servers.yaml +24 -24
- package/templates/state-machine/instructions.yaml +42 -42
- package/templates/state-machine/mcp-servers.yaml +11 -11
- package/templates/tools-registry.yaml +164 -164
- package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
- package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
- package/templates/universal/hooks.yaml +879 -723
- package/templates/universal/instructions.yaml +1692 -1692
- package/templates/universal/mcp-servers.yaml +50 -50
- package/templates/universal/nfr.yaml +197 -197
- package/templates/universal/reference.yaml +326 -326
- package/templates/universal/review.yaml +204 -204
- package/templates/universal/skills.yaml +262 -262
- package/templates/universal/structure.yaml +67 -67
- package/templates/universal/verification.yaml +416 -416
- package/templates/web-next/hooks.yaml +114 -0
- package/templates/web-next/instructions.yaml +106 -0
- package/templates/web-react/harness/uc-template.spec.ts +35 -0
- package/templates/web-react/hooks.yaml +156 -44
- package/templates/web-react/instructions.yaml +296 -207
- package/templates/web-react/mcp-servers.yaml +20 -20
- package/templates/web-react/nfr.yaml +27 -27
- package/templates/web-react/review.yaml +94 -94
- package/templates/web-react/structure.yaml +46 -46
- package/templates/web-react/verification.yaml +126 -126
- package/templates/web-static/hooks.yaml +85 -0
- package/templates/web-static/instructions.yaml +204 -115
- package/templates/web-static/mcp-servers.yaml +20 -20
- package/templates/web3/instructions.yaml +44 -44
- package/templates/web3/mcp-servers.yaml +11 -11
- package/templates/web3/verification.yaml +159 -159
- package/templates/zero-trust/instructions.yaml +41 -41
- package/templates/zero-trust/mcp-servers.yaml +15 -15
|
@@ -32,70 +32,70 @@ export function writeInitialSessionPromptIfAbsent(projectDir) {
|
|
|
32
32
|
.filter(Boolean)
|
|
33
33
|
.join("\n");
|
|
34
34
|
const tagLine = tags.length > 0 ? `\nProject tags: ${tags.join(", ")}\n` : "";
|
|
35
|
-
const content = `# Initial Implementation Session Prompt
|
|
36
|
-
> Generated by ForgeCraft \`check_cascade\` on cascade completion.
|
|
37
|
-
> Delete this file after the first implementation session begins — it is a one-time bootstrap.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Context Load Order
|
|
42
|
-
|
|
43
|
-
Load these artifacts **before** issuing the implementation prompt:
|
|
44
|
-
|
|
45
|
-
${contextBlock || "- (No derived artifacts found — run setup_project first)"}
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Implementation Prompt
|
|
50
|
-
|
|
51
|
-
*(Paste everything below this line to the AI assistant)*
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
### Task
|
|
56
|
-
|
|
57
|
-
You are starting the first implementation session for **${projectName}**.
|
|
58
|
-
${tagLine}
|
|
59
|
-
Read the PRD and use-cases, then implement the first feature end-to-end following
|
|
60
|
-
the architectural constitution. Begin with the domain layer (entities + port interfaces),
|
|
61
|
-
then the service layer, then the API/CLI adapter. Apply TDD throughout — write the test
|
|
62
|
-
first, then the implementation. Do not proceed to the next layer until tests pass.
|
|
63
|
-
|
|
64
|
-
### Scope
|
|
65
|
-
|
|
66
|
-
- Implement the primary use case (UC-001) completely before touching UC-002 or UC-003.
|
|
67
|
-
- Infrastructure setup (DB, config, DI container) is in scope only as required by UC-001.
|
|
68
|
-
- Do not stub or mock domain logic — implement it fully.
|
|
69
|
-
|
|
70
|
-
### Execution Loop
|
|
71
|
-
|
|
72
|
-
1. Read docs/PRD.md → identify UC-001 domain entities and port interfaces
|
|
73
|
-
2. Write failing tests for the domain layer
|
|
74
|
-
3. Implement domain layer until tests pass
|
|
75
|
-
4. Write failing tests for the service layer
|
|
76
|
-
5. Implement service layer until tests pass
|
|
77
|
-
6. Write failing integration/API tests
|
|
78
|
-
7. Implement API/CLI adapter until tests pass
|
|
79
|
-
8. Run \`check_cascade\` and \`close_cycle\` before committing
|
|
80
|
-
|
|
81
|
-
### Acceptance Criteria
|
|
82
|
-
|
|
83
|
-
- [ ] UC-001 is fully implemented and tested (unit + integration)
|
|
84
|
-
- [ ] All tests pass with ≥80% coverage
|
|
85
|
-
- [ ] No circular imports (run layer check)
|
|
86
|
-
- [ ] SOLID principles applied — each class has a single reason to change
|
|
87
|
-
- [ ] \`close_cycle\` reports no blocking gate failures
|
|
88
|
-
|
|
89
|
-
### Session Close
|
|
90
|
-
|
|
91
|
-
Before ending this session:
|
|
92
|
-
1. Run the full test suite — paste the summary output
|
|
93
|
-
2. Update Status.md: what was completed, current state, next steps
|
|
94
|
-
3. If a non-obvious architectural decision was made: write an ADR in docs/adrs/
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
\`files_created\`: []
|
|
98
|
-
\`next_steps\`: ["Run check_cascade to verify cascade is still complete after this session"]
|
|
35
|
+
const content = `# Initial Implementation Session Prompt
|
|
36
|
+
> Generated by ForgeCraft \`check_cascade\` on cascade completion.
|
|
37
|
+
> Delete this file after the first implementation session begins — it is a one-time bootstrap.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Context Load Order
|
|
42
|
+
|
|
43
|
+
Load these artifacts **before** issuing the implementation prompt:
|
|
44
|
+
|
|
45
|
+
${contextBlock || "- (No derived artifacts found — run setup_project first)"}
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Implementation Prompt
|
|
50
|
+
|
|
51
|
+
*(Paste everything below this line to the AI assistant)*
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Task
|
|
56
|
+
|
|
57
|
+
You are starting the first implementation session for **${projectName}**.
|
|
58
|
+
${tagLine}
|
|
59
|
+
Read the PRD and use-cases, then implement the first feature end-to-end following
|
|
60
|
+
the architectural constitution. Begin with the domain layer (entities + port interfaces),
|
|
61
|
+
then the service layer, then the API/CLI adapter. Apply TDD throughout — write the test
|
|
62
|
+
first, then the implementation. Do not proceed to the next layer until tests pass.
|
|
63
|
+
|
|
64
|
+
### Scope
|
|
65
|
+
|
|
66
|
+
- Implement the primary use case (UC-001) completely before touching UC-002 or UC-003.
|
|
67
|
+
- Infrastructure setup (DB, config, DI container) is in scope only as required by UC-001.
|
|
68
|
+
- Do not stub or mock domain logic — implement it fully.
|
|
69
|
+
|
|
70
|
+
### Execution Loop
|
|
71
|
+
|
|
72
|
+
1. Read docs/PRD.md → identify UC-001 domain entities and port interfaces
|
|
73
|
+
2. Write failing tests for the domain layer
|
|
74
|
+
3. Implement domain layer until tests pass
|
|
75
|
+
4. Write failing tests for the service layer
|
|
76
|
+
5. Implement service layer until tests pass
|
|
77
|
+
6. Write failing integration/API tests
|
|
78
|
+
7. Implement API/CLI adapter until tests pass
|
|
79
|
+
8. Run \`check_cascade\` and \`close_cycle\` before committing
|
|
80
|
+
|
|
81
|
+
### Acceptance Criteria
|
|
82
|
+
|
|
83
|
+
- [ ] UC-001 is fully implemented and tested (unit + integration)
|
|
84
|
+
- [ ] All tests pass with ≥80% coverage
|
|
85
|
+
- [ ] No circular imports (run layer check)
|
|
86
|
+
- [ ] SOLID principles applied — each class has a single reason to change
|
|
87
|
+
- [ ] \`close_cycle\` reports no blocking gate failures
|
|
88
|
+
|
|
89
|
+
### Session Close
|
|
90
|
+
|
|
91
|
+
Before ending this session:
|
|
92
|
+
1. Run the full test suite — paste the summary output
|
|
93
|
+
2. Update Status.md: what was completed, current state, next steps
|
|
94
|
+
3. If a non-obvious architectural decision was made: write an ADR in docs/adrs/
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
\`files_created\`: []
|
|
98
|
+
\`next_steps\`: ["Run check_cascade to verify cascade is still complete after this session"]
|
|
99
99
|
`;
|
|
100
100
|
mkdirSync(join(projectDir, "docs"), { recursive: true });
|
|
101
101
|
writeFileSync(outputPath, content, "utf-8");
|
|
@@ -66,6 +66,9 @@ export declare function checkDiagrams(projectDir: string): CascadeStep;
|
|
|
66
66
|
/**
|
|
67
67
|
* Step 3: Architectural constitution — the operative grammar.
|
|
68
68
|
*
|
|
69
|
+
* Also checks .claude/core.md for declared-line-limit violations and includes
|
|
70
|
+
* content for the calling AI to evaluate for LLM prompt contamination.
|
|
71
|
+
*
|
|
69
72
|
* @param projectDir - Absolute project root
|
|
70
73
|
* @returns Cascade step result
|
|
71
74
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-cascade-steps.d.ts","sourceRoot":"","sources":["../../src/tools/check-cascade-steps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAID,eAAO,MAAM,kBAAkB,0HAOrB,CAAC;AAEX,eAAO,MAAM,qBAAqB,8GAMxB,CAAC;AAEX,eAAO,MAAM,QAAQ,oCAAqC,CAAC;AAE3D,eAAO,MAAM,cAAc,sEAIjB,CAAC;AAEX,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,uEAAuE;AACvE,eAAO,MAAM,mCAAmC,yIAStC,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,oGAOvB,CAAC;AAIX;;;;;;GAMG;AACH,wBAAgB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"check-cascade-steps.d.ts","sourceRoot":"","sources":["../../src/tools/check-cascade-steps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAID,eAAO,MAAM,kBAAkB,0HAOrB,CAAC;AAEX,eAAO,MAAM,qBAAqB,8GAMxB,CAAC;AAEX,eAAO,MAAM,QAAQ,oCAAqC,CAAC;AAE3D,eAAO,MAAM,cAAc,sEAIjB,CAAC;AAEX,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,uEAAuE;AACvE,eAAO,MAAM,mCAAmC,yIAStC,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,oGAOvB,CAAC;AAIX;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,GACjB,gBAAgB,GAAG,IAAI,CAQzB;AAID;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/C;AAID;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0B5E;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAmB3E;AAID;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAmDnE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAyD7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAyGjE"}
|
|
@@ -105,10 +105,14 @@ export function findFunctionalSpecFallback(projectDir) {
|
|
|
105
105
|
if (matchCount >= 2)
|
|
106
106
|
return relPath;
|
|
107
107
|
}
|
|
108
|
-
catch {
|
|
108
|
+
catch {
|
|
109
|
+
/* skip */
|
|
110
|
+
}
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
|
-
catch {
|
|
113
|
+
catch {
|
|
114
|
+
/* skip */
|
|
115
|
+
}
|
|
112
116
|
return null;
|
|
113
117
|
}
|
|
114
118
|
/**
|
|
@@ -131,10 +135,14 @@ export function detectUnsafeDeserializationCast(projectDir) {
|
|
|
131
135
|
if (/(?:JSON\.parse|yaml\.load)\([^)]+\)\s+as\s+\w/i.test(content))
|
|
132
136
|
return true;
|
|
133
137
|
}
|
|
134
|
-
catch {
|
|
138
|
+
catch {
|
|
139
|
+
/* skip */
|
|
140
|
+
}
|
|
135
141
|
}
|
|
136
142
|
}
|
|
137
|
-
catch {
|
|
143
|
+
catch {
|
|
144
|
+
/* skip */
|
|
145
|
+
}
|
|
138
146
|
return false;
|
|
139
147
|
}
|
|
140
148
|
// ── Step Checkers 1-3 ────────────────────────────────────────────────
|
|
@@ -155,14 +163,18 @@ export function checkFunctionalSpec(projectDir) {
|
|
|
155
163
|
const fallback = findFunctionalSpecFallback(projectDir);
|
|
156
164
|
if (fallback) {
|
|
157
165
|
return {
|
|
158
|
-
step: 1,
|
|
166
|
+
step: 1,
|
|
167
|
+
name: "Functional Specification",
|
|
168
|
+
status: "WARN",
|
|
159
169
|
detail: `Functional spec found at ${fallback}. Consider renaming to docs/PRD.md for standard compliance.`,
|
|
160
170
|
action: `Rename ${fallback} to docs/PRD.md or docs/TechSpec.md for standard tooling compatibility.`,
|
|
161
171
|
questions: [],
|
|
162
172
|
};
|
|
163
173
|
}
|
|
164
174
|
return {
|
|
165
|
-
step: 1,
|
|
175
|
+
step: 1,
|
|
176
|
+
name: "Functional Specification",
|
|
177
|
+
status: "FAIL",
|
|
166
178
|
detail: "No functional specification found. The cascade has no axiom set.",
|
|
167
179
|
action: "Create docs/PRD.md or docs/TechSpec.md: what the system does, for whom, and what constitutes success.",
|
|
168
180
|
questions: STEP_QUESTIONS,
|
|
@@ -171,13 +183,21 @@ export function checkFunctionalSpec(projectDir) {
|
|
|
171
183
|
const content = readFileSync(join(projectDir, found), "utf-8");
|
|
172
184
|
if (isStub(content)) {
|
|
173
185
|
return {
|
|
174
|
-
step: 1,
|
|
186
|
+
step: 1,
|
|
187
|
+
name: "Functional Specification",
|
|
188
|
+
status: "STUB",
|
|
175
189
|
detail: `Found ${found} but it contains unfilled template markers. Fill in the spec before continuing.`,
|
|
176
190
|
action: `Open ${found} and answer the questions below to complete it.`,
|
|
177
191
|
questions: STEP_QUESTIONS,
|
|
178
192
|
};
|
|
179
193
|
}
|
|
180
|
-
return {
|
|
194
|
+
return {
|
|
195
|
+
step: 1,
|
|
196
|
+
name: "Functional Specification",
|
|
197
|
+
status: "PASS",
|
|
198
|
+
detail: `Found: ${found}`,
|
|
199
|
+
questions: [],
|
|
200
|
+
};
|
|
181
201
|
}
|
|
182
202
|
/**
|
|
183
203
|
* Step 2: Architecture + C4 diagrams.
|
|
@@ -194,7 +214,9 @@ export function checkDiagrams(projectDir) {
|
|
|
194
214
|
const diagramsDir = join(projectDir, "docs/diagrams");
|
|
195
215
|
if (!existsSync(diagramsDir)) {
|
|
196
216
|
return {
|
|
197
|
-
step: 2,
|
|
217
|
+
step: 2,
|
|
218
|
+
name: "Architecture Diagrams",
|
|
219
|
+
status: "FAIL",
|
|
198
220
|
detail: "docs/diagrams/ does not exist.",
|
|
199
221
|
action: "Create docs/diagrams/ and add a Mermaid C4 context diagram (docs/diagrams/c4-context.md).",
|
|
200
222
|
questions: STEP_QUESTIONS,
|
|
@@ -203,7 +225,9 @@ export function checkDiagrams(projectDir) {
|
|
|
203
225
|
const files = readdirSync(diagramsDir).filter((f) => /\.(md|mermaid|puml|svg|png)$/i.test(f));
|
|
204
226
|
if (files.length === 0) {
|
|
205
227
|
return {
|
|
206
|
-
step: 2,
|
|
228
|
+
step: 2,
|
|
229
|
+
name: "Architecture Diagrams",
|
|
230
|
+
status: "WARN",
|
|
207
231
|
detail: "docs/diagrams/ exists but contains no diagram files.",
|
|
208
232
|
action: "Add docs/diagrams/c4-context.md with a Mermaid C4 context or container diagram.",
|
|
209
233
|
questions: STEP_QUESTIONS,
|
|
@@ -219,14 +243,18 @@ export function checkDiagrams(projectDir) {
|
|
|
219
243
|
});
|
|
220
244
|
if (stubFile) {
|
|
221
245
|
return {
|
|
222
|
-
step: 2,
|
|
246
|
+
step: 2,
|
|
247
|
+
name: "Architecture Diagrams",
|
|
248
|
+
status: "STUB",
|
|
223
249
|
detail: `docs/diagrams/${stubFile} contains unfilled template markers. Fill in the diagram before continuing.`,
|
|
224
250
|
action: `Open docs/diagrams/${stubFile} and answer the questions below to complete it.`,
|
|
225
251
|
questions: STEP_QUESTIONS,
|
|
226
252
|
};
|
|
227
253
|
}
|
|
228
254
|
return {
|
|
229
|
-
step: 2,
|
|
255
|
+
step: 2,
|
|
256
|
+
name: "Architecture Diagrams",
|
|
257
|
+
status: "PASS",
|
|
230
258
|
detail: `${files.length} diagram file(s) in docs/diagrams/ (${files.join(", ")})`,
|
|
231
259
|
questions: [],
|
|
232
260
|
};
|
|
@@ -234,6 +262,9 @@ export function checkDiagrams(projectDir) {
|
|
|
234
262
|
/**
|
|
235
263
|
* Step 3: Architectural constitution — the operative grammar.
|
|
236
264
|
*
|
|
265
|
+
* Also checks .claude/core.md for declared-line-limit violations and includes
|
|
266
|
+
* content for the calling AI to evaluate for LLM prompt contamination.
|
|
267
|
+
*
|
|
237
268
|
* @param projectDir - Absolute project root
|
|
238
269
|
* @returns Cascade step result
|
|
239
270
|
*/
|
|
@@ -241,7 +272,9 @@ export function checkConstitution(projectDir) {
|
|
|
241
272
|
const foundPath = CONSTITUTION_PATHS.find((p) => existsSync(join(projectDir, p)));
|
|
242
273
|
if (!foundPath) {
|
|
243
274
|
return {
|
|
244
|
-
step: 3,
|
|
275
|
+
step: 3,
|
|
276
|
+
name: "Architectural Constitution",
|
|
277
|
+
status: "FAIL",
|
|
245
278
|
detail: "No AI assistant instruction file found (CLAUDE.md, AGENTS.md, etc.).",
|
|
246
279
|
action: "Run `setup_project` or `forgecraft scaffold` to generate CLAUDE.md.",
|
|
247
280
|
questions: [],
|
|
@@ -250,14 +283,70 @@ export function checkConstitution(projectDir) {
|
|
|
250
283
|
const lines = readFileSync(join(projectDir, foundPath), "utf-8").split("\n").length;
|
|
251
284
|
if (lines > CONSTITUTION_LINE_LIMIT) {
|
|
252
285
|
return {
|
|
253
|
-
step: 3,
|
|
286
|
+
step: 3,
|
|
287
|
+
name: "Architectural Constitution",
|
|
288
|
+
status: "WARN",
|
|
254
289
|
detail: `${foundPath} found (${lines} lines) — exceeds the ${CONSTITUTION_LINE_LIMIT}-line threshold.`,
|
|
255
290
|
action: "Run `refresh_project` with tier: core to compress. An oversized constitution dilutes AI attention on every turn.",
|
|
256
291
|
questions: [],
|
|
257
292
|
};
|
|
258
293
|
}
|
|
294
|
+
// Secondary check: .claude/core.md quality
|
|
295
|
+
const coreMdPath = join(projectDir, ".claude", "core.md");
|
|
296
|
+
if (existsSync(coreMdPath)) {
|
|
297
|
+
const coreContent = readFileSync(coreMdPath, "utf-8");
|
|
298
|
+
const coreLines = coreContent.split("\n");
|
|
299
|
+
// Detect a declared "Hard limit: N lines" in the file
|
|
300
|
+
const limitMatch = coreContent.match(/(?:hard limit|line limit):\s*(\d+)\s*lines?/i);
|
|
301
|
+
const declaredLimit = limitMatch ? parseInt(limitMatch[1], 10) : null;
|
|
302
|
+
const limitViolated = declaredLimit !== null && coreLines.length > declaredLimit;
|
|
303
|
+
// Fast-path contamination heuristic: obvious LLM instruction patterns
|
|
304
|
+
const PROMPT_PATTERNS = [
|
|
305
|
+
/you are\b/i,
|
|
306
|
+
/the user has answered/i,
|
|
307
|
+
/respond (?:with|to)/i,
|
|
308
|
+
/your (?:task|job|role) is/i,
|
|
309
|
+
/\bassistant:\s/i,
|
|
310
|
+
/\bsystem:\s/i,
|
|
311
|
+
/confirmatory questions/i,
|
|
312
|
+
];
|
|
313
|
+
const suspiciousLine = coreLines.find((l) => PROMPT_PATTERNS.some((p) => p.test(l)));
|
|
314
|
+
if (limitViolated || suspiciousLine) {
|
|
315
|
+
const snippet = coreLines.slice(0, 60).join("\n");
|
|
316
|
+
const issues = [];
|
|
317
|
+
if (limitViolated) {
|
|
318
|
+
issues.push(`⚠️ .claude/core.md has ${coreLines.length} lines but declares "Hard limit: ${declaredLimit} lines" (exceeded by ${coreLines.length - declaredLimit}).`);
|
|
319
|
+
}
|
|
320
|
+
if (suspiciousLine) {
|
|
321
|
+
issues.push(`⚠️ .claude/core.md may contain LLM prompt text (not project invariants). Flagged line: "${suspiciousLine.trim().slice(0, 80)}"`);
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
step: 3,
|
|
325
|
+
name: "Architectural Constitution",
|
|
326
|
+
status: "WARN",
|
|
327
|
+
detail: [
|
|
328
|
+
`${foundPath} (${lines} lines) ✓`,
|
|
329
|
+
"",
|
|
330
|
+
...issues,
|
|
331
|
+
"",
|
|
332
|
+
"Review .claude/core.md below for LLM prompt contamination — this file must contain",
|
|
333
|
+
"project invariants only, not instructions intended for an AI assistant:",
|
|
334
|
+
"",
|
|
335
|
+
"```",
|
|
336
|
+
snippet,
|
|
337
|
+
"```",
|
|
338
|
+
].join("\n"),
|
|
339
|
+
action: "Remove LLM prompt instructions from .claude/core.md. " +
|
|
340
|
+
"Only project-specific invariants, architectural constraints, and naming conventions belong here. " +
|
|
341
|
+
"Respect the declared line limit.",
|
|
342
|
+
questions: [],
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
}
|
|
259
346
|
return {
|
|
260
|
-
step: 3,
|
|
347
|
+
step: 3,
|
|
348
|
+
name: "Architectural Constitution",
|
|
349
|
+
status: "PASS",
|
|
261
350
|
detail: `${foundPath} (${lines} lines) — within the ${CONSTITUTION_LINE_LIMIT}-line threshold`,
|
|
262
351
|
questions: [],
|
|
263
352
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-cascade-steps.js","sourceRoot":"","sources":["../../src/tools/check-cascade-steps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,IAAI,MAAM,SAAS,CAAC;AAc3B,wEAAwE;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW;IACX,WAAW;IACX,eAAe;IACf,iCAAiC;IACjC,gBAAgB;IAChB,aAAa;CACL,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,kBAAkB;IAClB,mBAAmB;IACnB,yBAAyB;IACzB,cAAc;CACN,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,UAAU,CAAU,CAAC;AAE3D,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB;IACnB,kBAAkB;IAClB,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,uEAAuE;AACvE,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,eAAe;IACf,YAAY;IACZ,UAAU;IACV,iBAAiB;IACjB,iBAAiB;IACjB,iBAAiB;IACjB,UAAU;IACV,YAAY;CACJ,CAAC;AAEX,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,gBAAgB;IAChB,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,SAAS;IACT,aAAa;CACL,CAAC;AAEX,yEAAyE;AAEzE;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,
|
|
1
|
+
{"version":3,"file":"check-cascade-steps.js","sourceRoot":"","sources":["../../src/tools/check-cascade-steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,20 +6,21 @@
|
|
|
6
6
|
* stateless agent given the artifact set should be able to derive any valid
|
|
7
7
|
* implementation state without further human direction.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Six-step cascade (§6.2):
|
|
10
10
|
* 1. Functional specification — user-facing behavior and domain model
|
|
11
11
|
* 2. Architecture + C4 diagrams — layered structure and component map
|
|
12
12
|
* 3. Architectural constitution — operative grammar (CLAUDE.md / equivalent)
|
|
13
13
|
* 4. ADRs — non-obvious decisions recorded before impl
|
|
14
14
|
* 5. Use cases + behavioral contracts / Status.md next steps
|
|
15
|
+
* 6. Schema definitions — vocabulary of the system (DB, API, event)
|
|
15
16
|
*/
|
|
16
17
|
import { z } from "zod";
|
|
17
18
|
import type { CascadeDecision } from "../shared/types.js";
|
|
18
19
|
import { CascadeStep as _CascadeStep } from "./check-cascade-steps.js";
|
|
19
20
|
export type { CascadeStep } from "./check-cascade-steps.js";
|
|
20
21
|
export { isStub, loadForgeCraftConfig, CONSTITUTION_PATHS, FUNCTIONAL_SPEC_PATHS, ADR_DIRS, USE_CASE_PATHS, CONSTITUTION_LINE_LIMIT, PYTHON_PACKAGE_FILES, checkFunctionalSpec, checkDiagrams, checkConstitution, detectUnsafeDeserializationCast, findFunctionalSpecFallback, } from "./check-cascade-steps.js";
|
|
21
|
-
export { findBehavioralContractFallback, detectPlaceholderTestScript, checkAdrs, checkBehavioralContracts, } from "./check-cascade-contracts.js";
|
|
22
|
-
export { writeInitialSessionPromptIfAbsent, formatReport } from "./check-cascade-report.js";
|
|
22
|
+
export { findBehavioralContractFallback, detectPlaceholderTestScript, checkAdrs, checkBehavioralContracts, checkSchemaDefinitions, SCHEMA_ARTIFACT_PATHS, } from "./check-cascade-contracts.js";
|
|
23
|
+
export { writeInitialSessionPromptIfAbsent, formatReport, } from "./check-cascade-report.js";
|
|
23
24
|
export declare const checkCascadeSchema: z.ZodObject<{
|
|
24
25
|
project_dir: z.ZodString;
|
|
25
26
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-cascade.d.ts","sourceRoot":"","sources":["../../src/tools/check-cascade.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"check-cascade.d.ts","sourceRoot":"","sources":["../../src/tools/check-cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,WAAW,IAAI,YAAY,EAK5B,MAAM,0BAA0B,CAAC;AAWlC,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,MAAM,EACN,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,EAC3B,SAAS,EACT,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,iCAAiC,EACjC,YAAY,GACb,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,kBAAkB;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAInE;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,EAAE,CAW1E;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,SAAS,eAAe,EAAO,GACzC,YAAY,EAAE,CAYhB;AAED,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlE,CAAC;AAkCF;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAuB7D;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAIzE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CA6B7E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBpD"}
|
|
@@ -6,23 +6,24 @@
|
|
|
6
6
|
* stateless agent given the artifact set should be able to derive any valid
|
|
7
7
|
* implementation state without further human direction.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Six-step cascade (§6.2):
|
|
10
10
|
* 1. Functional specification — user-facing behavior and domain model
|
|
11
11
|
* 2. Architecture + C4 diagrams — layered structure and component map
|
|
12
12
|
* 3. Architectural constitution — operative grammar (CLAUDE.md / equivalent)
|
|
13
13
|
* 4. ADRs — non-obvious decisions recorded before impl
|
|
14
14
|
* 5. Use cases + behavioral contracts / Status.md next steps
|
|
15
|
+
* 6. Schema definitions — vocabulary of the system (DB, API, event)
|
|
15
16
|
*/
|
|
16
17
|
import { z } from "zod";
|
|
17
18
|
import { resolve, join } from "node:path";
|
|
18
19
|
import { existsSync, readFileSync } from "node:fs";
|
|
19
20
|
import yaml from "js-yaml";
|
|
20
21
|
import { checkFunctionalSpec, checkDiagrams, checkConstitution, } from "./check-cascade-steps.js";
|
|
21
|
-
import { checkAdrs, checkBehavioralContracts, } from "./check-cascade-contracts.js";
|
|
22
|
+
import { checkAdrs, checkBehavioralContracts, checkSchemaDefinitions, } from "./check-cascade-contracts.js";
|
|
22
23
|
import { writeInitialSessionPromptIfAbsent, formatReport, } from "./check-cascade-report.js";
|
|
23
24
|
export { isStub, loadForgeCraftConfig, CONSTITUTION_PATHS, FUNCTIONAL_SPEC_PATHS, ADR_DIRS, USE_CASE_PATHS, CONSTITUTION_LINE_LIMIT, PYTHON_PACKAGE_FILES, checkFunctionalSpec, checkDiagrams, checkConstitution, detectUnsafeDeserializationCast, findFunctionalSpecFallback, } from "./check-cascade-steps.js";
|
|
24
|
-
export { findBehavioralContractFallback, detectPlaceholderTestScript, checkAdrs, checkBehavioralContracts, } from "./check-cascade-contracts.js";
|
|
25
|
-
export { writeInitialSessionPromptIfAbsent, formatReport } from "./check-cascade-report.js";
|
|
25
|
+
export { findBehavioralContractFallback, detectPlaceholderTestScript, checkAdrs, checkBehavioralContracts, checkSchemaDefinitions, SCHEMA_ARTIFACT_PATHS, } from "./check-cascade-contracts.js";
|
|
26
|
+
export { writeInitialSessionPromptIfAbsent, formatReport, } from "./check-cascade-report.js";
|
|
26
27
|
// ── Schema ───────────────────────────────────────────────────────────
|
|
27
28
|
export const checkCascadeSchema = z.object({
|
|
28
29
|
project_dir: z
|
|
@@ -64,6 +65,7 @@ export function runCascadeChecks(projectDir, decisions = []) {
|
|
|
64
65
|
checkConstitution(projectDir),
|
|
65
66
|
checkAdrs(projectDir),
|
|
66
67
|
checkBehavioralContracts(projectDir),
|
|
68
|
+
checkSchemaDefinitions(projectDir),
|
|
67
69
|
];
|
|
68
70
|
if (decisions.length === 0)
|
|
69
71
|
return rawSteps;
|
|
@@ -76,6 +78,7 @@ export const STEP_TO_DECISION_NAME = {
|
|
|
76
78
|
3: "constitution",
|
|
77
79
|
4: "adrs",
|
|
78
80
|
5: "behavioral_contracts",
|
|
81
|
+
6: "schema_definitions",
|
|
79
82
|
};
|
|
80
83
|
/**
|
|
81
84
|
* Apply a cascade decision to a step result.
|
|
@@ -91,7 +94,9 @@ function applyDecision(step, decisions) {
|
|
|
91
94
|
return step;
|
|
92
95
|
if (decision.required)
|
|
93
96
|
return step;
|
|
94
|
-
if (step.status === "FAIL" ||
|
|
97
|
+
if (step.status === "FAIL" ||
|
|
98
|
+
step.status === "STUB" ||
|
|
99
|
+
step.status === "WARN") {
|
|
95
100
|
return {
|
|
96
101
|
step: step.step,
|
|
97
102
|
name: step.name,
|
|
@@ -119,7 +124,12 @@ export async function checkCascadeHandler(args) {
|
|
|
119
124
|
writeInitialSessionPromptIfAbsent(projectDir);
|
|
120
125
|
}
|
|
121
126
|
return {
|
|
122
|
-
content: [
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: "text",
|
|
130
|
+
text: formatReport(steps, passingCount, failingCount, noCascadeConfig),
|
|
131
|
+
},
|
|
132
|
+
],
|
|
123
133
|
};
|
|
124
134
|
}
|
|
125
135
|
// ── Exported Helpers ─────────────────────────────────────────────────
|
|
@@ -171,12 +181,20 @@ export function buildGuidedRemediation(steps) {
|
|
|
171
181
|
*/
|
|
172
182
|
export function getArtifactPath(step) {
|
|
173
183
|
switch (step) {
|
|
174
|
-
case 1:
|
|
175
|
-
|
|
176
|
-
case
|
|
177
|
-
|
|
178
|
-
case
|
|
179
|
-
|
|
184
|
+
case 1:
|
|
185
|
+
return "docs/PRD.md";
|
|
186
|
+
case 2:
|
|
187
|
+
return "docs/diagrams/c4-context.md";
|
|
188
|
+
case 3:
|
|
189
|
+
return "CLAUDE.md";
|
|
190
|
+
case 4:
|
|
191
|
+
return "docs/adrs/ADR-0001.md";
|
|
192
|
+
case 5:
|
|
193
|
+
return "docs/use-cases.md";
|
|
194
|
+
case 6:
|
|
195
|
+
return "openapi.yaml";
|
|
196
|
+
default:
|
|
197
|
+
return "docs/";
|
|
180
198
|
}
|
|
181
199
|
}
|
|
182
200
|
//# sourceMappingURL=check-cascade.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-cascade.js","sourceRoot":"","sources":["../../src/tools/check-cascade.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"check-cascade.js","sourceRoot":"","sources":["../../src/tools/check-cascade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* check_derivation_chain tool handler.
|
|
3
|
+
*
|
|
4
|
+
* Verifies that spec artifacts form a coherent derivation chain:
|
|
5
|
+
* PRD → Use Cases → ADRs → L2 Probes → L3/L4 Probes → Gates
|
|
6
|
+
*
|
|
7
|
+
* Checks:
|
|
8
|
+
* 1. PRD / spec artifact present
|
|
9
|
+
* 2. Use cases present and well-formed
|
|
10
|
+
* 3. Each UC has a corresponding L2 probe file
|
|
11
|
+
* 4. Each L2 probe file references its UC ID
|
|
12
|
+
* 5. ADRs exist with meaningful quality (Accepted vs Retroactive ratio)
|
|
13
|
+
* 6. Cross-references: UCs that mention ADR IDs, ADRs that mention UC IDs
|
|
14
|
+
* 7. Gates: at least some reference a UC or ADR ID
|
|
15
|
+
*
|
|
16
|
+
* Emits a chain score (0-100%) and a list of specific breaks.
|
|
17
|
+
* Read-only — no files written.
|
|
18
|
+
*/
|
|
19
|
+
import type { ToolResult } from "../shared/types.js";
|
|
20
|
+
export interface ChainLink {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly score: number;
|
|
23
|
+
readonly detail: string;
|
|
24
|
+
readonly breaks: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface DerivationChainReport {
|
|
27
|
+
readonly chainScore: number;
|
|
28
|
+
readonly links: ChainLink[];
|
|
29
|
+
readonly breaks: string[];
|
|
30
|
+
readonly strengths: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface CheckDerivationChainInput {
|
|
33
|
+
readonly project_dir: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function buildDerivationChainReport(projectDir: string): DerivationChainReport;
|
|
36
|
+
export declare function checkDerivationChainHandler(args: CheckDerivationChainInput): Promise<ToolResult>;
|
|
37
|
+
//# sourceMappingURL=check-derivation-chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-derivation-chain.d.ts","sourceRoot":"","sources":["../../src/tools/check-derivation-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAkZD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,GACjB,qBAAqB,CA4BvB;AAID,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,UAAU,CAAC,CA6DrB"}
|