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
|
@@ -8,14 +8,13 @@ description:
|
|
|
8
8
|
|
|
9
9
|
# /mandrel-deliver — reference appendix (on-demand)
|
|
10
10
|
|
|
11
|
-
Reference-only detail split out of [`mandrel-deliver.md`](../mandrel-deliver.md)
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
Reference-only detail split out of [`mandrel-deliver.md`](../mandrel-deliver.md).
|
|
12
|
+
Nothing here is a new MUST — it is the mechanics an operator consults when the
|
|
13
|
+
matching lever is engaged.
|
|
14
14
|
|
|
15
15
|
## Ranges (`4922 - 4926`) {#ranges}
|
|
16
16
|
|
|
17
|
-
A contiguous span is
|
|
18
|
-
first-class id shape rather than prose to interpret — `/mandrel-deliver 4922 - 4926`
|
|
17
|
+
A contiguous span is a first-class id shape — `/mandrel-deliver 4922 - 4926`
|
|
19
18
|
means exactly the five ids in it.
|
|
20
19
|
|
|
21
20
|
**Pass the span through; never expand it by hand.** Every id-list flag on the
|
|
@@ -26,8 +25,7 @@ the scripts one unspaced token (`--ids 4922-4926`), mixed freely with singles
|
|
|
26
25
|
and commas (`--ids 4901,4922-4926`); overlaps dedupe. A hand-typed enumeration
|
|
27
26
|
is where an id gets dropped or invented, and the drop is silent.
|
|
28
27
|
|
|
29
|
-
The shared expander (`lib/util/parse-id-list.js`) refuses rather than guesses
|
|
30
|
-
so a typo fails where it was typed instead of resolving the wrong set:
|
|
28
|
+
The shared expander (`lib/util/parse-id-list.js`) refuses rather than guesses:
|
|
31
29
|
|
|
32
30
|
| Input | Outcome |
|
|
33
31
|
| --- | --- |
|
|
@@ -36,30 +34,26 @@ so a typo fails where it was typed instead of resolving the wrong set:
|
|
|
36
34
|
| `1-4926` | Refused — above the 50-id span cap (`MAX_RANGE_SPAN`). |
|
|
37
35
|
| `4922-`, `-4926`, `4922-4923-4924` | Refused as a malformed token. |
|
|
38
36
|
|
|
39
|
-
The cap is per range token, not per run: a
|
|
40
|
-
|
|
41
|
-
resolution sweep of thousands of issues.
|
|
37
|
+
The cap is per range token, not per run: a 60-Story delivery is still two
|
|
38
|
+
ranges.
|
|
42
39
|
|
|
43
40
|
## Sequencing edge cases (`deliver-run.js` over `stories-wave-tick.js`)
|
|
44
41
|
|
|
45
42
|
**What "discovered, not declared" means concretely.** `resolve-stories.js` reads
|
|
46
43
|
the graph from live state as the union of the Story bodies' `depends_on` edges
|
|
47
44
|
and GitHub's native `blocked_by` edges, resolving each blocker against its real
|
|
48
|
-
issue state
|
|
49
|
-
|
|
50
|
-
seen as done.
|
|
45
|
+
issue state. That is why there is no batch label to pass and why a blocker that
|
|
46
|
+
landed in an unrelated run is simply seen as done.
|
|
51
47
|
|
|
52
48
|
**A Story with no `agent::*` label is refused.** The audit sweep files Stories
|
|
53
49
|
deliberately without one — their bodies are audit prose, not a scoped change
|
|
54
|
-
with verifiable acceptance criteria
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
`--allow-unlabelled` is the deliberate escape hatch.
|
|
50
|
+
with verifiable acceptance criteria. Route it through `/mandrel-plan` first,
|
|
51
|
+
which applies `agent::ready` at the end of planning. `--allow-unlabelled` is
|
|
52
|
+
the deliberate escape hatch.
|
|
58
53
|
|
|
59
54
|
**Inspecting a beat without taking one.** `deliver-run.js` writes — the ledger,
|
|
60
|
-
the prompts
|
|
61
|
-
|
|
62
|
-
prompt files:
|
|
55
|
+
the prompts. The tick underneath it is read-only and answers "what *would* the
|
|
56
|
+
next beat do?":
|
|
63
57
|
|
|
64
58
|
```bash
|
|
65
59
|
node .agents/scripts/stories-wave-tick.js --stories <id,id,...> --probe-live
|
|
@@ -89,83 +83,62 @@ turn, not a slow beat.
|
|
|
89
83
|
Each beat re-probes live state: it re-resolves the graph, classifies **done**
|
|
90
84
|
(`agent::done` or a closed issue — including foreign blockers that landed in
|
|
91
85
|
another run), and derives **in-flight** from live `agent::executing` /
|
|
92
|
-
`agent::closing` labels. You never compute `done` or `in-flight
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
`
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
is what makes the list safe to keep, and it is also why a bad entry never
|
|
116
|
-
leaves: if a spawn dies before `single-story-init.js` runs, the id stays
|
|
117
|
-
ledgered, is withheld as in flight on every later beat, and the run returns an
|
|
118
|
-
empty `ready[]` with a non-zero `inFlight` forever — which reads exactly like a
|
|
119
|
-
healthy wait. The beat names it instead: every ledgered id live state still
|
|
120
|
-
reports as `agent::ready` appears in `stalledDispatch[]`, with the recovery in
|
|
121
|
-
`stalledDispatchReason`. That is its **own** reason — not a footprint withhold
|
|
122
|
-
(which names a blocking peer and the colliding paths) and not a foreign lease
|
|
123
|
-
(which names a holder and clears itself when their run ends).
|
|
124
|
-
|
|
125
|
-
It is a report, not a release. A slow init and a dead spawn are the same
|
|
126
|
-
observation at the beat's altitude, and auto-releasing would re-dispatch a live
|
|
127
|
-
Story onto its own branch — the failure the ledger exists to prevent. So the
|
|
86
|
+
`agent::closing` labels. You never compute `done` or `in-flight`.
|
|
87
|
+
|
|
88
|
+
**The run ledger closes the init window, and you maintain nothing.** Until
|
|
89
|
+
`single-story-init.js` publishes `agent::executing`, a just-dispatched Story
|
|
90
|
+
still reads `agent::ready`, and an unaugmented beat would hand it out again.
|
|
91
|
+
`deliver-run.js` records every id it hands out in
|
|
92
|
+
`<tempRoot>/run-<id>/ledger.json` and seeds the next beat with it. The ledger
|
|
93
|
+
is additive, not authoritative — the probe unions it into the label-derived set
|
|
94
|
+
and filters it against live state, so an id that has gone `agent::done` drops
|
|
95
|
+
out. A missing or corrupt ledger costs one extra beat of the init window, never
|
|
96
|
+
the run. The run id is a stable digest of the Story id set, so every beat of
|
|
97
|
+
one run finds the same ledger; `--run-id` pins it explicitly.
|
|
98
|
+
|
|
99
|
+
**A spawn that never reached init is the ledger's one sharp edge.** If a spawn
|
|
100
|
+
dies before `single-story-init.js` runs, the id stays ledgered and is withheld
|
|
101
|
+
as in flight on every later beat — an empty `ready[]` with a non-zero
|
|
102
|
+
`inFlight` that reads like a healthy wait. The beat names it: every ledgered id
|
|
103
|
+
live state still reports as `agent::ready` appears in `stalledDispatch[]`, with
|
|
104
|
+
the recovery in `stalledDispatchReason` — its **own** reason, not a footprint
|
|
105
|
+
withhold and not a foreign lease.
|
|
106
|
+
|
|
107
|
+
It is a report, not a release: a slow init and a dead spawn look identical, and
|
|
108
|
+
auto-releasing would re-dispatch a live Story onto its own branch. So the
|
|
128
109
|
operator owns the call: confirm no worker is running, remove the id from
|
|
129
110
|
`dispatched` in `<tempRoot>/run-<id>/ledger.json` (deleting the file works too,
|
|
130
111
|
at the cost of reopening the init window for the rest), and beat again with
|
|
131
|
-
`--run-id <id>` so the same run directory is reused.
|
|
132
|
-
picked up `agent::executing`, `agent::closing` or `agent::done` is never
|
|
133
|
-
reported here — live state has moved on and the ledger entry is already inert.
|
|
112
|
+
`--run-id <id>` so the same run directory is reused.
|
|
134
113
|
|
|
135
114
|
**Cross-run de-confliction is automatic.** A Story another
|
|
136
115
|
operator is delivering is withheld without any bookkeeping from you: the probe
|
|
137
116
|
reads the Story's assignee lease and, when it belongs to a different operator,
|
|
138
117
|
withholds the Story and reports it in the envelope's
|
|
139
118
|
`foreignHeld: [{ id, holder }]` (with `foreignHeldReason`). That is not a
|
|
140
|
-
failure or a wedge —
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
119
|
+
failure or a wedge — this run picks the Story up once their lease clears. Init
|
|
120
|
+
is the backstop: it refuses a Story already labelled `agent::executing`, or one
|
|
121
|
+
whose lease a different operator holds, unless you pass `--steal`.
|
|
122
|
+
Assignee-based withholding needs `github.operatorHandle` set (in
|
|
123
|
+
`.agentrc.local.json`); without it the probe logs a warning and leans on init's
|
|
124
|
+
lease refusal alone.
|
|
146
125
|
|
|
147
126
|
**Overlapping footprints are reserved across beats, not just within one.** A
|
|
148
127
|
Story sharing a **concrete** path with a still-implementing Story is withheld
|
|
149
128
|
and named in `inFlightReservation: { available, withheld: [{ id, blockedBy,
|
|
150
129
|
reason, source, paths }], note }`, where `reason` is `in-flight-earlier-beat` or
|
|
151
130
|
`foreign-lease`. Like `foreignHeld` this is neither a failure nor a wedge — the
|
|
152
|
-
Story re-admits automatically once its blocker leaves the in-flight set
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
report is `available: false` and selection de-conflicts within the beat only.
|
|
131
|
+
Story re-admits automatically once its blocker leaves the in-flight set. A
|
|
132
|
+
**glob** footprint (or the UNKNOWN sentinel for an unparseable body) reserves
|
|
133
|
+
nothing across beats; it still serializes its own beat. Reservation is a
|
|
134
|
+
`--probe-live` capability: under `--dag` the report is `available: false` and
|
|
135
|
+
selection de-conflicts within the beat only.
|
|
158
136
|
|
|
159
137
|
**Beat-local skips are reported too**, in `footprintGuard: { mode, withheld,
|
|
160
|
-
advisory, note }`.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
path, or one declared a glob. Intended serialization — two Stories rewriting
|
|
165
|
-
the same generated baseline must not co-dispatch. A declared footprint is the
|
|
166
|
-
whole footprint: Story #5313 retired the body scrape that used to widen it,
|
|
167
|
-
and the second source class it produced, so `changes[]` is the only evidence
|
|
168
|
-
a collision is scored against.
|
|
138
|
+
advisory, note }`. Every entry in **either** report carries the colliding
|
|
139
|
+
`paths` and one `source` tag, `declared-overlap`: both Stories' `changes[]`
|
|
140
|
+
named the path, or one declared a glob. A declared footprint is the whole
|
|
141
|
+
footprint — `changes[]` is the only evidence a collision is scored against.
|
|
169
142
|
|
|
170
143
|
**`delivery.deliverRunner.footprintGuard`** selects what a collision does:
|
|
171
144
|
|
|
@@ -176,47 +149,24 @@ a collision is scored against.
|
|
|
176
149
|
|
|
177
150
|
## Dispatch mechanics (role-scoped by default)
|
|
178
151
|
|
|
179
|
-
**
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
`
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
**Read the mode; never infer it from shape.** Before spawning
|
|
190
|
-
anything, read the Story's `dispatchMode` from the resolver envelope
|
|
191
|
-
(`stories[].dispatchMode`, produced by `resolveStoryDispatchMode` in
|
|
192
|
-
`lib/orchestration/complexity-gate.js`, which decides on the resolved set size
|
|
193
|
-
alone — it does not read the Story body). A Story with `dispatchMode: "inline"`
|
|
194
|
-
executes [`deliver-story.md`](deliver-story.md) **inline in this session** — no
|
|
195
|
-
`story-worker` sub-agent boot (sub-agent boots are the dominant deliver-phase
|
|
196
|
-
token cost at trivial scope) — threading the same `docsDigestPath` /
|
|
197
|
-
`checklistPath` / change-set discipline as a spawned worker. It does not touch
|
|
198
|
-
the acceptance verdict owner, which the ceremony profile alone names
|
|
199
|
-
([`deliver-digest.md`](deliver-digest.md) § 3). Every `single-story-close.js`
|
|
200
|
-
gate, the PR to `main`, and the terminal envelope are identical.
|
|
201
|
-
|
|
202
|
-
**A trivial shape does not buy that session.** Only the
|
|
203
|
-
one-Story rule above yields `inline`; every Story of a multi-Story run comes
|
|
204
|
-
back `subagent` however lite its body, because the ready set below may offer
|
|
205
|
-
several Stories on one beat and a session cannot be split between them. The
|
|
206
|
-
Story's shape does not enter the decision at all — `resolveStoryDispatchMode`
|
|
207
|
-
reads the resolved set size and nothing else, and the `route::lite` hint label
|
|
208
|
-
was retired with the plan-side route claim (Story #5312), so there is no label
|
|
209
|
-
left to lose or misread.
|
|
152
|
+
**Read the mode; never infer it from shape.** Before spawning anything, read
|
|
153
|
+
the Story's `dispatchMode` from the resolver envelope (`stories[].dispatchMode`,
|
|
154
|
+
from `resolveStoryDispatchMode` in `lib/orchestration/complexity-gate.js`,
|
|
155
|
+
which decides on the resolved set size alone). The rule is digest § 1: a
|
|
156
|
+
one-Story run is `inline`, every Story of a multi-Story run is `subagent`
|
|
157
|
+
however lite its body. A Story with `dispatchMode: "inline"` executes
|
|
158
|
+
[`deliver-story.md`](deliver-story.md) **inline in this session** — no
|
|
159
|
+
`story-worker` boot — threading the same `docsDigestPath` / `checklistPath` /
|
|
160
|
+
change-set discipline as a spawned worker. It does not touch the acceptance
|
|
161
|
+
verdict owner ([`deliver-digest.md`](deliver-digest.md) § 3).
|
|
210
162
|
|
|
211
163
|
**Issue a beat's spawns in one turn.** A beat hands you a ready set, not a
|
|
212
|
-
queue: those Stories have no dependency edge between them
|
|
213
|
-
|
|
214
|
-
branch). Dispatch them the way
|
|
164
|
+
queue: those Stories have no dependency edge between them and no shared write
|
|
165
|
+
paths. Dispatch them the way
|
|
215
166
|
[`parallel-tooling.md`](parallel-tooling.md) Rule 3 prescribes — **N `Agent`
|
|
216
167
|
calls issued together in a single assistant turn**, one per ready Story, not
|
|
217
|
-
`Agent` → wait → `Agent`. Serial dispatch
|
|
218
|
-
|
|
219
|
-
nothing; the wave aggregator is built for the parallel shape. Respect
|
|
168
|
+
`Agent` → wait → `Agent`. Serial dispatch costs the run a full Story's
|
|
169
|
+
implementation time per sibling for nothing. Respect
|
|
220
170
|
`delivery.deliverRunner.concurrencyCap`: when the ready set exceeds it, slice
|
|
221
171
|
into batches of `cap` and dispatch each batch in its own turn.
|
|
222
172
|
|
|
@@ -289,8 +239,7 @@ at `agent::closing` for the human merge and is **not** flipped to
|
|
|
289
239
|
`agent::blocked` — `--wait-merge` does not override this, because the operator
|
|
290
240
|
owning the merge is a decision to respect, not a fault to report. A genuine
|
|
291
241
|
*arm failure* is the opposite case: nobody chose it, so close still waits and
|
|
292
|
-
still blocks.
|
|
293
|
-
without misfiling deliberate human merges as blocks.
|
|
242
|
+
still blocks.
|
|
294
243
|
|
|
295
244
|
## Per-run epilogue (N>1)
|
|
296
245
|
|
|
@@ -306,16 +255,14 @@ This executes, in order:
|
|
|
306
255
|
- `follow-up-rollup` — friction follow-ups across every Story in the run
|
|
307
256
|
(files issues when auto-file is on; posts `follow-ups`).
|
|
308
257
|
- `epic-close` — **reports** which of the run's container Epics its land tails
|
|
309
|
-
left closed and which are still open. **Read-only** —
|
|
310
|
-
|
|
311
|
-
derived from a complete child set by the last Story's own land tail.
|
|
258
|
+
left closed and which are still open. **Read-only** — the last Story's own
|
|
259
|
+
land tail already derived the container from a complete child set.
|
|
312
260
|
|
|
313
261
|
**The audit roster is opt-in** (Story #5343). Add `--audit-roster` and the run
|
|
314
262
|
also selects cross-Story audit lenses over the combined landed tip and posts
|
|
315
263
|
`plan-run-audit-roster` on the primary Story — and the host MUST then walk
|
|
316
264
|
every listed lens against the combined diff, one `auditor` sub-agent per lens.
|
|
317
|
-
That walk is
|
|
318
|
-
going to read it, so **the operator asks for it** — exactly as for the
|
|
265
|
+
That walk is expensive, so **the operator asks for it** — exactly as for the
|
|
319
266
|
pre-mortem plan critic. Without the flag no roster comment is posted and no
|
|
320
267
|
auditor is spawned.
|
|
321
268
|
|
|
@@ -324,56 +271,40 @@ confirm instead (`captureStoryFollowUps`).
|
|
|
324
271
|
|
|
325
272
|
## Container-Epic rollup (every N)
|
|
326
273
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
`
|
|
331
|
-
|
|
332
|
-
close (reported as `supersede.epicRollup`) — which is why it holds at **N=1**,
|
|
333
|
-
where no epilogue runs, and why a cohort superseded by a re-plan no longer
|
|
334
|
-
strands its container open above finished work.
|
|
274
|
+
`epic-rollup.js` derives a container Epic's state from its children at
|
|
275
|
+
**every edge that changes a child's state** — the `agent::executing` flip in
|
|
276
|
+
`single-story-init.js`, the post-land tail (the tail's `epicRollup` step), and
|
|
277
|
+
`plan-persist`'s supersede close (`supersede.epicRollup`) — so it holds at
|
|
278
|
+
**N=1**, where no epilogue runs.
|
|
335
279
|
|
|
336
280
|
- **Status** follows the children's composition (`deriveParentState` mapped
|
|
337
281
|
onto the board's three options): any **open** child executing or blocked →
|
|
338
282
|
`In Progress`, every child `agent::done` or closed → `Done`. A **closed**
|
|
339
|
-
child contributes no `agent::*` state at all
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
**directly**, never via a label: the container carries no `agent::*` label
|
|
343
|
-
by construction, which is what keeps it out of the bare `/mandrel-deliver`
|
|
344
|
-
ready list.
|
|
283
|
+
child contributes no `agent::*` state at all. It is written **directly**,
|
|
284
|
+
never via a label: the container carries no `agent::*` label by
|
|
285
|
+
construction, which keeps it out of the bare `/mandrel-deliver` ready list.
|
|
345
286
|
- **Owner** — `github.operatorHandle` is added to the Epic while any child is
|
|
346
287
|
in flight, through the additive assignees endpoint, and is never removed.
|
|
347
288
|
- **Closure** is one-way: a container whose children are all finished closes,
|
|
348
289
|
as `completed` when at least one child landed and as `not_planned` when none
|
|
349
|
-
did
|
|
350
|
-
|
|
351
|
-
issue — which is why the lookup reads `state: 'all'`, since an open-only
|
|
352
|
-
listing cannot see the container it would have to correct.
|
|
290
|
+
did. A reopened child moves Status back to `In Progress` and does **not**
|
|
291
|
+
reopen the issue.
|
|
353
292
|
- The parent lookup resolves the native parent edge in **one** call
|
|
354
|
-
(`getParentIssue`),
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
reader `/mandrel-deliver`'s expansion uses, so an Epic can never be
|
|
358
|
-
expandable but unclosable — bounded at 5 concurrent reads.
|
|
293
|
+
(`getParentIssue`), falling back to a `type::epic` scan for a child linked by
|
|
294
|
+
checklist alone. Children are the body checklist **union** the native
|
|
295
|
+
sub-issue edges — the same reader `/mandrel-deliver`'s expansion uses.
|
|
359
296
|
- A checklist row citing an id that resolves to nothing is **dropped with a
|
|
360
|
-
warning** when the native read succeeded
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
refused by name (`epic-typed-child`) and neither blocks nor advances the
|
|
364
|
-
parent.
|
|
297
|
+
warning** when the native read succeeded; an unresolvable *native* edge
|
|
298
|
+
still fails the read. An Epic-typed child is refused by name
|
|
299
|
+
(`epic-typed-child`) and neither blocks nor advances the parent.
|
|
365
300
|
- Every step is best-effort and never throws: a stale container costs
|
|
366
301
|
tidiness, not a landed Story's envelope.
|
|
367
302
|
|
|
368
303
|
## Ceremony (profiles + two scopes)
|
|
369
304
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
changed files' intersection with the sensitive-path classes in
|
|
374
|
-
`audit-rules.json`, `review-depth.js#deriveChangeLevel`, never a
|
|
375
|
-
planner-authored verdict) still selects **review depth**, which is the second
|
|
376
|
-
row of the scope table below:
|
|
305
|
+
The ceremony rule is digest § 3: `delivery.routing.ceremonyProfile` alone names
|
|
306
|
+
the acceptance verdict owner; the change level derived from the Story's own
|
|
307
|
+
diff selects **review depth**.
|
|
377
308
|
|
|
378
309
|
| Profile | Acceptance verdict owner | When to use |
|
|
379
310
|
| --- | --- | --- |
|
|
@@ -391,34 +322,29 @@ row of the scope table below:
|
|
|
391
322
|
|
|
392
323
|
## Async merge-confirm mode (`delivery.mergeWatch.mode: "async"`)
|
|
393
324
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
check) and then returns `pending`
|
|
397
|
-
tool slot
|
|
398
|
-
When a close returns that `pending` envelope, launch its
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
325
|
+
In async mode the close arms auto-merge, probes for ~60s (catching an instant
|
|
326
|
+
merge or, via the head-anchored required-check predicate, an instantly-red
|
|
327
|
+
required check) and then returns `pending` with a `nextCommand`, instead of
|
|
328
|
+
holding the host tool slot for a merge that lands after the wait would have
|
|
329
|
+
expired anyway. When a close returns that `pending` envelope, launch its
|
|
330
|
+
`nextCommand` (`single-story-confirm-merge.js … --wait`) as a **background**
|
|
331
|
+
invocation (host background Bash — its completion re-invokes the agent) and
|
|
332
|
+
move on to the next Story; `single-story-confirm-merge.js` is idempotent and
|
|
333
|
+
owns the whole tail, and `deliver-recover.js` recovers an orphaned confirm. Do
|
|
334
|
+
not foreground-poll the merge. The cumulative `maxBudgetSeconds` give-up is
|
|
335
|
+
unchanged.
|
|
403
336
|
|
|
404
337
|
**On a multi-Story run the beat adds `--merge-watch-mode async` for you.** Close
|
|
405
|
-
sees one Story and cannot see run topology
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
serialized
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
exits non-zero before any phase runs, so a typo cannot silently drop the run
|
|
419
|
-
back onto synchronous waiting. Expect a `pending` envelope from each async
|
|
420
|
-
close — that is the designed ending here, not a failure; background its
|
|
421
|
-
`nextCommand` and move to the next Story's close immediately.
|
|
422
|
-
|
|
423
|
-
A one-Story run should keep the `sync` default: there is no sibling to unblock,
|
|
424
|
-
and the foreground wait is the cheapest path to `landed`.
|
|
338
|
+
sees one Story and cannot see run topology — `deliver-run.js` can: every
|
|
339
|
+
`close[]` command it renders carries the flag when the run holds more than one
|
|
340
|
+
Story and omits it for a run of one. Run the command it printed verbatim rather
|
|
341
|
+
than composing your own. Under `sync` each serialized close would hold the
|
|
342
|
+
foreground for its full merge wait before the next may start — the run's
|
|
343
|
+
dominant serialized cost, paid per sibling. Expect a `pending` envelope from
|
|
344
|
+
each async close — that is the designed ending here, not a failure.
|
|
345
|
+
|
|
346
|
+
The flag overrides `delivery.mergeWatch.mode` for that invocation only; the
|
|
347
|
+
config default stays `"sync"`. A slow-CI solo consumer may opt into `"async"`
|
|
348
|
+
for the same reason — a foreground wait longer than the host tool ceiling
|
|
349
|
+
expires `pending` anyway. Otherwise a one-Story run keeps `sync`: there is no
|
|
350
|
+
sibling to unblock, and the foreground wait is the cheapest path to `landed`.
|