mandrel 2.59.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +57 -49
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +39 -121
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -124
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +123 -191
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +22 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +60 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +326 -523
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +17 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,46 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Ensures `coverage/coverage-final.json` is fresh before the CRAP gate: skip
|
|
4
|
+
* when the gate is off, no changed file is under `crap.targetDirs`, or the
|
|
5
|
+
* content-digest stamp matches; otherwise run `test:coverage` behind the
|
|
6
|
+
* host-level full-suite lock and stamp on success.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* 2. With `--skip-when-no-crap-files`: read `git diff --name-only <ref>...HEAD`
|
|
10
|
-
* (default ref `main`) and exit 0 if no changed file lives under
|
|
11
|
-
* `crap.targetDirs`.
|
|
12
|
-
* 3. Test freshness: content digest of `crap.targetDirs` vs. the persisted
|
|
13
|
-
* capture stamp (`coverage/.capture-stamp.json`), falling back to the
|
|
14
|
-
* artifact-mtime heuristic when no stamp exists. Exit 0 when fresh.
|
|
15
|
-
* 4. Otherwise announce the uncredited full-suite run — naming the
|
|
16
|
-
* invocation that would have deposited credit — and then spawn
|
|
17
|
-
* `npm run test:coverage`, serialized behind the host-level full-suite
|
|
18
|
-
* lock (Story #5173) so two concurrent runs on one checkout do not race;
|
|
19
|
-
* write a fresh capture stamp on success and propagate the exit code.
|
|
20
|
-
* With `--require-credited`, step 4 refuses instead of spawning, so the
|
|
21
|
-
* cost is never paid unannounced.
|
|
8
|
+
* `--require-credited` must stay an argument, never a config read: as policy
|
|
9
|
+
* it also refused the depositing run, leaving no path that could deposit.
|
|
22
10
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* have deposited. Reading it here applied the refusal to every invocation
|
|
27
|
-
* including the worker's depositing one, so turning the policy on left no
|
|
28
|
-
* path that could ever deposit and bricked the CRAP gate outright. The policy
|
|
29
|
-
* now lives where it is enforced — `close-validation/gates.js` passes this
|
|
30
|
-
* flag when the consumer sets it — and a bare invocation always runs.
|
|
31
|
-
*
|
|
32
|
-
* Step 3 is preceded by the changed-file skip when
|
|
33
|
-
* `delivery.quality.gates.crap.incrementalCoverage.skipWhenUnchanged` is on
|
|
34
|
-
* (the default): no changed file under `crap.targetDirs` versus `baseRef`
|
|
35
|
-
* means no capture at all.
|
|
36
|
-
*
|
|
37
|
-
* Exit codes:
|
|
38
|
-
* 0 — coverage is fresh (or capture skipped/succeeded).
|
|
39
|
-
* 1 — capture run failed (broken tests or coverage-threshold breach), or
|
|
40
|
-
* the run was refused because it carried no credit and
|
|
41
|
-
* `--require-credited` was passed. The caller MUST
|
|
42
|
-
* surface this — silently passing here would defeat the CRAP gate's
|
|
43
|
-
* `requireCoverage: true` policy.
|
|
11
|
+
* Exit codes: 0 fresh/skipped/captured; 1 capture failed or refused (callers
|
|
12
|
+
* MUST surface it); 75 lock wait expired and deferred (only under
|
|
13
|
+
* `MANDREL_FULL_SUITE_LOCK_ON_EXPIRY=defer`); 124 suite timed out.
|
|
44
14
|
*/
|
|
45
15
|
import { getChangedFiles } from './lib/changed-files.js';
|
|
46
16
|
import { isDirectInvocation } from './lib/cli-utils.js';
|
|
@@ -62,17 +32,15 @@ import { Logger } from './lib/Logger.js';
|
|
|
62
32
|
import { hasNpmScript, readPackageScripts } from './lib/npm-scripts.js';
|
|
63
33
|
|
|
64
34
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
35
|
+
* A `null` ref defers the fallback to `resolveChangedFilesRef`.
|
|
67
36
|
* @param {string[]} argv
|
|
68
|
-
* @returns {{ skipWhenNoCrapFiles: boolean, requireCredited: boolean, ref: string, cwd: string }}
|
|
37
|
+
* @returns {{ skipWhenNoCrapFiles: boolean, requireCredited: boolean, ref: string | null, cwd: string }}
|
|
69
38
|
*/
|
|
70
39
|
export function parseArgs(argv) {
|
|
71
40
|
const out = {
|
|
72
41
|
skipWhenNoCrapFiles: false,
|
|
73
|
-
// Story #5278 — an ARGUMENT, never a config read. See `runCoverageCapture`.
|
|
74
42
|
requireCredited: false,
|
|
75
|
-
ref:
|
|
43
|
+
ref: null,
|
|
76
44
|
cwd: process.cwd(),
|
|
77
45
|
};
|
|
78
46
|
for (let i = 2; i < argv.length; i += 1) {
|
|
@@ -86,16 +54,7 @@ export function parseArgs(argv) {
|
|
|
86
54
|
}
|
|
87
55
|
|
|
88
56
|
/**
|
|
89
|
-
*
|
|
90
|
-
* decision table (disabled gate, missing npm script, changed-file skip,
|
|
91
|
-
* freshness skip, capture + stamp) is reachable without spawning
|
|
92
|
-
* `npm run test:coverage` or touching the real filesystem.
|
|
93
|
-
*
|
|
94
|
-
* Every seam on the optional final `deps` parameter defaults to the real
|
|
95
|
-
* implementation (`.agents/rules/test-seams.md` rules 1-2, 4), so the CLI
|
|
96
|
-
* shell below and any production caller are unchanged.
|
|
97
|
-
*
|
|
98
|
-
* @param {string[]} [argv] Full `process.argv`-shaped array.
|
|
57
|
+
* @param {string[]} [argv]
|
|
99
58
|
* @param {{
|
|
100
59
|
* resolveConfigImpl?: typeof resolveConfig,
|
|
101
60
|
* getQualityImpl?: typeof getQuality,
|
|
@@ -109,9 +68,9 @@ export function parseArgs(argv) {
|
|
|
109
68
|
* filterFilesUnderTargetsImpl?: typeof filterFilesUnderTargets,
|
|
110
69
|
* logger?: { info: Function, warn: Function, error: Function },
|
|
111
70
|
* }} [deps]
|
|
112
|
-
* @returns {number}
|
|
71
|
+
* @returns {Promise<number>}
|
|
113
72
|
*/
|
|
114
|
-
export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
73
|
+
export async function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
115
74
|
const {
|
|
116
75
|
resolveConfigImpl = resolveConfig,
|
|
117
76
|
getQualityImpl = getQuality,
|
|
@@ -134,13 +93,7 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
|
134
93
|
return 0;
|
|
135
94
|
}
|
|
136
95
|
|
|
137
|
-
//
|
|
138
|
-
// distinctly. `close-validation/gates.js` already declines to register
|
|
139
|
-
// this gate when `test:coverage` is absent, so reaching here without the
|
|
140
|
-
// script means a direct/pre-push invocation in a consumer that never
|
|
141
|
-
// defined it. Surface a one-line, fix-naming diagnostic instead of
|
|
142
|
-
// spawning `npm run test:coverage` only to propagate npm's opaque
|
|
143
|
-
// "Missing script" exit code.
|
|
96
|
+
// Name the fix rather than propagate npm's opaque "Missing script" exit.
|
|
144
97
|
if (!hasNpmScriptImpl(readPackageScriptsImpl(args.cwd), 'test:coverage')) {
|
|
145
98
|
logger.error(
|
|
146
99
|
'[coverage-capture] ✖ No "test:coverage" script in package.json. ' +
|
|
@@ -150,29 +103,15 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
|
150
103
|
return 1;
|
|
151
104
|
}
|
|
152
105
|
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
// whichever path reaches the spawn is serialized without either of them
|
|
156
|
-
// knowing about it. `delivery.execution.fullSuiteLock: false` and
|
|
157
|
-
// `MANDREL_FULL_SUITE_LOCK=0` each disable it; both hatches live in
|
|
158
|
-
// `isFullSuiteLockEnabled`.
|
|
159
|
-
// Two wrappers, composed outermost-first: the credit probe announces (or
|
|
160
|
-
// refuses) the run, and only a run that survives it reaches the host lock.
|
|
161
|
-
// Whichever capture path gets here spawns through both without knowing
|
|
162
|
-
// about either.
|
|
106
|
+
// Outermost first: the credit probe announces or refuses the run, and only
|
|
107
|
+
// a surviving run reaches the host-level full-suite lock.
|
|
163
108
|
const capture = creditedCapture(lockedCapture(runCaptureImpl, config), {
|
|
164
109
|
requireCredited: args.requireCredited,
|
|
165
110
|
logger,
|
|
166
111
|
});
|
|
167
112
|
|
|
168
|
-
//
|
|
169
|
-
// `
|
|
170
|
-
// by default). `null` means "not applicable" (switched off, or a
|
|
171
|
-
// ref-resolution error) — fall through to the full-scope path below rather
|
|
172
|
-
// than silently skipping capture.
|
|
173
|
-
// The two capture paths take the same collaborators bar one; naming that
|
|
174
|
-
// set once keeps a new seam from being threaded into one and forgotten on
|
|
175
|
-
// the other.
|
|
113
|
+
// Shared so a new seam cannot reach one capture path and miss the other.
|
|
114
|
+
// An incremental `null` means not applicable: fall through to full scope.
|
|
176
115
|
const shared = {
|
|
177
116
|
crap,
|
|
178
117
|
coverage,
|
|
@@ -185,29 +124,26 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
|
185
124
|
logger,
|
|
186
125
|
};
|
|
187
126
|
|
|
188
|
-
const incrementalResult = tryIncrementalCapture({
|
|
127
|
+
const incrementalResult = await tryIncrementalCapture({
|
|
189
128
|
...shared,
|
|
190
129
|
filterFilesUnderTargetsImpl,
|
|
191
130
|
});
|
|
192
131
|
if (incrementalResult !== null) return incrementalResult;
|
|
193
132
|
|
|
194
|
-
return runFullScopeCapture(shared);
|
|
133
|
+
return await runFullScopeCapture(shared);
|
|
195
134
|
}
|
|
196
135
|
|
|
197
|
-
// cli-opt-out:
|
|
198
|
-
// The direct-invocation guard keeps `import`ing this module (from the unit
|
|
199
|
-
// tests that drive `runCoverageCapture` with injected seams) side-effect free;
|
|
200
|
-
// invoked as a CLI the behaviour — exit code and log lines — is unchanged.
|
|
136
|
+
// cli-opt-out: main resolves an exit code that is forwarded via process.exit(code); runAsCli's async-main signature does not preserve the result code.
|
|
201
137
|
if (isDirectInvocation(import.meta.url)) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
138
|
+
// `--help` must not reach the core, which would spawn the whole suite.
|
|
139
|
+
(handleCoverageCaptureHelp(process.argv)
|
|
140
|
+
? Promise.resolve(0)
|
|
141
|
+
: runCoverageCapture()
|
|
142
|
+
).then(
|
|
143
|
+
(code) => process.exit(code),
|
|
144
|
+
(err) => {
|
|
145
|
+
Logger.error('[coverage-capture] unexpected error:', err);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
},
|
|
148
|
+
);
|
|
213
149
|
}
|
|
@@ -1,58 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* `/deliver-light` entry point — a thin shell, not a second engine: a
|
|
5
|
+
* risk-only suitability gate, a receipt Story, then the same init/close
|
|
6
|
+
* scripts `/mandrel-deliver` uses (never reimplemented). `--backstop`
|
|
7
|
+
* re-checks the ACTUAL diff, the only size block. An escalation ends the
|
|
8
|
+
* light path, not the session.
|
|
5
9
|
*
|
|
6
|
-
*
|
|
7
|
-
* suitability gate, authors a minimal receipt `type::story`, and then hands off
|
|
8
|
-
* to the SAME engine scripts `/mandrel-deliver` uses:
|
|
9
|
-
*
|
|
10
|
-
* suitability gate → inline receipt Story → single-story-init.js
|
|
11
|
-
* → (agent implements + self-evals) → diff backstop
|
|
12
|
-
* → single-story-close.js (close-and-land, every gate byte-identical)
|
|
13
|
-
*
|
|
14
|
-
* Worktree, branch, lease, PR, and merge mechanics are **invoked, never
|
|
15
|
-
* reimplemented** — this file contains no parallel init/close logic
|
|
16
|
-
* ({@link buildNextCommands} references the engine scripts by name). The
|
|
17
|
-
* reusable decision core lives in
|
|
18
|
-
* {@link module:lib/orchestration/light-suitability}; this module is the CLI
|
|
19
|
-
* shell plus the receipt-authoring and diff-backstop wiring.
|
|
20
|
-
*
|
|
21
|
-
* Two modes:
|
|
22
|
-
*
|
|
23
|
-
* - **gate** (default) — judge a prompt's predicted footprint. On
|
|
24
|
-
* `proceed-light` it authors the receipt Story (via the plan-persist
|
|
25
|
-
* `createStoryIssues` surface) and prints the init/close hand-off,
|
|
26
|
-
* carrying any predicted-shape `warnings[]` (Story #5313: an over-ceiling
|
|
27
|
-
* prediction warns, it no longer stops). An un-ledgered verdict or an
|
|
28
|
-
* un-waivable risk rule emits an `escalated` terminal envelope, never
|
|
29
|
-
* landing silently. The former attended stop-and-ask outcome and the
|
|
30
|
-
* flag that answered it went with the gate they answered.
|
|
31
|
-
* - **backstop** (`--backstop --story <id>`) — re-check the ACTUAL diff of
|
|
32
|
-
* the Story branch after implementation; exit non-zero when it exceeds the
|
|
33
|
-
* light ceilings, so an over-scope diff is blocked rather than landed.
|
|
34
|
-
*
|
|
35
|
-
* ## Escalation is terminal, not advisory (Story #4746)
|
|
36
|
-
*
|
|
37
|
-
* Over-scope under `--yes` emits a schema-validated `story-deliver-terminal`
|
|
38
|
-
* envelope with status `escalated` and **ends the session**. Before that it was
|
|
39
|
-
* an ordinary gate envelope plus exit 2 — a warning a caller could walk past,
|
|
40
|
-
* and one mandrel-bench 2.13.0 light-arm run did exactly that: it read the
|
|
41
|
-
* escalation, invoked `/mandrel-plan` in the same session, and delivered. In-session
|
|
42
|
-
* planning under-decomposed (ONE Story against the scenario's 3-5 contract,
|
|
43
|
-
* where a fresh `/mandrel-plan` session on the identical seed authored four), so
|
|
44
|
-
* escalation silently produced the outcome the guard exists to prevent.
|
|
45
|
-
* {@link module:lib/orchestration/story-deliver-terminal.buildEscalationTerminal}
|
|
46
|
-
* carries the guarantees the schema then enforces.
|
|
47
|
-
*
|
|
48
|
-
* Usage:
|
|
49
|
-
* node .agents/scripts/deliver-light.js --prompt "<text>" \
|
|
50
|
-
* --creates path,path --acceptance 1 --route lite --reason "<why>"
|
|
51
|
-
* node .agents/scripts/deliver-light.js --prompt "<text>" --amends '#123' --route lite --reason "<why>"
|
|
52
|
-
* node .agents/scripts/deliver-light.js --backstop --story 4741
|
|
53
|
-
*
|
|
54
|
-
* Exit codes: 0 ok (proceed / clean backstop), 1 usage error, 2 the gate did
|
|
55
|
-
* not proceed light (an `escalated` terminal), 3 the diff backstop blocked.
|
|
10
|
+
* Exit codes: 0 ok, 1 usage error, 2 escalated, 3 backstop blocked.
|
|
56
11
|
*/
|
|
57
12
|
|
|
58
13
|
import { parseArgs } from 'node:util';
|
|
@@ -81,37 +36,26 @@ import { createProvider } from './lib/provider-factory.js';
|
|
|
81
36
|
const HELP = `\
|
|
82
37
|
Usage:
|
|
83
38
|
deliver-light.js --prompt <text> [--creates csv] [--refactors csv]
|
|
84
|
-
|
|
85
|
-
[--uncertainty u] [--route lite|full] [--reason <text>]
|
|
86
|
-
[--amends '#id'] [--yes]
|
|
39
|
+
--reason <text> [--amends '#id']
|
|
87
40
|
deliver-light.js --backstop --story <id>
|
|
88
41
|
|
|
89
42
|
The thin /deliver-light entry point: suitability gate → inline receipt Story →
|
|
90
43
|
the same single-story-init.js / single-story-close.js engine /mandrel-deliver uses.
|
|
91
44
|
|
|
92
|
-
The gate judges
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
45
|
+
The gate judges RISK, not size. Only two things refuse: a verdict with no
|
|
46
|
+
recorded reason, and an un-waivable risk rule the predicted PATHS trip (a
|
|
47
|
+
sensitive-path class, a migration paired with its consumers). The predicted-
|
|
48
|
+
shape ceilings were self-declared buckets and are gone (Story #5344, after
|
|
49
|
+
Story #5313 had already demoted them to warnings). The --backstop pass measures
|
|
50
|
+
the ACTUAL diff and is the only size block.
|
|
97
51
|
|
|
98
52
|
Gate options:
|
|
99
53
|
--prompt <text> Operator prompt describing the change. Required for the gate.
|
|
100
54
|
--creates <csv> Predicted NEW file paths (comma-separated).
|
|
101
55
|
--refactors <csv> Predicted edited/existing file paths (comma-separated).
|
|
102
|
-
--
|
|
103
|
-
|
|
104
|
-
N same-shaped edits count once).
|
|
105
|
-
--magnitude <m> Coarse effort bucket: trivial | moderate | substantial
|
|
106
|
-
(default moderate; substantial routes to /mandrel-plan).
|
|
107
|
-
--uncertainty <u> determined (the request fixes the shape) | needs-design
|
|
108
|
-
(default determined; needs-design routes to /mandrel-plan).
|
|
109
|
-
--route <r> Ledgered model verdict route: lite | full.
|
|
110
|
-
--reason <text> Recorded reason for a lite verdict (required for lite).
|
|
56
|
+
--reason <text> Recorded reason for taking the light path. Required: an
|
|
57
|
+
un-ledgered verdict escalates.
|
|
111
58
|
--amends <#id> Mark this as an amendment of an existing issue.
|
|
112
|
-
--yes Unattended marker. Escalation is terminal either way;
|
|
113
|
-
the flag is accepted so unattended callers keep their
|
|
114
|
-
invocation shape.
|
|
115
59
|
|
|
116
60
|
Backstop options:
|
|
117
61
|
--backstop Re-check the ACTUAL diff after implementation. Bounds the
|
|
@@ -126,8 +70,6 @@ Backstop options:
|
|
|
126
70
|
`;
|
|
127
71
|
|
|
128
72
|
/**
|
|
129
|
-
* Split a comma-separated path list into trimmed, non-empty entries.
|
|
130
|
-
*
|
|
131
73
|
* @param {string|undefined} csv
|
|
132
74
|
* @returns {string[]}
|
|
133
75
|
*/
|
|
@@ -140,9 +82,6 @@ export function parseCsvPaths(csv) {
|
|
|
140
82
|
}
|
|
141
83
|
|
|
142
84
|
/**
|
|
143
|
-
* Assemble the predicted `changes[]` footprint from the declared creates /
|
|
144
|
-
* refactors lists — the input {@link deriveLightSuitability} shape-checks.
|
|
145
|
-
*
|
|
146
85
|
* @param {{ creates?: string[], refactors?: string[] }} args
|
|
147
86
|
* @returns {Array<{ path: string, assumption: string }>}
|
|
148
87
|
*/
|
|
@@ -154,63 +93,26 @@ export function buildPredictedChanges({ creates = [], refactors = [] } = {}) {
|
|
|
154
93
|
}
|
|
155
94
|
|
|
156
95
|
/**
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
* below 1 yields a single-item array (a Story with no contract cannot be judged
|
|
160
|
-
* trivial, and the shape derivation rejects a zero-length acceptance anyway).
|
|
161
|
-
*
|
|
162
|
-
* @param {unknown} count
|
|
163
|
-
* @returns {string[]}
|
|
164
|
-
*/
|
|
165
|
-
export function synthesizeAcceptance(count) {
|
|
166
|
-
const n =
|
|
167
|
-
typeof count === 'number' && Number.isFinite(count) && count >= 1
|
|
168
|
-
? Math.floor(count)
|
|
169
|
-
: 1;
|
|
170
|
-
return Array.from({ length: n }, (_v, i) => `AC-${i + 1}`);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Run the suitability gate purely — no I/O. Returns the outcome envelope the
|
|
175
|
-
* CLI serializes. The prompt text and `--amends` target are deliberately **not**
|
|
176
|
-
* inputs: routing is shape-checked identically whether or not the change is an
|
|
177
|
-
* amendment (Story #4740 R3), and the prompt's text carries no routing signal —
|
|
178
|
-
* the predicted footprint does. Both flow into the receipt Story instead.
|
|
179
|
-
*
|
|
96
|
+
* Pure. The prompt and `--amends` are deliberately not inputs: only the
|
|
97
|
+
* recorded reason and the predicted paths carry a routing signal.
|
|
180
98
|
* @param {{
|
|
181
99
|
* creates?: string[],
|
|
182
100
|
* refactors?: string[],
|
|
183
|
-
* acceptance?: number,
|
|
184
|
-
* kinds?: string[],
|
|
185
|
-
* magnitude?: string,
|
|
186
|
-
* uncertainty?: string,
|
|
187
|
-
* route?: string,
|
|
188
101
|
* reason?: string,
|
|
189
102
|
* injectedRules?: object,
|
|
190
|
-
* }} args
|
|
191
|
-
* axes the gate judges (Story #4764); omitting them declares no signal, not a
|
|
192
|
-
* small one — an unrecognized bucket is reported as a warning (Story #5313).
|
|
103
|
+
* }} args
|
|
193
104
|
* @returns {{ action: string, suitability: object, outcome: object }}
|
|
194
105
|
*/
|
|
195
106
|
export function runLightGate({
|
|
196
107
|
creates = [],
|
|
197
108
|
refactors = [],
|
|
198
|
-
acceptance,
|
|
199
|
-
kinds,
|
|
200
|
-
magnitude,
|
|
201
|
-
uncertainty,
|
|
202
|
-
route,
|
|
203
109
|
reason,
|
|
204
110
|
injectedRules,
|
|
205
111
|
} = {}) {
|
|
206
112
|
const predictedChanges = buildPredictedChanges({ creates, refactors });
|
|
207
113
|
const suitability = deriveLightSuitability({
|
|
208
114
|
predictedChanges,
|
|
209
|
-
|
|
210
|
-
predictedKinds: kinds,
|
|
211
|
-
predictedMagnitude: magnitude,
|
|
212
|
-
predictedUncertainty: uncertainty,
|
|
213
|
-
verdict: { route, reason },
|
|
115
|
+
verdict: { reason },
|
|
214
116
|
injectedRules,
|
|
215
117
|
});
|
|
216
118
|
const outcome = resolveLightGateOutcome({ suitability });
|
|
@@ -218,9 +120,6 @@ export function runLightGate({
|
|
|
218
120
|
}
|
|
219
121
|
|
|
220
122
|
/**
|
|
221
|
-
* Author the receipt Story via the plan-persist creation surface (reused, not
|
|
222
|
-
* reimplemented). Injectable seams keep it unit-testable without a network.
|
|
223
|
-
*
|
|
224
123
|
* @param {{
|
|
225
124
|
* provider: object,
|
|
226
125
|
* prompt: string,
|
|
@@ -256,10 +155,6 @@ export async function createLightReceipt({
|
|
|
256
155
|
}
|
|
257
156
|
|
|
258
157
|
/**
|
|
259
|
-
* The engine hand-off — the SAME scripts `/mandrel-deliver` uses. Named here as
|
|
260
|
-
* commands, never reimplemented: this is the whole of deliver-light's
|
|
261
|
-
* relationship to worktree/branch/lease/PR/merge mechanics.
|
|
262
|
-
*
|
|
263
158
|
* @param {number} storyId
|
|
264
159
|
* @returns {{ init: string, close: string }}
|
|
265
160
|
*/
|
|
@@ -271,9 +166,6 @@ export function buildNextCommands(storyId) {
|
|
|
271
166
|
}
|
|
272
167
|
|
|
273
168
|
/**
|
|
274
|
-
* Emit a JSON envelope on stdout (the machine surface) so a headless caller can
|
|
275
|
-
* branch on it. Human-readable log lines stay on stderr.
|
|
276
|
-
*
|
|
277
169
|
* @param {object} envelope
|
|
278
170
|
* @param {boolean} pretty
|
|
279
171
|
*/
|
|
@@ -286,10 +178,7 @@ function emit(envelope, pretty) {
|
|
|
286
178
|
}
|
|
287
179
|
|
|
288
180
|
/**
|
|
289
|
-
*
|
|
290
|
-
* {@link module:lib/orchestration/light-backstop}; this branches and prints.
|
|
291
|
-
*
|
|
292
|
-
* @param {object} values Parsed CLI values.
|
|
181
|
+
* @param {object} values
|
|
293
182
|
* @param {{ resolveFn?: typeof resolveBackstopOutcome }} [deps]
|
|
294
183
|
* @returns {Promise<number>}
|
|
295
184
|
*/
|
|
@@ -310,25 +199,9 @@ async function runBackstopMode(values, deps = {}) {
|
|
|
310
199
|
}
|
|
311
200
|
|
|
312
201
|
/**
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
* - **`escalate-plan`** returns a schema-validated `escalated` **terminal
|
|
318
|
-
* envelope** and stops (Story #4746). It is placed **first**, above every
|
|
319
|
-
* creation call site, so "nothing was started" is a property of the
|
|
320
|
-
* control flow rather than a claim the envelope makes about itself.
|
|
321
|
-
* - **`proceed-light`** authors the receipt Story and prints the hand-off,
|
|
322
|
-
* carrying the predicted-shape `warnings[]` (Story #5313) on the envelope
|
|
323
|
-
* and on stderr, so an over-ceiling prediction is stated rather than
|
|
324
|
-
* silently waved through. The former attended stop-and-ask outcome is
|
|
325
|
-
* gone: the gate never had a question a human could answer that the diff
|
|
326
|
-
* backstop does not answer better.
|
|
327
|
-
*
|
|
328
|
-
* The injectable seams exist so the no-side-effect guarantee is testable
|
|
329
|
-
* without a network: a test asserts the escalate path never reaches them.
|
|
330
|
-
*
|
|
331
|
-
* @param {object} values Parsed CLI values.
|
|
202
|
+
* The escalate branch sits above every creation call site, so "nothing was
|
|
203
|
+
* started" is a property of the control flow, not a claim of the envelope.
|
|
204
|
+
* @param {object} values
|
|
332
205
|
* @param {{
|
|
333
206
|
* createProviderFn?: typeof createProvider,
|
|
334
207
|
* resolveConfigFn?: typeof resolveConfig,
|
|
@@ -356,13 +229,6 @@ export async function runGateMode(values, deps = {}) {
|
|
|
356
229
|
const gate = runLightGate({
|
|
357
230
|
creates: parseCsvPaths(values.creates),
|
|
358
231
|
refactors: parseCsvPaths(values.refactors),
|
|
359
|
-
acceptance: values.acceptance
|
|
360
|
-
? Number.parseInt(String(values.acceptance), 10)
|
|
361
|
-
: 1,
|
|
362
|
-
kinds: parseCsvPaths(values.kinds),
|
|
363
|
-
magnitude: values.magnitude,
|
|
364
|
-
uncertainty: values.uncertainty,
|
|
365
|
-
route: values.route,
|
|
366
232
|
reason: values.reason,
|
|
367
233
|
});
|
|
368
234
|
|
|
@@ -372,16 +238,14 @@ export async function runGateMode(values, deps = {}) {
|
|
|
372
238
|
reasons: gate.outcome.reasons,
|
|
373
239
|
});
|
|
374
240
|
emitTerminalFn(envelope);
|
|
375
|
-
//
|
|
376
|
-
// recalibratable from evidence even now that only risk rules refuse.
|
|
241
|
+
// Telemetered so the rules stay recalibratable from evidence.
|
|
377
242
|
await recordRefusalFn({ gate, amends: values.amends });
|
|
378
243
|
Logger.warn(
|
|
379
|
-
`[deliver-light] ESCALATED to /mandrel-plan —
|
|
244
|
+
`[deliver-light] ESCALATED to /mandrel-plan — the light path ENDS here; run ${envelope.nextCommand}, seeded with these reasons: ${gate.outcome.reasons.join('; ')}`,
|
|
380
245
|
);
|
|
381
246
|
return exitCodeForTerminal(envelope);
|
|
382
247
|
}
|
|
383
248
|
|
|
384
|
-
const warnings = gate.outcome.warnings ?? [];
|
|
385
249
|
const provider = createProviderFn(resolveConfigFn());
|
|
386
250
|
const receipt = await createReceiptFn({
|
|
387
251
|
provider,
|
|
@@ -398,15 +262,11 @@ export async function runGateMode(values, deps = {}) {
|
|
|
398
262
|
action: 'proceed-light',
|
|
399
263
|
storyId: receipt.storyId,
|
|
400
264
|
url: receipt.url,
|
|
401
|
-
warnings,
|
|
402
265
|
nextCommands: buildNextCommands(receipt.storyId),
|
|
403
266
|
outcome: gate.outcome,
|
|
404
267
|
},
|
|
405
268
|
values.pretty,
|
|
406
269
|
);
|
|
407
|
-
for (const warning of warnings) {
|
|
408
|
-
Logger.warn(`[deliver-light] ⚠ ${warning}`);
|
|
409
|
-
}
|
|
410
270
|
Logger.info(
|
|
411
271
|
`[deliver-light] receipt Story #${receipt.storyId} created — hand off to single-story-init.js.`,
|
|
412
272
|
);
|
|
@@ -419,14 +279,8 @@ async function main() {
|
|
|
419
279
|
prompt: { type: 'string' },
|
|
420
280
|
creates: { type: 'string' },
|
|
421
281
|
refactors: { type: 'string' },
|
|
422
|
-
acceptance: { type: 'string' },
|
|
423
|
-
kinds: { type: 'string' },
|
|
424
|
-
magnitude: { type: 'string' },
|
|
425
|
-
uncertainty: { type: 'string' },
|
|
426
|
-
route: { type: 'string' },
|
|
427
282
|
reason: { type: 'string' },
|
|
428
283
|
amends: { type: 'string' },
|
|
429
|
-
yes: { type: 'boolean', default: false },
|
|
430
284
|
backstop: { type: 'boolean', default: false },
|
|
431
285
|
story: { type: 'string' },
|
|
432
286
|
pretty: { type: 'boolean', default: false },
|
|
@@ -1,40 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Read-only: probes a stranded Story's live state and prints the ONE command
|
|
5
|
+
* that resumes it — never a menu, and never a re-dispatch, which would re-run
|
|
6
|
+
* init under live work and put a second close on one PR. Covers the
|
|
7
|
+
* merged-but-label-stale Story that `/mandrel-deliver` refuses outright.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* worktree, and the PR (state + checks), then walks a fixed decision table
|
|
10
|
-
* and prints one command with the evidence it was derived from. It never
|
|
11
|
-
* prints a menu — a menu of options is what the operator already has, and it
|
|
12
|
-
* is the thing they cannot act on.
|
|
13
|
-
*
|
|
14
|
-
* The strand this exists for above all others is the **merged-but-label-stale**
|
|
15
|
-
* Story: a `/mandrel-deliver` re-run refuses it outright, because
|
|
16
|
-
* `single-story-init.js` hard-errors on an already-closed Story. Before this
|
|
17
|
-
* surface, that Story had no automated way back.
|
|
18
|
-
*
|
|
19
|
-
* Every command it prints **resumes** — it re-enters the in-flight worker or
|
|
20
|
-
* close, or closes the branch that is already pushed. None of them re-dispatch
|
|
21
|
-
* the Story, and that is deliberate: since Story #4876 the close-and-land tail
|
|
22
|
-
* belongs to the dispatching orchestrator, so a worker returning without a
|
|
23
|
-
* terminal envelope is the expected shape rather than evidence the Story never
|
|
24
|
-
* ran. Answering it with a fresh dispatch re-runs `single-story-init.js`
|
|
25
|
-
* underneath live work and puts a second close on one PR.
|
|
26
|
-
*
|
|
27
|
-
* Usage:
|
|
28
|
-
* node .agents/scripts/deliver-recover.js --story <STORY_ID> [--cwd <main-repo>]
|
|
29
|
-
* [--json]
|
|
30
|
-
*
|
|
31
|
-
* Exit codes:
|
|
32
|
-
* 0 — a recovery shape was resolved and its next command printed (including
|
|
33
|
-
* the "nothing to recover" shapes). Reading state is not a failure.
|
|
34
|
-
* 1 — the probe itself could not run (unreadable ticket, bad input).
|
|
35
|
-
*
|
|
36
|
-
* @see .agents/scripts/lib/orchestration/deliver-recover.js
|
|
37
|
-
* @see .agents/schemas/story-deliver-terminal.schema.json
|
|
9
|
+
* Exit codes: 0 a shape resolved (including nothing-to-recover), 1 the probe
|
|
10
|
+
* itself could not run.
|
|
38
11
|
*/
|
|
39
12
|
|
|
40
13
|
import { parseArgs } from 'node:util';
|
|
@@ -94,15 +67,6 @@ export function parseArgv(argv) {
|
|
|
94
67
|
}
|
|
95
68
|
|
|
96
69
|
/**
|
|
97
|
-
* Probe and report. Exported for testing.
|
|
98
|
-
*
|
|
99
|
-
* The optional final `deps` parameter is the module's injectable seam
|
|
100
|
-
* (`.agents/rules/test-seams.md` rules 1-2): config resolution, provider
|
|
101
|
-
* construction, the probe itself, the renderer, and the log sink each default
|
|
102
|
-
* to the real implementation, so the CLI path and every production caller are
|
|
103
|
-
* unchanged. The pre-existing `injected*` fields on the first argument stay
|
|
104
|
-
* supported for callers already threading a resolved provider/config.
|
|
105
|
-
*
|
|
106
70
|
* @param {object} [args]
|
|
107
71
|
* @param {{
|
|
108
72
|
* resolveConfigImpl?: typeof resolveConfig,
|