mandrel 2.59.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +57 -49
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +39 -121
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -124
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +123 -191
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +22 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +60 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +326 -523
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +17 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -8,26 +8,24 @@ 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
|
|
22
21
|
delivery path takes range tokens — `resolve-stories.js --ids`,
|
|
23
|
-
`
|
|
22
|
+
`deliver-run.js --stories` and `--handoff`, and
|
|
24
23
|
`plan-run-epilogue.js --stories`. Normalize the operator's spacing away and hand
|
|
25
24
|
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,25 +34,36 @@ 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
|
-
## Sequencing edge cases (`stories-wave-tick.js`)
|
|
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
|
-
|
|
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.
|
|
53
|
+
|
|
54
|
+
**Inspecting a beat without taking one.** `deliver-run.js` writes — the ledger,
|
|
55
|
+
the prompts. The tick underneath it is read-only and answers "what *would* the
|
|
56
|
+
next beat do?":
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node .agents/scripts/stories-wave-tick.js --stories <id,id,...> --probe-live
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Its envelope is the beat's scheduling half verbatim — `ready`, `inFlight`,
|
|
63
|
+
`inFlightReservation`, `footprintGuard`, `foreignHeld`, `wedged`. Read it when
|
|
64
|
+
a slot is unfilled and you want to know why before acting. Do **not** drive a
|
|
65
|
+
run from it: without the ledger the init window reopens, and the same Story is
|
|
66
|
+
handed out twice.
|
|
58
67
|
|
|
59
68
|
**The non-zero exit codes.** **2** — `cycleError`: the graph is
|
|
60
69
|
self-referential; fix `depends_on`, do not retry. **3** — `wedged`: nothing
|
|
@@ -74,69 +83,62 @@ turn, not a slow beat.
|
|
|
74
83
|
Each beat re-probes live state: it re-resolves the graph, classifies **done**
|
|
75
84
|
(`agent::done` or a closed issue — including foreign blockers that landed in
|
|
76
85
|
another run), and derives **in-flight** from live `agent::executing` /
|
|
77
|
-
`agent::closing` labels. You never compute `done` or `in-flight
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
window is short rather than minutes-long), but it is not
|
|
85
|
-
zero — until the label lands the Story still reads `agent::ready` and, without
|
|
86
|
-
`--dispatched`, the next beat would hand it back and a second sub-agent would
|
|
87
|
-
join the first on the same branch and worktree, interleaving commits.
|
|
88
|
-
`--dispatched` closes that residual same-run window. The rule is
|
|
89
|
-
**append-only: add each id as you dispatch it and never remove one.** The flag
|
|
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
|
|
90
93
|
is additive, not authoritative — the probe unions it into the label-derived set
|
|
91
|
-
and
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
109
|
+
operator owns the call: confirm no worker is running, remove the id from
|
|
110
|
+
`dispatched` in `<tempRoot>/run-<id>/ledger.json` (deleting the file works too,
|
|
111
|
+
at the cost of reopening the init window for the rest), and beat again with
|
|
112
|
+
`--run-id <id>` so the same run directory is reused.
|
|
96
113
|
|
|
97
114
|
**Cross-run de-confliction is automatic.** A Story another
|
|
98
115
|
operator is delivering is withheld without any bookkeeping from you: the probe
|
|
99
116
|
reads the Story's assignee lease and, when it belongs to a different operator,
|
|
100
117
|
withholds the Story and reports it in the envelope's
|
|
101
118
|
`foreignHeld: [{ id, holder }]` (with `foreignHeldReason`). That is not a
|
|
102
|
-
failure or a wedge —
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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.
|
|
108
125
|
|
|
109
126
|
**Overlapping footprints are reserved across beats, not just within one.** A
|
|
110
127
|
Story sharing a **concrete** path with a still-implementing Story is withheld
|
|
111
128
|
and named in `inFlightReservation: { available, withheld: [{ id, blockedBy,
|
|
112
129
|
reason, source, paths }], note }`, where `reason` is `in-flight-earlier-beat` or
|
|
113
130
|
`foreign-lease`. Like `foreignHeld` this is neither a failure nor a wedge — the
|
|
114
|
-
Story re-admits automatically once its blocker leaves the in-flight set
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
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.
|
|
120
136
|
|
|
121
137
|
**Beat-local skips are reported too**, in `footprintGuard: { mode, withheld,
|
|
122
|
-
advisory, note }`.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
- `declared-overlap` — both Stories' `changes[]` named the path (or a declared
|
|
128
|
-
glob). Intended serialization; two Stories rewriting the same generated
|
|
129
|
-
baseline must not co-dispatch.
|
|
130
|
-
- `scraped-overlap` — only the text evidence produced it. Real signal — a
|
|
131
|
-
declaration is only a lower bound — but the class where a false positive is
|
|
132
|
-
possible.
|
|
133
|
-
|
|
134
|
-
**The evidence scrape excludes exactly three token sources**, each structurally
|
|
135
|
-
incapable of naming an edit target: `audit-fingerprints` /
|
|
136
|
-
`audit-semantic-keys` provenance footers, paths under `project.paths.tempRoot`,
|
|
137
|
-
and markdown-link URL interiors. Nothing else is stripped — a
|
|
138
|
-
`<!-- DECOMPOSITION -->` block's paths are genuine intent
|
|
139
|
-
([`instructions.md` § 7](../../instructions.md)) and still count.
|
|
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.
|
|
140
142
|
|
|
141
143
|
**`delivery.deliverRunner.footprintGuard`** selects what a collision does:
|
|
142
144
|
|
|
@@ -147,47 +149,24 @@ and markdown-link URL interiors. Nothing else is stripped — a
|
|
|
147
149
|
|
|
148
150
|
## Dispatch mechanics (role-scoped by default)
|
|
149
151
|
|
|
150
|
-
**
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
`
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
alone — it does not read the Story body). A Story with `dispatchMode: "inline"`
|
|
165
|
-
executes [`deliver-story.md`](deliver-story.md) **inline in this session** — no
|
|
166
|
-
`story-worker` sub-agent boot and no fresh acceptance-critic sub-agents
|
|
167
|
-
(sub-agent boots are the dominant deliver-phase token cost at trivial scope) —
|
|
168
|
-
threading the same `docsDigestPath` / `checklistPath` / change-set discipline
|
|
169
|
-
as a spawned worker. Inline removes model-side fan-out only: every
|
|
170
|
-
`single-story-close.js` gate, the PR to `main`, and the terminal envelope are
|
|
171
|
-
identical.
|
|
172
|
-
|
|
173
|
-
**A trivial shape does not buy that session.** Only the
|
|
174
|
-
one-Story rule above yields `inline`; every Story of a multi-Story run comes
|
|
175
|
-
back `subagent` however lite its body, because the ready set below may offer
|
|
176
|
-
several Stories on one beat and a session cannot be split between them. The
|
|
177
|
-
Story's derived shape is still reported (it sets ceremony, and a sensitive
|
|
178
|
-
footprint keeps the fresh acceptance critic), and the `route::lite` label
|
|
179
|
-
remains a human-visible hint only, never the control signal — a lost or
|
|
180
|
-
never-written label cannot misroute delivery.
|
|
181
|
-
|
|
182
|
-
**Issue a beat's spawns in one turn.** A wave tick hands you a ready set, not a
|
|
183
|
-
queue: those Stories have no dependency edge between them (the resolver already
|
|
184
|
-
withheld any that do) and no shared write paths (each owns its own worktree and
|
|
185
|
-
branch). Dispatch them the way
|
|
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).
|
|
162
|
+
|
|
163
|
+
**Issue a beat's spawns in one turn.** A beat hands you a ready set, not a
|
|
164
|
+
queue: those Stories have no dependency edge between them and no shared write
|
|
165
|
+
paths. Dispatch them the way
|
|
186
166
|
[`parallel-tooling.md`](parallel-tooling.md) Rule 3 prescribes — **N `Agent`
|
|
187
167
|
calls issued together in a single assistant turn**, one per ready Story, not
|
|
188
|
-
`Agent` → wait → `Agent`. Serial dispatch
|
|
189
|
-
|
|
190
|
-
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
|
|
191
170
|
`delivery.deliverRunner.concurrencyCap`: when the ready set exceeds it, slice
|
|
192
171
|
into batches of `cap` and dispatch each batch in its own turn.
|
|
193
172
|
|
|
@@ -200,43 +179,25 @@ exposes agent dispatch, spawn each ready Story as its own
|
|
|
200
179
|
sub-agent executes [`deliver-story.md`](deliver-story.md) Steps 0–2.5
|
|
201
180
|
(init → implement → acceptance self-eval → **push**) and stops there; **you**
|
|
202
181
|
own Step 3, serialized — see `/mandrel-deliver` § Closing what the workers hand back.
|
|
203
|
-
Thread into its prompt: `storyId`; `docsDigestPath` (the per-run docs digest, null when
|
|
204
|
-
`project.docsContextFiles` is unset); `checklistPath` (the footprint-matched
|
|
205
|
-
write-time audit checklist, produced at dispatch, below); and the
|
|
206
|
-
**change-set discipline** — the worker computes the change set once with
|
|
207
|
-
`computeChangeSet` and hands that one list to every acceptance critic; it
|
|
208
|
-
never lets a critic re-derive the diff.
|
|
209
|
-
|
|
210
|
-
**Produce `checklistPath` before the spawn.** Compute the payload
|
|
211
|
-
from the Story's predicted footprint (its `changes[]` / `references[]` path
|
|
212
|
-
entries) with `buildDispatchChecklist` and write it to the run temp dir, then
|
|
213
|
-
thread the resulting path (empty when nothing matched):
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
node --input-type=module -e '
|
|
217
|
-
import { buildDispatchChecklist } from "<main-repo>/.agents/scripts/lib/audit-suite/index.js";
|
|
218
|
-
import { parse } from "<main-repo>/.agents/scripts/lib/story-body/story-body.js";
|
|
219
|
-
// storyBody is the fetched Story issue body.
|
|
220
|
-
const { changes, references } = parse(process.env.STORY_BODY);
|
|
221
|
-
const { checklistPath } = buildDispatchChecklist({
|
|
222
|
-
storyId: <storyId>, changes, references, runTempDir: "temp/run-<id>",
|
|
223
|
-
});
|
|
224
|
-
console.log(checklistPath ?? "");
|
|
225
|
-
'
|
|
226
|
-
```
|
|
227
182
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
183
|
+
**The beat writes the prompt; you pass the file.** Each `ready[]` entry carries
|
|
184
|
+
a `promptPath` under `<tempRoot>/run-<id>/`, and that file is the whole spawn
|
|
185
|
+
payload: the Story id, the `workCwd` conventions, the `docsDigestPath` (null
|
|
186
|
+
when `project.docsContextFiles` is unset), the `checklistPath` — the
|
|
187
|
+
footprint-matched write-time audit checklist built from the Story's declared
|
|
188
|
+
`changes[]` / `references[]`, empty when nothing matched — and the
|
|
189
|
+
**change-set discipline** (derive the change set once with `ceremony-derive.js`
|
|
190
|
+
and hand that one list to the verdict owner; never let a critic re-derive the
|
|
191
|
+
diff). An unmatched checklist costs nothing: the maker-blind close-scope pass
|
|
192
|
+
still covers the Story.
|
|
232
193
|
|
|
233
194
|
**Inline fallback (`roleScopedAgents: false` / no-nesting harness).** When the
|
|
234
195
|
kill-switch is off, or the host cannot spawn a sub-agent at this nesting depth,
|
|
235
196
|
do **not** stall: read [`deliver-story.md`](deliver-story.md) **in full** and
|
|
236
|
-
execute it directly, in this turn,
|
|
237
|
-
`
|
|
238
|
-
|
|
239
|
-
|
|
197
|
+
execute it directly, in this turn, following that same dispatch prompt. Under
|
|
198
|
+
`--yes` / injected helper content, execute directly without a re-read turn. The
|
|
199
|
+
engine, gates, and terminal envelope are identical either way — only the
|
|
200
|
+
isolation differs.
|
|
240
201
|
|
|
241
202
|
## Intent phrases (what replaced the flag table)
|
|
242
203
|
|
|
@@ -278,8 +239,7 @@ at `agent::closing` for the human merge and is **not** flipped to
|
|
|
278
239
|
`agent::blocked` — `--wait-merge` does not override this, because the operator
|
|
279
240
|
owning the merge is a decision to respect, not a fault to report. A genuine
|
|
280
241
|
*arm failure* is the opposite case: nobody chose it, so close still waits and
|
|
281
|
-
still blocks.
|
|
282
|
-
without misfiling deliberate human merges as blocks.
|
|
242
|
+
still blocks.
|
|
283
243
|
|
|
284
244
|
## Per-run epilogue (N>1)
|
|
285
245
|
|
|
@@ -292,117 +252,99 @@ node .agents/scripts/plan-run-epilogue.js --stories 101,102
|
|
|
292
252
|
|
|
293
253
|
This executes, in order:
|
|
294
254
|
|
|
295
|
-
- `audit-roster` — selects cross-Story audit lenses over the combined landed
|
|
296
|
-
tip and posts `plan-run-audit-roster` on the primary Story; the host MUST
|
|
297
|
-
walk each listed lens against the combined diff.
|
|
298
255
|
- `follow-up-rollup` — friction follow-ups across every Story in the run
|
|
299
256
|
(files issues when auto-file is on; posts `follow-ups`).
|
|
300
|
-
- `sibling-coherence` — Spec/Acceptance coherence check across sibling bodies
|
|
301
|
-
(`plan-run-sibling-coherence`).
|
|
302
257
|
- `epic-close` — **reports** which of the run's container Epics its land tails
|
|
303
|
-
left closed and which are still open. **Read-only** —
|
|
304
|
-
|
|
305
|
-
|
|
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.
|
|
260
|
+
|
|
261
|
+
**The audit roster is opt-in** (Story #5343). Add `--audit-roster` and the run
|
|
262
|
+
also selects cross-Story audit lenses over the combined landed tip and posts
|
|
263
|
+
`plan-run-audit-roster` on the primary Story — and the host MUST then walk
|
|
264
|
+
every listed lens against the combined diff, one `auditor` sub-agent per lens.
|
|
265
|
+
That walk is expensive, so **the operator asks for it** — exactly as for the
|
|
266
|
+
pre-mortem plan critic. Without the flag no roster comment is posted and no
|
|
267
|
+
auditor is spawned.
|
|
306
268
|
|
|
307
269
|
A single-Story run skips the epilogue — follow-ups are captured on merge
|
|
308
270
|
confirm instead (`captureStoryFollowUps`).
|
|
309
271
|
|
|
310
272
|
## Container-Epic rollup (every N)
|
|
311
273
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
`
|
|
316
|
-
|
|
317
|
-
close (reported as `supersede.epicRollup`) — which is why it holds at **N=1**,
|
|
318
|
-
where no epilogue runs, and why a cohort superseded by a re-plan no longer
|
|
319
|
-
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.
|
|
320
279
|
|
|
321
280
|
- **Status** follows the children's composition (`deriveParentState` mapped
|
|
322
281
|
onto the board's three options): any **open** child executing or blocked →
|
|
323
282
|
`In Progress`, every child `agent::done` or closed → `Done`. A **closed**
|
|
324
|
-
child contributes no `agent::*` state at all
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
**directly**, never via a label: the container carries no `agent::*` label
|
|
328
|
-
by construction, which is what keeps it out of the bare `/mandrel-deliver`
|
|
329
|
-
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.
|
|
330
286
|
- **Owner** — `github.operatorHandle` is added to the Epic while any child is
|
|
331
287
|
in flight, through the additive assignees endpoint, and is never removed.
|
|
332
288
|
- **Closure** is one-way: a container whose children are all finished closes,
|
|
333
289
|
as `completed` when at least one child landed and as `not_planned` when none
|
|
334
|
-
did
|
|
335
|
-
|
|
336
|
-
issue — which is why the lookup reads `state: 'all'`, since an open-only
|
|
337
|
-
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.
|
|
338
292
|
- The parent lookup resolves the native parent edge in **one** call
|
|
339
|
-
(`getParentIssue`),
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
reader `/mandrel-deliver`'s expansion uses, so an Epic can never be
|
|
343
|
-
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.
|
|
344
296
|
- A checklist row citing an id that resolves to nothing is **dropped with a
|
|
345
|
-
warning** when the native read succeeded
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
refused by name (`epic-typed-child`) and neither blocks nor advances the
|
|
349
|
-
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.
|
|
350
300
|
- Every step is best-effort and never throws: a stale container costs
|
|
351
301
|
tidiness, not a landed Story's envelope.
|
|
352
302
|
|
|
353
303
|
## Ceremony (profiles + two scopes)
|
|
354
304
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
sensitive-path classes in `audit-rules.json`
|
|
359
|
-
(`review-depth.js#deriveChangeLevel`), not a planner-authored verdict:
|
|
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**.
|
|
360
308
|
|
|
361
|
-
| Profile | Acceptance
|
|
309
|
+
| Profile | Acceptance verdict owner | When to use |
|
|
362
310
|
| --- | --- | --- |
|
|
363
|
-
| `minimal` |
|
|
364
|
-
| `standard` |
|
|
365
|
-
| `strict` |
|
|
311
|
+
| `minimal` | Inline self-eval | Tiny trusted N=1 Stories |
|
|
312
|
+
| `standard` | Inline self-eval | Default |
|
|
313
|
+
| `strict` | Fresh-context critic | High-assurance / regulated surfaces |
|
|
366
314
|
|
|
367
315
|
| Scope | What runs | Mechanism |
|
|
368
316
|
| --- | --- | --- |
|
|
369
317
|
| **Per-Story (always)** | Gates, branch discipline, close-and-land | `deliver-story` / `single-story-close` |
|
|
370
|
-
| **Per-Story (profile
|
|
371
|
-
| **Per-
|
|
318
|
+
| **Per-Story (profile)** | Acceptance verdict owner (the rule: digest § 3) | `ceremony-routing.js` |
|
|
319
|
+
| **Per-Story (derived level)** | Review depth | `review-depth.js` + `code-review.js` |
|
|
320
|
+
| **Per-run (N>1)** | Follow-up roll-up · container-Epic report (· audit roster on `--audit-roster`) | `plan-run-epilogue.js` once at run end |
|
|
372
321
|
| **Per-Story land tail** | Follow-up capture · status resync · Epic rollup · ref cleanup · base fast-forward | `single-story-close/phases/post-land.js` (in-process, per-step reported) |
|
|
373
322
|
|
|
374
323
|
## Async merge-confirm mode (`delivery.mergeWatch.mode: "async"`)
|
|
375
324
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
check) and then returns `pending`
|
|
379
|
-
tool slot
|
|
380
|
-
When a close returns that `pending` envelope, launch its
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
exits non-zero before any phase runs, so a typo cannot silently drop the run
|
|
403
|
-
back onto synchronous waiting. Expect a `pending` envelope from each async
|
|
404
|
-
close — that is the designed ending here, not a failure; background its
|
|
405
|
-
`nextCommand` and move to the next Story's close immediately.
|
|
406
|
-
|
|
407
|
-
A one-Story run should keep the `sync` default: there is no sibling to unblock,
|
|
408
|
-
and the foreground wait is the cheapest path to `landed`.
|
|
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.
|
|
336
|
+
|
|
337
|
+
**On a multi-Story run the beat adds `--merge-watch-mode async` for you.** Close
|
|
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`.
|