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
|
@@ -2,37 +2,18 @@
|
|
|
2
2
|
/* node:coverage ignore file */
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Cross-platform driver for `npm test`.
|
|
5
|
+
* Cross-platform driver for `npm test`. Cleanup runs in-process so reserved
|
|
6
|
+
* temp artefacts are removed even when tests fail (`posttest` would not run).
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* so reserved test temp artefacts are removed even when tests fail.
|
|
8
|
+
* The child env unsets `NOTIFICATION_WEBHOOK_URL` so no test POSTs to a live
|
|
9
|
+
* webhook from `.env` (`MANDREL_ALLOW_TEST_WEBHOOKS=1` opts back in).
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* process.env); without this scrub, any test that transitively reaches
|
|
15
|
-
* `notify()` POSTs to the live endpoint. Set `MANDREL_ALLOW_TEST_WEBHOOKS=1`
|
|
16
|
-
* to opt back in for the rare case where a contract test deliberately
|
|
17
|
-
* exercises a sandbox endpoint.
|
|
11
|
+
* Every tier enumerates explicit file targets (`node --test` has no negative
|
|
12
|
+
* pattern), which overflows the Windows ~32 767-char command line, so targets
|
|
13
|
+
* are chunked into one spawn per chunk.
|
|
18
14
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* suites, so a single glob will not do), and `full` joined them in Story
|
|
22
|
-
* #5111 — `node --test` has no negative pattern, so "everything except
|
|
23
|
-
* `tests/e2e/**`" is only sayable as a file set. With ~700+ targets the
|
|
24
|
-
* joined command line crosses the Windows `CreateProcess` ~32 767-char
|
|
25
|
-
* `lpCommandLine` ceiling, and `spawnSync` throws `ENAMETOOLONG` before a
|
|
26
|
-
* single test runs. To stay safe on every platform the runner partitions the
|
|
27
|
-
* targets into chunks whose joined length stays well under that ceiling
|
|
28
|
-
* (`MAX_TARGET_CHARS`) and spawns one `node --test` process per chunk,
|
|
29
|
-
* aggregating the exit codes. On POSIX the far larger
|
|
30
|
-
* `POSIX_MAX_TARGET_CHARS` budget collapses every tier back into one spawn.
|
|
31
|
-
*
|
|
32
|
-
* Suite credit (Story #5313): a green full-tier run inside a `story-<id>`
|
|
33
|
-
* checkout deposits the `test` gate's evidence record — the one
|
|
34
|
-
* `single-story-close.js` reads — so a bare `npm test` in the worktree is
|
|
35
|
-
* credited at unchanged HEAD. See `lib/test-run-credit.js`.
|
|
15
|
+
* A green full-tier run in a `story-<id>` checkout deposits close's `test`
|
|
16
|
+
* gate evidence.
|
|
36
17
|
*/
|
|
37
18
|
|
|
38
19
|
import { spawnSync } from 'node:child_process';
|
|
@@ -55,10 +36,6 @@ import { listTestFilesForTier, parseTierArgv } from './lib/test-tiers.js';
|
|
|
55
36
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
56
37
|
const ROOT = path.resolve(__dirname, '..', '..');
|
|
57
38
|
|
|
58
|
-
// The runner contract (flag set, concurrency clamp, tier preflight) is
|
|
59
|
-
// declared once in `lib/test-runner-contract.js` so `run-coverage.js` shares
|
|
60
|
-
// it by construction. Re-exported here because this module is the runner's
|
|
61
|
-
// public face for its own unit tests.
|
|
62
39
|
export {
|
|
63
40
|
resolveTestConcurrency,
|
|
64
41
|
TEST_CONCURRENCY_MAX,
|
|
@@ -67,32 +44,15 @@ export {
|
|
|
67
44
|
};
|
|
68
45
|
|
|
69
46
|
/**
|
|
70
|
-
* Per-spawn
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* quoting). Budgeting the targets to 8 000 chars keeps every spawn's full
|
|
75
|
-
* command line at roughly a quarter of the ceiling — ample headroom for the
|
|
76
|
-
* exe path and any pass-through `--test-name-pattern` args — while keeping
|
|
77
|
-
* the chunk count (and thus the extra `node` start-ups) low.
|
|
78
|
-
*
|
|
79
|
-
* `MAX_TARGET_CHARS` is the **Windows** budget. On POSIX hosts `ARG_MAX` is
|
|
80
|
-
* far higher (~256 KB on macOS, ~1 MB on Linux), so applying the Windows
|
|
81
|
-
* budget there needlessly serializes the quick tier into several sequential
|
|
82
|
-
* `node --test` spawns — each chunk pays a fresh runner start-up, and cores
|
|
83
|
-
* idle at every chunk's tail. `POSIX_MAX_TARGET_CHARS` (100 000) lets the
|
|
84
|
-
* whole quick-tier target list (~33 000 chars today) collapse into a single
|
|
85
|
-
* spawn on POSIX while staying far below `ARG_MAX`.
|
|
86
|
-
* `resolveMaxTargetChars` picks the budget per platform; the Windows
|
|
87
|
-
* semantics of `MAX_TARGET_CHARS` are unchanged.
|
|
47
|
+
* Per-spawn budget for the joined targets. Windows: ~a quarter of the
|
|
48
|
+
* 32 767-char ceiling, leaving room for exe path and flags. POSIX `ARG_MAX` is
|
|
49
|
+
* far larger, so its budget keeps a tier in one spawn (each extra chunk pays a
|
|
50
|
+
* runner start-up and idles cores at its tail).
|
|
88
51
|
*/
|
|
89
52
|
export const MAX_TARGET_CHARS = 8000;
|
|
90
53
|
export const POSIX_MAX_TARGET_CHARS = 100_000;
|
|
91
54
|
|
|
92
55
|
/**
|
|
93
|
-
* Resolve the per-spawn target-character budget for the host platform.
|
|
94
|
-
* The `platform` parameter is injected in tests.
|
|
95
|
-
*
|
|
96
56
|
* @param {NodeJS.Platform} [platform]
|
|
97
57
|
* @returns {number}
|
|
98
58
|
*/
|
|
@@ -101,12 +61,9 @@ export function resolveMaxTargetChars(platform = process.platform) {
|
|
|
101
61
|
}
|
|
102
62
|
|
|
103
63
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* its own chunk rather than being dropped. An empty target list yields a
|
|
108
|
-
* single empty chunk so the caller still issues exactly one spawn (matching
|
|
109
|
-
* the historical single-spawn behaviour, e.g. the `full`-tier glob path).
|
|
64
|
+
* Order-preserving chunks with joined length ≤ `maxChars`. An oversized
|
|
65
|
+
* target gets its own chunk; an empty list yields one empty chunk so the
|
|
66
|
+
* caller still spawns once.
|
|
110
67
|
*
|
|
111
68
|
* @param {string[]} targets
|
|
112
69
|
* @param {number} [maxChars]
|
|
@@ -118,7 +75,6 @@ export function chunkTestTargets(targets, maxChars = MAX_TARGET_CHARS) {
|
|
|
118
75
|
let currentLen = 0;
|
|
119
76
|
|
|
120
77
|
for (const target of targets) {
|
|
121
|
-
// +1 for the separator that would join this target to the previous one.
|
|
122
78
|
const addition = target.length + (current.length > 0 ? 1 : 0);
|
|
123
79
|
if (current.length > 0 && currentLen + addition > maxChars) {
|
|
124
80
|
chunks.push(current);
|
|
@@ -134,23 +90,15 @@ export function chunkTestTargets(targets, maxChars = MAX_TARGET_CHARS) {
|
|
|
134
90
|
}
|
|
135
91
|
|
|
136
92
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* at the first positional, so every runner flag — the fixed
|
|
141
|
-
* `TEST_RUNNER_FLAGS`, the optional `--test-reporter`, and any caller
|
|
142
|
-
* `extraArgs` — has to sit *before* the test-file targets. Appending
|
|
143
|
-
* `--test-reporter tap` after the targets (what `run-test-profile.js` used
|
|
144
|
-
* to do) made Node read the two tokens as two more file patterns: the
|
|
145
|
-
* default reporter ran, no TAP was emitted, and the profiler parsed zero
|
|
146
|
-
* timed entries out of a full suite run. `reporter` is therefore an option
|
|
147
|
-
* of this builder rather than something a caller concatenates on the end.
|
|
93
|
+
* Every flag must precede the targets: Node stops parsing options at the
|
|
94
|
+
* first positional and reads a later flag as a file pattern. Hence
|
|
95
|
+
* `reporter` is an option here, not something a caller appends.
|
|
148
96
|
*
|
|
149
97
|
* @param {object} [opts]
|
|
150
|
-
* @param {string[]} [opts.extraArgs]
|
|
98
|
+
* @param {string[]} [opts.extraArgs]
|
|
151
99
|
* @param {'full' | 'quick' | 'integration'} [opts.tier]
|
|
152
100
|
* @param {string} [opts.repoRoot]
|
|
153
|
-
* @param {string} [opts.reporter]
|
|
101
|
+
* @param {string} [opts.reporter]
|
|
154
102
|
* @returns {string[]}
|
|
155
103
|
*/
|
|
156
104
|
export function buildNodeTestArgs({
|
|
@@ -181,10 +129,7 @@ export function runTestSuite({
|
|
|
181
129
|
} = {}) {
|
|
182
130
|
const { tier, rest } = parseTierArgv(argv);
|
|
183
131
|
|
|
184
|
-
//
|
|
185
|
-
// the suite starting from a known-bad state, so running them after the
|
|
186
|
-
// spawn would be pointless. Nothing has been created yet, so there is
|
|
187
|
-
// nothing to clean up on this path.
|
|
132
|
+
// Nothing has been created yet, so a refusal needs no cleanup.
|
|
188
133
|
const preflightStatus = preflight({ tier, repoRoot: cwd });
|
|
189
134
|
if (preflightStatus !== 0) return preflightStatus;
|
|
190
135
|
|
|
@@ -199,12 +144,7 @@ export function runTestSuite({
|
|
|
199
144
|
for (const chunk of chunks) {
|
|
200
145
|
const testRun = spawn(
|
|
201
146
|
process.execPath,
|
|
202
|
-
//
|
|
203
|
-
// (`--test-name-pattern`, `--test-only`) — `parseTierArgv` has already
|
|
204
|
-
// rejected anything else. They precede the targets for the same reason
|
|
205
|
-
// `buildNodeTestArgs` orders them that way: Node stops parsing options
|
|
206
|
-
// at the first positional, so a flag after a target is silently read as
|
|
207
|
-
// another file pattern.
|
|
147
|
+
// Pass-through flags precede the targets (see `buildNodeTestArgs`).
|
|
208
148
|
[...TEST_RUNNER_FLAGS, ...rest, ...chunk],
|
|
209
149
|
{ cwd, stdio: 'inherit', env },
|
|
210
150
|
);
|
|
@@ -213,18 +153,14 @@ export function runTestSuite({
|
|
|
213
153
|
break;
|
|
214
154
|
}
|
|
215
155
|
const chunkStatus = testRun.status ?? 1;
|
|
216
|
-
// First non-zero
|
|
217
|
-
// failure surface is reported in one CI pass.
|
|
156
|
+
// First non-zero wins; later chunks still run to report every failure.
|
|
218
157
|
if (chunkStatus !== 0 && status === 0) status = chunkStatus;
|
|
219
158
|
}
|
|
220
159
|
|
|
221
160
|
cleanup({ repoRoot: cwd });
|
|
222
161
|
|
|
223
|
-
//
|
|
224
|
-
//
|
|
225
|
-
// signals tree — where the retro graduator counts it as recurrence evidence
|
|
226
|
-
// and files a ticket citing a fixture Story id. Fail the run that caused it
|
|
227
|
-
// rather than discovering it from that ticket.
|
|
162
|
+
// Fail a run whose fixture telemetry leaked into the live signals tree,
|
|
163
|
+
// where the retro graduator would count it as real evidence.
|
|
228
164
|
const polluted = fixtureStreamGuard({ cwd });
|
|
229
165
|
if (polluted !== 0 && status === 0) status = polluted;
|
|
230
166
|
|
|
@@ -232,26 +168,15 @@ export function runTestSuite({
|
|
|
232
168
|
throw spawnError;
|
|
233
169
|
}
|
|
234
170
|
|
|
235
|
-
//
|
|
236
|
-
// never the exit code.
|
|
171
|
+
// Best-effort; never affects the exit code.
|
|
237
172
|
depositCredit({ cwd, tier, status, durationMs: Date.now() - startedAt });
|
|
238
173
|
|
|
239
174
|
return status;
|
|
240
175
|
}
|
|
241
176
|
|
|
242
177
|
/**
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
* `check-baselines.js` declares its own.
|
|
246
|
-
*
|
|
247
|
-
* Handed to `runAsCli`, which prints it and returns **before** `main` runs.
|
|
248
|
-
* That ordering is the whole point: with no `usage` the flag fell through to
|
|
249
|
-
* `runTestSuite`, which ran the tier preflight, spawned the full ~10 000-test
|
|
250
|
-
* suite, and swept `temp/` — 25+ seconds and a mutated working tree in
|
|
251
|
-
* answer to a question about flags.
|
|
252
|
-
*
|
|
253
|
-
* Exported so the unit test can assert the documented surface without
|
|
254
|
-
* spawning the CLI.
|
|
178
|
+
* `runAsCli` prints this and returns before `main`, so `--help` never runs
|
|
179
|
+
* the suite.
|
|
255
180
|
*/
|
|
256
181
|
export const USAGE = `Usage: node .agents/scripts/run-tests.js [--tier <full|quick|integration|e2e>] [runner args...]
|
|
257
182
|
|
|
@@ -1,42 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* single-story-close.js —
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* auto-merge
|
|
9
|
-
*
|
|
10
|
-
* Pipeline (each step is a phase under
|
|
11
|
-
* `./lib/orchestration/single-story-close/phases/`):
|
|
12
|
-
*
|
|
13
|
-
* 1. close-validation — canonical gate chain against `baseBranch`
|
|
14
|
-
* 2. base-sync — `origin/<baseBranch>` → Story branch (Story #2580)
|
|
15
|
-
* 3. push — `git push -u` the Story branch
|
|
16
|
-
* 4. pull-request — `gh pr list` probe + `gh pr create`
|
|
17
|
-
* 5. code-review — Story-scope review (Epic #2815 / Story #2839)
|
|
18
|
-
* 6. auto-merge — `gh pr merge --auto --squash --delete-branch`
|
|
19
|
-
* 7. label flip + notify — Story → `agent::closing` (Story #3385; the
|
|
20
|
-
* `agent::done` flip + issue-close is deferred to
|
|
21
|
-
* the post-merge confirmation step,
|
|
22
|
-
* `single-story-confirm-merge.js`)
|
|
23
|
-
* 8. worktree-reap — drop the per-Story worktree
|
|
24
|
-
* 9. confirm-merge — close-and-land (Story #4428; the DEFAULT for
|
|
25
|
-
* every run since `delivery.routing.closeAndLand`):
|
|
26
|
-
* poll the just-armed PR to merge confirmation
|
|
27
|
-
* (reusing `confirmStoryMerged`), capture the
|
|
28
|
-
* Story follow-ups, or terminate `agent::blocked`
|
|
29
|
-
* with a classified `merge.unlanded` event — or
|
|
30
|
-
* `merge.flip-failed` when the merge landed and
|
|
31
|
-
* only the label write failed. Skipped when the
|
|
32
|
-
* operator owns the merge (`--no-wait-merge`,
|
|
33
|
-
* `--no-auto-merge`, or `autoMerge: "strict"`),
|
|
34
|
-
* which rests at `agent::closing` for the human.
|
|
35
|
-
*
|
|
36
|
-
* Existing tests import the re-exported helpers
|
|
37
|
-
* (`runSingleStoryClose`, `ensurePullRequest`, `parsePrNumber`,
|
|
38
|
-
* `enableAutoMerge`, `handleSyncFailure`, `buildSyncFailureCommentBody`,
|
|
39
|
-
* `runStoryScopeReview`, `buildStoryReviewCrossRefBody`) from this file.
|
|
4
|
+
* single-story-close.js — close a Story against the base branch: gates,
|
|
5
|
+
* base-sync, push, PR, Story-scope review, arm auto-merge, flip to
|
|
6
|
+
* `agent::closing`, reap the worktree, then (by default) wait for the merge.
|
|
7
|
+
* The wait is skipped when the operator owns the merge (`--no-wait-merge`,
|
|
8
|
+
* `--no-auto-merge`, `autoMerge: "strict"`); an arm FAILURE still waits and
|
|
9
|
+
* blocks, keeping the must-land contract.
|
|
40
10
|
*
|
|
41
11
|
* Usage:
|
|
42
12
|
* node single-story-close.js --story <STORY_ID> [--cwd <main-repo>]
|
|
@@ -47,62 +17,15 @@
|
|
|
47
17
|
* [--rerun-advisory <n>]
|
|
48
18
|
* [--override-review-block <reason>]
|
|
49
19
|
*
|
|
50
|
-
* `--override-review-block <reason>` is the
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* running `gh pr merge` themselves, bypassing the gate with nothing written
|
|
55
|
-
* down. The flag does not weaken the gate; it moves that escape hatch into a
|
|
56
|
-
* mandatory-reason audit trail (Story comment + PR comment + a
|
|
57
|
-
* `review-block-overridden` friction signal) and reports
|
|
58
|
-
* `gates.codeReview: "overridden"` on the terminal envelope. A bare or
|
|
59
|
-
* too-short reason fails during option parsing, before any phase runs.
|
|
60
|
-
*
|
|
61
|
-
* `--merge-watch-mode` (Story #4949) overrides `delivery.mergeWatch.mode` for
|
|
62
|
-
* one invocation, on the same explicit-wins-over-config precedence
|
|
63
|
-
* `--max-wait-seconds` uses, and the two compose. It exists because run
|
|
64
|
-
* topology is invisible from inside close: a solo delivery is cheapest waiting
|
|
65
|
-
* in the foreground, while the Nth close of a wave pays that wait as
|
|
66
|
-
* serialized dead time. The config default therefore stays `sync` and the
|
|
67
|
-
* orchestrator — the only party that knows N — passes `async` per close. An
|
|
68
|
-
* unrecognized value fails during option parsing, before any phase runs.
|
|
69
|
-
*
|
|
70
|
-
* Close-and-land is the DEFAULT for every run (Story #4428 introduced it as
|
|
71
|
-
* `--wait-merge`; `delivery.routing.closeAndLand` — default `true` — made it
|
|
72
|
-
* the default, and Story #4539 made that knob actually readable). Resolution
|
|
73
|
-
* order, highest first: `--no-wait-merge` (explicit opt-out, always wins);
|
|
74
|
-
* operator-owns-the-merge (`--no-auto-merge` or `delivery.ci.autoMerge:
|
|
75
|
-
* "strict"` — the PR was deliberately left un-armed, so there is nothing to
|
|
76
|
-
* land and the Story rests at `agent::closing`); explicit `--wait-merge`;
|
|
77
|
-
* then the config. A genuine arm FAILURE is not an opt-out — it still waits
|
|
78
|
-
* and therefore still blocks, which is what keeps the must-land contract
|
|
79
|
-
* intact.
|
|
20
|
+
* `--override-review-block <reason>` is the audited escape past a code-review
|
|
21
|
+
* CRITICAL blocker (instead of a hand-merge with no record).
|
|
22
|
+
* `--merge-watch-mode async` is passed per close by the orchestrator, the only
|
|
23
|
+
* party that knows the run has N Stories and a foreground wait is dead time.
|
|
80
24
|
*
|
|
81
|
-
* Every invocation emits ONE
|
|
82
|
-
* (
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* 0 — `landed`: the PR merged, the Story is `agent::done`, and the
|
|
87
|
-
* post-land tail ran (follow-ups, status resync, local ref
|
|
88
|
-
* cleanup, base fast-forward).
|
|
89
|
-
* 3 — `pending`: RESUMABLE, not a failure. Either the per-invocation merge
|
|
90
|
-
* wait (`delivery.mergeWatch.maxWaitSeconds`, default 300s
|
|
91
|
-
* to fit a single host tool invocation) expired with the PR
|
|
92
|
-
* still healthy and in flight, or the operator owns the
|
|
93
|
-
* merge (`--no-wait-merge` / `--no-auto-merge` /
|
|
94
|
-
* `autoMerge: "strict"`). NO label was mutated and no
|
|
95
|
-
* `merge.unlanded` event was emitted. The envelope's
|
|
96
|
-
* `nextCommand` names the single command that resumes it,
|
|
97
|
-
* and the cumulative budget is anchored at the PR's
|
|
98
|
-
* createdAt so the resume does not restart the clock.
|
|
99
|
-
* 1 — `blocked` or `failed`: a classified hard block (the Story carries
|
|
100
|
-
* `agent::blocked` and a friction comment) or a phase crash.
|
|
101
|
-
*
|
|
102
|
-
* The distinct `pending` code is the point: before it, a close-and-land whose
|
|
103
|
-
* CI outlived the host's tool-invocation ceiling was killed mid-poll with no
|
|
104
|
-
* terminal path taken at all, and merely shrinking the budget instead would
|
|
105
|
-
* have misfiled every slow-CI run as a hard block.
|
|
25
|
+
* Every invocation emits ONE terminal envelope; the exit code mirrors its
|
|
26
|
+
* status: 0 `landed`; 3 `pending` (resumable — the per-invocation wait
|
|
27
|
+
* expired with the PR healthy, or the operator owns the merge; nothing
|
|
28
|
+
* mutated, run `nextCommand`); 1 `blocked` or `failed`.
|
|
106
29
|
*
|
|
107
30
|
* @see .agents/workflows/helpers/deliver-story.md
|
|
108
31
|
* @see .agents/schemas/story-deliver-terminal.schema.json
|
|
@@ -118,7 +41,6 @@ import {
|
|
|
118
41
|
failedTerminalFor,
|
|
119
42
|
gatesForFailedPhase,
|
|
120
43
|
} from './lib/orchestration/single-story-close/failed-terminal.js';
|
|
121
|
-
import { enableAutoMergeWith } from './lib/orchestration/single-story-close/phases/auto-merge.js';
|
|
122
44
|
import {
|
|
123
45
|
buildSyncFailureCommentBody,
|
|
124
46
|
handleSyncFailure,
|
|
@@ -128,29 +50,14 @@ import {
|
|
|
128
50
|
parsePrNumber,
|
|
129
51
|
runStoryScopeReview,
|
|
130
52
|
} from './lib/orchestration/single-story-close/phases/code-review.js';
|
|
131
|
-
import { ensurePullRequestWith } from './lib/orchestration/single-story-close/phases/pull-request.js';
|
|
132
53
|
import {
|
|
133
54
|
emitTerminalEnvelope,
|
|
134
55
|
exitCodeForTerminal,
|
|
135
56
|
} from './lib/orchestration/story-deliver-terminal.js';
|
|
136
57
|
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
// orchestration body keep importing `ensurePullRequest` /
|
|
141
|
-
// `enableAutoMerge` from this file unchanged.
|
|
142
|
-
export const ensurePullRequest = ensurePullRequestWith;
|
|
143
|
-
export const enableAutoMerge = enableAutoMergeWith;
|
|
144
|
-
|
|
145
|
-
// Re-export pure helpers verbatim — they don't touch `execFileSync`
|
|
146
|
-
// or any URL-mocked module, so the phase exports work unmodified.
|
|
147
|
-
// `gatesForFailedPhase` now lives beside the envelope it feeds
|
|
148
|
-
// (`single-story-close/failed-terminal.js`); it is re-exported here so the
|
|
149
|
-
// CLI's public surface is unchanged by that move.
|
|
150
|
-
// `resolveRunScopedConfig` (Story #4891) is the run-scoped config pin the
|
|
151
|
-
// pipeline reads before its first phase; it is part of this CLI's surface for
|
|
152
|
-
// the same reason the sync helpers are — the runner reaches it only through a
|
|
153
|
-
// dynamic import, so this file is where it is statically visible.
|
|
58
|
+
// Pure helpers re-exported as this CLI's public surface; the runner is
|
|
59
|
+
// reached only via dynamic import, so this is where they are statically
|
|
60
|
+
// visible.
|
|
154
61
|
export {
|
|
155
62
|
buildStoryReviewCrossRefBody,
|
|
156
63
|
buildSyncFailureCommentBody,
|
|
@@ -170,22 +77,9 @@ export async function runSingleStoryClose(opts) {
|
|
|
170
77
|
}
|
|
171
78
|
|
|
172
79
|
/**
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
* stdout.
|
|
177
|
-
*
|
|
178
|
-
* The catch parses argv through the **non-throwing** wrapper (Story #4959).
|
|
179
|
-
* It used to call `parseSprintArgs()` — re-invoking the very parser that had
|
|
180
|
-
* just thrown, since `parseMergeWatchMode` made argv parsing fallible. The
|
|
181
|
-
* second throw escaped the handler, so an unparseable argv produced a bare
|
|
182
|
-
* stack trace with no envelope and no friction signal, on the surface whose
|
|
183
|
-
* whole contract is that every invocation emits exactly one envelope. An
|
|
184
|
-
* error handler may not depend on an operation already known to fail.
|
|
185
|
-
*
|
|
186
|
-
* A parse rejection carries no `closePhase`, so the envelope reports `init` —
|
|
187
|
-
* accurate: the runner rejected the flag before any phase ran, and nothing
|
|
188
|
-
* was mutated.
|
|
80
|
+
* Exit code comes from the envelope's status. The catch parses argv with the
|
|
81
|
+
* non-throwing wrapper: the strict parser may be what just threw, and every
|
|
82
|
+
* invocation must still emit exactly one envelope.
|
|
189
83
|
*/
|
|
190
84
|
async function main() {
|
|
191
85
|
try {
|
|
@@ -194,13 +88,9 @@ async function main() {
|
|
|
194
88
|
} catch (err) {
|
|
195
89
|
const terminal = failedTerminalFor(err, parseSprintArgsTolerant().args);
|
|
196
90
|
if (!terminal) throw err;
|
|
197
|
-
//
|
|
198
|
-
// human-facing failure text is unchanged, then emit the envelope.
|
|
91
|
+
// Mirrors runAsCli's default error line, which this catch pre-empts.
|
|
199
92
|
Logger.error(`[single-story-close] Fatal error: ${formatCliError(err)}`);
|
|
200
93
|
emitTerminalEnvelope(terminal);
|
|
201
|
-
// Story #4578 — a close that died before the runner could report its own
|
|
202
|
-
// terminal is exactly the friction the retro must see, so the crash path
|
|
203
|
-
// gets the same emit the happy path does. Best-effort; cannot throw.
|
|
204
94
|
await emitTerminalFriction({ envelope: terminal });
|
|
205
95
|
return exitCodeForTerminal(terminal);
|
|
206
96
|
}
|
|
@@ -236,10 +126,8 @@ runAsCli(import.meta.url, main, {
|
|
|
236
126
|
],
|
|
237
127
|
[
|
|
238
128
|
'--override-review-block <reason>',
|
|
239
|
-
//
|
|
240
|
-
//
|
|
241
|
-
// in any string outside `phases/auto-merge.js`, and it is right to —
|
|
242
|
-
// the point of this flag is that arming stays on the one code path.
|
|
129
|
+
// Must not spell the merge CLI invocation: `check-lifecycle-lint.js`
|
|
130
|
+
// forbids that literal outside `phases/auto-merge.js`.
|
|
243
131
|
'Land despite a Story-scope code-review CRITICAL blocker you have reviewed and judged wrong. The reason is mandatory (≥12 chars) and is recorded on the Story, on the PR, and as a `review-block-overridden` friction signal; the terminal envelope reports `gates.codeReview: "overridden"`. Use this instead of merging the PR by hand with the GitHub CLI — a hand-merge bypasses the gate with no record at all.',
|
|
244
132
|
],
|
|
245
133
|
],
|