mandrel 2.60.0 → 2.62.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/merge-queue.js +158 -0
- 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 +190 -280
- 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 +183 -485
- 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 +32 -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,35 +2,11 @@
|
|
|
2
2
|
/* node:coverage ignore file */
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* single-story-init.js —
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Epic parent, epic branch, or dispatch-manifest gate.
|
|
11
|
-
*
|
|
12
|
-
* What this script does:
|
|
13
|
-
* 1. Validate the Story (type::story, not closed).
|
|
14
|
-
* 2. Acquire the assignee lease, then refuse a Story already labelled
|
|
15
|
-
* `agent::executing` this run does not hold (unless `--steal`).
|
|
16
|
-
* 3. Flip the Story to `agent::executing` — BEFORE provisioning, so the
|
|
17
|
-
* claim is label-visible to concurrent operators' probes during the
|
|
18
|
-
* multi-minute install window (Story #4620). A provisioning failure after
|
|
19
|
-
* this reverts the label and releases the lease.
|
|
20
|
-
* 4. Fetch origin.
|
|
21
|
-
* 5. Create the Story branch from `project.baseBranch` (default
|
|
22
|
-
* `main`) — local-only, no remote push at this stage.
|
|
23
|
-
* 6. Materialise a worktree at `.worktrees/story-<id>/` when worktree
|
|
24
|
-
* isolation is enabled; otherwise check out the branch in-place.
|
|
25
|
-
* 7. Upsert a `story-init` structured comment carrying
|
|
26
|
-
* `standalone: true`.
|
|
27
|
-
*
|
|
28
|
-
* What this script does NOT do:
|
|
29
|
-
* - Child-Task transitions — a Story is atomic (one branch, one
|
|
30
|
-
* commit-set, one PR to `main`).
|
|
31
|
-
*
|
|
32
|
-
* Usage: `node single-story-init.js --story <STORY_ID> [--dry-run]`
|
|
33
|
-
* Exit codes: 0 ok, 1 error.
|
|
5
|
+
* single-story-init.js — initialize a Story for `/mandrel-deliver`: validate,
|
|
6
|
+
* take the lease, flip to `agent::executing` (before provisioning, so the
|
|
7
|
+
* claim is visible during the install window; a later failure rolls it back),
|
|
8
|
+
* seed `story-<id>` from the base branch locally, and materialise the
|
|
9
|
+
* worktree when isolation is on.
|
|
34
10
|
*
|
|
35
11
|
* @see .agents/workflows/helpers/deliver-story.md
|
|
36
12
|
*/
|
|
@@ -74,27 +50,16 @@ import {
|
|
|
74
50
|
import { createProvider } from './lib/provider-factory.js';
|
|
75
51
|
import { buildProtectionCtx } from './lib/single-story-sweep/protection-ctx.js';
|
|
76
52
|
import { resolveSweepLockPath } from './lib/single-story-sweep/sweep-lock.js';
|
|
77
|
-
// `sweepMergedStoryBranches` is imported dynamically
|
|
78
|
-
//
|
|
79
|
-
// would crash module resolution before `assertDepsInstalled()` can emit a
|
|
80
|
-
// friendly "run npm install" message.
|
|
53
|
+
// `sweepMergedStoryBranches` is imported dynamically: its graph reaches
|
|
54
|
+
// `picomatch`, which would crash before `assertDepsInstalled()` can report.
|
|
81
55
|
import { WorktreeManager } from './lib/worktree-manager.js';
|
|
82
56
|
|
|
83
57
|
export { handleRemoteVerificationFailure } from './lib/orchestration/story-init-remote.js';
|
|
84
|
-
// `makeGhRunner` moved to the shared `single-story-sweep/protection-ctx.js`
|
|
85
|
-
// module (Story #4373) so the three boot callers build an identical
|
|
86
|
-
// protection ctx. Re-exported here to preserve its existing import path.
|
|
87
58
|
export { makeGhRunner } from './lib/single-story-sweep/protection-ctx.js';
|
|
88
59
|
|
|
89
60
|
/**
|
|
90
|
-
* Fail fast with
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* Why: a wiped `node_modules/` previously surfaced as
|
|
94
|
-
* `ERR_MODULE_NOT_FOUND: Cannot find package 'picomatch'` from deep inside
|
|
95
|
-
* the sweep graph — opaque for operators. This guard probes a representative
|
|
96
|
-
* runtime dep (declared in `.agents/runtime-deps.json`) and tells the operator
|
|
97
|
-
* exactly what to run.
|
|
61
|
+
* Fail fast with an actionable message when deps are missing, instead of an
|
|
62
|
+
* opaque `ERR_MODULE_NOT_FOUND` from deep in the sweep graph. Builtins only.
|
|
98
63
|
*/
|
|
99
64
|
function assertDepsInstalled(projectRoot) {
|
|
100
65
|
const probe = path.join(projectRoot, 'node_modules', 'picomatch');
|
|
@@ -111,12 +76,8 @@ function assertDepsInstalled(projectRoot) {
|
|
|
111
76
|
const progress = Logger.createProgress('single-story-init', { stderr: true });
|
|
112
77
|
|
|
113
78
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* Exported for testing.
|
|
117
|
-
*
|
|
118
|
-
* @param {{ labels: string[], state: string }} story Fetched ticket.
|
|
119
|
-
* @param {number} storyId Story number (for error messages).
|
|
79
|
+
* @param {{ labels: string[], state: string }} story
|
|
80
|
+
* @param {number} storyId
|
|
120
81
|
*/
|
|
121
82
|
export function assertDeliverableStory(story, storyId) {
|
|
122
83
|
if (!story.labels.includes(TYPE_LABELS.STORY)) {
|
|
@@ -138,26 +99,14 @@ export function assertDeliverableStory(story, storyId) {
|
|
|
138
99
|
}
|
|
139
100
|
|
|
140
101
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* assignee can drift apart: a prior run that crashed *after* the early
|
|
146
|
-
* `agent::executing` flip but *before* (or without) taking/holding the lease
|
|
147
|
-
* leaves the Story labelled executing with no live foreign lease to trip the
|
|
148
|
-
* lease preflight. Left unchecked, a fresh run would seed the branch and
|
|
149
|
-
* worktree straight over that drift. Refuse unless the caller already holds the
|
|
150
|
-
* lease (`reason === 'already-held'`, i.e. a legitimate idempotent re-init) or
|
|
151
|
-
* passed `--steal`.
|
|
152
|
-
*
|
|
153
|
-
* Runs *after* the lease acquire (so it can read the acquire's reason) but
|
|
154
|
-
* *before* any git mutation. On refusal it releases the lease this run just
|
|
155
|
-
* took so the ticket is left exactly as found — a clean state for the operator
|
|
156
|
-
* to inspect before re-running with `--steal`.
|
|
102
|
+
* Refuse a Story labelled `agent::executing` that this run does not hold:
|
|
103
|
+
* label and assignee can drift (a run that crashed after the flip), so the
|
|
104
|
+
* lease alone misses it. Runs after the acquire, before any git mutation, and
|
|
105
|
+
* releases the just-taken lease on refusal so the ticket is left as found.
|
|
157
106
|
*
|
|
158
107
|
* @param {object} args
|
|
159
|
-
* @param {{ labels?: string[] }} args.story
|
|
160
|
-
* @param {{ reason: string, previousOwner: string|null }} args.lease
|
|
108
|
+
* @param {{ labels?: string[] }} args.story
|
|
109
|
+
* @param {{ reason: string, previousOwner: string|null }} args.lease
|
|
161
110
|
* @param {boolean} args.stealRequested
|
|
162
111
|
* @param {number} args.storyId
|
|
163
112
|
* @param {object} args.provider
|
|
@@ -176,7 +125,6 @@ export async function assertNotForeignExecuting({
|
|
|
176
125
|
story.labels.includes(STATE_LABELS.EXECUTING);
|
|
177
126
|
if (!labelled || stealRequested || lease.reason === 'already-held') return;
|
|
178
127
|
|
|
179
|
-
// Back out the lease we just took so the refusal leaves the ticket unchanged.
|
|
180
128
|
try {
|
|
181
129
|
await releaseStoryLease({ provider, storyId, config });
|
|
182
130
|
} catch (err) {
|
|
@@ -195,18 +143,11 @@ export async function assertNotForeignExecuting({
|
|
|
195
143
|
}
|
|
196
144
|
|
|
197
145
|
/**
|
|
198
|
-
*
|
|
199
|
-
* multi-minute worktree install, so a concurrent operator's probe sees the
|
|
200
|
-
* claim during the install window instead of reading `agent::ready` and
|
|
201
|
-
* dispatching the Story a second time.
|
|
202
|
-
*
|
|
203
|
-
* Best-effort: the assignee lease is the real guard, so a failed flip logs and
|
|
204
|
-
* proceeds rather than aborting init. Routes through `transitionTicketState`
|
|
205
|
-
* so the Projects v2 Status column follows the label (Story #2548).
|
|
146
|
+
* Best-effort: the lease is the real guard, so a failed flip only logs.
|
|
206
147
|
*
|
|
207
148
|
* @param {object} provider
|
|
208
149
|
* @param {number} storyId
|
|
209
|
-
* @param {object} story
|
|
150
|
+
* @param {object} story Prefetched snapshot.
|
|
210
151
|
* @returns {Promise<void>}
|
|
211
152
|
*/
|
|
212
153
|
async function flipStoryToExecuting(provider, storyId, story) {
|
|
@@ -224,15 +165,8 @@ async function flipStoryToExecuting(provider, storyId, story) {
|
|
|
224
165
|
}
|
|
225
166
|
|
|
226
167
|
/**
|
|
227
|
-
* Roll
|
|
228
|
-
*
|
|
229
|
-
* A container carries no `agent::*` label, so the Status sync that follows
|
|
230
|
-
* the flip above cannot reach it — its column is derived from its children
|
|
231
|
-
* instead. This is the edge where the first child of an Epic starts moving,
|
|
232
|
-
* which is what puts the Epic on the board as In Progress with an owner.
|
|
233
|
-
*
|
|
234
|
-
* Best-effort by construction: the rollup never throws, and a container left
|
|
235
|
-
* at a stale column must never cost the Story its init.
|
|
168
|
+
* Roll a container Epic's status up from its children (it carries no
|
|
169
|
+
* `agent::*` label of its own). Never throws.
|
|
236
170
|
*
|
|
237
171
|
* @param {object} provider
|
|
238
172
|
* @param {number} storyId
|
|
@@ -252,11 +186,8 @@ async function rollUpContainerEpic(provider, storyId, config) {
|
|
|
252
186
|
}
|
|
253
187
|
|
|
254
188
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
* lease, both best-effort. Without this a crashed init would strand the Story
|
|
258
|
-
* as phantom-executing — claimed and labelled in-flight but with no live run —
|
|
259
|
-
* which every other operator's probe would then withhold indefinitely.
|
|
189
|
+
* Best-effort revert of label and lease after a provisioning failure, so the
|
|
190
|
+
* Story is not stranded as phantom-executing (withheld by every probe).
|
|
260
191
|
*
|
|
261
192
|
* @param {object} provider
|
|
262
193
|
* @param {number} storyId
|
|
@@ -287,22 +218,10 @@ async function rollbackClaimOnInitFailure(provider, storyId, config) {
|
|
|
287
218
|
}
|
|
288
219
|
|
|
289
220
|
/**
|
|
290
|
-
*
|
|
291
|
-
* exported for testing (Story #3483 AC3: an existing `story-<id>` branch must
|
|
292
|
-
* be **reused**, never re-created — re-creating throws `branch already exists`).
|
|
293
|
-
*
|
|
294
|
-
* Delegates the (local, remote) decision to the shared `classifyBranchSeed`
|
|
295
|
-
* classifier (Story #3513) so this path and the Epic-attached
|
|
296
|
-
* `branch-initializer.js#planStoryBranchSeed` share one decision tree. The
|
|
297
|
-
* shared classifier returns `'local'` for the local-present case; this path
|
|
298
|
-
* names that outcome `'reuse'`.
|
|
221
|
+
* An existing local ref must be reused, never re-created (`git branch` throws).
|
|
299
222
|
*
|
|
300
223
|
* @param {{ localHas: boolean, remoteHas: boolean }} presence
|
|
301
224
|
* @returns {'reuse'|'fetch'|'create'}
|
|
302
|
-
* - `reuse` — a local ref already exists; the caller must not run
|
|
303
|
-
* `git branch` (which would throw on the existing ref).
|
|
304
|
-
* - `fetch` — only the remote ref exists; materialise the local ref.
|
|
305
|
-
* - `create` — neither exists; branch from baseBranch.
|
|
306
225
|
*/
|
|
307
226
|
export function decideStoryBranchSeed({ localHas, remoteHas }) {
|
|
308
227
|
const action = classifyBranchSeed({ localHas, remoteHas });
|
|
@@ -310,22 +229,10 @@ export function decideStoryBranchSeed({ localHas, remoteHas }) {
|
|
|
310
229
|
}
|
|
311
230
|
|
|
312
231
|
/**
|
|
313
|
-
* Reap
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
* Story #2011 hardens this surface in two ways:
|
|
319
|
-
* - Per-candidate protection: branches with unpushed work, dirty
|
|
320
|
-
* worktrees, or still-open Story tickets are skipped (and listed
|
|
321
|
-
* in `sweep.protected` for the operator).
|
|
322
|
-
* - Cross-session lock: a single lockfile under `tempRoot` prevents
|
|
323
|
-
* two concurrent `/single-story-deliver` invocations from racing.
|
|
324
|
-
* Story #5112 made that lockfile shared with `boot-sweep.js` — the
|
|
325
|
-
* other entry point into the same merged-branch reap — by routing
|
|
326
|
-
* both through `resolveSweepLockPath`.
|
|
327
|
-
*
|
|
328
|
-
* Exported for testing.
|
|
232
|
+
* Reap merged `story-*` branches (excluding the current one). Never blocks
|
|
233
|
+
* init. Protected candidates (unpushed work, dirty worktree, open Story) are
|
|
234
|
+
* skipped; the lockfile is shared with `boot-sweep.js` via
|
|
235
|
+
* `resolveSweepLockPath` so concurrent reaps cannot race.
|
|
329
236
|
*/
|
|
330
237
|
export async function reapMergedStoryBranches({
|
|
331
238
|
cwd,
|
|
@@ -383,13 +290,8 @@ export async function reapMergedStoryBranches({
|
|
|
383
290
|
}
|
|
384
291
|
|
|
385
292
|
/**
|
|
386
|
-
* Fetch
|
|
387
|
-
*
|
|
388
|
-
* testing (owns the fast-forward cascade).
|
|
389
|
-
*
|
|
390
|
-
* Routes the `origin` fetch through `cachedGitFetch` so concurrent Story
|
|
391
|
-
* waves share a per-process fetch-coalescing window. Pass `fetchFn` to
|
|
392
|
-
* inject a stub in tests without touching real git.
|
|
293
|
+
* Fetch, reap, and fast-forward the local base branch so new Story branches
|
|
294
|
+
* seed from origin's tip.
|
|
393
295
|
*
|
|
394
296
|
* @param {object} opts
|
|
395
297
|
* @param {string} opts.cwd
|
|
@@ -400,9 +302,7 @@ export async function reapMergedStoryBranches({
|
|
|
400
302
|
* @param {Function|undefined} opts.injectedSweep
|
|
401
303
|
* @param {Function} opts.progress
|
|
402
304
|
* @param {import('./lib/git/cached-fetch.js').FetchCache} [opts.fetchCache]
|
|
403
|
-
*
|
|
404
|
-
* cache. Production callers omit this so all Stories in a wave share the
|
|
405
|
-
* module singleton.
|
|
305
|
+
* Test override; production shares the module singleton.
|
|
406
306
|
*/
|
|
407
307
|
export async function materializeBaseBranch({
|
|
408
308
|
cwd,
|
|
@@ -435,8 +335,6 @@ export async function materializeBaseBranch({
|
|
|
435
335
|
injectedSweep,
|
|
436
336
|
});
|
|
437
337
|
|
|
438
|
-
// Ensure baseBranch exists locally so we can branch from it. If only
|
|
439
|
-
// remote-tracking is present, materialize the local ref.
|
|
440
338
|
if (!branchExistsLocally(baseBranch, cwd)) {
|
|
441
339
|
const r = gitSpawn(cwd, 'fetch', 'origin', `${baseBranch}:${baseBranch}`);
|
|
442
340
|
if (r.status !== 0) {
|
|
@@ -447,11 +345,7 @@ export async function materializeBaseBranch({
|
|
|
447
345
|
return;
|
|
448
346
|
}
|
|
449
347
|
|
|
450
|
-
// `git fetch
|
|
451
|
-
// at the pre-merge tip until fast-forwarded. Use the same helper as
|
|
452
|
-
// `/git-cleanup --fast-forward-main` (checkout base + `merge --ff-only`) so
|
|
453
|
-
// new `story-*` branches seed from origin's tip when the main checkout is
|
|
454
|
-
// clean (Story #2744).
|
|
348
|
+
// `git fetch` leaves local base at the old tip until fast-forwarded.
|
|
455
349
|
const ffPlan = planFastForward({ cwd, baseBranch });
|
|
456
350
|
const ff = executeFastForward({
|
|
457
351
|
cwd,
|
|
@@ -481,15 +375,8 @@ export async function materializeBaseBranch({
|
|
|
481
375
|
}
|
|
482
376
|
|
|
483
377
|
/**
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
* - remote only → fetch
|
|
487
|
-
* - neither → create from baseBranch
|
|
488
|
-
*
|
|
489
|
-
* `cachedGitFetch(cwd, 'origin')` is assumed to have run before this call
|
|
490
|
-
* (via `materializeBaseBranch`), so remote-tracking refs are authoritative.
|
|
491
|
-
* Uses a local tracking-ref check rather than a network `ls-remote` round-trip.
|
|
492
|
-
* Exported for testing (owns the seedAction switch + throws).
|
|
378
|
+
* Idempotent seed. Assumes `materializeBaseBranch` already fetched, so
|
|
379
|
+
* tracking refs are authoritative (no `ls-remote`).
|
|
493
380
|
*
|
|
494
381
|
* @param {object} opts
|
|
495
382
|
* @param {string} opts.cwd
|
|
@@ -498,11 +385,7 @@ export async function materializeBaseBranch({
|
|
|
498
385
|
* @param {Function} opts.progress
|
|
499
386
|
*/
|
|
500
387
|
export function seedStoryBranch({ cwd, storyBranch, baseBranch, progress }) {
|
|
501
|
-
//
|
|
502
|
-
// fatal (`swallowCreateRace: false`) and a failed fetch throws. The
|
|
503
|
-
// seed-action switch shell is single-homed in `seedStoryBranchRef`
|
|
504
|
-
// (Story #4255); this caller only supplies its `baseRef`, its git seams
|
|
505
|
-
// bound to `cwd`, and its own log/error vocabulary.
|
|
388
|
+
// No concurrent creator to race here, so create failures are fatal.
|
|
506
389
|
seedStoryBranchRef({
|
|
507
390
|
storyBranch,
|
|
508
391
|
baseRef: baseBranch,
|
|
@@ -523,9 +406,7 @@ export function seedStoryBranch({ cwd, storyBranch, baseBranch, progress }) {
|
|
|
523
406
|
}
|
|
524
407
|
|
|
525
408
|
/**
|
|
526
|
-
* Provision a worktree
|
|
527
|
-
* Returns the resolved `workCwd`, `worktreeCreated`, and `installStatus`.
|
|
528
|
-
* Exported for testing (owns the worktree/single-tree routing).
|
|
409
|
+
* Provision a worktree, or check out the branch in single-tree mode.
|
|
529
410
|
*
|
|
530
411
|
* @param {object} opts
|
|
531
412
|
* @param {object} opts.runtime
|
|
@@ -567,16 +448,12 @@ export async function provisionWorktree({
|
|
|
567
448
|
`${ensured.created ? '✨ Created' : '♻️ Reusing'} worktree: ${ensured.path}`,
|
|
568
449
|
);
|
|
569
450
|
} else {
|
|
570
|
-
// Single-tree mode: check out the branch on the main checkout.
|
|
571
451
|
gitSync(cwd, 'checkout', storyBranch);
|
|
572
452
|
}
|
|
573
453
|
|
|
574
454
|
return { workCwd, worktreeCreated, installStatus };
|
|
575
455
|
}
|
|
576
456
|
|
|
577
|
-
/**
|
|
578
|
-
* Initialize a standalone Story. Exported for testing.
|
|
579
|
-
*/
|
|
580
457
|
export async function runSingleStoryInit({
|
|
581
458
|
storyId: storyIdParam,
|
|
582
459
|
dryRun: dryRunParam,
|
|
@@ -584,15 +461,9 @@ export async function runSingleStoryInit({
|
|
|
584
461
|
injectedProvider,
|
|
585
462
|
injectedConfig,
|
|
586
463
|
injectedSweep,
|
|
587
|
-
// Story #3483: lets tests drive the lease preflight deterministically.
|
|
588
|
-
// `injectedAcquireLease` swaps the guard. `steal` forcibly transfers a
|
|
589
|
-
// foreign claim — the lease fails closed (audit #3513), so a foreign
|
|
590
|
-
// assignee blocks unless stolen.
|
|
591
464
|
injectedAcquireLease,
|
|
592
465
|
steal = false,
|
|
593
466
|
injectedVerifyRemote,
|
|
594
|
-
// Story #4620: swap the git-touching provisioning steps so the
|
|
595
|
-
// early-flip-then-rollback ordering is unit-testable without a real worktree.
|
|
596
467
|
injectedMaterialize = materializeBaseBranch,
|
|
597
468
|
injectedSeedBranch = seedStoryBranch,
|
|
598
469
|
injectedProvisionWorktree = provisionWorktree,
|
|
@@ -607,10 +478,8 @@ export async function runSingleStoryInit({
|
|
|
607
478
|
: parseSprintArgs();
|
|
608
479
|
const { storyId, dryRun } = parsed;
|
|
609
480
|
const cwd = path.resolve(cwdParam ?? parsed.cwd ?? PROJECT_ROOT);
|
|
610
|
-
// `--steal` is
|
|
611
|
-
//
|
|
612
|
-
// test callers). The standalone lease fails closed on a foreign assignee
|
|
613
|
-
// (audit #3513), so `--steal` is the operator's forcible-transfer override.
|
|
481
|
+
// `--steal` is outside parseSprintArgs; the lease fails closed on a foreign
|
|
482
|
+
// assignee, so this is the operator's forcible-transfer override.
|
|
614
483
|
const stealRequested =
|
|
615
484
|
steal || (storyIdParam === undefined && process.argv.includes('--steal'));
|
|
616
485
|
|
|
@@ -635,12 +504,9 @@ export async function runSingleStoryInit({
|
|
|
635
504
|
);
|
|
636
505
|
progress('INIT', `Initializing standalone Story #${storyId}...`);
|
|
637
506
|
|
|
638
|
-
//
|
|
639
|
-
//
|
|
640
|
-
//
|
|
641
|
-
// the fact; the workflow owns the `agent::blocked` transition on
|
|
642
|
-
// `remoteVerified: false` — inline delivery to local `main` is never a
|
|
643
|
-
// sanctioned fallback.
|
|
507
|
+
// Read-only, so it runs under --dry-run too. The workflow owns the
|
|
508
|
+
// `agent::blocked` transition on `remoteVerified: false`; inline delivery to
|
|
509
|
+
// local `main` is never a fallback.
|
|
644
510
|
const remote = (injectedVerifyRemote ?? verifyRemote)({ cwd });
|
|
645
511
|
progress(
|
|
646
512
|
'REMOTE',
|
|
@@ -663,12 +529,7 @@ export async function runSingleStoryInit({
|
|
|
663
529
|
`Standalone Story: "${story.title}" → branch ${storyBranch} from ${baseBranch}.`,
|
|
664
530
|
);
|
|
665
531
|
|
|
666
|
-
//
|
|
667
|
-
// ticket before any git mutation so two concurrent standalone runs cannot
|
|
668
|
-
// both drive the same Story. The guard fails closed (audit #3513): a
|
|
669
|
-
// foreign assignee aborts init (naming the current owner) unless --steal
|
|
670
|
-
// forcibly transfers it. Unclaimed / self-held claims proceed. Skipped
|
|
671
|
-
// under --dry-run (no assignee mutation).
|
|
532
|
+
// Lease before any git mutation so two runs cannot drive one Story.
|
|
672
533
|
let workCwd = cwd;
|
|
673
534
|
let worktreeCreated = false;
|
|
674
535
|
let installStatus = { status: 'skipped', reason: 'dry-run' };
|
|
@@ -686,9 +547,6 @@ export async function runSingleStoryInit({
|
|
|
686
547
|
`🔒 Story #${storyId} lease ${lease.reason} (owner=@${lease.owner}).`,
|
|
687
548
|
);
|
|
688
549
|
|
|
689
|
-
// Defense in depth: refuse a Story already labelled agent::executing that
|
|
690
|
-
// this run does not hold (label/assignee drift the lease alone misses).
|
|
691
|
-
// Runs before any git mutation; releases the just-taken lease on refusal.
|
|
692
550
|
await assertNotForeignExecuting({
|
|
693
551
|
story,
|
|
694
552
|
lease,
|
|
@@ -698,20 +556,12 @@ export async function runSingleStoryInit({
|
|
|
698
556
|
config,
|
|
699
557
|
});
|
|
700
558
|
|
|
701
|
-
//
|
|
702
|
-
// install (not after), so a concurrent operator's probe sees it during the
|
|
703
|
-
// install window instead of reading agent::ready and double-dispatching.
|
|
559
|
+
// Before the install, so a concurrent probe cannot double-dispatch.
|
|
704
560
|
await flipStoryToExecuting(provider, storyId, story);
|
|
705
561
|
|
|
706
|
-
//
|
|
707
|
-
// it is too. Fired here rather than after provisioning so the board shows
|
|
708
|
-
// In Progress for the whole install window, and after the flip so the
|
|
709
|
-
// rollup reads the state it derives from.
|
|
562
|
+
// After the flip (the rollup reads it), before the install window.
|
|
710
563
|
await rollUpContainerEpic(provider, storyId, config);
|
|
711
564
|
|
|
712
|
-
// Any failure from here on leaves a claimed, executing-labelled Story with
|
|
713
|
-
// no live run behind it — revert the label and release the lease so the
|
|
714
|
-
// Story is not stranded as phantom-executing.
|
|
715
565
|
try {
|
|
716
566
|
await injectedMaterialize({
|
|
717
567
|
cwd,
|
|
@@ -751,10 +601,7 @@ export async function runSingleStoryInit({
|
|
|
751
601
|
standalone: true,
|
|
752
602
|
storyBranch,
|
|
753
603
|
baseBranch,
|
|
754
|
-
//
|
|
755
|
-
// legacy field close still reads as a fallback; this block is the
|
|
756
|
-
// registry-driven form a second run-scoped key joins without a second
|
|
757
|
-
// mechanism (`lib/orchestration/run-scoped-config.js`).
|
|
604
|
+
// Write half of the run-scoped config pin; `baseBranch` is close's fallback.
|
|
758
605
|
runScopedConfig: pinRunScopedConfig(config),
|
|
759
606
|
storyTitle: story.title,
|
|
760
607
|
worktreeEnabled: runtime.worktreeEnabled,
|
|
@@ -764,21 +611,12 @@ export async function runSingleStoryInit({
|
|
|
764
611
|
dependenciesInstalled,
|
|
765
612
|
installFailed: installStatus.status === 'failed',
|
|
766
613
|
dryRun,
|
|
767
|
-
// Issue #4483 — verified remote evidence for the orchestrating agent.
|
|
768
614
|
remoteVerified: remote.remoteVerified,
|
|
769
615
|
remoteProbe: { remoteUrl: remote.remoteUrl, detail: remote.detail },
|
|
770
616
|
};
|
|
771
617
|
|
|
772
|
-
//
|
|
773
|
-
//
|
|
774
|
-
// on stdout and on disk (below), `deliver-recover.js` classifies state from
|
|
775
|
-
// labels, the PR probe and disk artifacts, and `run-scoped-config.js` reads
|
|
776
|
-
// the base-branch pin off that same envelope. The `agent::executing` flip
|
|
777
|
-
// above is what makes the claim visible during the install window.
|
|
778
|
-
//
|
|
779
|
-
// Story #4685 — route the full result to a temp log and emit a single-line
|
|
780
|
-
// summary carrying the fields the orchestrating agent acts on (workCwd,
|
|
781
|
-
// remoteVerified). The `## Spec` names this the hot-path stdout to quiet.
|
|
618
|
+
// The envelope (stdout + disk) is the only record; no ticket comment. Full
|
|
619
|
+
// result goes to a temp log, stdout gets the fields the caller acts on.
|
|
782
620
|
emitTerseResult({
|
|
783
621
|
label: 'STORY INIT RESULT',
|
|
784
622
|
result,
|