mandrel 2.60.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 +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- 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 +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- 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 +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- 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 +10 -50
- 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 +5 -21
- 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 +31 -143
- 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 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- 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 +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- 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 +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- 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 -126
- 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 +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- 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 +31 -259
- 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 +21 -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 +5 -75
- 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 +42 -189
- 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 +42 -214
- 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 +26 -231
- 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 +52 -303
- 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 +14 -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 +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- 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 -94
- 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 +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- 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 +18 -80
- 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 +9 -50
- 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 +110 -290
- 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 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- 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 -126
- 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 +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- 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 +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- 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 +53 -221
- 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 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- 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 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- 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/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/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- 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 +25 -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 +105 -661
- 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 +15 -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 +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- 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/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 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- 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/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 -125
- 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 the ref
|
|
35
|
-
* `resolveChangedFilesRef` resolves means no capture at all (Story #5365).
|
|
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,18 +32,13 @@ import { Logger } from './lib/Logger.js';
|
|
|
62
32
|
import { hasNpmScript, readPackageScripts } from './lib/npm-scripts.js';
|
|
63
33
|
|
|
64
34
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* A `ref` of `null` means the caller named none; `resolveChangedFilesRef` owns
|
|
68
|
-
* the fallback (Story #5365).
|
|
69
|
-
*
|
|
35
|
+
* A `null` ref defers the fallback to `resolveChangedFilesRef`.
|
|
70
36
|
* @param {string[]} argv
|
|
71
37
|
* @returns {{ skipWhenNoCrapFiles: boolean, requireCredited: boolean, ref: string | null, cwd: string }}
|
|
72
38
|
*/
|
|
73
39
|
export function parseArgs(argv) {
|
|
74
40
|
const out = {
|
|
75
41
|
skipWhenNoCrapFiles: false,
|
|
76
|
-
// Story #5278 — an ARGUMENT, never a config read. See `runCoverageCapture`.
|
|
77
42
|
requireCredited: false,
|
|
78
43
|
ref: null,
|
|
79
44
|
cwd: process.cwd(),
|
|
@@ -89,16 +54,7 @@ export function parseArgs(argv) {
|
|
|
89
54
|
}
|
|
90
55
|
|
|
91
56
|
/**
|
|
92
|
-
*
|
|
93
|
-
* decision table (disabled gate, missing npm script, changed-file skip,
|
|
94
|
-
* freshness skip, capture + stamp) is reachable without spawning
|
|
95
|
-
* `npm run test:coverage` or touching the real filesystem.
|
|
96
|
-
*
|
|
97
|
-
* Every seam on the optional final `deps` parameter defaults to the real
|
|
98
|
-
* implementation (`.agents/rules/test-seams.md` rules 1-2, 4), so the CLI
|
|
99
|
-
* shell below and any production caller are unchanged.
|
|
100
|
-
*
|
|
101
|
-
* @param {string[]} [argv] Full `process.argv`-shaped array.
|
|
57
|
+
* @param {string[]} [argv]
|
|
102
58
|
* @param {{
|
|
103
59
|
* resolveConfigImpl?: typeof resolveConfig,
|
|
104
60
|
* getQualityImpl?: typeof getQuality,
|
|
@@ -112,9 +68,9 @@ export function parseArgs(argv) {
|
|
|
112
68
|
* filterFilesUnderTargetsImpl?: typeof filterFilesUnderTargets,
|
|
113
69
|
* logger?: { info: Function, warn: Function, error: Function },
|
|
114
70
|
* }} [deps]
|
|
115
|
-
* @returns {number}
|
|
71
|
+
* @returns {Promise<number>}
|
|
116
72
|
*/
|
|
117
|
-
export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
73
|
+
export async function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
118
74
|
const {
|
|
119
75
|
resolveConfigImpl = resolveConfig,
|
|
120
76
|
getQualityImpl = getQuality,
|
|
@@ -137,13 +93,7 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
|
137
93
|
return 0;
|
|
138
94
|
}
|
|
139
95
|
|
|
140
|
-
//
|
|
141
|
-
// distinctly. `close-validation/gates.js` already declines to register
|
|
142
|
-
// this gate when `test:coverage` is absent, so reaching here without the
|
|
143
|
-
// script means a direct/pre-push invocation in a consumer that never
|
|
144
|
-
// defined it. Surface a one-line, fix-naming diagnostic instead of
|
|
145
|
-
// spawning `npm run test:coverage` only to propagate npm's opaque
|
|
146
|
-
// "Missing script" exit code.
|
|
96
|
+
// Name the fix rather than propagate npm's opaque "Missing script" exit.
|
|
147
97
|
if (!hasNpmScriptImpl(readPackageScriptsImpl(args.cwd), 'test:coverage')) {
|
|
148
98
|
logger.error(
|
|
149
99
|
'[coverage-capture] ✖ No "test:coverage" script in package.json. ' +
|
|
@@ -153,29 +103,15 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
|
153
103
|
return 1;
|
|
154
104
|
}
|
|
155
105
|
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
// whichever path reaches the spawn is serialized without either of them
|
|
159
|
-
// knowing about it. `delivery.execution.fullSuiteLock: false` and
|
|
160
|
-
// `MANDREL_FULL_SUITE_LOCK=0` each disable it; both hatches live in
|
|
161
|
-
// `isFullSuiteLockEnabled`.
|
|
162
|
-
// Two wrappers, composed outermost-first: the credit probe announces (or
|
|
163
|
-
// refuses) the run, and only a run that survives it reaches the host lock.
|
|
164
|
-
// Whichever capture path gets here spawns through both without knowing
|
|
165
|
-
// 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.
|
|
166
108
|
const capture = creditedCapture(lockedCapture(runCaptureImpl, config), {
|
|
167
109
|
requireCredited: args.requireCredited,
|
|
168
110
|
logger,
|
|
169
111
|
});
|
|
170
112
|
|
|
171
|
-
//
|
|
172
|
-
// `
|
|
173
|
-
// by default). `null` means "not applicable" (switched off, or a
|
|
174
|
-
// ref-resolution error) — fall through to the full-scope path below rather
|
|
175
|
-
// than silently skipping capture.
|
|
176
|
-
// The two capture paths take the same collaborators bar one; naming that
|
|
177
|
-
// set once keeps a new seam from being threaded into one and forgotten on
|
|
178
|
-
// 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.
|
|
179
115
|
const shared = {
|
|
180
116
|
crap,
|
|
181
117
|
coverage,
|
|
@@ -188,29 +124,26 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
|
|
|
188
124
|
logger,
|
|
189
125
|
};
|
|
190
126
|
|
|
191
|
-
const incrementalResult = tryIncrementalCapture({
|
|
127
|
+
const incrementalResult = await tryIncrementalCapture({
|
|
192
128
|
...shared,
|
|
193
129
|
filterFilesUnderTargetsImpl,
|
|
194
130
|
});
|
|
195
131
|
if (incrementalResult !== null) return incrementalResult;
|
|
196
132
|
|
|
197
|
-
return runFullScopeCapture(shared);
|
|
133
|
+
return await runFullScopeCapture(shared);
|
|
198
134
|
}
|
|
199
135
|
|
|
200
|
-
// cli-opt-out:
|
|
201
|
-
// The direct-invocation guard keeps `import`ing this module (from the unit
|
|
202
|
-
// tests that drive `runCoverageCapture` with injected seams) side-effect free;
|
|
203
|
-
// 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.
|
|
204
137
|
if (isDirectInvocation(import.meta.url)) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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
|
+
);
|
|
216
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 for RISK. On
|
|
24
|
-
* `proceed-light` it authors the receipt Story (via the plan-persist
|
|
25
|
-
* `createStoryIssues` surface) and prints the init/close hand-off. An
|
|
26
|
-
* un-ledgered verdict or an un-waivable risk rule emits an `escalated`
|
|
27
|
-
* terminal envelope, never landing silently. Story #5313 demoted the
|
|
28
|
-
* predicted-shape ceilings to warnings and Story #5344 deleted them: a
|
|
29
|
-
* size bucket the caller declares about its own request is not evidence,
|
|
30
|
-
* and the backstop below measures the real thing.
|
|
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 for THIS path, not for the session (Story #5344)
|
|
36
|
-
*
|
|
37
|
-
* A refused gate emits a schema-validated `story-deliver-terminal` envelope
|
|
38
|
-
* with status `escalated`: nothing was created, and there is no smaller version
|
|
39
|
-
* of the light path to attempt. Story #4746 additionally required the SESSION
|
|
40
|
-
* to end, on one mandrel-bench 2.13.0 observation where an in-session
|
|
41
|
-
* `/mandrel-plan` under-decomposed. Story #5344 relaxes that half — the
|
|
42
|
-
* escalation still ends the light path, and `/mandrel-plan` may now be seeded
|
|
43
|
-
* with `escalation.reasons` in the same session (see
|
|
44
|
-
* `helpers/deliver-light.md`).
|
|
45
|
-
* {@link module:lib/orchestration/story-deliver-terminal.buildEscalationTerminal}
|
|
46
|
-
* carries the guarantees the schema enforces either way.
|
|
47
|
-
*
|
|
48
|
-
* Usage:
|
|
49
|
-
* node .agents/scripts/deliver-light.js --prompt "<text>" \
|
|
50
|
-
* --creates path,path --reason "<why>"
|
|
51
|
-
* node .agents/scripts/deliver-light.js --prompt "<text>" --amends '#123' --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';
|
|
@@ -115,8 +70,6 @@ Backstop options:
|
|
|
115
70
|
`;
|
|
116
71
|
|
|
117
72
|
/**
|
|
118
|
-
* Split a comma-separated path list into trimmed, non-empty entries.
|
|
119
|
-
*
|
|
120
73
|
* @param {string|undefined} csv
|
|
121
74
|
* @returns {string[]}
|
|
122
75
|
*/
|
|
@@ -129,9 +82,6 @@ export function parseCsvPaths(csv) {
|
|
|
129
82
|
}
|
|
130
83
|
|
|
131
84
|
/**
|
|
132
|
-
* Assemble the predicted `changes[]` footprint from the declared creates /
|
|
133
|
-
* refactors lists — the input {@link deriveLightSuitability} shape-checks.
|
|
134
|
-
*
|
|
135
85
|
* @param {{ creates?: string[], refactors?: string[] }} args
|
|
136
86
|
* @returns {Array<{ path: string, assumption: string }>}
|
|
137
87
|
*/
|
|
@@ -143,22 +93,14 @@ export function buildPredictedChanges({ creates = [], refactors = [] } = {}) {
|
|
|
143
93
|
}
|
|
144
94
|
|
|
145
95
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* inputs: routing is shape-checked identically whether or not the change is an
|
|
149
|
-
* amendment (Story #4740 R3), and the prompt's text carries no routing signal —
|
|
150
|
-
* the predicted footprint does. Both flow into the receipt Story instead.
|
|
151
|
-
*
|
|
96
|
+
* Pure. The prompt and `--amends` are deliberately not inputs: only the
|
|
97
|
+
* recorded reason and the predicted paths carry a routing signal.
|
|
152
98
|
* @param {{
|
|
153
99
|
* creates?: string[],
|
|
154
100
|
* refactors?: string[],
|
|
155
101
|
* reason?: string,
|
|
156
102
|
* injectedRules?: object,
|
|
157
|
-
* }} args
|
|
158
|
-
* gone, and so are the declared effort axes it sat beside — the recorded
|
|
159
|
-
* reason and the predicted paths are what the gate reads. Story #5366
|
|
160
|
-
* removed the last of them, `--acceptance`, whose value the gate clamped to
|
|
161
|
-
* a floor of one before reading it).
|
|
103
|
+
* }} args
|
|
162
104
|
* @returns {{ action: string, suitability: object, outcome: object }}
|
|
163
105
|
*/
|
|
164
106
|
export function runLightGate({
|
|
@@ -178,9 +120,6 @@ export function runLightGate({
|
|
|
178
120
|
}
|
|
179
121
|
|
|
180
122
|
/**
|
|
181
|
-
* Author the receipt Story via the plan-persist creation surface (reused, not
|
|
182
|
-
* reimplemented). Injectable seams keep it unit-testable without a network.
|
|
183
|
-
*
|
|
184
123
|
* @param {{
|
|
185
124
|
* provider: object,
|
|
186
125
|
* prompt: string,
|
|
@@ -216,10 +155,6 @@ export async function createLightReceipt({
|
|
|
216
155
|
}
|
|
217
156
|
|
|
218
157
|
/**
|
|
219
|
-
* The engine hand-off — the SAME scripts `/mandrel-deliver` uses. Named here as
|
|
220
|
-
* commands, never reimplemented: this is the whole of deliver-light's
|
|
221
|
-
* relationship to worktree/branch/lease/PR/merge mechanics.
|
|
222
|
-
*
|
|
223
158
|
* @param {number} storyId
|
|
224
159
|
* @returns {{ init: string, close: string }}
|
|
225
160
|
*/
|
|
@@ -231,9 +166,6 @@ export function buildNextCommands(storyId) {
|
|
|
231
166
|
}
|
|
232
167
|
|
|
233
168
|
/**
|
|
234
|
-
* Emit a JSON envelope on stdout (the machine surface) so a headless caller can
|
|
235
|
-
* branch on it. Human-readable log lines stay on stderr.
|
|
236
|
-
*
|
|
237
169
|
* @param {object} envelope
|
|
238
170
|
* @param {boolean} pretty
|
|
239
171
|
*/
|
|
@@ -246,10 +178,7 @@ function emit(envelope, pretty) {
|
|
|
246
178
|
}
|
|
247
179
|
|
|
248
180
|
/**
|
|
249
|
-
*
|
|
250
|
-
* {@link module:lib/orchestration/light-backstop}; this branches and prints.
|
|
251
|
-
*
|
|
252
|
-
* @param {object} values Parsed CLI values.
|
|
181
|
+
* @param {object} values
|
|
253
182
|
* @param {{ resolveFn?: typeof resolveBackstopOutcome }} [deps]
|
|
254
183
|
* @returns {Promise<number>}
|
|
255
184
|
*/
|
|
@@ -270,24 +199,9 @@ async function runBackstopMode(values, deps = {}) {
|
|
|
270
199
|
}
|
|
271
200
|
|
|
272
201
|
/**
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
* - **`escalate-plan`** returns a schema-validated `escalated` **terminal
|
|
278
|
-
* envelope** and stops (Story #4746). It is placed **first**, above every
|
|
279
|
-
* creation call site, so "nothing was started" is a property of the
|
|
280
|
-
* control flow rather than a claim the envelope makes about itself.
|
|
281
|
-
* - **`proceed-light`** authors the receipt Story and prints the hand-off.
|
|
282
|
-
* The former attended stop-and-ask outcome is gone, and so are the
|
|
283
|
-
* predicted-shape warnings Story #5313 left behind (Story #5344): the gate
|
|
284
|
-
* never had a question a human could answer that the diff backstop does
|
|
285
|
-
* not answer better.
|
|
286
|
-
*
|
|
287
|
-
* The injectable seams exist so the no-side-effect guarantee is testable
|
|
288
|
-
* without a network: a test asserts the escalate path never reaches them.
|
|
289
|
-
*
|
|
290
|
-
* @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
|
|
291
205
|
* @param {{
|
|
292
206
|
* createProviderFn?: typeof createProvider,
|
|
293
207
|
* resolveConfigFn?: typeof resolveConfig,
|
|
@@ -324,8 +238,7 @@ export async function runGateMode(values, deps = {}) {
|
|
|
324
238
|
reasons: gate.outcome.reasons,
|
|
325
239
|
});
|
|
326
240
|
emitTerminalFn(envelope);
|
|
327
|
-
//
|
|
328
|
-
// recalibratable from evidence even now that only risk rules refuse.
|
|
241
|
+
// Telemetered so the rules stay recalibratable from evidence.
|
|
329
242
|
await recordRefusalFn({ gate, amends: values.amends });
|
|
330
243
|
Logger.warn(
|
|
331
244
|
`[deliver-light] ESCALATED to /mandrel-plan — the light path ENDS here; run ${envelope.nextCommand}, seeded with these reasons: ${gate.outcome.reasons.join('; ')}`,
|
|
@@ -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,
|