@manehorizons/cadence-core 1.1.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/LICENSE +21 -0
- package/README.md +5 -0
- package/bin/cadence.cjs +4 -0
- package/dist/build/record.d.ts +16 -0
- package/dist/build/record.d.ts.map +1 -0
- package/dist/build/record.js +33 -0
- package/dist/build/record.js.map +1 -0
- package/dist/checks/boundary.d.ts +35 -0
- package/dist/checks/boundary.d.ts.map +1 -0
- package/dist/checks/boundary.js +29 -0
- package/dist/checks/boundary.js.map +1 -0
- package/dist/checks/skill-audit.d.ts +29 -0
- package/dist/checks/skill-audit.d.ts.map +1 -0
- package/dist/checks/skill-audit.js +57 -0
- package/dist/checks/skill-audit.js.map +1 -0
- package/dist/classify/tier.d.ts +9 -0
- package/dist/classify/tier.d.ts.map +1 -0
- package/dist/classify/tier.js +15 -0
- package/dist/classify/tier.js.map +1 -0
- package/dist/cli/commands/assumption.d.ts +3 -0
- package/dist/cli/commands/assumption.d.ts.map +1 -0
- package/dist/cli/commands/assumption.js +313 -0
- package/dist/cli/commands/assumption.js.map +1 -0
- package/dist/cli/commands/block.d.ts +3 -0
- package/dist/cli/commands/block.d.ts.map +1 -0
- package/dist/cli/commands/block.js +23 -0
- package/dist/cli/commands/block.js.map +1 -0
- package/dist/cli/commands/build.d.ts +3 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +89 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +91 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/context.d.ts +3 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +31 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/decision.d.ts +3 -0
- package/dist/cli/commands/decision.d.ts.map +1 -0
- package/dist/cli/commands/decision.js +390 -0
- package/dist/cli/commands/decision.js.map +1 -0
- package/dist/cli/commands/done.d.ts +3 -0
- package/dist/cli/commands/done.d.ts.map +1 -0
- package/dist/cli/commands/done.js +23 -0
- package/dist/cli/commands/done.js.map +1 -0
- package/dist/cli/commands/draft-new.d.ts +4 -0
- package/dist/cli/commands/draft-new.d.ts.map +1 -0
- package/dist/cli/commands/draft-new.js +108 -0
- package/dist/cli/commands/draft-new.js.map +1 -0
- package/dist/cli/commands/draft.d.ts +4 -0
- package/dist/cli/commands/draft.d.ts.map +1 -0
- package/dist/cli/commands/draft.js +125 -0
- package/dist/cli/commands/draft.js.map +1 -0
- package/dist/cli/commands/hook.d.ts +3 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +50 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/init.d.ts +21 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +255 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +3 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +24 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/intelligence.d.ts +3 -0
- package/dist/cli/commands/intelligence.d.ts.map +1 -0
- package/dist/cli/commands/intelligence.js +173 -0
- package/dist/cli/commands/intelligence.js.map +1 -0
- package/dist/cli/commands/milestone.d.ts +3 -0
- package/dist/cli/commands/milestone.d.ts.map +1 -0
- package/dist/cli/commands/milestone.js +119 -0
- package/dist/cli/commands/milestone.js.map +1 -0
- package/dist/cli/commands/needs-context.d.ts +3 -0
- package/dist/cli/commands/needs-context.d.ts.map +1 -0
- package/dist/cli/commands/needs-context.js +23 -0
- package/dist/cli/commands/needs-context.js.map +1 -0
- package/dist/cli/commands/progress.d.ts +3 -0
- package/dist/cli/commands/progress.d.ts.map +1 -0
- package/dist/cli/commands/progress.js +21 -0
- package/dist/cli/commands/progress.js.map +1 -0
- package/dist/cli/commands/recommend.d.ts +3 -0
- package/dist/cli/commands/recommend.d.ts.map +1 -0
- package/dist/cli/commands/recommend.js +24 -0
- package/dist/cli/commands/recommend.js.map +1 -0
- package/dist/cli/commands/recommendation.d.ts +3 -0
- package/dist/cli/commands/recommendation.d.ts.map +1 -0
- package/dist/cli/commands/recommendation.js +360 -0
- package/dist/cli/commands/recommendation.js.map +1 -0
- package/dist/cli/commands/settle.d.ts +3 -0
- package/dist/cli/commands/settle.d.ts.map +1 -0
- package/dist/cli/commands/settle.js +453 -0
- package/dist/cli/commands/settle.js.map +1 -0
- package/dist/cli/commands/spec.d.ts +10 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +246 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/status.d.ts +11 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +211 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/register.d.ts +3 -0
- package/dist/cli/register.d.ts.map +1 -0
- package/dist/cli/register.js +43 -0
- package/dist/cli/register.js.map +1 -0
- package/dist/coherence/check.d.ts +11 -0
- package/dist/coherence/check.d.ts.map +1 -0
- package/dist/coherence/check.js +34 -0
- package/dist/coherence/check.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +40 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +31 -0
- package/dist/errors.js.map +1 -0
- package/dist/gates/approve.d.ts +20 -0
- package/dist/gates/approve.d.ts.map +1 -0
- package/dist/gates/approve.js +55 -0
- package/dist/gates/approve.js.map +1 -0
- package/dist/gates/build-context.d.ts +17 -0
- package/dist/gates/build-context.d.ts.map +1 -0
- package/dist/gates/build-context.js +81 -0
- package/dist/gates/build-context.js.map +1 -0
- package/dist/gates/build-test-must-pass.d.ts +12 -0
- package/dist/gates/build-test-must-pass.d.ts.map +1 -0
- package/dist/gates/build-test-must-pass.js +23 -0
- package/dist/gates/build-test-must-pass.js.map +1 -0
- package/dist/gates/build-types.d.ts +54 -0
- package/dist/gates/build-types.d.ts.map +1 -0
- package/dist/gates/build-types.js +2 -0
- package/dist/gates/build-types.js.map +1 -0
- package/dist/gates/code-review.d.ts +20 -0
- package/dist/gates/code-review.d.ts.map +1 -0
- package/dist/gates/code-review.js +137 -0
- package/dist/gates/code-review.js.map +1 -0
- package/dist/gates/coherence.d.ts +26 -0
- package/dist/gates/coherence.d.ts.map +1 -0
- package/dist/gates/coherence.js +59 -0
- package/dist/gates/coherence.js.map +1 -0
- package/dist/gates/coverage.d.ts +8 -0
- package/dist/gates/coverage.d.ts.map +1 -0
- package/dist/gates/coverage.js +26 -0
- package/dist/gates/coverage.js.map +1 -0
- package/dist/gates/deep-verify.d.ts +7 -0
- package/dist/gates/deep-verify.d.ts.map +1 -0
- package/dist/gates/deep-verify.js +77 -0
- package/dist/gates/deep-verify.js.map +1 -0
- package/dist/gates/draft-context.d.ts +20 -0
- package/dist/gates/draft-context.d.ts.map +1 -0
- package/dist/gates/draft-context.js +87 -0
- package/dist/gates/draft-context.js.map +1 -0
- package/dist/gates/draft-read.d.ts +10 -0
- package/dist/gates/draft-read.d.ts.map +1 -0
- package/dist/gates/draft-read.js +24 -0
- package/dist/gates/draft-read.js.map +1 -0
- package/dist/gates/draft-types.d.ts +75 -0
- package/dist/gates/draft-types.d.ts.map +1 -0
- package/dist/gates/draft-types.js +2 -0
- package/dist/gates/draft-types.js.map +1 -0
- package/dist/gates/engine.d.ts +21 -0
- package/dist/gates/engine.d.ts.map +1 -0
- package/dist/gates/engine.js +98 -0
- package/dist/gates/engine.js.map +1 -0
- package/dist/gates/interactive.d.ts +11 -0
- package/dist/gates/interactive.d.ts.map +1 -0
- package/dist/gates/interactive.js +55 -0
- package/dist/gates/interactive.js.map +1 -0
- package/dist/gates/per-task-verify.d.ts +12 -0
- package/dist/gates/per-task-verify.d.ts.map +1 -0
- package/dist/gates/per-task-verify.js +52 -0
- package/dist/gates/per-task-verify.js.map +1 -0
- package/dist/gates/plan-review.d.ts +13 -0
- package/dist/gates/plan-review.d.ts.map +1 -0
- package/dist/gates/plan-review.js +98 -0
- package/dist/gates/plan-review.js.map +1 -0
- package/dist/gates/registry.d.ts +53 -0
- package/dist/gates/registry.d.ts.map +1 -0
- package/dist/gates/registry.js +66 -0
- package/dist/gates/registry.js.map +1 -0
- package/dist/gates/security-audit.d.ts +11 -0
- package/dist/gates/security-audit.d.ts.map +1 -0
- package/dist/gates/security-audit.js +40 -0
- package/dist/gates/security-audit.js.map +1 -0
- package/dist/gates/structural-verifier.d.ts +8 -0
- package/dist/gates/structural-verifier.d.ts.map +1 -0
- package/dist/gates/structural-verifier.js +25 -0
- package/dist/gates/structural-verifier.js.map +1 -0
- package/dist/gates/types.d.ts +202 -0
- package/dist/gates/types.d.ts.map +1 -0
- package/dist/gates/types.js +12 -0
- package/dist/gates/types.js.map +1 -0
- package/dist/hooks/dispatcher.d.ts +8 -0
- package/dist/hooks/dispatcher.d.ts.map +1 -0
- package/dist/hooks/dispatcher.js +31 -0
- package/dist/hooks/dispatcher.js.map +1 -0
- package/dist/hooks/handlers.d.ts +21 -0
- package/dist/hooks/handlers.d.ts.map +1 -0
- package/dist/hooks/handlers.js +121 -0
- package/dist/hooks/handlers.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/init/claude-md-template.d.ts +34 -0
- package/dist/init/claude-md-template.d.ts.map +1 -0
- package/dist/init/claude-md-template.js +72 -0
- package/dist/init/claude-md-template.js.map +1 -0
- package/dist/intelligence/backend/cadence.d.ts +21 -0
- package/dist/intelligence/backend/cadence.d.ts.map +1 -0
- package/dist/intelligence/backend/cadence.js +127 -0
- package/dist/intelligence/backend/cadence.js.map +1 -0
- package/dist/intelligence/context.d.ts +11 -0
- package/dist/intelligence/context.d.ts.map +1 -0
- package/dist/intelligence/context.js +197 -0
- package/dist/intelligence/context.js.map +1 -0
- package/dist/intelligence/graph-decision.d.ts +9 -0
- package/dist/intelligence/graph-decision.d.ts.map +1 -0
- package/dist/intelligence/graph-decision.js +55 -0
- package/dist/intelligence/graph-decision.js.map +1 -0
- package/dist/intelligence/inspect.d.ts +9 -0
- package/dist/intelligence/inspect.d.ts.map +1 -0
- package/dist/intelligence/inspect.js +93 -0
- package/dist/intelligence/inspect.js.map +1 -0
- package/dist/intelligence/milestone.d.ts +40 -0
- package/dist/intelligence/milestone.d.ts.map +1 -0
- package/dist/intelligence/milestone.js +312 -0
- package/dist/intelligence/milestone.js.map +1 -0
- package/dist/intelligence/recommend.d.ts +20 -0
- package/dist/intelligence/recommend.d.ts.map +1 -0
- package/dist/intelligence/recommend.js +185 -0
- package/dist/intelligence/recommend.js.map +1 -0
- package/dist/intelligence/render-assumption-detail.d.ts +3 -0
- package/dist/intelligence/render-assumption-detail.d.ts.map +1 -0
- package/dist/intelligence/render-assumption-detail.js +16 -0
- package/dist/intelligence/render-assumption-detail.js.map +1 -0
- package/dist/intelligence/render-assumption.d.ts +3 -0
- package/dist/intelligence/render-assumption.d.ts.map +1 -0
- package/dist/intelligence/render-assumption.js +37 -0
- package/dist/intelligence/render-assumption.js.map +1 -0
- package/dist/intelligence/render-context.d.ts +3 -0
- package/dist/intelligence/render-context.d.ts.map +1 -0
- package/dist/intelligence/render-context.js +92 -0
- package/dist/intelligence/render-context.js.map +1 -0
- package/dist/intelligence/render-decision-detail.d.ts +3 -0
- package/dist/intelligence/render-decision-detail.d.ts.map +1 -0
- package/dist/intelligence/render-decision-detail.js +30 -0
- package/dist/intelligence/render-decision-detail.js.map +1 -0
- package/dist/intelligence/render-decision-graph.d.ts +3 -0
- package/dist/intelligence/render-decision-graph.d.ts.map +1 -0
- package/dist/intelligence/render-decision-graph.js +49 -0
- package/dist/intelligence/render-decision-graph.js.map +1 -0
- package/dist/intelligence/render-decision.d.ts +3 -0
- package/dist/intelligence/render-decision.d.ts.map +1 -0
- package/dist/intelligence/render-decision.js +45 -0
- package/dist/intelligence/render-decision.js.map +1 -0
- package/dist/intelligence/render-inspection.d.ts +3 -0
- package/dist/intelligence/render-inspection.d.ts.map +1 -0
- package/dist/intelligence/render-inspection.js +69 -0
- package/dist/intelligence/render-inspection.js.map +1 -0
- package/dist/intelligence/render-intelligence-audit.d.ts +5 -0
- package/dist/intelligence/render-intelligence-audit.d.ts.map +1 -0
- package/dist/intelligence/render-intelligence-audit.js +93 -0
- package/dist/intelligence/render-intelligence-audit.js.map +1 -0
- package/dist/intelligence/render-intelligence-stats.d.ts +6 -0
- package/dist/intelligence/render-intelligence-stats.d.ts.map +1 -0
- package/dist/intelligence/render-intelligence-stats.js +76 -0
- package/dist/intelligence/render-intelligence-stats.js.map +1 -0
- package/dist/intelligence/render-milestone.d.ts +3 -0
- package/dist/intelligence/render-milestone.d.ts.map +1 -0
- package/dist/intelligence/render-milestone.js +80 -0
- package/dist/intelligence/render-milestone.js.map +1 -0
- package/dist/intelligence/render-recommend.d.ts +3 -0
- package/dist/intelligence/render-recommend.d.ts.map +1 -0
- package/dist/intelligence/render-recommend.js +62 -0
- package/dist/intelligence/render-recommend.js.map +1 -0
- package/dist/intelligence/render-recommendation-detail.d.ts +7 -0
- package/dist/intelligence/render-recommendation-detail.d.ts.map +1 -0
- package/dist/intelligence/render-recommendation-detail.js +93 -0
- package/dist/intelligence/render-recommendation-detail.js.map +1 -0
- package/dist/intelligence/render.d.ts +3 -0
- package/dist/intelligence/render.d.ts.map +1 -0
- package/dist/intelligence/render.js +57 -0
- package/dist/intelligence/render.js.map +1 -0
- package/dist/intelligence/scan.d.ts +3 -0
- package/dist/intelligence/scan.d.ts.map +1 -0
- package/dist/intelligence/scan.js +103 -0
- package/dist/intelligence/scan.js.map +1 -0
- package/dist/intelligence/store.d.ts +143 -0
- package/dist/intelligence/store.d.ts.map +1 -0
- package/dist/intelligence/store.js +701 -0
- package/dist/intelligence/store.js.map +1 -0
- package/dist/notify/code-review.d.ts +34 -0
- package/dist/notify/code-review.d.ts.map +1 -0
- package/dist/notify/code-review.js +56 -0
- package/dist/notify/code-review.js.map +1 -0
- package/dist/notify/collect.d.ts +31 -0
- package/dist/notify/collect.d.ts.map +1 -0
- package/dist/notify/collect.js +127 -0
- package/dist/notify/collect.js.map +1 -0
- package/dist/notify/emit-unconverged.d.ts +26 -0
- package/dist/notify/emit-unconverged.d.ts.map +1 -0
- package/dist/notify/emit-unconverged.js +31 -0
- package/dist/notify/emit-unconverged.js.map +1 -0
- package/dist/notify/factory.d.ts +12 -0
- package/dist/notify/factory.d.ts.map +1 -0
- package/dist/notify/factory.js +29 -0
- package/dist/notify/factory.js.map +1 -0
- package/dist/notify/file.d.ts +13 -0
- package/dist/notify/file.d.ts.map +1 -0
- package/dist/notify/file.js +21 -0
- package/dist/notify/file.js.map +1 -0
- package/dist/notify/loop-violation.d.ts +10 -0
- package/dist/notify/loop-violation.d.ts.map +1 -0
- package/dist/notify/loop-violation.js +46 -0
- package/dist/notify/loop-violation.js.map +1 -0
- package/dist/notify/notifier.d.ts +13 -0
- package/dist/notify/notifier.d.ts.map +1 -0
- package/dist/notify/notifier.js +2 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/notify/null.d.ts +11 -0
- package/dist/notify/null.d.ts.map +1 -0
- package/dist/notify/null.js +11 -0
- package/dist/notify/null.js.map +1 -0
- package/dist/notify/plan-review.d.ts +20 -0
- package/dist/notify/plan-review.d.ts.map +1 -0
- package/dist/notify/plan-review.js +15 -0
- package/dist/notify/plan-review.js.map +1 -0
- package/dist/notify/skill-audit.d.ts +18 -0
- package/dist/notify/skill-audit.d.ts.map +1 -0
- package/dist/notify/skill-audit.js +33 -0
- package/dist/notify/skill-audit.js.map +1 -0
- package/dist/notify/spec-review.d.ts +20 -0
- package/dist/notify/spec-review.d.ts.map +1 -0
- package/dist/notify/spec-review.js +15 -0
- package/dist/notify/spec-review.js.map +1 -0
- package/dist/notify/stderr.d.ts +17 -0
- package/dist/notify/stderr.d.ts.map +1 -0
- package/dist/notify/stderr.js +17 -0
- package/dist/notify/stderr.js.map +1 -0
- package/dist/notify/webhook.d.ts +33 -0
- package/dist/notify/webhook.d.ts.map +1 -0
- package/dist/notify/webhook.js +55 -0
- package/dist/notify/webhook.js.map +1 -0
- package/dist/parse/draft-parser.d.ts +3 -0
- package/dist/parse/draft-parser.d.ts.map +1 -0
- package/dist/parse/draft-parser.js +99 -0
- package/dist/parse/draft-parser.js.map +1 -0
- package/dist/parse/draft-scaffold.d.ts +14 -0
- package/dist/parse/draft-scaffold.d.ts.map +1 -0
- package/dist/parse/draft-scaffold.js +31 -0
- package/dist/parse/draft-scaffold.js.map +1 -0
- package/dist/parse/spec-parser.d.ts +3 -0
- package/dist/parse/spec-parser.d.ts.map +1 -0
- package/dist/parse/spec-parser.js +68 -0
- package/dist/parse/spec-parser.js.map +1 -0
- package/dist/parse/summary-writer.d.ts +3 -0
- package/dist/parse/summary-writer.d.ts.map +1 -0
- package/dist/parse/summary-writer.js +41 -0
- package/dist/parse/summary-writer.js.map +1 -0
- package/dist/progress.d.ts +7 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +37 -0
- package/dist/progress.js.map +1 -0
- package/dist/render/state-md.d.ts +3 -0
- package/dist/render/state-md.d.ts.map +1 -0
- package/dist/render/state-md.js +33 -0
- package/dist/render/state-md.js.map +1 -0
- package/dist/state/atomic-write.d.ts +3 -0
- package/dist/state/atomic-write.d.ts.map +1 -0
- package/dist/state/atomic-write.js +52 -0
- package/dist/state/atomic-write.js.map +1 -0
- package/dist/state/backend.d.ts +13 -0
- package/dist/state/backend.d.ts.map +1 -0
- package/dist/state/backend.js +2 -0
- package/dist/state/backend.js.map +1 -0
- package/dist/state/simple.d.ts +18 -0
- package/dist/state/simple.d.ts.map +1 -0
- package/dist/state/simple.js +67 -0
- package/dist/state/simple.js.map +1 -0
- package/dist/status.d.ts +47 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +209 -0
- package/dist/status.js.map +1 -0
- package/dist/verify/anthropic-verifier.d.ts +28 -0
- package/dist/verify/anthropic-verifier.d.ts.map +1 -0
- package/dist/verify/anthropic-verifier.js +109 -0
- package/dist/verify/anthropic-verifier.js.map +1 -0
- package/dist/verify/code-review-factory.d.ts +103 -0
- package/dist/verify/code-review-factory.d.ts.map +1 -0
- package/dist/verify/code-review-factory.js +11 -0
- package/dist/verify/code-review-factory.js.map +1 -0
- package/dist/verify/code-review.d.ts +65 -0
- package/dist/verify/code-review.d.ts.map +1 -0
- package/dist/verify/code-review.js +189 -0
- package/dist/verify/code-review.js.map +1 -0
- package/dist/verify/converge.d.ts +14 -0
- package/dist/verify/converge.d.ts.map +1 -0
- package/dist/verify/converge.js +17 -0
- package/dist/verify/converge.js.map +1 -0
- package/dist/verify/coverage.d.ts +31 -0
- package/dist/verify/coverage.d.ts.map +1 -0
- package/dist/verify/coverage.js +125 -0
- package/dist/verify/coverage.js.map +1 -0
- package/dist/verify/factory.d.ts +107 -0
- package/dist/verify/factory.d.ts.map +1 -0
- package/dist/verify/factory.js +17 -0
- package/dist/verify/factory.js.map +1 -0
- package/dist/verify/interactive.d.ts +22 -0
- package/dist/verify/interactive.d.ts.map +1 -0
- package/dist/verify/interactive.js +61 -0
- package/dist/verify/interactive.js.map +1 -0
- package/dist/verify/local-client.d.ts +13 -0
- package/dist/verify/local-client.d.ts.map +1 -0
- package/dist/verify/local-client.js +73 -0
- package/dist/verify/local-client.js.map +1 -0
- package/dist/verify/mock-verifier.d.ts +16 -0
- package/dist/verify/mock-verifier.d.ts.map +1 -0
- package/dist/verify/mock-verifier.js +30 -0
- package/dist/verify/mock-verifier.js.map +1 -0
- package/dist/verify/per-task-factory.d.ts +103 -0
- package/dist/verify/per-task-factory.d.ts.map +1 -0
- package/dist/verify/per-task-factory.js +11 -0
- package/dist/verify/per-task-factory.js.map +1 -0
- package/dist/verify/per-task.d.ts +69 -0
- package/dist/verify/per-task.d.ts.map +1 -0
- package/dist/verify/per-task.js +154 -0
- package/dist/verify/per-task.js.map +1 -0
- package/dist/verify/plan-review-factory.d.ts +103 -0
- package/dist/verify/plan-review-factory.d.ts.map +1 -0
- package/dist/verify/plan-review-factory.js +11 -0
- package/dist/verify/plan-review-factory.js.map +1 -0
- package/dist/verify/plan-review.d.ts +67 -0
- package/dist/verify/plan-review.d.ts.map +1 -0
- package/dist/verify/plan-review.js +196 -0
- package/dist/verify/plan-review.js.map +1 -0
- package/dist/verify/prompter.d.ts +40 -0
- package/dist/verify/prompter.d.ts.map +1 -0
- package/dist/verify/prompter.js +48 -0
- package/dist/verify/prompter.js.map +1 -0
- package/dist/verify/security-audit-factory.d.ts +103 -0
- package/dist/verify/security-audit-factory.d.ts.map +1 -0
- package/dist/verify/security-audit-factory.js +11 -0
- package/dist/verify/security-audit-factory.js.map +1 -0
- package/dist/verify/security-audit.d.ts +63 -0
- package/dist/verify/security-audit.d.ts.map +1 -0
- package/dist/verify/security-audit.js +196 -0
- package/dist/verify/security-audit.js.map +1 -0
- package/dist/verify/skill-match.d.ts +10 -0
- package/dist/verify/skill-match.d.ts.map +1 -0
- package/dist/verify/skill-match.js +15 -0
- package/dist/verify/skill-match.js.map +1 -0
- package/dist/verify/spec-review-factory.d.ts +103 -0
- package/dist/verify/spec-review-factory.d.ts.map +1 -0
- package/dist/verify/spec-review-factory.js +11 -0
- package/dist/verify/spec-review-factory.js.map +1 -0
- package/dist/verify/spec-review.d.ts +63 -0
- package/dist/verify/spec-review.d.ts.map +1 -0
- package/dist/verify/spec-review.js +182 -0
- package/dist/verify/spec-review.js.map +1 -0
- package/dist/verify/verifier-factory.d.ts +45 -0
- package/dist/verify/verifier-factory.d.ts.map +1 -0
- package/dist/verify/verifier-factory.js +38 -0
- package/dist/verify/verifier-factory.js.map +1 -0
- package/dist/verify/verifier.d.ts +63 -0
- package/dist/verify/verifier.d.ts.map +1 -0
- package/dist/verify/verifier.js +32 -0
- package/dist/verify/verifier.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-review.js","sourceRoot":"","sources":["../../src/gates/code-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { CoherenceIssue } from '../coherence/check.js';
|
|
2
|
+
import type { DraftGateContext, DraftGateImpl } from './draft-types.js';
|
|
3
|
+
import type { IoPort } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Coherence gate (Phase 23.2). Extracted from draft.ts (Phase 39.7).
|
|
6
|
+
* `coherence-check` is an ALWAYS_FIRE gate but is never membership-consulted —
|
|
7
|
+
* coherence runs UNCONDITIONALLY (bit-identical; deliberately NOT wired to its
|
|
8
|
+
* gate-set membership, unlike 39.2's two gates). The result is read from
|
|
9
|
+
* `ctx.coherence()` (memoized) so the approve blocker-refuse and the later
|
|
10
|
+
* warn-emit share one computation.
|
|
11
|
+
*/
|
|
12
|
+
/** Approve-time blocker step: refuse (router → `exitCode = 2`) on any block. */
|
|
13
|
+
export declare const runCoherenceGate: DraftGateImpl;
|
|
14
|
+
/**
|
|
15
|
+
* Emit `coherence-warn` anomalies for warn-severity issues, gated on
|
|
16
|
+
* `anomaly-notify` membership. `source` distinguishes the call site
|
|
17
|
+
* (`'coherence.check'` for `draft check`, `'coherence.approve'` for approve).
|
|
18
|
+
*/
|
|
19
|
+
export declare function emitCoherenceWarns(ctx: DraftGateContext, source: 'coherence.check' | 'coherence.approve'): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* `draft check` presentation: print every issue — `[BLOCK] code: msg` for
|
|
22
|
+
* blocks, `[WARN] [WARN] code: msg` for warns (the existing double-`[WARN]` is
|
|
23
|
+
* preserved, bit-identical). Returns whether any block-severity issue was seen.
|
|
24
|
+
*/
|
|
25
|
+
export declare function printAllCoherenceIssues(issues: CoherenceIssue[], io: IoPort): boolean;
|
|
26
|
+
//# sourceMappingURL=coherence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coherence.d.ts","sourceRoot":"","sources":["../../src/gates/coherence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;GAOG;AAEH,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,EAAE,aAO9B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,iBAAiB,GAAG,mBAAmB,GAC9C,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,cAAc,EAAE,EACxB,EAAE,EAAE,MAAM,GACT,OAAO,CAYT"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coherence gate (Phase 23.2). Extracted from draft.ts (Phase 39.7).
|
|
3
|
+
* `coherence-check` is an ALWAYS_FIRE gate but is never membership-consulted —
|
|
4
|
+
* coherence runs UNCONDITIONALLY (bit-identical; deliberately NOT wired to its
|
|
5
|
+
* gate-set membership, unlike 39.2's two gates). The result is read from
|
|
6
|
+
* `ctx.coherence()` (memoized) so the approve blocker-refuse and the later
|
|
7
|
+
* warn-emit share one computation.
|
|
8
|
+
*/
|
|
9
|
+
/** Approve-time blocker step: refuse (router → `exitCode = 2`) on any block. */
|
|
10
|
+
export const runCoherenceGate = async (ctx) => {
|
|
11
|
+
const blockers = ctx.coherence().issues.filter((i) => i.severity === 'block');
|
|
12
|
+
if (blockers.length > 0) {
|
|
13
|
+
for (const b of blockers)
|
|
14
|
+
ctx.io.err(`[BLOCK] ${b.code}: ${b.message}\n`);
|
|
15
|
+
return { outcome: 'refuse' };
|
|
16
|
+
}
|
|
17
|
+
return { outcome: 'pass' };
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Emit `coherence-warn` anomalies for warn-severity issues, gated on
|
|
21
|
+
* `anomaly-notify` membership. `source` distinguishes the call site
|
|
22
|
+
* (`'coherence.check'` for `draft check`, `'coherence.approve'` for approve).
|
|
23
|
+
*/
|
|
24
|
+
export async function emitCoherenceWarns(ctx, source) {
|
|
25
|
+
const warns = ctx.coherence().issues.filter((i) => i.severity === 'warn');
|
|
26
|
+
if (warns.length === 0)
|
|
27
|
+
return;
|
|
28
|
+
if (!ctx.gateSet.gates.includes('anomaly-notify'))
|
|
29
|
+
return;
|
|
30
|
+
const now = new Date().toISOString();
|
|
31
|
+
const events = warns.map((w) => ({
|
|
32
|
+
type: 'coherence-warn',
|
|
33
|
+
severity: 'warn',
|
|
34
|
+
message: w.message,
|
|
35
|
+
context: { code: w.code, source },
|
|
36
|
+
ts: now,
|
|
37
|
+
}));
|
|
38
|
+
await ctx.emit.coherenceWarn(events);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `draft check` presentation: print every issue — `[BLOCK] code: msg` for
|
|
42
|
+
* blocks, `[WARN] [WARN] code: msg` for warns (the existing double-`[WARN]` is
|
|
43
|
+
* preserved, bit-identical). Returns whether any block-severity issue was seen.
|
|
44
|
+
*/
|
|
45
|
+
export function printAllCoherenceIssues(issues, io) {
|
|
46
|
+
let blocked = false;
|
|
47
|
+
for (const i of issues) {
|
|
48
|
+
const line = `[${i.severity.toUpperCase()}] ${i.code}: ${i.message}`;
|
|
49
|
+
if (i.severity === 'block') {
|
|
50
|
+
io.err(line + '\n');
|
|
51
|
+
blocked = true;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
io.err('[WARN] ' + line + '\n');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return blocked;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=coherence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coherence.js","sourceRoot":"","sources":["../../src/gates/coherence.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAkB,KAAK,EAAE,GAAG,EAAuB,EAAE;IAChF,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAqB,EACrB,MAA+C;IAE/C,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAAE,OAAO;IAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAmB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,gBAAyB;QAC/B,QAAQ,EAAE,MAAe;QACzB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE;QACjC,EAAE,EAAE,GAAG;KACR,CAAC,CAAC,CAAC;IACJ,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAwB,EACxB,EAAU;IAEV,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACrE,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC3B,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GateImpl } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Test-coverage gate (Phase 14). Extracted from settle.ts verbatim. Invoked
|
|
4
|
+
* when 'test-coverage' is in the effective gate set. Refuses when any
|
|
5
|
+
* non-explicit AC has no linked test, unless --allow-missing-coverage / --force.
|
|
6
|
+
*/
|
|
7
|
+
export declare const runCoverageGate: GateImpl;
|
|
8
|
+
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/gates/coverage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,QAwB7B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { uncoveredAcs } from '../verify/coverage.js';
|
|
2
|
+
/**
|
|
3
|
+
* Test-coverage gate (Phase 14). Extracted from settle.ts verbatim. Invoked
|
|
4
|
+
* when 'test-coverage' is in the effective gate set. Refuses when any
|
|
5
|
+
* non-explicit AC has no linked test, unless --allow-missing-coverage / --force.
|
|
6
|
+
*/
|
|
7
|
+
export const runCoverageGate = async (ctx) => {
|
|
8
|
+
const coverageBypassed = ctx.opts.allowMissingCoverage === true;
|
|
9
|
+
if (ctx.opts.allowMissingCoverage || ctx.opts.auto === false) {
|
|
10
|
+
return { outcome: 'pass', flags: { coverageBypassed } };
|
|
11
|
+
}
|
|
12
|
+
const coverage = await ctx.coverage();
|
|
13
|
+
const acIds = ctx.draft.acceptanceCriteria.map((a) => a.id);
|
|
14
|
+
const unmet = uncoveredAcs(acIds.filter((id) => !ctx.explicitIds.has(id)), coverage);
|
|
15
|
+
if (unmet.length > 0 && !ctx.opts.force) {
|
|
16
|
+
const globsLabel = ctx.config?.verification?.testGlobs?.join(', ') ?? '(defaults)';
|
|
17
|
+
for (const id of unmet) {
|
|
18
|
+
ctx.io.err(`coverage: ${id} has no linked test (searched: ${globsLabel})\n`);
|
|
19
|
+
}
|
|
20
|
+
ctx.io.err('settle run refused: each AC needs at least one test that references its id (e.g. AC-1 in a describe/it). ' +
|
|
21
|
+
'Pass --allow-missing-coverage to bypass, or --force to settle anyway.\n');
|
|
22
|
+
return { outcome: 'refuse', flags: { coverageBypassed } };
|
|
23
|
+
}
|
|
24
|
+
return { outcome: 'pass', flags: { coverageBypassed } };
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/gates/coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAa,KAAK,EAAE,GAAG,EAAuB,EAAE;IAC1E,MAAM,gBAAgB,GAAG,GAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC;IAChE,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,YAAY,CACxB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAC9C,QAAQ,CACT,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,UAAU,GACd,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;QAClE,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,kCAAkC,UAAU,KAAK,CAAC,CAAC;QAC/E,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,2GAA2G;YACzG,yEAAyE,CAC5E,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC;AAC1D,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GateImpl } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Deep verifier gate (Phase 15). Extracted from settle.ts verbatim. Fires on
|
|
4
|
+
* --deep OR membership('deep-verify'); skipped under --auto=false.
|
|
5
|
+
*/
|
|
6
|
+
export declare const runDeepVerifyGate: GateImpl;
|
|
7
|
+
//# sourceMappingURL=deep-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-verify.d.ts","sourceRoot":"","sources":["../../src/gates/deep-verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAmF/B,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep verifier gate (Phase 15). Extracted from settle.ts verbatim. Fires on
|
|
3
|
+
* --deep OR membership('deep-verify'); skipped under --auto=false.
|
|
4
|
+
*/
|
|
5
|
+
export const runDeepVerifyGate = async (ctx) => {
|
|
6
|
+
const deepRequested = ctx.opts.deep === true || ctx.gateSet.gates.includes('deep-verify');
|
|
7
|
+
if (!deepRequested || ctx.opts.auto === false) {
|
|
8
|
+
return { outcome: 'pass' };
|
|
9
|
+
}
|
|
10
|
+
const acs = ctx.draft.acceptanceCriteria.map((a) => ({
|
|
11
|
+
id: a.id,
|
|
12
|
+
given: a.given,
|
|
13
|
+
when: a.when,
|
|
14
|
+
then: a.then,
|
|
15
|
+
}));
|
|
16
|
+
const coverageMap = await ctx.coverage();
|
|
17
|
+
const tests = {};
|
|
18
|
+
for (const [id, refs] of coverageMap)
|
|
19
|
+
tests[id] = refs;
|
|
20
|
+
const verifyInput = {
|
|
21
|
+
acs,
|
|
22
|
+
tests,
|
|
23
|
+
diff: '',
|
|
24
|
+
files: [...ctx.touchedFiles],
|
|
25
|
+
};
|
|
26
|
+
try {
|
|
27
|
+
const result = await ctx.verifiers.deep.verify(verifyInput);
|
|
28
|
+
const deepVerify = {};
|
|
29
|
+
for (const ac of acs) {
|
|
30
|
+
const v = result.verdicts[ac.id];
|
|
31
|
+
if (v) {
|
|
32
|
+
deepVerify[ac.id] = {
|
|
33
|
+
pass: v.pass,
|
|
34
|
+
reason: v.reason,
|
|
35
|
+
provider: result.provider,
|
|
36
|
+
...(result.model ? { model: result.model } : {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const offenders = acs
|
|
41
|
+
.map((a) => a.id)
|
|
42
|
+
.filter((id) => !ctx.explicitIds.has(id) &&
|
|
43
|
+
deepVerify[id] !== undefined &&
|
|
44
|
+
deepVerify[id].pass === false);
|
|
45
|
+
if (offenders.length > 0 && !ctx.opts.force) {
|
|
46
|
+
for (const id of offenders) {
|
|
47
|
+
ctx.io.err(`deep-verify: ${id} failed — ${deepVerify[id].reason} (provider: ${result.provider})\n`);
|
|
48
|
+
}
|
|
49
|
+
ctx.io.err('settle run --deep refused: the independent verifier rejected one or more ACs. ' +
|
|
50
|
+
'Pass --force to settle anyway, or address the gaps.\n');
|
|
51
|
+
return { outcome: 'refuse', summaryPatch: { deepVerify } };
|
|
52
|
+
}
|
|
53
|
+
return { outcome: 'pass', summaryPatch: { deepVerify } };
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
+
if (ctx.opts.allowVerifierFailure) {
|
|
58
|
+
ctx.io.err(`deep-verify: verifier failed (${message}); --allow-verifier-failure set, treating all ACs as pass=false.\n`);
|
|
59
|
+
const failedProvider = ctx.config?.verifier?.provider ?? 'mock';
|
|
60
|
+
const failedModel = ctx.config?.verifier?.model;
|
|
61
|
+
const deepVerify = {};
|
|
62
|
+
for (const ac of acs) {
|
|
63
|
+
deepVerify[ac.id] = {
|
|
64
|
+
pass: false,
|
|
65
|
+
reason: `verifier failed: ${message}`,
|
|
66
|
+
provider: failedProvider,
|
|
67
|
+
...(failedModel ? { model: failedModel } : {}),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const flags = { verifierFailure: { message, provider: failedProvider } };
|
|
71
|
+
return { outcome: 'pass', summaryPatch: { deepVerify }, flags };
|
|
72
|
+
}
|
|
73
|
+
ctx.io.err(`deep-verify: verifier failed — ${message}. Pass --allow-verifier-failure to continue.\n`);
|
|
74
|
+
return { outcome: 'refuse' };
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=deep-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-verify.js","sourceRoot":"","sources":["../../src/gates/deep-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CadenceConfig, CadenceState, Draft, GateSet } from '@manehorizons/cadence-types';
|
|
2
|
+
import type { DraftGateContext, DraftGateOpts } from './draft-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Build the `DraftGateContext` the draft gates consume (Phase 39.7). The draft
|
|
5
|
+
* command router owns construction; gates reach git/verifier/notifier/prompter/
|
|
6
|
+
* sidecar only through the ports built here. Verifier + coherence are memoized
|
|
7
|
+
* so they run at most once per command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildDraftContext(args: {
|
|
10
|
+
cwd: string;
|
|
11
|
+
state: CadenceState;
|
|
12
|
+
draft: Draft;
|
|
13
|
+
config: CadenceConfig | null;
|
|
14
|
+
gateSet: GateSet;
|
|
15
|
+
phase: string;
|
|
16
|
+
id: string;
|
|
17
|
+
projectMd: string;
|
|
18
|
+
opts: DraftGateOpts;
|
|
19
|
+
}): DraftGateContext;
|
|
20
|
+
//# sourceMappingURL=draft-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-context.d.ts","sourceRoot":"","sources":["../../src/gates/draft-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EACb,YAAY,EACZ,KAAK,EACL,OAAO,EACR,MAAM,6BAA6B,CAAC;AAWrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;CACrB,GAAG,gBAAgB,CA+CnB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { coherenceCheck } from '../coherence/check.js';
|
|
5
|
+
import { atomicWriteText } from '../state/atomic-write.js';
|
|
6
|
+
import { selectNotifier } from '../notify/factory.js';
|
|
7
|
+
import { selectPlanReviewVerifier } from '../verify/plan-review-factory.js';
|
|
8
|
+
import { emitPlanReviewUnconverged } from '../notify/plan-review.js';
|
|
9
|
+
import { ScriptedPrompter, StdinPrompter, } from '../verify/prompter.js';
|
|
10
|
+
/**
|
|
11
|
+
* Build the `DraftGateContext` the draft gates consume (Phase 39.7). The draft
|
|
12
|
+
* command router owns construction; gates reach git/verifier/notifier/prompter/
|
|
13
|
+
* sidecar only through the ports built here. Verifier + coherence are memoized
|
|
14
|
+
* so they run at most once per command.
|
|
15
|
+
*/
|
|
16
|
+
export function buildDraftContext(args) {
|
|
17
|
+
const { cwd, state, draft, config, gateSet, phase, id, projectMd, opts } = args;
|
|
18
|
+
let coherenceMemo;
|
|
19
|
+
let planReviewMemo;
|
|
20
|
+
const sidecarPath = join(cwd, '.cadence', 'phases', phase, `${id}-PLAN-REVIEW.json`);
|
|
21
|
+
return {
|
|
22
|
+
cwd,
|
|
23
|
+
state,
|
|
24
|
+
draft,
|
|
25
|
+
config,
|
|
26
|
+
gateSet,
|
|
27
|
+
phase,
|
|
28
|
+
id,
|
|
29
|
+
opts,
|
|
30
|
+
coherence: () => (coherenceMemo ??= coherenceCheck(draft, state, projectMd)),
|
|
31
|
+
verifiers: {
|
|
32
|
+
planReview: {
|
|
33
|
+
verify: (input) => (planReviewMemo ??= selectPlanReviewVerifier(config)).verify(input),
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
emit: {
|
|
37
|
+
coherenceWarn: (events) => notifyOrWarn(events, config),
|
|
38
|
+
planReviewUnconverged: (info) => emitPlanReviewUnconverged(selectNotifier(config), info),
|
|
39
|
+
},
|
|
40
|
+
prompter: { create: createPrompter },
|
|
41
|
+
planReviewSidecar: {
|
|
42
|
+
// Absent / corrupt / legacy-29.7 (no `attempts`) → {0, []}. history append-only.
|
|
43
|
+
read: async () => {
|
|
44
|
+
let attemptsSoFar = 0;
|
|
45
|
+
let history = [];
|
|
46
|
+
if (existsSync(sidecarPath)) {
|
|
47
|
+
try {
|
|
48
|
+
const prior = JSON.parse(await readFile(sidecarPath, 'utf8'));
|
|
49
|
+
if (typeof prior.attempts === 'number')
|
|
50
|
+
attemptsSoFar = prior.attempts;
|
|
51
|
+
if (Array.isArray(prior.history))
|
|
52
|
+
history = prior.history;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
/* corrupt/legacy → treat as fresh (attemptsSoFar 0) */
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { attemptsSoFar, history };
|
|
59
|
+
},
|
|
60
|
+
write: (text) => atomicWriteText(sidecarPath, text),
|
|
61
|
+
},
|
|
62
|
+
io: { err: (s) => process.stderr.write(s) },
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Prompter construction policy (test seam: CADENCE_PROMPTER_SCRIPT drives the
|
|
67
|
+
* walker without a real TTY; else StdinPrompter, which throws on a non-TTY — the
|
|
68
|
+
* approve gate turns that throw into a refusal).
|
|
69
|
+
*/
|
|
70
|
+
function createPrompter() {
|
|
71
|
+
const scripted = process.env.CADENCE_PROMPTER_SCRIPT;
|
|
72
|
+
if (scripted !== undefined) {
|
|
73
|
+
return new ScriptedPrompter(scripted.split('\n').filter((s) => s.length > 0 || s === ''));
|
|
74
|
+
}
|
|
75
|
+
return new StdinPrompter();
|
|
76
|
+
}
|
|
77
|
+
async function notifyOrWarn(events, config) {
|
|
78
|
+
const notifier = selectNotifier(config);
|
|
79
|
+
try {
|
|
80
|
+
await notifier.notify(events);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
84
|
+
process.stderr.write(`cadence-notify: ${notifier.name} transport failed — ${msg} (continuing)\n`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=draft-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-context.js","sourceRoot":"","sources":["../../src/gates/draft-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GateImpl } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* DRAFT-read mtime gate (Phase 23.1). Extracted from settle.ts verbatim
|
|
4
|
+
* (Phase 39.2). Fires when 'draft-read' is in the effective gate set (checked
|
|
5
|
+
* at the call site). Refuses when the DRAFT.md was edited after approve — its
|
|
6
|
+
* mtime is strictly newer than `state.draftReadAt` — unless --allow-stale-draft.
|
|
7
|
+
* No baseline (null draftReadAt) or an unavailable mtime ⇒ pass.
|
|
8
|
+
*/
|
|
9
|
+
export declare const runDraftReadGate: GateImpl;
|
|
10
|
+
//# sourceMappingURL=draft-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-read.d.ts","sourceRoot":"","sources":["../../src/gates/draft-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAiB9B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT-read mtime gate (Phase 23.1). Extracted from settle.ts verbatim
|
|
3
|
+
* (Phase 39.2). Fires when 'draft-read' is in the effective gate set (checked
|
|
4
|
+
* at the call site). Refuses when the DRAFT.md was edited after approve — its
|
|
5
|
+
* mtime is strictly newer than `state.draftReadAt` — unless --allow-stale-draft.
|
|
6
|
+
* No baseline (null draftReadAt) or an unavailable mtime ⇒ pass.
|
|
7
|
+
*/
|
|
8
|
+
export const runDraftReadGate = async (ctx) => {
|
|
9
|
+
if (ctx.state.draftReadAt === null)
|
|
10
|
+
return { outcome: 'pass' };
|
|
11
|
+
const mtimeMs = await ctx.draftMtimeMs();
|
|
12
|
+
if (mtimeMs === null)
|
|
13
|
+
return { outcome: 'pass' };
|
|
14
|
+
const baselineMs = Date.parse(ctx.state.draftReadAt);
|
|
15
|
+
if (mtimeMs > baselineMs) {
|
|
16
|
+
if (!ctx.opts.allowStaleDraft) {
|
|
17
|
+
ctx.io.err(`settle run refused: DRAFT.md was edited after approve (mtime ${new Date(mtimeMs).toISOString()} > draftReadAt ${ctx.state.draftReadAt}). Re-read it then re-approve, or pass --allow-stale-draft to override.\n`);
|
|
18
|
+
return { outcome: 'refuse' };
|
|
19
|
+
}
|
|
20
|
+
ctx.io.err('settle: --allow-stale-draft set; proceeding past draft-read gate (DRAFT.md mtime newer than draftReadAt).\n');
|
|
21
|
+
}
|
|
22
|
+
return { outcome: 'pass' };
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=draft-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-read.js","sourceRoot":"","sources":["../../src/gates/draft-read.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAa,KAAK,EAAE,GAAG,EAAuB,EAAE;IAC3E,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,gEAAgE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,kBAAkB,GAAG,CAAC,KAAK,CAAC,WAAW,2EAA2E,CAClN,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { AnomalyEvent, CadenceConfig, CadenceState, Draft, GateSet } from '@manehorizons/cadence-types';
|
|
2
|
+
import type { CoherenceResult } from '../coherence/check.js';
|
|
3
|
+
import type { PlanReviewInput, PlanReviewResult } from '../verify/plan-review.js';
|
|
4
|
+
import type { Prompter } from '../verify/prompter.js';
|
|
5
|
+
import type { ConvergenceSidecar, GateResult, IoPort } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Draft-surface gate contract (Phase 39.7). Parallel to the settle
|
|
8
|
+
* `SettleContext`/`GateImpl` but for gates that fire at `draft approve` time —
|
|
9
|
+
* different inputs (a parsed DRAFT, no PROGRESS/SUMMARY/diff), different
|
|
10
|
+
* collaborators. Reuses the shared `GateResult` shape from `./types.js`. The
|
|
11
|
+
* draft command router owns context construction; gates reach git/verifier/
|
|
12
|
+
* notifier/prompter/sidecar ONLY through these ports.
|
|
13
|
+
*/
|
|
14
|
+
/** The subset of `draft approve` flags the draft gates read. */
|
|
15
|
+
export interface DraftGateOpts {
|
|
16
|
+
readonly allowAutoComplex?: boolean;
|
|
17
|
+
/** commander's `--no-approve` → `approve === false` (bypass the manual gate). */
|
|
18
|
+
readonly approve?: boolean;
|
|
19
|
+
readonly allowPlanReviewFailure?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Plan-review verifier port (Phase 39.7); lazily `selectPlanReviewVerifier`. */
|
|
22
|
+
export interface DraftVerifierPorts {
|
|
23
|
+
readonly planReview: {
|
|
24
|
+
verify(input: PlanReviewInput): Promise<PlanReviewResult>;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Notification collaborator for the draft gates. */
|
|
28
|
+
export interface DraftEmitPort {
|
|
29
|
+
/** coherence-warn anomalies (Phase 23.2). The gate builds the events (it owns
|
|
30
|
+
* the `source` + timestamp); this wraps the selected notifier with the
|
|
31
|
+
* transport-fail stderr fallback. Membership gating is the gate's. */
|
|
32
|
+
coherenceWarn(events: AnomalyEvent[]): Promise<void>;
|
|
33
|
+
/** plan-review unconverged escalation anomaly (Phase 25.1 / 35.1). */
|
|
34
|
+
planReviewUnconverged(info: {
|
|
35
|
+
draftId: string;
|
|
36
|
+
attempts: number;
|
|
37
|
+
maxAttempts: number;
|
|
38
|
+
findings: number;
|
|
39
|
+
provider: string;
|
|
40
|
+
model?: string;
|
|
41
|
+
bypassed?: boolean;
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Prompter collaborator for the manual approve gate (Phase 24.1). `create()`
|
|
46
|
+
* builds the prompter (scripted via CADENCE_PROMPTER_SCRIPT, else StdinPrompter)
|
|
47
|
+
* and may throw on a non-TTY — the gate turns that throw into a refusal with the
|
|
48
|
+
* `manual-approve: …` message. The env/TTY construction policy lives in the
|
|
49
|
+
* draft-side adapter.
|
|
50
|
+
*/
|
|
51
|
+
export interface DraftPrompterPort {
|
|
52
|
+
create(): Prompter;
|
|
53
|
+
}
|
|
54
|
+
/** Everything a draft gate may read. Built once by the draft router. Readonly. */
|
|
55
|
+
export interface DraftGateContext {
|
|
56
|
+
readonly cwd: string;
|
|
57
|
+
readonly state: CadenceState;
|
|
58
|
+
readonly draft: Draft;
|
|
59
|
+
readonly config: CadenceConfig | null;
|
|
60
|
+
readonly gateSet: GateSet;
|
|
61
|
+
readonly phase: string;
|
|
62
|
+
readonly id: string;
|
|
63
|
+
readonly opts: DraftGateOpts;
|
|
64
|
+
/** Memoized `coherenceCheck(draft, state, projectMd)`; computed at most once
|
|
65
|
+
* per command so the blocker-refuse and warn-emit steps share one result. */
|
|
66
|
+
coherence(): CoherenceResult;
|
|
67
|
+
readonly verifiers: DraftVerifierPorts;
|
|
68
|
+
readonly emit: DraftEmitPort;
|
|
69
|
+
readonly prompter: DraftPrompterPort;
|
|
70
|
+
/** Plan-review convergence sidecar (Phase 35.1) — `<id>-PLAN-REVIEW.json`. */
|
|
71
|
+
readonly planReviewSidecar: ConvergenceSidecar;
|
|
72
|
+
readonly io: IoPort;
|
|
73
|
+
}
|
|
74
|
+
export type DraftGateImpl = (ctx: DraftGateContext) => Promise<GateResult>;
|
|
75
|
+
//# sourceMappingURL=draft-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-types.d.ts","sourceRoot":"","sources":["../../src/gates/draft-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,EACL,OAAO,EACR,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;GAOG;AAEH,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,iFAAiF;IACjF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE;QAAE,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;KAAE,CAAC;CACpF;AAED,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B;;2EAEuE;IACvE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,sEAAsE;IACtE,qBAAqB,CAAC,IAAI,EAAE;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,QAAQ,CAAC;CACpB;AAED,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B;kFAC8E;IAC9E,SAAS,IAAI,eAAe,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-types.js","sourceRoot":"","sources":["../../src/gates/draft-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CadenceConfig, CadenceState, Draft, GateSet, Profile, Tier } from '@manehorizons/cadence-types';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the effective profile for a phase. DRAFT frontmatter override wins;
|
|
4
|
+
* otherwise the project default from `.cadence/config.json` applies. Falls
|
|
5
|
+
* back to `'auto'` if neither is set.
|
|
6
|
+
*/
|
|
7
|
+
export declare function effectiveProfile(config: Pick<CadenceConfig, 'profile'> | null, draft: Pick<Draft, 'profile'> | null): Profile;
|
|
8
|
+
/**
|
|
9
|
+
* Compute the set of gates that should fire for a given (tier, profile)
|
|
10
|
+
* combination. Pure function; no I/O. `softCap` is true only for the
|
|
11
|
+
* `auto × complex` cell — gate implementations later phases refuse without
|
|
12
|
+
* `--allow-auto-complex`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function gatesFor(tier: Tier, profile: Profile): GateSet;
|
|
15
|
+
/**
|
|
16
|
+
* Convenience: derive the effective gate set from state + config + draft.
|
|
17
|
+
* State carries the active tier; draft (optional) provides the profile
|
|
18
|
+
* override; config provides the project default.
|
|
19
|
+
*/
|
|
20
|
+
export declare function effectiveGateSet(state: Pick<CadenceState, 'tier'>, config: Pick<CadenceConfig, 'profile'> | null, draft: Pick<Draft, 'profile' | 'tier'> | null): GateSet;
|
|
21
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/gates/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,KAAK,EAEL,OAAO,EACP,OAAO,EACP,IAAI,EACL,MAAM,6BAA6B,CAAC;AA0DrC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,EAC7C,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI,GACnC,OAAO,CAIT;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAa9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EACjC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,EAC7C,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,GAAG,IAAI,GAC5C,OAAO,CAIT"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gates that always fire regardless of (tier × profile). Free per DESIGN.md
|
|
3
|
+
* Section 4.1 — "always fire" row.
|
|
4
|
+
*/
|
|
5
|
+
const ALWAYS_FIRE = [
|
|
6
|
+
'coherence-check',
|
|
7
|
+
'structural-verifier',
|
|
8
|
+
'build-test-must-pass',
|
|
9
|
+
];
|
|
10
|
+
/**
|
|
11
|
+
* Per-cell deltas (gates added on top of ALWAYS_FIRE). Mirrors DESIGN.md
|
|
12
|
+
* Section 4.2 exactly. Keep this table the only source of truth — when the
|
|
13
|
+
* matrix changes, edit here, not in scattered call sites.
|
|
14
|
+
*/
|
|
15
|
+
const DELTAS = {
|
|
16
|
+
strict: {
|
|
17
|
+
'quick-fix': ['draft-read', 'approve', 'test-coverage', 'interactive-verdict'],
|
|
18
|
+
standard: [
|
|
19
|
+
'draft-read',
|
|
20
|
+
'approve',
|
|
21
|
+
'test-coverage',
|
|
22
|
+
'interactive-verdict',
|
|
23
|
+
'per-task-verify',
|
|
24
|
+
'code-review',
|
|
25
|
+
],
|
|
26
|
+
complex: [
|
|
27
|
+
'draft-read',
|
|
28
|
+
'approve',
|
|
29
|
+
'test-coverage',
|
|
30
|
+
'interactive-verdict',
|
|
31
|
+
'per-task-verify',
|
|
32
|
+
'code-review',
|
|
33
|
+
'plan-review',
|
|
34
|
+
'security-audit',
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
standard: {
|
|
38
|
+
'quick-fix': ['test-coverage'],
|
|
39
|
+
standard: ['test-coverage', 'draft-read', 'approve', 'anomaly-notify'],
|
|
40
|
+
complex: [
|
|
41
|
+
'test-coverage',
|
|
42
|
+
'draft-read',
|
|
43
|
+
'approve',
|
|
44
|
+
'anomaly-notify',
|
|
45
|
+
'code-review',
|
|
46
|
+
'deep-verify',
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
auto: {
|
|
50
|
+
'quick-fix': ['anomaly-notify'],
|
|
51
|
+
standard: ['test-coverage', 'anomaly-notify'],
|
|
52
|
+
complex: ['test-coverage', 'anomaly-notify'],
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Resolve the effective profile for a phase. DRAFT frontmatter override wins;
|
|
57
|
+
* otherwise the project default from `.cadence/config.json` applies. Falls
|
|
58
|
+
* back to `'auto'` if neither is set.
|
|
59
|
+
*/
|
|
60
|
+
export function effectiveProfile(config, draft) {
|
|
61
|
+
if (draft?.profile)
|
|
62
|
+
return draft.profile;
|
|
63
|
+
if (config?.profile)
|
|
64
|
+
return config.profile;
|
|
65
|
+
return 'auto';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Compute the set of gates that should fire for a given (tier, profile)
|
|
69
|
+
* combination. Pure function; no I/O. `softCap` is true only for the
|
|
70
|
+
* `auto × complex` cell — gate implementations later phases refuse without
|
|
71
|
+
* `--allow-auto-complex`.
|
|
72
|
+
*/
|
|
73
|
+
export function gatesFor(tier, profile) {
|
|
74
|
+
const deltas = DELTAS[profile][tier];
|
|
75
|
+
const seen = new Set();
|
|
76
|
+
const gates = [];
|
|
77
|
+
for (const g of [...ALWAYS_FIRE, ...deltas]) {
|
|
78
|
+
if (seen.has(g))
|
|
79
|
+
continue;
|
|
80
|
+
seen.add(g);
|
|
81
|
+
gates.push(g);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
gates,
|
|
85
|
+
softCap: profile === 'auto' && tier === 'complex',
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convenience: derive the effective gate set from state + config + draft.
|
|
90
|
+
* State carries the active tier; draft (optional) provides the profile
|
|
91
|
+
* override; config provides the project default.
|
|
92
|
+
*/
|
|
93
|
+
export function effectiveGateSet(state, config, draft) {
|
|
94
|
+
const tier = draft?.tier ?? state.tier ?? 'standard';
|
|
95
|
+
const profile = effectiveProfile(config, draft);
|
|
96
|
+
return gatesFor(tier, profile);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=engine.js.map
|