@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":"engine.js","sourceRoot":"","sources":["../../src/gates/engine.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,WAAW,GAAW;IAC1B,iBAAiB;IACjB,qBAAqB;IACrB,sBAAsB;CACvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,GAA0C;IACpD,MAAM,EAAE;QACN,WAAW,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,CAAC;QAC9E,QAAQ,EAAE;YACR,YAAY;YACZ,SAAS;YACT,eAAe;YACf,qBAAqB;YACrB,iBAAiB;YACjB,aAAa;SACd;QACD,OAAO,EAAE;YACP,YAAY;YACZ,SAAS;YACT,eAAe;YACf,qBAAqB;YACrB,iBAAiB;YACjB,aAAa;YACb,aAAa;YACb,gBAAgB;SACjB;KACF;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,CAAC,eAAe,CAAC;QAC9B,QAAQ,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,CAAC;QACtE,OAAO,EAAE;YACP,eAAe;YACf,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,aAAa;YACb,aAAa;SACd;KACF;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,QAAQ,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;QAC7C,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;KAC7C;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA6C,EAC7C,KAAoC;IAEpC,IAAI,KAAK,EAAE,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACzC,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAU,EAAE,OAAgB;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAQ,CAAC;IAC7B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IACD,OAAO;QACL,KAAK;QACL,OAAO,EAAE,OAAO,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS;KAClD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAiC,EACjC,MAA6C,EAC7C,KAA6C;IAE7C,MAAM,IAAI,GAAS,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC;IAC3D,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GateImpl } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Interactive AC-verdict gate (Phase 16). Extracted from settle.ts verbatim
|
|
4
|
+
* (Phase 39.3). Fires on --interactive OR membership('interactive-verdict');
|
|
5
|
+
* skipped under --auto=false. Walks each AC, prompting the user (via the
|
|
6
|
+
* injected prompter port) for pass/fail/skip, and refuses on any non-overridden
|
|
7
|
+
* `fail` verdict unless --force. The walker renders to stdout; refusals go to
|
|
8
|
+
* stderr via ctx.io.err. Produces `interactiveVerify` for the AC-merge finalizer.
|
|
9
|
+
*/
|
|
10
|
+
export declare const runInteractiveGate: GateImpl;
|
|
11
|
+
//# sourceMappingURL=interactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/gates/interactive.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEvD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAoDhC,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { walkAcsInteractively } from '../verify/interactive.js';
|
|
2
|
+
/**
|
|
3
|
+
* Interactive AC-verdict gate (Phase 16). Extracted from settle.ts verbatim
|
|
4
|
+
* (Phase 39.3). Fires on --interactive OR membership('interactive-verdict');
|
|
5
|
+
* skipped under --auto=false. Walks each AC, prompting the user (via the
|
|
6
|
+
* injected prompter port) for pass/fail/skip, and refuses on any non-overridden
|
|
7
|
+
* `fail` verdict unless --force. The walker renders to stdout; refusals go to
|
|
8
|
+
* stderr via ctx.io.err. Produces `interactiveVerify` for the AC-merge finalizer.
|
|
9
|
+
*/
|
|
10
|
+
export const runInteractiveGate = async (ctx) => {
|
|
11
|
+
const requested = ctx.opts.interactive === true ||
|
|
12
|
+
(ctx.opts.interactive !== false && ctx.gateSet.gates.includes('interactive-verdict'));
|
|
13
|
+
if (!requested || ctx.opts.auto === false) {
|
|
14
|
+
return { outcome: 'pass' };
|
|
15
|
+
}
|
|
16
|
+
let prompter;
|
|
17
|
+
try {
|
|
18
|
+
prompter = ctx.prompter.create();
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
ctx.io.err(`interactive: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
22
|
+
return { outcome: 'refuse' };
|
|
23
|
+
}
|
|
24
|
+
let interactiveVerify;
|
|
25
|
+
try {
|
|
26
|
+
const coverageMap = await ctx.coverage();
|
|
27
|
+
const tests = {};
|
|
28
|
+
for (const [id, refs] of coverageMap)
|
|
29
|
+
tests[id] = refs;
|
|
30
|
+
interactiveVerify = await walkAcsInteractively({
|
|
31
|
+
acs: ctx.draft.acceptanceCriteria.map((a) => ({
|
|
32
|
+
id: a.id,
|
|
33
|
+
given: a.given,
|
|
34
|
+
when: a.when,
|
|
35
|
+
then: a.then,
|
|
36
|
+
})),
|
|
37
|
+
tests,
|
|
38
|
+
files: [...ctx.touchedFiles],
|
|
39
|
+
}, prompter);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
await prompter.close?.();
|
|
43
|
+
}
|
|
44
|
+
// Refuse on any non-overridden 'fail' verdict unless --force.
|
|
45
|
+
const failing = Object.entries(interactiveVerify).filter(([id, v]) => v.verdict === 'fail' && !ctx.explicitIds.has(id));
|
|
46
|
+
if (failing.length > 0 && !ctx.opts.force) {
|
|
47
|
+
for (const [id, v] of failing) {
|
|
48
|
+
ctx.io.err(`interactive: ${id} fail${v.note ? ` — ${v.note}` : ''}\n`);
|
|
49
|
+
}
|
|
50
|
+
ctx.io.err('settle run --interactive refused: one or more ACs verdicted as fail. Pass --force to settle anyway.\n');
|
|
51
|
+
return { outcome: 'refuse', summaryPatch: { interactiveVerify } };
|
|
52
|
+
}
|
|
53
|
+
return { outcome: 'pass', summaryPatch: { interactiveVerify } };
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/gates/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BuildGateImpl } from './build-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Per-task verifier gate (Phase 24.2). Extracted from build.ts (Phase 39.7).
|
|
4
|
+
* Fires only when `'per-task-verify'` is in the effective gate set (the router
|
|
5
|
+
* only calls it on DONE outcomes). Resolves the task's declared files, diffs
|
|
6
|
+
* them via `ctx.diff`, runs the verifier, and returns a `PerTaskVerifyRecord`
|
|
7
|
+
* the router threads into `recordTaskOutcome`. A refuse halts the record write
|
|
8
|
+
* (router sets `exitCode = 1`), unchanged. Reaches git/verifier/notifier only
|
|
9
|
+
* through `ctx` ports.
|
|
10
|
+
*/
|
|
11
|
+
export declare const runPerTaskVerifyGate: BuildGateImpl;
|
|
12
|
+
//# sourceMappingURL=per-task-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"per-task-verify.d.ts","sourceRoot":"","sources":["../../src/gates/per-task-verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AAGrE;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAiDlC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-task verifier gate (Phase 24.2). Extracted from build.ts (Phase 39.7).
|
|
3
|
+
* Fires only when `'per-task-verify'` is in the effective gate set (the router
|
|
4
|
+
* only calls it on DONE outcomes). Resolves the task's declared files, diffs
|
|
5
|
+
* them via `ctx.diff`, runs the verifier, and returns a `PerTaskVerifyRecord`
|
|
6
|
+
* the router threads into `recordTaskOutcome`. A refuse halts the record write
|
|
7
|
+
* (router sets `exitCode = 1`), unchanged. Reaches git/verifier/notifier only
|
|
8
|
+
* through `ctx` ports.
|
|
9
|
+
*/
|
|
10
|
+
export const runPerTaskVerifyGate = async (ctx) => {
|
|
11
|
+
if (!ctx.gateSet.gates.includes('per-task-verify'))
|
|
12
|
+
return { outcome: 'pass' };
|
|
13
|
+
const task = ctx.draft.tasks.find((t) => t.id === ctx.taskId);
|
|
14
|
+
const files = task?.files ?? [];
|
|
15
|
+
const diff = ctx.diff(files);
|
|
16
|
+
const verdict = await ctx.verifiers.perTask.verify({
|
|
17
|
+
taskId: ctx.taskId,
|
|
18
|
+
files,
|
|
19
|
+
diff,
|
|
20
|
+
});
|
|
21
|
+
const refused = verdict.verdict === 'refuse';
|
|
22
|
+
const bypassed = refused && ctx.opts.allowPerTaskFailure === true;
|
|
23
|
+
if (refused && !ctx.opts.allowPerTaskFailure) {
|
|
24
|
+
ctx.io.err(`per-task-verify refused: ${verdict.reason}\n` +
|
|
25
|
+
'Pass --allow-per-task-failure to record DONE anyway.\n');
|
|
26
|
+
await ctx.emit.perTaskFail({
|
|
27
|
+
taskId: ctx.taskId,
|
|
28
|
+
provider: verdict.provider,
|
|
29
|
+
reason: verdict.reason,
|
|
30
|
+
bypassed: false,
|
|
31
|
+
});
|
|
32
|
+
return { outcome: 'refuse' };
|
|
33
|
+
}
|
|
34
|
+
if (refused && ctx.opts.allowPerTaskFailure) {
|
|
35
|
+
ctx.io.err('per-task-verify: --allow-per-task-failure set; proceeding past refuse verdict.\n');
|
|
36
|
+
await ctx.emit.perTaskFail({
|
|
37
|
+
taskId: ctx.taskId,
|
|
38
|
+
provider: verdict.provider,
|
|
39
|
+
reason: verdict.reason,
|
|
40
|
+
bypassed: true,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const perTaskRecord = {
|
|
44
|
+
verdict: verdict.verdict,
|
|
45
|
+
reason: verdict.reason,
|
|
46
|
+
provider: verdict.provider,
|
|
47
|
+
...(verdict.model ? { model: verdict.model } : {}),
|
|
48
|
+
...(bypassed ? { bypassed: true } : {}),
|
|
49
|
+
};
|
|
50
|
+
return { outcome: 'pass', summaryPatch: { perTaskRecord } };
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=per-task-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"per-task-verify.js","sourceRoot":"","sources":["../../src/gates/per-task-verify.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAkB,KAAK,EACtD,GAAG,EACiC,EAAE;IACtC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAE/E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK;QACL,IAAI;KACL,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC;IAElE,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7C,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,4BAA4B,OAAO,CAAC,MAAM,IAAI;YAC5C,wDAAwD,CAC3D,CAAC;QACF,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACzB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,kFAAkF,CACnF,CAAC;QACF,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACzB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAwB;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DraftGateImpl } from './draft-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Plan-review gate (Phase 25.1 + 35.1 bounded convergence). Extracted from
|
|
4
|
+
* draft.ts (Phase 39.7). Fires when `'plan-review'` is in the effective gate set
|
|
5
|
+
* (strict×complex). Runs against the parsed DRAFT (no diff/SUMMARY at approve
|
|
6
|
+
* time). Reads prior attempts from the convergence sidecar, computes the next
|
|
7
|
+
* convergence verdict, appends history + rewrites the sidecar (legacy 29.7
|
|
8
|
+
* top-level fields preserved byte-for-byte), then on `!pass` reproduces the
|
|
9
|
+
* three arms exactly. Reaches the verifier / sidecar / notifier only through
|
|
10
|
+
* `ctx` ports.
|
|
11
|
+
*/
|
|
12
|
+
export declare const runPlanReviewGate: DraftGateImpl;
|
|
13
|
+
//# sourceMappingURL=plan-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-review.d.ts","sourceRoot":"","sources":["../../src/gates/plan-review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAmG/B,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { nextConvergence } from '../verify/converge.js';
|
|
2
|
+
/**
|
|
3
|
+
* Plan-review gate (Phase 25.1 + 35.1 bounded convergence). Extracted from
|
|
4
|
+
* draft.ts (Phase 39.7). Fires when `'plan-review'` is in the effective gate set
|
|
5
|
+
* (strict×complex). Runs against the parsed DRAFT (no diff/SUMMARY at approve
|
|
6
|
+
* time). Reads prior attempts from the convergence sidecar, computes the next
|
|
7
|
+
* convergence verdict, appends history + rewrites the sidecar (legacy 29.7
|
|
8
|
+
* top-level fields preserved byte-for-byte), then on `!pass` reproduces the
|
|
9
|
+
* three arms exactly. Reaches the verifier / sidecar / notifier only through
|
|
10
|
+
* `ctx` ports.
|
|
11
|
+
*/
|
|
12
|
+
export const runPlanReviewGate = async (ctx) => {
|
|
13
|
+
if (!ctx.gateSet.gates.includes('plan-review'))
|
|
14
|
+
return { outcome: 'pass' };
|
|
15
|
+
// Phase 35.1 — bounded review-convergence. Prior attempts from the 29.7
|
|
16
|
+
// sidecar; a legacy 29.7-shape file (no `attempts`) or absent/corrupt → 0.
|
|
17
|
+
const { attemptsSoFar, history } = await ctx.planReviewSidecar.read();
|
|
18
|
+
const res = await ctx.verifiers.planReview.verify({ draft: ctx.draft });
|
|
19
|
+
const maxAttempts = ctx.config?.convergence?.maxAttempts ?? 3;
|
|
20
|
+
const nv = nextConvergence(res.pass, attemptsSoFar, maxAttempts);
|
|
21
|
+
const now = new Date().toISOString();
|
|
22
|
+
// `--allow-plan-review-failure` bypasses ANY failing plan-review (reloop OR
|
|
23
|
+
// escalate) and proceeds to BUILD; `bypassed` = a failing review the flag
|
|
24
|
+
// waved through, regardless of verdict.
|
|
25
|
+
const bypassed = !res.pass && ctx.opts.allowPlanReviewFailure === true;
|
|
26
|
+
history.push({
|
|
27
|
+
at: now,
|
|
28
|
+
pass: res.pass,
|
|
29
|
+
findingsCount: res.findings.length,
|
|
30
|
+
provider: res.provider,
|
|
31
|
+
...(res.model ? { model: res.model } : {}),
|
|
32
|
+
verdict: nv.verdict,
|
|
33
|
+
...(bypassed ? { bypassed: true } : {}),
|
|
34
|
+
});
|
|
35
|
+
await ctx.planReviewSidecar.write(JSON.stringify({
|
|
36
|
+
draftId: ctx.id,
|
|
37
|
+
converged: res.pass,
|
|
38
|
+
attempts: nv.verdict === 'pass' ? attemptsSoFar : nv.attempt,
|
|
39
|
+
maxAttempts,
|
|
40
|
+
history,
|
|
41
|
+
// legacy 29.7 top-level fields preserved for old readers:
|
|
42
|
+
pass: res.pass,
|
|
43
|
+
provider: res.provider,
|
|
44
|
+
...(res.model ? { model: res.model } : {}),
|
|
45
|
+
findings: res.findings.length,
|
|
46
|
+
at: now,
|
|
47
|
+
}, null, 2) + '\n');
|
|
48
|
+
if (!res.pass) {
|
|
49
|
+
for (const f of res.findings) {
|
|
50
|
+
ctx.io.err(`plan-review: ${f.severity} — ${f.message}\n`);
|
|
51
|
+
if (f.suggestedEdit) {
|
|
52
|
+
ctx.io.err(` ↳ suggested: ${f.suggestedEdit}\n`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (ctx.opts.allowPlanReviewFailure) {
|
|
56
|
+
// Bypass path — flag waves the failing review through (any verdict).
|
|
57
|
+
// Still emit the unconverged anomaly when the loop actually escalated.
|
|
58
|
+
if (nv.verdict === 'escalate') {
|
|
59
|
+
await ctx.emit.planReviewUnconverged({
|
|
60
|
+
draftId: ctx.id,
|
|
61
|
+
attempts: nv.attempt,
|
|
62
|
+
maxAttempts,
|
|
63
|
+
findings: res.findings.length,
|
|
64
|
+
provider: res.provider,
|
|
65
|
+
...(res.model ? { model: res.model } : {}),
|
|
66
|
+
bypassed: true,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
ctx.io.err(`plan-review: --allow-plan-review-failure set; proceeding past ` +
|
|
70
|
+
`${res.findings.length} finding(s).\n`);
|
|
71
|
+
// fall through to pass (BUILD transition).
|
|
72
|
+
}
|
|
73
|
+
else if (nv.verdict === 'reloop') {
|
|
74
|
+
ctx.io.err(`plan-review: attempt ${nv.attempt}/${maxAttempts} did not pass — ` +
|
|
75
|
+
`fix the DRAFT and re-run \`cadence draft approve\`, ` +
|
|
76
|
+
`or pass --allow-plan-review-failure to proceed anyway.\n`);
|
|
77
|
+
return { outcome: 'refuse' };
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// escalate, no bypass — hard human-decision stop.
|
|
81
|
+
await ctx.emit.planReviewUnconverged({
|
|
82
|
+
draftId: ctx.id,
|
|
83
|
+
attempts: nv.attempt,
|
|
84
|
+
maxAttempts,
|
|
85
|
+
findings: res.findings.length,
|
|
86
|
+
provider: res.provider,
|
|
87
|
+
...(res.model ? { model: res.model } : {}),
|
|
88
|
+
});
|
|
89
|
+
ctx.io.err(`draft approve refused: plan-review did NOT converge after ` +
|
|
90
|
+
`${maxAttempts} attempts — a human decision is required. ` +
|
|
91
|
+
`Re-scope the plan, or pass --allow-plan-review-failure to proceed anyway.\n`);
|
|
92
|
+
return { outcome: 'refuse' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// res.pass (converged) OR bypassed → pass (BUILD transition).
|
|
96
|
+
return { outcome: 'pass' };
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=plan-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-review.js","sourceRoot":"","sources":["../../src/gates/plan-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Gate } from '@manehorizons/cadence-types';
|
|
2
|
+
import type { GateImpl, SettleAccumulator, SettleContext } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The settle-dispatched gate subset (Phase 44.1). The four 39.7 gates
|
|
5
|
+
* (`coherence-check`, `approve`, `plan-review`, `per-task-verify`) fire in
|
|
6
|
+
* DRAFT/BUILD with their own `DraftGateImpl`/`BuildGateImpl` shapes, and
|
|
7
|
+
* `anomaly-notify` is a post-gates notify predicate, not a dispatched gate — so
|
|
8
|
+
* none of them belong in this `GateImpl` registry. Excluding them at the type
|
|
9
|
+
* level is what makes `GATE_REGISTRY` total over exactly what settle runs.
|
|
10
|
+
*/
|
|
11
|
+
export type SettleGate = Exclude<Gate, 'coherence-check' | 'approve' | 'plan-review' | 'per-task-verify' | 'anomaly-notify'>;
|
|
12
|
+
export interface GateEntry {
|
|
13
|
+
readonly impl: GateImpl;
|
|
14
|
+
/**
|
|
15
|
+
* Invoked unconditionally — the impl self-guards on `opts.* OR membership`
|
|
16
|
+
* and no-ops when not requested. Only `deep-verify` (`--deep`) and
|
|
17
|
+
* `interactive-verdict` (`--interactive`), which can fire WITHOUT the gate
|
|
18
|
+
* being in the set; a pure membership intersection would drop those runs.
|
|
19
|
+
*/
|
|
20
|
+
readonly selfGuarded?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Total over `SettleGate` — a missing entry is a COMPILE error. The single
|
|
24
|
+
* source of truth for which settle gates exist; `GATE_ORDER` owns the order.
|
|
25
|
+
*/
|
|
26
|
+
export declare const GATE_REGISTRY: Record<SettleGate, GateEntry>;
|
|
27
|
+
/**
|
|
28
|
+
* Canonical settle EXECUTION order — cheap→expensive, so the first refusal is
|
|
29
|
+
* the cheapest. This is NOT the gate-matrix order (`[...ALWAYS_FIRE, ...DELTAS]`
|
|
30
|
+
* in engine.ts): settle runs deep-verify before code-review, draft-read before
|
|
31
|
+
* coverage, etc. The driver walks THIS, never `gateSet.gates` array order.
|
|
32
|
+
*/
|
|
33
|
+
export declare const GATE_ORDER: SettleGate[];
|
|
34
|
+
export interface RunGatesResult {
|
|
35
|
+
readonly acc: SettleAccumulator;
|
|
36
|
+
readonly refused: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Drive the settle gate sequence (Phase 44.1). Walks `GATE_ORDER`, invoking a
|
|
40
|
+
* gate iff it is `selfGuarded` or present in `ctx.gateSet.gates`, merging each
|
|
41
|
+
* `GateResult` into the accumulator. The first refusing gate halts the loop —
|
|
42
|
+
* it has already written its own stderr; the caller sets `process.exitCode`.
|
|
43
|
+
* Bit-identical to the former hand-wired settle.ts dispatch block.
|
|
44
|
+
*
|
|
45
|
+
* `deps` is a test seam (production callers pass only `ctx`): it lets a test
|
|
46
|
+
* drive the real loop over recording stubs. The defaults ARE the real registry
|
|
47
|
+
* and order — the object identity wired here is what settle runs.
|
|
48
|
+
*/
|
|
49
|
+
export declare function runSettleGates(ctx: SettleContext, deps?: {
|
|
50
|
+
registry?: Record<SettleGate, GateEntry>;
|
|
51
|
+
order?: SettleGate[];
|
|
52
|
+
}): Promise<RunGatesResult>;
|
|
53
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/gates/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAc,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAWzF;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,CAC9B,IAAI,EACJ,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CACrF,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CASvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,UAAU,EASlC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;CAAO,GAC5E,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { mergeInto } from './types.js';
|
|
2
|
+
import { runDraftReadGate } from './draft-read.js';
|
|
3
|
+
import { runStructuralVerifierGate } from './structural-verifier.js';
|
|
4
|
+
import { runBuildTestGate } from './build-test-must-pass.js';
|
|
5
|
+
import { runCoverageGate } from './coverage.js';
|
|
6
|
+
import { runInteractiveGate } from './interactive.js';
|
|
7
|
+
import { runDeepVerifyGate } from './deep-verify.js';
|
|
8
|
+
import { runCodeReviewGate } from './code-review.js';
|
|
9
|
+
import { runSecurityAuditGate } from './security-audit.js';
|
|
10
|
+
/**
|
|
11
|
+
* Total over `SettleGate` — a missing entry is a COMPILE error. The single
|
|
12
|
+
* source of truth for which settle gates exist; `GATE_ORDER` owns the order.
|
|
13
|
+
*/
|
|
14
|
+
export const GATE_REGISTRY = {
|
|
15
|
+
'draft-read': { impl: runDraftReadGate },
|
|
16
|
+
'structural-verifier': { impl: runStructuralVerifierGate },
|
|
17
|
+
'build-test-must-pass': { impl: runBuildTestGate },
|
|
18
|
+
'test-coverage': { impl: runCoverageGate },
|
|
19
|
+
'interactive-verdict': { impl: runInteractiveGate, selfGuarded: true },
|
|
20
|
+
'deep-verify': { impl: runDeepVerifyGate, selfGuarded: true },
|
|
21
|
+
'code-review': { impl: runCodeReviewGate },
|
|
22
|
+
'security-audit': { impl: runSecurityAuditGate },
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Canonical settle EXECUTION order — cheap→expensive, so the first refusal is
|
|
26
|
+
* the cheapest. This is NOT the gate-matrix order (`[...ALWAYS_FIRE, ...DELTAS]`
|
|
27
|
+
* in engine.ts): settle runs deep-verify before code-review, draft-read before
|
|
28
|
+
* coverage, etc. The driver walks THIS, never `gateSet.gates` array order.
|
|
29
|
+
*/
|
|
30
|
+
export const GATE_ORDER = [
|
|
31
|
+
'draft-read',
|
|
32
|
+
'structural-verifier',
|
|
33
|
+
'build-test-must-pass',
|
|
34
|
+
'test-coverage',
|
|
35
|
+
'interactive-verdict',
|
|
36
|
+
'deep-verify',
|
|
37
|
+
'code-review',
|
|
38
|
+
'security-audit',
|
|
39
|
+
];
|
|
40
|
+
/**
|
|
41
|
+
* Drive the settle gate sequence (Phase 44.1). Walks `GATE_ORDER`, invoking a
|
|
42
|
+
* gate iff it is `selfGuarded` or present in `ctx.gateSet.gates`, merging each
|
|
43
|
+
* `GateResult` into the accumulator. The first refusing gate halts the loop —
|
|
44
|
+
* it has already written its own stderr; the caller sets `process.exitCode`.
|
|
45
|
+
* Bit-identical to the former hand-wired settle.ts dispatch block.
|
|
46
|
+
*
|
|
47
|
+
* `deps` is a test seam (production callers pass only `ctx`): it lets a test
|
|
48
|
+
* drive the real loop over recording stubs. The defaults ARE the real registry
|
|
49
|
+
* and order — the object identity wired here is what settle runs.
|
|
50
|
+
*/
|
|
51
|
+
export async function runSettleGates(ctx, deps = {}) {
|
|
52
|
+
const registry = deps.registry ?? GATE_REGISTRY;
|
|
53
|
+
const order = deps.order ?? GATE_ORDER;
|
|
54
|
+
const acc = { flags: {} };
|
|
55
|
+
for (const gate of order) {
|
|
56
|
+
const entry = registry[gate];
|
|
57
|
+
if (!entry.selfGuarded && !ctx.gateSet.gates.includes(gate))
|
|
58
|
+
continue;
|
|
59
|
+
const res = await entry.impl(ctx);
|
|
60
|
+
mergeInto(acc, res);
|
|
61
|
+
if (res.outcome === 'refuse')
|
|
62
|
+
return { acc, refused: true };
|
|
63
|
+
}
|
|
64
|
+
return { acc, refused: false };
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/gates/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AA0B3D;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkC;IAC1D,YAAY,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACxC,qBAAqB,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE;IAC1D,sBAAsB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAClD,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;IAC1C,qBAAqB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,IAAI,EAAE;IACtE,aAAa,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,EAAE;IAC7D,aAAa,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC1C,gBAAgB,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE;CACjD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,YAAY;IACZ,qBAAqB;IACrB,sBAAsB;IACtB,eAAe;IACf,qBAAqB;IACrB,aAAa;IACb,aAAa;IACb,gBAAgB;CACjB,CAAC;AAOF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAkB,EAClB,OAA2E,EAAE;IAE7E,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC;IACvC,MAAM,GAAG,GAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QACtE,MAAM,GAAG,GAAe,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9C,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GateImpl } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Security-audit verifier gate (Phase 25.2). Extracted from settle.ts verbatim
|
|
4
|
+
* (Phase 39.5). The final, most expensive gate — fires on membership
|
|
5
|
+
* ('security-audit', strict×complex only). Runs an OWASP-aware pass over the
|
|
6
|
+
* touched-file diff; CRITICAL findings refuse settle unless --force /
|
|
7
|
+
* --allow-security-audit-failure. All findings land on SUMMARY.securityAudit.
|
|
8
|
+
* Reaches git + the auditor only through ctx ports.
|
|
9
|
+
*/
|
|
10
|
+
export declare const runSecurityAuditGate: GateImpl;
|
|
11
|
+
//# sourceMappingURL=security-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-audit.d.ts","sourceRoot":"","sources":["../../src/gates/security-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEvD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAuClC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security-audit verifier gate (Phase 25.2). Extracted from settle.ts verbatim
|
|
3
|
+
* (Phase 39.5). The final, most expensive gate — fires on membership
|
|
4
|
+
* ('security-audit', strict×complex only). Runs an OWASP-aware pass over the
|
|
5
|
+
* touched-file diff; CRITICAL findings refuse settle unless --force /
|
|
6
|
+
* --allow-security-audit-failure. All findings land on SUMMARY.securityAudit.
|
|
7
|
+
* Reaches git + the auditor only through ctx ports.
|
|
8
|
+
*/
|
|
9
|
+
export const runSecurityAuditGate = async (ctx) => {
|
|
10
|
+
const touched = [...ctx.touchedFiles];
|
|
11
|
+
const diff = ctx.diff();
|
|
12
|
+
try {
|
|
13
|
+
const result = await ctx.verifiers.securityAudit.verify({ files: touched, diff });
|
|
14
|
+
const securityAuditFindings = result.findings;
|
|
15
|
+
const criticals = result.findings.filter((f) => f.severity === 'critical');
|
|
16
|
+
const bypassed = ctx.opts.force === true || ctx.opts.allowSecurityAuditFailure === true;
|
|
17
|
+
if (criticals.length > 0) {
|
|
18
|
+
for (const c of criticals) {
|
|
19
|
+
ctx.io.err(`security-audit: ${c.line !== undefined ? `${c.line} ` : ''}critical — ${c.message}\n`);
|
|
20
|
+
}
|
|
21
|
+
if (!bypassed) {
|
|
22
|
+
ctx.io.err(`settle run refused: security-audit reported ${criticals.length} CRITICAL finding(s). ` +
|
|
23
|
+
'Pass --allow-security-audit-failure to record them and settle anyway, or --force to bypass.\n');
|
|
24
|
+
return { outcome: 'refuse', summaryPatch: { securityAudit: securityAuditFindings } };
|
|
25
|
+
}
|
|
26
|
+
const flag = ctx.opts.force === true ? '--force' : '--allow-security-audit-failure';
|
|
27
|
+
ctx.io.err(`security-audit: ${flag} set; proceeding past ${criticals.length} CRITICAL finding(s).\n`);
|
|
28
|
+
}
|
|
29
|
+
return { outcome: 'pass', summaryPatch: { securityAudit: securityAuditFindings } };
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
33
|
+
ctx.io.err(`security-audit: verifier failed — ${message}. Pass --allow-security-audit-failure to continue.\n`);
|
|
34
|
+
if (ctx.opts.allowSecurityAuditFailure !== true && ctx.opts.force !== true) {
|
|
35
|
+
return { outcome: 'refuse' };
|
|
36
|
+
}
|
|
37
|
+
return { outcome: 'pass' };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=security-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-audit.js","sourceRoot":"","sources":["../../src/gates/security-audit.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAa,KAAK,EAAE,GAAG,EAAuB,EAAE;IAC/E,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,qBAAqB,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;QAC3E,MAAM,QAAQ,GACZ,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,yBAAyB,KAAK,IAAI,CAAC;QACzE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,mBAAmB,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,OAAO,IAAI,CACvF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,+CAA+C,SAAS,CAAC,MAAM,wBAAwB;oBACrF,+FAA+F,CAClG,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE,EAAE,CAAC;YACvF,CAAC;YACD,MAAM,IAAI,GACR,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gCAAgC,CAAC;YACzE,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,mBAAmB,IAAI,yBAAyB,SAAS,CAAC,MAAM,yBAAyB,CAC1F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE,EAAE,CAAC;IACrF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,qCAAqC,OAAO,sDAAsD,CACnG,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,CAAC,yBAAyB,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GateImpl } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structural-verifier gate (DESIGN.md §4.1 always-fire). Wired for real in
|
|
4
|
+
* Phase 39.2: refuses settle while any task is non-terminal, unless
|
|
5
|
+
* --allow-open-tasks / --force. Pure policy over `ctx.progress.tasks`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const runStructuralVerifierGate: GateImpl;
|
|
8
|
+
//# sourceMappingURL=structural-verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-verifier.d.ts","sourceRoot":"","sources":["../../src/gates/structural-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,YAAY,CAAC;AAUvD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAevC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal task statuses (DESIGN.md §4.1 "structural verifier"). A task in any
|
|
3
|
+
* other status (PENDING / IN_PROGRESS) is "open" and blocks settle.
|
|
4
|
+
* `DONE_WITH_CONCERNS` is terminal — a done-with-concerns task is settled, not
|
|
5
|
+
* open (docs/concepts.md historically undercounted it; corrected Phase 39.2).
|
|
6
|
+
*/
|
|
7
|
+
const TERMINAL = new Set(['DONE', 'DONE_WITH_CONCERNS', 'NEEDS_CONTEXT', 'BLOCKED']);
|
|
8
|
+
/**
|
|
9
|
+
* Structural-verifier gate (DESIGN.md §4.1 always-fire). Wired for real in
|
|
10
|
+
* Phase 39.2: refuses settle while any task is non-terminal, unless
|
|
11
|
+
* --allow-open-tasks / --force. Pure policy over `ctx.progress.tasks`.
|
|
12
|
+
*/
|
|
13
|
+
export const runStructuralVerifierGate = async (ctx) => {
|
|
14
|
+
const open = Object.entries(ctx.progress.tasks).filter(([, t]) => !TERMINAL.has(t.status));
|
|
15
|
+
if (open.length > 0 && !ctx.opts.allowOpenTasks && !ctx.opts.force) {
|
|
16
|
+
for (const [id, t] of open) {
|
|
17
|
+
ctx.io.err(`structural-verifier: task ${id} is ${t.status} (not terminal)\n`);
|
|
18
|
+
}
|
|
19
|
+
ctx.io.err('settle run refused: all tasks must be terminal (DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED). ' +
|
|
20
|
+
'Pass --allow-open-tasks to bypass, or --force to settle anyway.\n');
|
|
21
|
+
return { outcome: 'refuse' };
|
|
22
|
+
}
|
|
23
|
+
return { outcome: 'pass' };
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=structural-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-verifier.js","sourceRoot":"","sources":["../../src/gates/structural-verifier.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,oBAAoB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;AAErF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAa,KAAK,EAAE,GAAG,EAAuB,EAAE;IACpF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CACnC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACnE,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC3B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,MAAM,mBAAmB,CAAC,CAAC;QAChF,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,GAAG,CACR,wGAAwG;YACtG,mEAAmE,CACtE,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC,CAAC"}
|