forgecraft-mcp 0.5.1 → 1.0.1
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/README.md +247 -33
- package/dist/analyzers/anti-pattern.d.ts.map +1 -1
- package/dist/analyzers/anti-pattern.js +9 -3
- package/dist/analyzers/anti-pattern.js.map +1 -1
- package/dist/analyzers/code-probes.d.ts +19 -0
- package/dist/analyzers/code-probes.d.ts.map +1 -0
- package/dist/analyzers/code-probes.js +12 -0
- package/dist/analyzers/code-probes.js.map +1 -0
- package/dist/analyzers/completeness-helpers.d.ts +60 -0
- package/dist/analyzers/completeness-helpers.d.ts.map +1 -0
- package/dist/analyzers/completeness-helpers.js +235 -0
- package/dist/analyzers/completeness-helpers.js.map +1 -0
- package/dist/analyzers/completeness.d.ts +4 -0
- package/dist/analyzers/completeness.d.ts.map +1 -1
- package/dist/analyzers/completeness.js +28 -196
- package/dist/analyzers/completeness.js.map +1 -1
- package/dist/analyzers/folder-structure.d.ts.map +1 -1
- package/dist/analyzers/folder-structure.js +11 -2
- package/dist/analyzers/folder-structure.js.map +1 -1
- package/dist/analyzers/gs-scorer.d.ts +32 -0
- package/dist/analyzers/gs-scorer.d.ts.map +1 -0
- package/dist/analyzers/gs-scorer.js +92 -0
- package/dist/analyzers/gs-scorer.js.map +1 -0
- package/dist/analyzers/language-detector.d.ts +6 -2
- package/dist/analyzers/language-detector.d.ts.map +1 -1
- package/dist/analyzers/language-detector.js +66 -55
- package/dist/analyzers/language-detector.js.map +1 -1
- package/dist/analyzers/probes/complexity-probe.d.ts +15 -0
- package/dist/analyzers/probes/complexity-probe.d.ts.map +1 -0
- package/dist/analyzers/probes/complexity-probe.js +113 -0
- package/dist/analyzers/probes/complexity-probe.js.map +1 -0
- package/dist/analyzers/probes/coverage-probe.d.ts +19 -0
- package/dist/analyzers/probes/coverage-probe.d.ts.map +1 -0
- package/dist/analyzers/probes/coverage-probe.js +150 -0
- package/dist/analyzers/probes/coverage-probe.js.map +1 -0
- package/dist/analyzers/probes/dead-code-probe.d.ts +16 -0
- package/dist/analyzers/probes/dead-code-probe.d.ts.map +1 -0
- package/dist/analyzers/probes/dead-code-probe.js +100 -0
- package/dist/analyzers/probes/dead-code-probe.js.map +1 -0
- package/dist/analyzers/probes/index.d.ts +15 -0
- package/dist/analyzers/probes/index.d.ts.map +1 -0
- package/dist/analyzers/probes/index.js +8 -0
- package/dist/analyzers/probes/index.js.map +1 -0
- package/dist/analyzers/probes/layer-probe.d.ts +15 -0
- package/dist/analyzers/probes/layer-probe.d.ts.map +1 -0
- package/dist/analyzers/probes/layer-probe.js +161 -0
- package/dist/analyzers/probes/layer-probe.js.map +1 -0
- package/dist/analyzers/probes/loc-probe.d.ts +22 -0
- package/dist/analyzers/probes/loc-probe.d.ts.map +1 -0
- package/dist/analyzers/probes/loc-probe.js +84 -0
- package/dist/analyzers/probes/loc-probe.js.map +1 -0
- package/dist/analyzers/probes/mutation-probe.d.ts +17 -0
- package/dist/analyzers/probes/mutation-probe.d.ts.map +1 -0
- package/dist/analyzers/probes/mutation-probe.js +118 -0
- package/dist/analyzers/probes/mutation-probe.js.map +1 -0
- package/dist/analyzers/probes/tool-runner.d.ts +37 -0
- package/dist/analyzers/probes/tool-runner.d.ts.map +1 -0
- package/dist/analyzers/probes/tool-runner.js +108 -0
- package/dist/analyzers/probes/tool-runner.js.map +1 -0
- package/dist/analyzers/scorers/auditable-scorer.d.ts +10 -0
- package/dist/analyzers/scorers/auditable-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/auditable-scorer.js +57 -0
- package/dist/analyzers/scorers/auditable-scorer.js.map +1 -0
- package/dist/analyzers/scorers/bounded-scorer.d.ts +10 -0
- package/dist/analyzers/scorers/bounded-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/bounded-scorer.js +28 -0
- package/dist/analyzers/scorers/bounded-scorer.js.map +1 -0
- package/dist/analyzers/scorers/composable-scorer.d.ts +13 -0
- package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/composable-scorer.js +51 -0
- package/dist/analyzers/scorers/composable-scorer.js.map +1 -0
- package/dist/analyzers/scorers/defended-scorer.d.ts +10 -0
- package/dist/analyzers/scorers/defended-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/defended-scorer.js +39 -0
- package/dist/analyzers/scorers/defended-scorer.js.map +1 -0
- package/dist/analyzers/scorers/executable-scorer.d.ts +12 -0
- package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/executable-scorer.js +51 -0
- package/dist/analyzers/scorers/executable-scorer.js.map +1 -0
- package/dist/analyzers/scorers/scorer-utils.d.ts +38 -0
- package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -0
- package/dist/analyzers/scorers/scorer-utils.js +91 -0
- package/dist/analyzers/scorers/scorer-utils.js.map +1 -0
- package/dist/analyzers/scorers/self-describing-scorer.d.ts +13 -0
- package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/self-describing-scorer.js +51 -0
- package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -0
- package/dist/analyzers/scorers/verifiable-scorer.d.ts +10 -0
- package/dist/analyzers/scorers/verifiable-scorer.d.ts.map +1 -0
- package/dist/analyzers/scorers/verifiable-scorer.js +33 -0
- package/dist/analyzers/scorers/verifiable-scorer.js.map +1 -0
- package/dist/artifacts/adr.d.ts +52 -0
- package/dist/artifacts/adr.d.ts.map +1 -0
- package/dist/artifacts/adr.js +158 -0
- package/dist/artifacts/adr.js.map +1 -0
- package/dist/artifacts/claude-instructions.d.ts +50 -0
- package/dist/artifacts/claude-instructions.d.ts.map +1 -0
- package/dist/artifacts/claude-instructions.js +147 -0
- package/dist/artifacts/claude-instructions.js.map +1 -0
- package/dist/artifacts/commit-history.d.ts +66 -0
- package/dist/artifacts/commit-history.d.ts.map +1 -0
- package/dist/artifacts/commit-history.js +121 -0
- package/dist/artifacts/commit-history.js.map +1 -0
- package/dist/artifacts/commit-hooks.d.ts +51 -0
- package/dist/artifacts/commit-hooks.d.ts.map +1 -0
- package/dist/artifacts/commit-hooks.js +154 -0
- package/dist/artifacts/commit-hooks.js.map +1 -0
- package/dist/artifacts/index.d.ts +23 -0
- package/dist/artifacts/index.d.ts.map +1 -0
- package/dist/artifacts/index.js +23 -0
- package/dist/artifacts/index.js.map +1 -0
- package/dist/artifacts/schema.d.ts +49 -0
- package/dist/artifacts/schema.d.ts.map +1 -0
- package/dist/artifacts/schema.js +99 -0
- package/dist/artifacts/schema.js.map +1 -0
- package/dist/cli/args.d.ts +43 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +73 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/assistant-detector.d.ts +28 -0
- package/dist/cli/assistant-detector.d.ts.map +1 -0
- package/dist/cli/assistant-detector.js +107 -0
- package/dist/cli/assistant-detector.js.map +1 -0
- package/dist/cli/commands.d.ts +54 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +273 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +8 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +54 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +13 -274
- package/dist/cli.js.map +1 -1
- package/dist/core/index.d.ts +23 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/properties.d.ts +210 -0
- package/dist/core/properties.d.ts.map +1 -0
- package/dist/core/properties.js +14 -0
- package/dist/core/properties.js.map +1 -0
- package/dist/http-server.d.ts +13 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +136 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -3
- package/dist/index.js.map +1 -1
- package/dist/registry/composer-helpers.d.ts +41 -0
- package/dist/registry/composer-helpers.d.ts.map +1 -0
- package/dist/registry/composer-helpers.js +69 -0
- package/dist/registry/composer-helpers.js.map +1 -0
- package/dist/registry/composer.d.ts +5 -1
- package/dist/registry/composer.d.ts.map +1 -1
- package/dist/registry/composer.js +15 -63
- package/dist/registry/composer.js.map +1 -1
- package/dist/registry/loader-merge.d.ts +64 -0
- package/dist/registry/loader-merge.d.ts.map +1 -0
- package/dist/registry/loader-merge.js +119 -0
- package/dist/registry/loader-merge.js.map +1 -0
- package/dist/registry/loader-tag.d.ts +38 -0
- package/dist/registry/loader-tag.d.ts.map +1 -0
- package/dist/registry/loader-tag.js +170 -0
- package/dist/registry/loader-tag.js.map +1 -0
- package/dist/registry/loader.d.ts +9 -4
- package/dist/registry/loader.d.ts.map +1 -1
- package/dist/registry/loader.js +15 -209
- package/dist/registry/loader.js.map +1 -1
- package/dist/registry/remote-gates.d.ts +43 -0
- package/dist/registry/remote-gates.d.ts.map +1 -0
- package/dist/registry/remote-gates.js +80 -0
- package/dist/registry/remote-gates.js.map +1 -0
- package/dist/registry/renderer-skeletons.d.ts +29 -0
- package/dist/registry/renderer-skeletons.d.ts.map +1 -0
- package/dist/registry/renderer-skeletons.js +126 -0
- package/dist/registry/renderer-skeletons.js.map +1 -0
- package/dist/registry/renderer-template.d.ts +17 -0
- package/dist/registry/renderer-template.d.ts.map +1 -0
- package/dist/registry/renderer-template.js +92 -0
- package/dist/registry/renderer-template.js.map +1 -0
- package/dist/registry/renderer-types.d.ts +29 -0
- package/dist/registry/renderer-types.d.ts.map +1 -0
- package/dist/registry/renderer-types.js +8 -0
- package/dist/registry/renderer-types.js.map +1 -0
- package/dist/registry/renderer.d.ts +9 -38
- package/dist/registry/renderer.d.ts.map +1 -1
- package/dist/registry/renderer.js +16 -206
- package/dist/registry/renderer.js.map +1 -1
- package/dist/registry/sentinel-domain-map.d.ts +13 -0
- package/dist/registry/sentinel-domain-map.d.ts.map +1 -0
- package/dist/registry/sentinel-domain-map.js +179 -0
- package/dist/registry/sentinel-domain-map.js.map +1 -0
- package/dist/registry/sentinel-renderer.d.ts +36 -0
- package/dist/registry/sentinel-renderer.d.ts.map +1 -0
- package/dist/registry/sentinel-renderer.js +130 -0
- package/dist/registry/sentinel-renderer.js.map +1 -0
- package/dist/shared/cnt-health.d.ts +44 -0
- package/dist/shared/cnt-health.d.ts.map +1 -0
- package/dist/shared/cnt-health.js +214 -0
- package/dist/shared/cnt-health.js.map +1 -0
- package/dist/shared/config.d.ts +15 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +54 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/drift-detector.d.ts +25 -0
- package/dist/shared/drift-detector.d.ts.map +1 -0
- package/dist/shared/drift-detector.js +118 -0
- package/dist/shared/drift-detector.js.map +1 -0
- package/dist/shared/exceptions.d.ts +55 -0
- package/dist/shared/exceptions.d.ts.map +1 -0
- package/dist/shared/exceptions.js +83 -0
- package/dist/shared/exceptions.js.map +1 -0
- package/dist/shared/filesystem.d.ts +12 -5
- package/dist/shared/filesystem.d.ts.map +1 -1
- package/dist/shared/filesystem.js +53 -33
- package/dist/shared/filesystem.js.map +1 -1
- package/dist/shared/gs-score-logger.d.ts +37 -0
- package/dist/shared/gs-score-logger.d.ts.map +1 -0
- package/dist/shared/gs-score-logger.js +72 -0
- package/dist/shared/gs-score-logger.js.map +1 -0
- package/dist/shared/project-gates-folder.d.ts +76 -0
- package/dist/shared/project-gates-folder.d.ts.map +1 -0
- package/dist/shared/project-gates-folder.js +221 -0
- package/dist/shared/project-gates-folder.js.map +1 -0
- package/dist/shared/project-gates-helpers.d.ts +59 -0
- package/dist/shared/project-gates-helpers.d.ts.map +1 -0
- package/dist/shared/project-gates-helpers.js +150 -0
- package/dist/shared/project-gates-helpers.js.map +1 -0
- package/dist/shared/project-gates.d.ts +21 -0
- package/dist/shared/project-gates.d.ts.map +1 -0
- package/dist/shared/project-gates.js +42 -0
- package/dist/shared/project-gates.js.map +1 -0
- package/dist/shared/template-resolver.d.ts +43 -0
- package/dist/shared/template-resolver.d.ts.map +1 -0
- package/dist/shared/template-resolver.js +176 -0
- package/dist/shared/template-resolver.js.map +1 -0
- package/dist/shared/types/config.d.ts +107 -0
- package/dist/shared/types/config.d.ts.map +1 -0
- package/dist/shared/types/config.js +5 -0
- package/dist/shared/types/config.js.map +1 -0
- package/dist/shared/types/gates.d.ts +220 -0
- package/dist/shared/types/gates.d.ts.map +1 -0
- package/dist/shared/types/gates.js +5 -0
- package/dist/shared/types/gates.js.map +1 -0
- package/dist/shared/types/index.d.ts +13 -0
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/shared/types/index.js +13 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/types/mcp.d.ts +57 -0
- package/dist/shared/types/mcp.d.ts.map +1 -0
- package/dist/shared/types/mcp.js +5 -0
- package/dist/shared/types/mcp.js.map +1 -0
- package/dist/shared/types/project.d.ts +169 -0
- package/dist/shared/types/project.d.ts.map +1 -0
- package/dist/shared/types/project.js +112 -0
- package/dist/shared/types/project.js.map +1 -0
- package/dist/shared/types/templates.d.ts +222 -0
- package/dist/shared/types/templates.d.ts.map +1 -0
- package/dist/shared/types/templates.js +6 -0
- package/dist/shared/types/templates.js.map +1 -0
- package/dist/shared/types/tool.d.ts +42 -0
- package/dist/shared/types/tool.d.ts.map +1 -0
- package/dist/shared/types/tool.js +5 -0
- package/dist/shared/types/tool.js.map +1 -0
- package/dist/shared/types/verification.d.ts +161 -0
- package/dist/shared/types/verification.d.ts.map +1 -0
- package/dist/shared/types/verification.js +5 -0
- package/dist/shared/types/verification.js.map +1 -0
- package/dist/shared/types/verify.d.ts +43 -0
- package/dist/shared/types/verify.d.ts.map +1 -0
- package/dist/shared/types/verify.js +5 -0
- package/dist/shared/types/verify.js.map +1 -0
- package/dist/shared/types.d.ts +3 -353
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +3 -104
- package/dist/shared/types.js.map +1 -1
- package/dist/tools/add-hook.d.ts +2 -2
- package/dist/tools/advice-registry.d.ts +27 -0
- package/dist/tools/advice-registry.d.ts.map +1 -0
- package/dist/tools/advice-registry.js +212 -0
- package/dist/tools/advice-registry.js.map +1 -0
- package/dist/tools/advice.d.ts +33 -0
- package/dist/tools/advice.d.ts.map +1 -0
- package/dist/tools/advice.js +112 -0
- package/dist/tools/advice.js.map +1 -0
- package/dist/tools/audit.d.ts.map +1 -1
- package/dist/tools/audit.js +68 -6
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/cascade-defaults.d.ts +25 -0
- package/dist/tools/cascade-defaults.d.ts.map +1 -0
- package/dist/tools/cascade-defaults.js +243 -0
- package/dist/tools/cascade-defaults.js.map +1 -0
- package/dist/tools/check-cascade-contracts.d.ts +35 -0
- package/dist/tools/check-cascade-contracts.d.ts.map +1 -0
- package/dist/tools/check-cascade-contracts.js +190 -0
- package/dist/tools/check-cascade-contracts.js.map +1 -0
- package/dist/tools/check-cascade-report.d.ts +25 -0
- package/dist/tools/check-cascade-report.d.ts.map +1 -0
- package/dist/tools/check-cascade-report.js +157 -0
- package/dist/tools/check-cascade-report.js.map +1 -0
- package/dist/tools/check-cascade-steps.d.ts +73 -0
- package/dist/tools/check-cascade-steps.d.ts.map +1 -0
- package/dist/tools/check-cascade-steps.js +265 -0
- package/dist/tools/check-cascade-steps.js.map +1 -0
- package/dist/tools/check-cascade.d.ts +82 -0
- package/dist/tools/check-cascade.d.ts.map +1 -0
- package/dist/tools/check-cascade.js +182 -0
- package/dist/tools/check-cascade.js.map +1 -0
- package/dist/tools/classify.d.ts +2 -2
- package/dist/tools/close-cycle-helpers.d.ts +78 -0
- package/dist/tools/close-cycle-helpers.d.ts.map +1 -0
- package/dist/tools/close-cycle-helpers.js +194 -0
- package/dist/tools/close-cycle-helpers.js.map +1 -0
- package/dist/tools/close-cycle-versioning.d.ts +26 -0
- package/dist/tools/close-cycle-versioning.d.ts.map +1 -0
- package/dist/tools/close-cycle-versioning.js +213 -0
- package/dist/tools/close-cycle-versioning.js.map +1 -0
- package/dist/tools/close-cycle.d.ts +33 -0
- package/dist/tools/close-cycle.d.ts.map +1 -0
- package/dist/tools/close-cycle.js +187 -0
- package/dist/tools/close-cycle.js.map +1 -0
- package/dist/tools/cnt-add-node.d.ts +40 -0
- package/dist/tools/cnt-add-node.d.ts.map +1 -0
- package/dist/tools/cnt-add-node.js +145 -0
- package/dist/tools/cnt-add-node.js.map +1 -0
- package/dist/tools/contribute-gate.d.ts +34 -0
- package/dist/tools/contribute-gate.d.ts.map +1 -0
- package/dist/tools/contribute-gate.js +217 -0
- package/dist/tools/contribute-gate.js.map +1 -0
- package/dist/tools/forgecraft-dispatch-extended.d.ts +20 -0
- package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -0
- package/dist/tools/forgecraft-dispatch-extended.js +85 -0
- package/dist/tools/forgecraft-dispatch-extended.js.map +1 -0
- package/dist/tools/forgecraft-dispatch-helpers.d.ts +44 -0
- package/dist/tools/forgecraft-dispatch-helpers.d.ts.map +1 -0
- package/dist/tools/forgecraft-dispatch-helpers.js +90 -0
- package/dist/tools/forgecraft-dispatch-helpers.js.map +1 -0
- package/dist/tools/forgecraft-dispatch.d.ts +11 -0
- package/dist/tools/forgecraft-dispatch.d.ts.map +1 -0
- package/dist/tools/forgecraft-dispatch.js +188 -0
- package/dist/tools/forgecraft-dispatch.js.map +1 -0
- package/dist/tools/forgecraft-router.d.ts +25 -117
- package/dist/tools/forgecraft-router.d.ts.map +1 -1
- package/dist/tools/forgecraft-router.js +36 -285
- package/dist/tools/forgecraft-router.js.map +1 -1
- package/dist/tools/forgecraft-schema-params.d.ts +110 -0
- package/dist/tools/forgecraft-schema-params.d.ts.map +1 -0
- package/dist/tools/forgecraft-schema-params.js +156 -0
- package/dist/tools/forgecraft-schema-params.js.map +1 -0
- package/dist/tools/forgecraft-schema.d.ts +231 -0
- package/dist/tools/forgecraft-schema.d.ts.map +1 -0
- package/dist/tools/forgecraft-schema.js +235 -0
- package/dist/tools/forgecraft-schema.js.map +1 -0
- package/dist/tools/generate-adr.d.ts +49 -0
- package/dist/tools/generate-adr.d.ts.map +1 -0
- package/dist/tools/generate-adr.js +178 -0
- package/dist/tools/generate-adr.js.map +1 -0
- package/dist/tools/generate-claude-md.d.ts +10 -4
- package/dist/tools/generate-claude-md.d.ts.map +1 -1
- package/dist/tools/generate-claude-md.js +6 -2
- package/dist/tools/generate-claude-md.js.map +1 -1
- package/dist/tools/generate-diagram.d.ts +30 -0
- package/dist/tools/generate-diagram.d.ts.map +1 -0
- package/dist/tools/generate-diagram.js +249 -0
- package/dist/tools/generate-diagram.js.map +1 -0
- package/dist/tools/generate-roadmap.d.ts +33 -0
- package/dist/tools/generate-roadmap.d.ts.map +1 -0
- package/dist/tools/generate-roadmap.js +92 -0
- package/dist/tools/generate-roadmap.js.map +1 -0
- package/dist/tools/generate-session-prompt.d.ts +51 -0
- package/dist/tools/generate-session-prompt.d.ts.map +1 -0
- package/dist/tools/generate-session-prompt.js +174 -0
- package/dist/tools/generate-session-prompt.js.map +1 -0
- package/dist/tools/get-playbook.d.ts +27 -0
- package/dist/tools/get-playbook.d.ts.map +1 -0
- package/dist/tools/get-playbook.js +128 -0
- package/dist/tools/get-playbook.js.map +1 -0
- package/dist/tools/get-reference.d.ts +16 -0
- package/dist/tools/get-reference.d.ts.map +1 -1
- package/dist/tools/get-reference.js +51 -3
- package/dist/tools/get-reference.js.map +1 -1
- package/dist/tools/get-verification-strategy.d.ts +50 -0
- package/dist/tools/get-verification-strategy.d.ts.map +1 -0
- package/dist/tools/get-verification-strategy.js +224 -0
- package/dist/tools/get-verification-strategy.js.map +1 -0
- package/dist/tools/hardening-config.d.ts +45 -0
- package/dist/tools/hardening-config.d.ts.map +1 -0
- package/dist/tools/hardening-config.js +109 -0
- package/dist/tools/hardening-config.js.map +1 -0
- package/dist/tools/hardening-prompts.d.ts +51 -0
- package/dist/tools/hardening-prompts.d.ts.map +1 -0
- package/dist/tools/hardening-prompts.js +215 -0
- package/dist/tools/hardening-prompts.js.map +1 -0
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +12 -0
- package/dist/tools/list.js.map +1 -1
- package/dist/tools/metrics.d.ts +51 -0
- package/dist/tools/metrics.d.ts.map +1 -0
- package/dist/tools/metrics.js +184 -0
- package/dist/tools/metrics.js.map +1 -0
- package/dist/tools/refresh-analyzer.d.ts +57 -0
- package/dist/tools/refresh-analyzer.d.ts.map +1 -0
- package/dist/tools/refresh-analyzer.js +101 -0
- package/dist/tools/refresh-analyzer.js.map +1 -0
- package/dist/tools/refresh-output.d.ts +67 -0
- package/dist/tools/refresh-output.d.ts.map +1 -0
- package/dist/tools/refresh-output.js +224 -0
- package/dist/tools/refresh-output.js.map +1 -0
- package/dist/tools/refresh-project.d.ts +15 -0
- package/dist/tools/refresh-project.d.ts.map +1 -1
- package/dist/tools/refresh-project.js +65 -191
- package/dist/tools/refresh-project.js.map +1 -1
- package/dist/tools/registry-refresh.d.ts +34 -0
- package/dist/tools/registry-refresh.d.ts.map +1 -0
- package/dist/tools/registry-refresh.js +162 -0
- package/dist/tools/registry-refresh.js.map +1 -0
- package/dist/tools/roadmap-builder.d.ts +72 -0
- package/dist/tools/roadmap-builder.d.ts.map +1 -0
- package/dist/tools/roadmap-builder.js +199 -0
- package/dist/tools/roadmap-builder.js.map +1 -0
- package/dist/tools/scaffold-cascade.d.ts +34 -0
- package/dist/tools/scaffold-cascade.d.ts.map +1 -0
- package/dist/tools/scaffold-cascade.js +94 -0
- package/dist/tools/scaffold-cascade.js.map +1 -0
- package/dist/tools/scaffold-spec-stubs.d.ts +26 -0
- package/dist/tools/scaffold-spec-stubs.d.ts.map +1 -0
- package/dist/tools/scaffold-spec-stubs.js +69 -0
- package/dist/tools/scaffold-spec-stubs.js.map +1 -0
- package/dist/tools/scaffold-templates.d.ts +51 -0
- package/dist/tools/scaffold-templates.d.ts.map +1 -0
- package/dist/tools/scaffold-templates.js +195 -0
- package/dist/tools/scaffold-templates.js.map +1 -0
- package/dist/tools/scaffold-writer.d.ts +36 -0
- package/dist/tools/scaffold-writer.d.ts.map +1 -0
- package/dist/tools/scaffold-writer.js +133 -0
- package/dist/tools/scaffold-writer.js.map +1 -0
- package/dist/tools/scaffold.d.ts +27 -2
- package/dist/tools/scaffold.d.ts.map +1 -1
- package/dist/tools/scaffold.js +74 -122
- package/dist/tools/scaffold.js.map +1 -1
- package/dist/tools/sentinel.d.ts +1 -1
- package/dist/tools/sentinel.d.ts.map +1 -1
- package/dist/tools/sentinel.js +8 -8
- package/dist/tools/sentinel.js.map +1 -1
- package/dist/tools/session-prompt-builders.d.ts +85 -0
- package/dist/tools/session-prompt-builders.d.ts.map +1 -0
- package/dist/tools/session-prompt-builders.js +180 -0
- package/dist/tools/session-prompt-builders.js.map +1 -0
- package/dist/tools/session-prompt-sections.d.ts +60 -0
- package/dist/tools/session-prompt-sections.d.ts.map +1 -0
- package/dist/tools/session-prompt-sections.js +156 -0
- package/dist/tools/session-prompt-sections.js.map +1 -0
- package/dist/tools/set-cascade-requirement.d.ts +41 -0
- package/dist/tools/set-cascade-requirement.d.ts.map +1 -0
- package/dist/tools/set-cascade-requirement.js +113 -0
- package/dist/tools/set-cascade-requirement.js.map +1 -0
- package/dist/tools/setup-artifact-writers.d.ts +67 -0
- package/dist/tools/setup-artifact-writers.d.ts.map +1 -0
- package/dist/tools/setup-artifact-writers.js +188 -0
- package/dist/tools/setup-artifact-writers.js.map +1 -0
- package/dist/tools/setup-cnt-builders.d.ts +43 -0
- package/dist/tools/setup-cnt-builders.d.ts.map +1 -0
- package/dist/tools/setup-cnt-builders.js +186 -0
- package/dist/tools/setup-cnt-builders.js.map +1 -0
- package/dist/tools/setup-cnt.d.ts +37 -0
- package/dist/tools/setup-cnt.d.ts.map +1 -0
- package/dist/tools/setup-cnt.js +78 -0
- package/dist/tools/setup-cnt.js.map +1 -0
- package/dist/tools/setup-context.d.ts +62 -0
- package/dist/tools/setup-context.d.ts.map +1 -0
- package/dist/tools/setup-context.js +180 -0
- package/dist/tools/setup-context.js.map +1 -0
- package/dist/tools/setup-detector.d.ts +24 -0
- package/dist/tools/setup-detector.d.ts.map +1 -0
- package/dist/tools/setup-detector.js +203 -0
- package/dist/tools/setup-detector.js.map +1 -0
- package/dist/tools/setup-phase1.d.ts +15 -0
- package/dist/tools/setup-phase1.d.ts.map +1 -0
- package/dist/tools/setup-phase1.js +147 -0
- package/dist/tools/setup-phase1.js.map +1 -0
- package/dist/tools/setup-phase2.d.ts +51 -0
- package/dist/tools/setup-phase2.d.ts.map +1 -0
- package/dist/tools/setup-phase2.js +157 -0
- package/dist/tools/setup-phase2.js.map +1 -0
- package/dist/tools/setup-project.d.ts +72 -36
- package/dist/tools/setup-project.d.ts.map +1 -1
- package/dist/tools/setup-project.js +167 -277
- package/dist/tools/setup-project.js.map +1 -1
- package/dist/tools/spec-parser-directory.d.ts +53 -0
- package/dist/tools/spec-parser-directory.d.ts.map +1 -0
- package/dist/tools/spec-parser-directory.js +194 -0
- package/dist/tools/spec-parser-directory.js.map +1 -0
- package/dist/tools/spec-parser-inference.d.ts +41 -0
- package/dist/tools/spec-parser-inference.d.ts.map +1 -0
- package/dist/tools/spec-parser-inference.js +351 -0
- package/dist/tools/spec-parser-inference.js.map +1 -0
- package/dist/tools/spec-parser-markdown.d.ts +46 -0
- package/dist/tools/spec-parser-markdown.d.ts.map +1 -0
- package/dist/tools/spec-parser-markdown.js +161 -0
- package/dist/tools/spec-parser-markdown.js.map +1 -0
- package/dist/tools/spec-parser-tags.d.ts +60 -0
- package/dist/tools/spec-parser-tags.d.ts.map +1 -0
- package/dist/tools/spec-parser-tags.js +212 -0
- package/dist/tools/spec-parser-tags.js.map +1 -0
- package/dist/tools/spec-parser.d.ts +57 -0
- package/dist/tools/spec-parser.d.ts.map +1 -0
- package/dist/tools/spec-parser.js +144 -0
- package/dist/tools/spec-parser.js.map +1 -0
- package/dist/tools/start-hardening.d.ts +56 -0
- package/dist/tools/start-hardening.d.ts.map +1 -0
- package/dist/tools/start-hardening.js +201 -0
- package/dist/tools/start-hardening.js.map +1 -0
- package/dist/tools/verification-state-core.d.ts +88 -0
- package/dist/tools/verification-state-core.d.ts.map +1 -0
- package/dist/tools/verification-state-core.js +195 -0
- package/dist/tools/verification-state-core.js.map +1 -0
- package/dist/tools/verification-state.d.ts +39 -0
- package/dist/tools/verification-state.d.ts.map +1 -0
- package/dist/tools/verification-state.js +188 -0
- package/dist/tools/verification-state.js.map +1 -0
- package/dist/tools/verify-formatter.d.ts +13 -0
- package/dist/tools/verify-formatter.d.ts.map +1 -0
- package/dist/tools/verify-formatter.js +103 -0
- package/dist/tools/verify-formatter.js.map +1 -0
- package/dist/tools/verify.d.ts +41 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +168 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/validators/composition-check.d.ts +24 -0
- package/dist/validators/composition-check.d.ts.map +1 -0
- package/dist/validators/composition-check.js +61 -0
- package/dist/validators/composition-check.js.map +1 -0
- package/dist/validators/index.d.ts +8 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +6 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/spec-validator.d.ts +54 -0
- package/dist/validators/spec-validator.d.ts.map +1 -0
- package/dist/validators/spec-validator.js +94 -0
- package/dist/validators/spec-validator.js.map +1 -0
- package/package.json +13 -2
- package/templates/api/instructions.yaml +146 -0
- package/templates/api/verification.yaml +132 -0
- package/templates/data-pipeline/instructions.yaml +42 -0
- package/templates/fintech/hooks.yaml +55 -0
- package/templates/fintech/instructions.yaml +70 -0
- package/templates/fintech/playbook.yaml +210 -0
- package/templates/fintech/verification.yaml +239 -0
- package/templates/game/instructions.yaml +134 -0
- package/templates/game/playbook.yaml +214 -0
- package/templates/game/verification.yaml +174 -0
- package/templates/ml/instructions.yaml +43 -0
- package/templates/ml/verification.yaml +156 -0
- package/templates/mobile/verification.yaml +121 -0
- package/templates/tools-registry.yaml +164 -0
- package/templates/universal/hooks.yaml +279 -7
- package/templates/universal/instructions.yaml +1223 -5
- package/templates/universal/mcp-servers.yaml +12 -0
- package/templates/universal/reference.yaml +215 -0
- package/templates/universal/review.yaml +40 -0
- package/templates/universal/skills.yaml +262 -106
- package/templates/universal/structure.yaml +15 -0
- package/templates/universal/verification.yaml +416 -0
- package/templates/web-react/instructions.yaml +97 -0
- package/templates/web-react/verification.yaml +126 -0
- package/templates/web-static/instructions.yaml +42 -0
- package/templates/web3/verification.yaml +159 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<h1 align="center">ForgeCraft</h1>
|
|
3
3
|
<p align="center">
|
|
4
|
-
<strong>
|
|
4
|
+
<strong>The quality contract your AI coding assistant works within.</strong>
|
|
5
5
|
</p>
|
|
6
6
|
<p align="center">
|
|
7
7
|
<a href="https://www.npmjs.com/package/forgecraft-mcp"><img src="https://img.shields.io/npm/v/forgecraft-mcp.svg" alt="npm version"></a>
|
|
@@ -12,54 +12,207 @@
|
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
> You hired an AI engineer. It's brilliant. It also installed the same 14 VS Code extensions twice today, spun up 6 Docker containers it will never clean up, and your disk went from 12 GB free to 0 KB in one session.
|
|
16
|
+
>
|
|
17
|
+
> A full disk doesn't fail gracefully. It kills VS Code, the terminal, Docker, and the database simultaneously.
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
ForgeCraft is the quality contract your AI coding assistant works within — so it builds fast **and** doesn't burn down the house.
|
|
18
20
|
|
|
19
21
|
```bash
|
|
20
22
|
npx forgecraft-mcp setup .
|
|
21
23
|
```
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
**Supports:** Claude (CLAUDE.md) · Cursor (.cursor/rules/) · GitHub Copilot (.github/copilot-instructions.md) · Windsurf (.windsurfrules) · Cline (.clinerules) · Aider (CONVENTIONS.md)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## A quality framework for AI-assisted software development
|
|
30
|
+
|
|
31
|
+
Every session, every project, every AI assistant — measured against the same 7-property **Generative Specification** model. Not vibes. Not a linter score. A score out of 14 that tells you exactly where the gap is and why.
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
$ npx forgecraft-mcp verify .
|
|
35
|
+
|
|
36
|
+
| Property | Score | Evidence |
|
|
37
|
+
|-----------------|-------|-------------------------------------------------|
|
|
38
|
+
| Self-Describing | ✅ 2/2 | CLAUDE.md — 352 non-empty lines |
|
|
39
|
+
| Bounded | ✅ 2/2 | No direct DB calls in route files |
|
|
40
|
+
| Verifiable | ✅ 2/2 | 64 test files — 87% coverage |
|
|
41
|
+
| Defended | ✅ 2/2 | Pre-commit hook + lint config present |
|
|
42
|
+
| Auditable | ✅ 2/2 | 11 ADRs in docs/adrs/ + Status.md |
|
|
43
|
+
| Composable | ✅ 2/2 | Service layer + repository layer detected |
|
|
44
|
+
| Executable | ✅ 2/2 | Tests passed + CI pipeline configured |
|
|
45
|
+
|
|
46
|
+
Total: 14/14 ✅ PASS · Threshold 11/14
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
| Property | What it checks |
|
|
50
|
+
|---|---|
|
|
51
|
+
| **Self-Describing** | Does the codebase explain itself without you? |
|
|
52
|
+
| **Bounded** | Is business logic leaking into your routes? |
|
|
53
|
+
| **Verifiable** | Are there tests, and did they pass in a real runtime? |
|
|
54
|
+
| **Defended** | Are hooks blocking bad commits before they land? |
|
|
55
|
+
| **Auditable** | Is every architectural decision recorded and findable? |
|
|
56
|
+
| **Composable** | Can you swap the database without touching the domain? |
|
|
57
|
+
| **Executable** | Is there CI evidence this thing actually ran? |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Dev environment hygiene — enforced by convention
|
|
62
|
+
|
|
63
|
+
ForgeCraft injects enforceable rules into every project's AI instructions that make environment pollution a convention violation, not an incident.
|
|
64
|
+
|
|
65
|
+
**VS Code extensions**
|
|
66
|
+
Before installing: `code --list-extensions | grep -i <name>`. Only install if no version in the required major range is already present. The same extension doesn't get downloaded twice in the same day.
|
|
67
|
+
|
|
68
|
+
**Docker containers**
|
|
69
|
+
Check before creating: `docker ps -a --filter name=<service>`. If it exists, start it — don't create it. Prefer `docker compose up` (reuse) over bare `docker run` (always creates new). Logs capped at 500 MB. `docker system prune -f` is documented as a periodic maintenance step, not an emergency.
|
|
70
|
+
|
|
71
|
+
> **Exception:** Multiple containers of the same service are permitted when they differ meaningfully in plugin set or major version — for example, a `postgres-pgvector` container alongside a standard `postgres` container. Name containers to reflect the variant (e.g., `db-pgvector`, `db-timescale`); otherwise the deduplication rule applies.
|
|
72
|
+
|
|
73
|
+
**Python virtual environments**
|
|
74
|
+
One `.venv` per project root. Reuse if the Python major.minor version matches. Never create a venv in a subdirectory unless it's a standalone installable package. Unused dependencies flagged by `pip list --not-required`.
|
|
75
|
+
|
|
76
|
+
**Synthetic and time-series data**
|
|
77
|
+
Before writing more than 100 MB of generated data, the AI asks: retain raw, condense statistically, or delete after the run? Synthetic datasets older than 7 days with no code reference: ask to delete.
|
|
78
|
+
|
|
79
|
+
**General**
|
|
80
|
+
If the workspace grows beyond 2 GB outside of known build artifacts (`node_modules/`, `.venv/`, `dist/`), surface a warning and stop. Never silently grow the workspace.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Project setup in one sentence
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Read the spec in docs/specs/, set up this project with ForgeCraft,
|
|
88
|
+
scaffold it with the right tags, recommend the tech stack, start building.
|
|
89
|
+
```
|
|
24
90
|
|
|
25
|
-
|
|
91
|
+
That's the entire onboarding prompt. ForgeCraft reads the spec, the AI assigns the tags, and ForgeCraft writes the instruction file, emits `Status.md`, `docs/adrs/`, `docs/PRD.md`, `docs/TechSpec.md`, hooks, and skills. The AI has full context. You start building.
|
|
26
92
|
|
|
27
|
-
|
|
93
|
+
ForgeCraft scans your project, auto-detects your stack, and generates tailored instruction files from 116 curated blocks — SOLID, hexagonal architecture, testing pyramids, CI/CD, and 24 domain-specific rule sets — in seconds.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Quality gates
|
|
98
|
+
|
|
99
|
+
Quality gates are structured pass/fail checks your AI assistant runs at defined moments — before a commit, before a release, after a deployment. They're not linter rules. Each gate has a condition, an evidence requirement, and a flag for whether human review is mandatory.
|
|
100
|
+
|
|
101
|
+
Gates are organized by release phase so you're not running pre-release chaos tests on day one of a greenfield project:
|
|
102
|
+
|
|
103
|
+
| Phase | Example gates |
|
|
104
|
+
|---|---|
|
|
105
|
+
| **development** | Unit tests pass · lint clean · no layer violations · no hardcoded secrets |
|
|
106
|
+
| **pre-release hardening** | Mutation testing ≥80% · DAST scan · 2× peak load · chaos (Toxiproxy) |
|
|
107
|
+
| **release candidate** | OWASP Top 10 pentest · full mutation audit · compatibility matrix · accessibility |
|
|
108
|
+
| **deployment** | Canary config verified · smoke tests pass · observability confirmed |
|
|
109
|
+
| **post-deployment** | Synthetic probes live · 30-min error window monitored · incident runbook reviewed |
|
|
110
|
+
|
|
111
|
+
Gates tagged `requires_human_review: true` cannot be auto-passed — some checks require a human.
|
|
112
|
+
|
|
113
|
+
The full gate library, contribution guide, and schema are in the [quality gates repository →](https://github.com/jghiringhelli/genspec-dev-quality-gates)
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## ADRs, automatically sequenced
|
|
118
|
+
|
|
119
|
+
Every non-obvious architectural decision gets recorded. ForgeCraft auto-sequences `docs/adrs/NNNN-slug.md` in MADR format — context, decision, alternatives, consequences. Your AI assistant reasons about past choices. Your team stops re-litigating them.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
npx forgecraft-mcp generate_adr . --title "Use event sourcing for order history" \
|
|
123
|
+
--status Accepted \
|
|
124
|
+
--context "Order mutations need full audit trail for compliance" \
|
|
125
|
+
--decision "Append-only event log, project current state on read"
|
|
126
|
+
# → docs/adrs/0004-use-event-sourcing-for-order-history.md
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## AI assistant setup vs ForgeCraft
|
|
132
|
+
|
|
133
|
+
`claude init`, Cursor's workspace rules, or Copilot's instructions file get you started. ForgeCraft gets you to production standards — across every AI assistant, every session, every engineer on the team.
|
|
134
|
+
|
|
135
|
+
| | Default AI setup | ForgeCraft |
|
|
28
136
|
|---|---|---|
|
|
29
|
-
| **Instruction file** | Generic, one-size-fits-all |
|
|
30
|
-
| **AI assistants** |
|
|
137
|
+
| **Instruction file** | Generic, one-size-fits-all | 116 curated blocks matched to your stack |
|
|
138
|
+
| **AI assistants** | Varies by tool | Claude, Cursor, Copilot, Windsurf, Cline, Aider |
|
|
31
139
|
| **Architecture** | None | SOLID, hexagonal, clean code, DDD |
|
|
32
|
-
| **Testing** | Basic mention | Testing pyramid
|
|
33
|
-
| **Domain rules** | None |
|
|
34
|
-
| **
|
|
35
|
-
| **
|
|
36
|
-
| **
|
|
140
|
+
| **Testing** | Basic mention | Testing pyramid, coverage targets, mutation gates |
|
|
141
|
+
| **Domain rules** | None | 24 domains (fintech, healthcare, gaming…) |
|
|
142
|
+
| **Quality score** | None | GS score out of 14 — know exactly where the gap is |
|
|
143
|
+
| **Release phases** | None | 7 phases from development through post-deployment |
|
|
144
|
+
| **Dev hygiene** | None | VS Code, Docker, Python venv, disk guard |
|
|
145
|
+
| **ADRs** | None | Auto-sequenced, MADR format |
|
|
37
146
|
| **Session continuity** | None | `Status.md` + `forgecraft.yaml` persist context |
|
|
38
147
|
| **Drift detection** | None | `refresh` detects scope changes |
|
|
39
|
-
|
|
148
|
+
|
|
149
|
+
## Workflow Playbook
|
|
150
|
+
|
|
151
|
+
After setup, your AI has the context. These prompts direct the work. Copy, paste, run.
|
|
152
|
+
|
|
153
|
+
| Situation | Prompt |
|
|
154
|
+
|---|---|
|
|
155
|
+
| New project — scaffold structure | [Greenfield Setup](WORKFLOWS.md#greenfield-setup) |
|
|
156
|
+
| Existing project — integrate ForgeCraft | [Brownfield Integration](WORKFLOWS.md#brownfield-integration) |
|
|
157
|
+
| Audit shows `file_length` failures | [Decompose by responsibility](WORKFLOWS.md#file_length--file-too-large) |
|
|
158
|
+
| Audit shows `hardcoded_url` failures | [Extract to env vars](WORKFLOWS.md#hardcoded_url--urls-or-hosts-in-source) |
|
|
159
|
+
| Audit shows `hardcoded_credential` failures | [Remove secrets — do this first](WORKFLOWS.md#hardcoded_credential--secrets-in-source) |
|
|
160
|
+
| Audit shows `layer_violation` failures | [Fix route → DB direct calls](WORKFLOWS.md#layer_violation--direct-db-call-in-route-handler) |
|
|
161
|
+
| Audit shows `mock_in_source` failures | [Move mocks out of production](WORKFLOWS.md#mock_in_source--mock-data-in-production-code) |
|
|
162
|
+
| Audit shows `missing_prd` failures | [Reverse-engineer spec docs](WORKFLOWS.md#missing_prd--missing_techspec--no-spec-docs) |
|
|
163
|
+
| Audit shows `stale_status` failures | [Update Status.md](WORKFLOWS.md#stale_status--statusmd-not-updated) |
|
|
164
|
+
| Score ≥ 80 and preparing to ship | [Pre-release hardening](WORKFLOWS.md#pre-release-hardening) |
|
|
165
|
+
| Just deployed to production | [Post-deployment checklist](WORKFLOWS.md#post-deployment) |
|
|
166
|
+
| Project scope changed | [Drift detection](WORKFLOWS.md#drift-detection) |
|
|
167
|
+
|
|
168
|
+
→ [Full Workflow Playbook](WORKFLOWS.md) · [Online version](https://forgecraft.tools/docs/workflows)
|
|
169
|
+
|
|
170
|
+
---
|
|
40
171
|
|
|
41
172
|
## How It Works
|
|
42
173
|
|
|
43
174
|
```bash
|
|
44
175
|
# First-time setup — auto-detects your stack
|
|
45
176
|
npx forgecraft-mcp setup .
|
|
177
|
+
```
|
|
46
178
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
179
|
+
```mermaid
|
|
180
|
+
flowchart TD
|
|
181
|
+
A["<b>setup .</b><br/>npx forgecraft-mcp setup ."] --> B["Phase 1 — Analyze<br/>Reads spec · infers tags"]
|
|
182
|
+
B --> C{AI assistant\nin the loop?}
|
|
183
|
+
C -->|"Yes (MCP)"| D["Phase 2 — Calibrate<br/>LLM corrects tags from spec<br/>Writes forgecraft.yaml · CLAUDE.md<br/>PRD.md · hooks · ADR-000"]
|
|
184
|
+
C -->|"No (CLI only)"| E["⚠️ CLI-only mode<br/>Directory heuristics only<br/>→ configure an AI assistant"]
|
|
185
|
+
D --> F["<b>check_cascade</b><br/>5-step readiness gate<br/>1 · Functional spec<br/>2 · Architecture + C4<br/>3 · Constitution<br/>4 · ADRs<br/>5 · Use cases"]
|
|
186
|
+
F --> G{All 5 passing?}
|
|
187
|
+
G -->|"Stubs / missing"| H["Fill artifacts<br/>docs/PRD.md · docs/adrs/<br/>docs/use-cases.md"]
|
|
188
|
+
H --> F
|
|
189
|
+
G -->|"✅ All pass"| I["<b>generate_session_prompt</b><br/>Bound context for next task"]
|
|
190
|
+
I --> J["Implement with TDD<br/>RED → GREEN → REFACTOR<br/>+ Documentation Cascade"]
|
|
191
|
+
J --> K["<b>audit_project</b><br/>Score 0 – 100"]
|
|
192
|
+
K --> L{Score ≥ 90?}
|
|
193
|
+
L -->|"Violations found"| M["WORKFLOWS.md remediation<br/>file_length · layer_violation<br/>hardcoded_url · missing_prd"]
|
|
194
|
+
M --> J
|
|
195
|
+
L -->|"✅ Score ≥ 90"| N["<b>close_cycle</b><br/>Re-check cascade · assess gates<br/>promote to registry · bump version"]
|
|
196
|
+
N --> O{Roadmap\ncomplete?}
|
|
197
|
+
O -->|"More features"| I
|
|
198
|
+
O -->|"All done"| P["<b>start_hardening</b><br/>Mutation tests · OWASP · load test"]
|
|
199
|
+
P --> Q["🚢 Ship"]
|
|
200
|
+
|
|
201
|
+
style A fill:#1a2e1a,color:#90ee90,stroke:#3a6e3a
|
|
202
|
+
style Q fill:#1a2a3e,color:#87ceeb,stroke:#3a5a8e
|
|
203
|
+
style E fill:#2e1a1a,color:#ffaa88,stroke:#6e3a3a
|
|
204
|
+
style M fill:#2e2a00,color:#ffd700,stroke:#6e6000
|
|
52
205
|
```
|
|
53
206
|
|
|
54
207
|
ForgeCraft is a **setup-time CLI tool**. Run it once to configure your project, then remove it — it has no runtime footprint.
|
|
55
208
|
|
|
56
|
-
|
|
209
|
+
Optionally add the MCP sentinel to let your AI assistant diagnose and recommend commands:
|
|
57
210
|
|
|
58
211
|
```bash
|
|
59
212
|
claude mcp add forgecraft -- npx -y forgecraft-mcp
|
|
60
213
|
```
|
|
61
214
|
|
|
62
|
-
The sentinel is a single
|
|
215
|
+
The sentinel is a single tool (~200 tokens). It reads three artifacts — `forgecraft.yaml`, `CLAUDE.md`, `.claude/hooks` — derives the correct next CLI command, and returns it. Nothing more. This is the methodology's core principle expressed as tool design: a stateless reader, a finite artifact set, a derived action. [Remove it](#mcp-sentinel) after initial setup to reclaim token budget.
|
|
63
216
|
|
|
64
217
|
## What You Get
|
|
65
218
|
|
|
@@ -93,9 +246,11 @@ This is the core value. Assembled from curated blocks covering:
|
|
|
93
246
|
|
|
94
247
|
Every block is sourced from established engineering literature (Martin, Evans, Wiggins) and adapted for AI-assisted development.
|
|
95
248
|
|
|
96
|
-
## 24 Tags —
|
|
249
|
+
## 24 Tags — AI-detected, user-adjustable
|
|
97
250
|
|
|
98
|
-
Tags
|
|
251
|
+
Tags tell ForgeCraft what your project is. On first setup, the AI analyzes your spec and codebase and assigns them. You can review and override in `forgecraft.yaml`. Blocks merge without conflicts — add or remove tags as the project evolves.
|
|
252
|
+
|
|
253
|
+
The full tag list and contribution guide live in the [quality gates repository →](https://github.com/jghiringhelli/genspec-dev-quality-gates)
|
|
99
254
|
|
|
100
255
|
| Tag | What it adds |
|
|
101
256
|
|-----|-------------|
|
|
@@ -124,7 +279,7 @@ Tags are domain classifiers. ForgeCraft auto-detects them from your code, or you
|
|
|
124
279
|
| `MEDALLION-ARCHITECTURE` | Bronze=immutable, Silver=validated, Gold=aggregated |
|
|
125
280
|
| `ZERO-TRUST` | Deny-by-default IAM, explicit allow rules |
|
|
126
281
|
|
|
127
|
-
## Content
|
|
282
|
+
## Content depth tiers
|
|
128
283
|
|
|
129
284
|
Not every project needs DDD on day one.
|
|
130
285
|
|
|
@@ -181,20 +336,20 @@ npx forgecraft-mcp <command> [dir] [flags]
|
|
|
181
336
|
|
|
182
337
|
Optionally add the ForgeCraft MCP sentinel to let your AI assistant diagnose your project and suggest the right CLI command:
|
|
183
338
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
339
|
+
The sentinel is a **single minimal tool** (~200 tokens per request, vs ~1,500 for a full tool suite). It checks whether `forgecraft.yaml`, your AI instruction file, and your hooks exist, then returns the targeted CLI command for the project's current state.
|
|
340
|
+
|
|
341
|
+
**The design is intentional.** The full ForgeCraft command surface — 21 actions — lives in the CLI, not the MCP server. The MCP server exposes exactly one tool that reads three artifacts and returns one recommendation. This is the Generative Specification principle in the tool's own architecture: a stateless reader, a bounded artifact set, a derived action. The tool practices what it writes into your instruction files.
|
|
187
342
|
|
|
188
|
-
|
|
343
|
+
A side effect: every declared MCP tool is read by the model on every turn whether invoked or not. One tool costs 200 tokens. Twenty-one tools costs 1,500. The sentinel keeps the methodology's recommended MCP budget (≤3 active servers) by design.
|
|
189
344
|
|
|
190
345
|
**Recommended workflow:**
|
|
191
|
-
1. Add the sentinel
|
|
192
|
-
2. Let
|
|
193
|
-
3. Remove the sentinel
|
|
346
|
+
1. Add the sentinel to your AI assistant (see config examples below)
|
|
347
|
+
2. Let your AI assistant run `npx forgecraft-mcp setup .`
|
|
348
|
+
3. Remove the sentinel from your active MCP config
|
|
194
349
|
4. Re-add it when you need to refresh or audit
|
|
195
350
|
|
|
196
351
|
<details>
|
|
197
|
-
<summary>Manual MCP config</summary>
|
|
352
|
+
<summary>Manual MCP config — Claude</summary>
|
|
198
353
|
|
|
199
354
|
Add to `.claude/settings.json`:
|
|
200
355
|
```json
|
|
@@ -209,8 +364,67 @@ Add to `.claude/settings.json`:
|
|
|
209
364
|
```
|
|
210
365
|
</details>
|
|
211
366
|
|
|
367
|
+
<details>
|
|
368
|
+
<summary>Manual MCP config — GitHub Copilot (VS Code)</summary>
|
|
369
|
+
|
|
370
|
+
Add to `.vscode/mcp.json` in your project root (create it if it doesn't exist):
|
|
371
|
+
```json
|
|
372
|
+
{
|
|
373
|
+
"servers": {
|
|
374
|
+
"forgecraft": {
|
|
375
|
+
"type": "stdio",
|
|
376
|
+
"command": "npx",
|
|
377
|
+
"args": ["-y", "forgecraft-mcp"]
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Then open the Copilot Chat panel, switch to **Agent mode**, and the forgecraft sentinel will appear in the tools list.
|
|
384
|
+
</details>
|
|
385
|
+
|
|
386
|
+
<details>
|
|
387
|
+
<summary>Manual MCP config — Cursor</summary>
|
|
388
|
+
|
|
389
|
+
Add to `.cursor/mcp.json`:
|
|
390
|
+
```json
|
|
391
|
+
{
|
|
392
|
+
"mcpServers": {
|
|
393
|
+
"forgecraft": {
|
|
394
|
+
"command": "npx",
|
|
395
|
+
"args": ["-y", "forgecraft-mcp"]
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
</details>
|
|
401
|
+
|
|
402
|
+
> **No MCP client?** That's fine — you don't need it. Run `npx forgecraft-mcp setup .` directly in your terminal. The MCP sentinel is optional; the CLI does everything.
|
|
403
|
+
|
|
212
404
|
> **Already ran `claude init`?** Use `npx forgecraft-mcp generate . --merge` to merge with your existing CLAUDE.md, keeping your custom sections while adding production standards.
|
|
213
405
|
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Free and open source
|
|
409
|
+
|
|
410
|
+
ForgeCraft is free. No limits, no tiers, no API keys.
|
|
411
|
+
|
|
412
|
+
The quality gate library grows through community contribution. If you propose a gate that gets accepted, your name goes in [CONTRIBUTORS.md](CONTRIBUTORS.md) and you helped raise the floor for everyone building with AI.
|
|
413
|
+
|
|
414
|
+
[Open a gate proposal →](.github/ISSUE_TEMPLATE/quality-gate-proposal.md) · [See contributors →](CONTRIBUTORS.md)
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Theoretical foundation
|
|
419
|
+
|
|
420
|
+
ForgeCraft implements the **Generative Specification** model — a formal 7-property framework for evaluating AI-generated code quality. The model, the S_realized convergence formula, and the release phase framework are documented in the white paper.
|
|
421
|
+
|
|
422
|
+
> [Generative Specification White Paper](https://github.com/jghiringhelli/argos) — the academic foundation behind the `verify` score
|
|
423
|
+
|
|
424
|
+
The white paper is the theory. ForgeCraft is the toolchain. Quality gates proposed for the library that generalize into theoretical insights may be incorporated into future white paper revisions.
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
214
428
|
## Configuration
|
|
215
429
|
|
|
216
430
|
### Fine-tune what your AI assistant sees
|
|
@@ -301,7 +515,7 @@ git clone https://github.com/jghiringhelli/forgecraft-mcp.git
|
|
|
301
515
|
cd forgecraft-mcp
|
|
302
516
|
npm install
|
|
303
517
|
npm run build
|
|
304
|
-
npm test #
|
|
518
|
+
npm test # 610 tests, 42 suites
|
|
305
519
|
```
|
|
306
520
|
|
|
307
521
|
## License
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anti-pattern.d.ts","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,uCAAuC;AACvC,UAAU,UAAU;IAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B;IAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"anti-pattern.d.ts","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,uCAAuC;AACvC,UAAU,UAAU;IAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B;IAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAoGtD"}
|
|
@@ -43,7 +43,11 @@ export function scanAntiPatterns(projectDir, config = {}) {
|
|
|
43
43
|
}
|
|
44
44
|
// Check for hardcoded URLs (skip config files)
|
|
45
45
|
if (!isConfigFile(relPath)) {
|
|
46
|
-
const urlMatches = findPattern(lines, /(localhost|127\.0\.0\.1|0\.0\.0\.0)/,
|
|
46
|
+
const urlMatches = findPattern(lines, /(localhost|127\.0\.0\.1|0\.0\.0\.0)/,
|
|
47
|
+
// Exclude: comments, test/spec/mock paths, regex literals,
|
|
48
|
+
// JS/TS env-var fallback defaults (process.env.X ?? 'localhost'),
|
|
49
|
+
// and Python env-var fallback defaults (os.environ.get("X", "localhost"))
|
|
50
|
+
/^\s*(\/\/|\/\*|\*|#)|test|spec|mock|\/\(.*localhost|\?\?.*['"`]|os\.environ|os\.getenv|environ\.get/i);
|
|
47
51
|
if (urlMatches.length > 0) {
|
|
48
52
|
violations.push({
|
|
49
53
|
check: "hardcoded_url",
|
|
@@ -53,7 +57,9 @@ export function scanAntiPatterns(projectDir, config = {}) {
|
|
|
53
57
|
}
|
|
54
58
|
}
|
|
55
59
|
// Check for mock/stub data in production code
|
|
56
|
-
const mockMatches = findPattern(lines, /\b(mock_data|fake_data|dummy_data|stub_response|FIXME.*return|TODO.*hardcod)/i
|
|
60
|
+
const mockMatches = findPattern(lines, /\b(mock_data|fake_data|dummy_data|stub_response|FIXME.*return|TODO.*hardcod)/i,
|
|
61
|
+
// Exclude: lines that are regex literal patterns or new RegExp constructs
|
|
62
|
+
/\/\\b\(|\/\(|new RegExp/i);
|
|
57
63
|
if (mockMatches.length > 0) {
|
|
58
64
|
violations.push({
|
|
59
65
|
check: "mock_in_source",
|
|
@@ -103,7 +109,7 @@ function isSourceFile(filePath) {
|
|
|
103
109
|
* Check if a file is a test file.
|
|
104
110
|
*/
|
|
105
111
|
function isTestFile(filePath) {
|
|
106
|
-
return /(\btest[_.]|\.test\.|\.spec\.|__tests__|tests
|
|
112
|
+
return /(\btest[_.]|\.test\.|\.spec\.|__tests__|tests[/\\]|test[/\\]|fixtures[/\\]|mock|conftest|\.d\.ts)/.test(filePath);
|
|
107
113
|
}
|
|
108
114
|
/**
|
|
109
115
|
* Check if a file is a config file.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anti-pattern.js","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AAQtD,MAAM,cAAc,GAAe;IACjC,aAAa,EAAE,GAAG;IAClB,iBAAiB,EAAE,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,SAA8B,EAAE;IAEhC,MAAM,GAAG,GAAe,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACzD,MAAM,UAAU,GAAiB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;QACxC,UAAU,EAAE,QAAQ,CAAC,MAAM;QAC3B,WAAW,EAAE,WAAW,CAAC,MAAM;KAChC,CAAC,CAAC;IAEH,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAEpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,oBAAoB;YACpB,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,aAAa;oBACpB,OAAO,EAAE,GAAG,OAAO,KAAK,KAAK,CAAC,MAAM,eAAe,GAAG,CAAC,aAAa,wBAAwB;oBAC5F,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;YAED,+CAA+C;YAC/C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EACL,qCAAqC,
|
|
1
|
+
{"version":3,"file":"anti-pattern.js","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External code quality probes — language-agnostic design.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all probes from domain-scoped modules under probes/.
|
|
5
|
+
*/
|
|
6
|
+
export type { ProbeResult } from "./probes/tool-runner.js";
|
|
7
|
+
export type { LocData } from "./probes/loc-probe.js";
|
|
8
|
+
export type { CoverageData } from "./probes/coverage-probe.js";
|
|
9
|
+
export type { LayerData } from "./probes/layer-probe.js";
|
|
10
|
+
export type { DeadCodeData } from "./probes/dead-code-probe.js";
|
|
11
|
+
export type { ComplexityData } from "./probes/complexity-probe.js";
|
|
12
|
+
export type { MutationData } from "./probes/mutation-probe.js";
|
|
13
|
+
export { probeLoc } from "./probes/loc-probe.js";
|
|
14
|
+
export { probeCoverage } from "./probes/coverage-probe.js";
|
|
15
|
+
export { probeLayerViolations } from "./probes/layer-probe.js";
|
|
16
|
+
export { probeDeadCode } from "./probes/dead-code-probe.js";
|
|
17
|
+
export { probeComplexity } from "./probes/complexity-probe.js";
|
|
18
|
+
export { probeMutation } from "./probes/mutation-probe.js";
|
|
19
|
+
//# sourceMappingURL=code-probes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-probes.d.ts","sourceRoot":"","sources":["../../src/analyzers/code-probes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External code quality probes — language-agnostic design.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all probes from domain-scoped modules under probes/.
|
|
5
|
+
*/
|
|
6
|
+
export { probeLoc } from "./probes/loc-probe.js";
|
|
7
|
+
export { probeCoverage } from "./probes/coverage-probe.js";
|
|
8
|
+
export { probeLayerViolations } from "./probes/layer-probe.js";
|
|
9
|
+
export { probeDeadCode } from "./probes/dead-code-probe.js";
|
|
10
|
+
export { probeComplexity } from "./probes/complexity-probe.js";
|
|
11
|
+
export { probeMutation } from "./probes/mutation-probe.js";
|
|
12
|
+
//# sourceMappingURL=code-probes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-probes.js","sourceRoot":"","sources":["../../src/analyzers/code-probes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants and pure helper functions for completeness checks.
|
|
3
|
+
*/
|
|
4
|
+
import type { AuditCheck } from "../shared/types.js";
|
|
5
|
+
import { readExceptions } from "../shared/exceptions.js";
|
|
6
|
+
/** Known AI assistant instruction file paths to check. */
|
|
7
|
+
export declare const KNOWN_INSTRUCTION_PATHS: string[];
|
|
8
|
+
/**
|
|
9
|
+
* Check if any AI assistant instruction file exists.
|
|
10
|
+
*
|
|
11
|
+
* @param projectDir - Absolute path to project root
|
|
12
|
+
* @param passing - Accumulator for passing checks
|
|
13
|
+
* @param failing - Accumulator for failing checks
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkInstructionFileExists(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a file or directory exists.
|
|
18
|
+
*
|
|
19
|
+
* @param projectDir - Absolute path to project root
|
|
20
|
+
* @param relativePath - Path relative to project root
|
|
21
|
+
* @param checkId - Unique check identifier
|
|
22
|
+
* @param description - Human-readable description for failure message
|
|
23
|
+
* @param passing - Accumulator for passing checks
|
|
24
|
+
* @param failing - Accumulator for failing checks
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkFileExists(projectDir: string, relativePath: string, checkId: string, description: string, passing: AuditCheck[], failing: AuditCheck[]): void;
|
|
27
|
+
/**
|
|
28
|
+
* Check if Status.md was updated recently (within 7 days).
|
|
29
|
+
*
|
|
30
|
+
* @param projectDir - Absolute path to project root
|
|
31
|
+
* @param passing - Accumulator for passing checks
|
|
32
|
+
* @param failing - Accumulator for failing checks
|
|
33
|
+
*/
|
|
34
|
+
export declare function checkStatusMdFreshness(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
|
|
35
|
+
/**
|
|
36
|
+
* Check if hook scripts are installed.
|
|
37
|
+
*
|
|
38
|
+
* @param projectDir - Absolute path to project root
|
|
39
|
+
* @param passing - Accumulator for passing checks
|
|
40
|
+
* @param failing - Accumulator for failing checks
|
|
41
|
+
*/
|
|
42
|
+
export declare function checkHooksInstalled(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Check for shared modules (config, errors, logging).
|
|
45
|
+
*
|
|
46
|
+
* @param projectDir - Absolute path to project root
|
|
47
|
+
* @param passing - Accumulator for passing checks
|
|
48
|
+
* @param failing - Accumulator for failing checks
|
|
49
|
+
*/
|
|
50
|
+
export declare function checkSharedModules(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
|
|
51
|
+
/**
|
|
52
|
+
* Check package.json for required fields.
|
|
53
|
+
*
|
|
54
|
+
* @param projectDir - Absolute path to project root
|
|
55
|
+
* @param passing - Accumulator for passing checks
|
|
56
|
+
* @param failing - Accumulator for failing checks
|
|
57
|
+
* @param exceptions - Registered project exceptions (skips checks that match)
|
|
58
|
+
*/
|
|
59
|
+
export declare function checkPackageJson(projectDir: string, passing: AuditCheck[], failing: AuditCheck[], exceptions?: ReturnType<typeof readExceptions>): void;
|
|
60
|
+
//# sourceMappingURL=completeness-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completeness-helpers.d.ts","sourceRoot":"","sources":["../../src/analyzers/completeness-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AAEhF,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,UAOnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAkBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAwBN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAqCN;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CA4BN;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,GAAE,UAAU,CAAC,OAAO,cAAc,CAAM,GACjD,IAAI,CA0DN"}
|