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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description:
|
|
3
3
|
Execute one Story end-to-end: story-<id> from main, implemented in a worktree
|
|
4
|
-
(optional ## Slicing checkpoints),
|
|
4
|
+
(optional ## Slicing checkpoints), profile-resolved ceremony, PR against main.
|
|
5
5
|
mandatoryReads: [deliver-digest.md]
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -18,13 +18,12 @@ mandatoryReads: [deliver-digest.md]
|
|
|
18
18
|
The **one** delivery engine in v2:
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
|
-
single-story-init.js → implement + commits →
|
|
21
|
+
single-story-init.js → implement + commits → ceremony → push
|
|
22
22
|
──hand-off──▶ single-story-close.js (gates, PR → main, agent::closing)
|
|
23
23
|
→ CI watch + merge → single-story-confirm-merge.js (agent::done)
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
traits and prerequisites: reference § Engine invariants.
|
|
26
|
+
Engine traits and prerequisites: reference § Engine invariants.
|
|
28
27
|
|
|
29
28
|
## Who owns which step
|
|
30
29
|
|
|
@@ -33,8 +32,9 @@ that dispatched the work**, never to a spawned worker.
|
|
|
33
32
|
|
|
34
33
|
- **Inline dispatch** (a one-Story run — digest § 1): one session is both
|
|
35
34
|
roles and walks Steps 0→7, no hand-off.
|
|
36
|
-
- **Sub-agent dispatch**: the `story-worker`
|
|
37
|
-
|
|
35
|
+
- **Sub-agent dispatch**: the `story-worker` boots on the `promptPath`
|
|
36
|
+
`deliver-run.js` wrote for it, stops at Step 2.5 with the branch pushed and
|
|
37
|
+
returns a hand-off; the dispatching `/mandrel-deliver` session runs Step 3
|
|
38
38
|
**in its own turn** and **serializes the tail — one close at a time across
|
|
39
39
|
the run**, even though implementation ran in parallel (reference § Step 3).
|
|
40
40
|
|
|
@@ -84,22 +84,21 @@ live in [`acceptance-self-eval.md`](acceptance-self-eval.md). **`proceed`** →
|
|
|
84
84
|
Step 2. **`block`** → **do not close**: post a `friction` comment and flip
|
|
85
85
|
`agent::blocked` (reference § Step 1a).
|
|
86
86
|
|
|
87
|
-
## Step 2 — Ceremony (profile
|
|
87
|
+
## Step 2 — Ceremony (the profile alone)
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
The acceptance verdict owner comes from `delivery.routing.ceremonyProfile` and
|
|
90
|
+
nothing else — not the diff, not the dispatch mode, never a planner-authored
|
|
91
|
+
verdict. **Digest § 3** is the incantation (change set once, derive the level
|
|
92
|
+
for review depth, resolve the owner with `ceremony-routing.js`) and the one
|
|
93
|
+
home of the rule; edge cases are reference § Step 2. Hard gates always run in
|
|
94
|
+
Step 3 — nothing here disables them; do **not** pre-run the chain here —
|
|
95
|
+
Step 2.5's credited suite run is the sole exception.
|
|
95
96
|
|
|
96
97
|
### Step 2.5 — The one credited suite run, the push, then hand off
|
|
97
98
|
|
|
98
|
-
After the self-eval loop's last fix commit, run the
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
stamps that, so the `test` credit is earned on any runner and only a *later*
|
|
102
|
-
commit invalidates it. Red → fix, commit, re-run.
|
|
99
|
+
After the self-eval loop's last fix commit, run the one credited suite run
|
|
100
|
+
in the worktree — **digest § 5** is its only home and carries the
|
|
101
|
+
invocation. Red → fix, commit, re-run.
|
|
103
102
|
|
|
104
103
|
Push `story-<storyId>` to `origin`, confirming the remote ref moved. Then
|
|
105
104
|
(sub-agent dispatch only) return the hand-off — Story id, `workCwd`,
|
|
@@ -53,10 +53,7 @@ the first `createIssue`, and refuses any pair of same-wave siblings that both
|
|
|
53
53
|
declare a path (or one of which declares a covering glob) — naming the pair,
|
|
54
54
|
the paths and the two remedies (merge them, or order them with `depends_on`).
|
|
55
55
|
Such a pair cannot be co-dispatched, so the split buys no parallelism and
|
|
56
|
-
costs a delivery session per Story.
|
|
57
|
-
which refused only byte-identical acceptance text across siblings — a shape
|
|
58
|
-
model output does not produce — so it never fired on the fragmentation it was
|
|
59
|
-
meant to catch. **N=1 can never trip the refusal.**
|
|
56
|
+
costs a delivery session per Story. **N=1 can never trip the refusal.**
|
|
60
57
|
|
|
61
58
|
A draft of more than one Story also stops at **Gate #2** for operator
|
|
62
59
|
approval, `--force-review` or not: a split always earns eyes. `--yes`
|
|
@@ -65,8 +62,7 @@ auto-proceeds, as at every other gate.
|
|
|
65
62
|
## Unknown triage — AFK vs HITL
|
|
66
63
|
|
|
67
64
|
Every open question interrogation surfaces is triaged by **who can resolve
|
|
68
|
-
it**, not parked in one bucket
|
|
69
|
-
HITL/AFK ticket typing):
|
|
65
|
+
it**, not parked in one bucket:
|
|
70
66
|
|
|
71
67
|
- **AFK** (away from keyboard — the agent resolves it alone): the answer is a
|
|
72
68
|
fact something already records — third-party docs, a dependency's API
|
|
@@ -106,7 +102,7 @@ not re-deriving which assumptions were really the agent's to make.
|
|
|
106
102
|
|
|
107
103
|
Gate #1 stops for exactly two things — the sharpened plan intent and any HITL
|
|
108
104
|
unknown — and everything else the envelope surfaced collapses to **one
|
|
109
|
-
advisory line** beneath it
|
|
105
|
+
advisory line** beneath it. Nothing on that line stops the run,
|
|
110
106
|
reroutes it, or is invoked by `/mandrel-plan`; each item names something the
|
|
111
107
|
operator may prefer to do instead, and the run proceeds either way. Under
|
|
112
108
|
`--yes` the line is recorded and planning continues — an unattended run has
|
|
@@ -128,8 +124,7 @@ The line names, in order, whichever of these the envelope carries:
|
|
|
128
124
|
the same shape with a different owner.
|
|
129
125
|
- **`memoryPoolAdvisory.recommend`** — name
|
|
130
126
|
[`/memory-consolidate`](../memory-consolidate.md), quoting its
|
|
131
|
-
`reasons[]`.
|
|
132
|
-
harness's byte cap; a stale pool degrades recall, it does not make the plan
|
|
127
|
+
`reasons[]`. A stale pool degrades recall, it does not make the plan
|
|
133
128
|
wrong.
|
|
134
129
|
- **`complexitySignals.uiSurface`** — name [`/prototype`](../prototype.md)
|
|
135
130
|
and stop there. The signal carries **no routing authority and adds no
|
|
@@ -138,8 +133,8 @@ The line names, in order, whichever of these the envelope carries:
|
|
|
138
133
|
lenses gate on, and whether any predicted path matches a web lens
|
|
139
134
|
`filePattern` in `audit-rules.json`; a project with no rendered frontend
|
|
140
135
|
resolves falsey and the offer never fires. `/mandrel-plan` must never invoke
|
|
141
|
-
it —
|
|
142
|
-
|
|
136
|
+
it — the value is a human looking at a layout before its UI acceptance
|
|
137
|
+
criteria are frozen. Under
|
|
143
138
|
`--yes` the offer is recorded and planning proceeds — no reroute, no
|
|
144
139
|
prototype written, no gate raised.
|
|
145
140
|
|
|
@@ -149,11 +144,10 @@ The envelope's `complexitySignals` field carries the paths the seed predicts,
|
|
|
149
144
|
their repo state (existing paths predict refactors; missing predict creates)
|
|
150
145
|
and the `audit-rules.json` sensitive-path classes the footprint intersects —
|
|
151
146
|
`routingAuthority: false`, no `route` field. They ground the authoring
|
|
152
|
-
template's pre-resolved `changes[]` and the `/prototype` offer, nothing else
|
|
153
|
-
Story
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
and ceremony is derived from the landed diff at close.
|
|
147
|
+
template's pre-resolved `changes[]` and the `/prototype` offer, nothing else:
|
|
148
|
+
every Story lands through the same engine and the same close gates, and the
|
|
149
|
+
acceptance verdict owner follows the operator's ceremony profile — never
|
|
150
|
+
anything a plan authored.
|
|
157
151
|
|
|
158
152
|
## Correct-by-construction authoring template
|
|
159
153
|
|
|
@@ -162,22 +156,22 @@ and ceremony is derived from the landed diff at close.
|
|
|
162
156
|
`complexitySignals` ran:
|
|
163
157
|
|
|
164
158
|
- **`verify[]` entries are commands.** There is no tier suffix and no
|
|
165
|
-
`manual:<reason>` escape
|
|
159
|
+
`manual:<reason>` escape: write the exact command or test
|
|
166
160
|
path the deliverer runs and the acceptance critic reads as evidence.
|
|
167
161
|
- **`changes[]` names what the deliverer authors.** Generated artifacts —
|
|
168
162
|
quality baselines, generated test indexes, migration journals, lockfiles —
|
|
169
163
|
are omitted: the work regenerates them, the refresh is a close-gate concern,
|
|
170
164
|
and a declared shared artifact path reserves a footprint that needlessly
|
|
171
165
|
serializes sibling Stories at dispatch.
|
|
172
|
-
- **`changes[]`
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
exists at base, or a `refactors-existing` on one that does not,
|
|
178
|
-
dry-run **warning**, not a rejection
|
|
179
|
-
path
|
|
180
|
-
|
|
166
|
+
- **`changes[]` entries are bare paths.** The skeleton emits each seed-predicted
|
|
167
|
+
path as a bare string and persist derives its assumption by probing the base
|
|
168
|
+
branch ref — present is a `refactors-existing`, absent a `creates` — and
|
|
169
|
+
reports each derivation on the dry-run's repair list. Pin
|
|
170
|
+
`{path, assumption}` only when the probe would get it wrong; a `creates` on
|
|
171
|
+
a path that exists at base, or a `refactors-existing` on one that does not,
|
|
172
|
+
is then a dry-run **warning**, not a rejection. `deletes` stays explicit —
|
|
173
|
+
a bare path can never express a removal — and a `deletes` naming a path
|
|
174
|
+
absent at base is the one `changes[]` shape still refused.
|
|
181
175
|
- **Keep `## Spec` at contract-level prose** — interfaces, invariants,
|
|
182
176
|
load-bearing constraints; no per-file behavior narration — and as long as
|
|
183
177
|
the work needs. There is no word or token budget.
|
|
@@ -188,23 +182,22 @@ kept — passes the persist ticket validators with no round-trip.
|
|
|
188
182
|
### Authored entry shape
|
|
189
183
|
|
|
190
184
|
Each `stories.json` entry: `slug` (`^[a-z0-9][a-z0-9-]*$`), `type: "story"`,
|
|
191
|
-
`title`, `body` (`goal`, optional `spec`, `changes[
|
|
192
|
-
`
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
185
|
+
`title`, `body` (`goal`, optional `spec`, `changes[]` — a **bare path string**
|
|
186
|
+
by default, or `{path, assumption}` with
|
|
187
|
+
`creates|refactors-existing|deletes` to pin one, `non_goals`,
|
|
188
|
+
`reason_to_exist`), top-level `acceptance[]`, `verify[]` (each a **bare
|
|
189
|
+
command** — there is no tier suffix), and `depends_on[]` (a sibling slug, or
|
|
190
|
+
`#<id>` for an existing open Story).
|
|
196
191
|
|
|
197
192
|
Author `acceptance[]` **without** the `AC-<n>:` handle: the body renderer
|
|
198
193
|
numbers each checkbox from its array position, so a carried handle renders
|
|
199
194
|
doubled. Persist normalises one off rather than refusing, and names the strip
|
|
200
195
|
on the dry-run's repair list.
|
|
201
196
|
|
|
202
|
-
Nothing in that shape inventories the repo for the author
|
|
203
|
-
|
|
204
|
-
`validateStoryFileAssumptions
|
|
205
|
-
|
|
206
|
-
plus that gate. There is no pre-computed codebase snapshot to fall back on,
|
|
207
|
-
and no manifest-derived replacement to build.
|
|
197
|
+
Nothing in that shape inventories the repo for the author: the grounding
|
|
198
|
+
contract is the author's own targeted reads plus Phase 8's
|
|
199
|
+
`validateStoryFileAssumptions`, which re-probes every resolved
|
|
200
|
+
`{path, assumption}` at persist.
|
|
208
201
|
|
|
209
202
|
### Per-Story audit provenance (`provenance`)
|
|
210
203
|
|
|
@@ -232,20 +225,16 @@ work this plan already tracked.
|
|
|
232
225
|
| Present but empty (`{}`) | Nothing. "Owns no findings" is a real answer. |
|
|
233
226
|
| **Absent** | The **whole seed's** footers (the union) — the recall-safe default. |
|
|
234
227
|
|
|
235
|
-
**The union fallback is load-bearing, not legacy
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
key whose owning Story had since **closed** was masked by any open neighbour —
|
|
246
|
-
a genuine regression filed as a routine update. With ownership stamped, the
|
|
247
|
-
issue carrying a finding's own fingerprint decides both the match and its
|
|
248
|
-
state (`lib/findings/route-finding.js`).
|
|
228
|
+
**The union fallback is load-bearing, not legacy** — hand-carrying provenance
|
|
229
|
+
out of the seed's HTML comments is a step an author forgets. Attribution is
|
|
230
|
+
additive: it sharpens a plan that opts in and changes nothing for one that
|
|
231
|
+
does not. Never remove the fallback to "finish the migration".
|
|
232
|
+
|
|
233
|
+
Attribution makes the next sweep's dedup answerable: under the union a finding
|
|
234
|
+
confirming against several open Stories can only pick one, and a key whose
|
|
235
|
+
owning Story has **closed** is masked by an open neighbour. With ownership
|
|
236
|
+
stamped, the issue carrying a finding's own fingerprint decides both the match
|
|
237
|
+
and its state (`lib/findings/route-finding.js`).
|
|
249
238
|
|
|
250
239
|
The audit path authors this mechanically from the per-group footers the seed
|
|
251
240
|
already carries — see [`audit-to-stories`](../audit-to-stories.md). A `--seed`
|
|
@@ -255,24 +244,17 @@ or `--tickets` plan has nothing to attribute and omits the field.
|
|
|
255
244
|
|
|
256
245
|
The conflict passes run **twice**: once over the raw `stories.json` payload
|
|
257
246
|
(alongside the freshness, file-assumption and sizing gates), and again over the
|
|
258
|
-
**assembled, footer-stamped bodies** — the artifact persist actually posts
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
`
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
together, and a path two same-wave Stories both write is exactly where that
|
|
270
|
-
promise breaks. Promise and caveat belong on one durable surface — previously
|
|
271
|
-
the caveat was a stderr warning nobody kept.
|
|
272
|
-
|
|
273
|
-
Every conflict class is advisory (Story #5312 retired the
|
|
274
|
-
`planning.failOn*` / `requireExplicitCrossStoryDeps` upgrade knobs with the
|
|
275
|
-
registry and fan-out findings): co-editing one file is routine and often
|
|
247
|
+
**assembled, footer-stamped bodies** — the artifact persist actually posts,
|
|
248
|
+
where top-level `acceptance[]` / `verify[]` have been folded in. `shared-editor`
|
|
249
|
+
is the one conflict kind. Both passes complete before the first `createIssue`,
|
|
250
|
+
so a refusal still costs no writes.
|
|
251
|
+
|
|
252
|
+
`shared-editor` findings are rendered into the plan-summary section of every
|
|
253
|
+
Story's posted `story-plan-state` comment, directly beneath the wave table: the
|
|
254
|
+
table promises which Stories can run together, and a path two same-wave Stories
|
|
255
|
+
both write is exactly where that promise breaks.
|
|
256
|
+
|
|
257
|
+
Every conflict class is advisory: co-editing one file is routine and often
|
|
276
258
|
correct — the delivery scheduler already serializes file-overlapping Stories —
|
|
277
259
|
and a path reference matched by substring can read as a dependency a prose
|
|
278
260
|
mention never meant. A finding names the Stories and the fix (a `depends_on`
|
|
@@ -282,10 +264,10 @@ edge, or folding the shared edit into one Story) for the operator to weigh.
|
|
|
282
264
|
|
|
283
265
|
A `--tickets` envelope carries a third author prompt beside
|
|
284
266
|
`systemPrompts.story` and `systemPrompts.storySplitRules`:
|
|
285
|
-
**`systemPrompts.storyTicketsRules`**.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
267
|
+
**`systemPrompts.storyTicketsRules`**. A source ticket arrives already in
|
|
268
|
+
Story shape — rendered `AC-<n>:` checkboxes, a `## Verify` list, a
|
|
269
|
+
`## Changes` footprint — and an author reading it as a template carries that
|
|
270
|
+
shape forward instead of re-deriving it. The addendum
|
|
289
271
|
binds the author to re-derive `acceptance[]` from the goal, to express
|
|
290
272
|
mechanical checks (a refreshed baseline, a lint exiting 0, a regenerated
|
|
291
273
|
index) as `verify[]` commands rather than acceptance items, and to take the
|
|
@@ -318,19 +300,19 @@ template-only prose.
|
|
|
318
300
|
|
|
319
301
|
### Supersede-map partition
|
|
320
302
|
|
|
321
|
-
`plan-persist`
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
303
|
+
`plan-persist` completes the supersede map **before** it creates any Story,
|
|
304
|
+
splitting it by who can be right. **Refused, fail-closed:** a Story claiming
|
|
305
|
+
an id that was never a source ticket, and two Stories claiming the same id —
|
|
306
|
+
the first would close an issue nobody asked about, the second cannot say which
|
|
307
|
+
Story replaced it. **Assigned with a warning:** a source id no Story claimed
|
|
308
|
+
goes to the primary Story, because this plan is replacing it either way and
|
|
309
|
+
only the bookkeeping was open. With N>1 an authored map is still the only
|
|
310
|
+
thing that can say `#11-#14 → #20` while `#15 → #21`, so author one whenever
|
|
311
|
+
the default is not what you mean.
|
|
328
312
|
|
|
329
313
|
## The pre-mortem critic — operator-invoked
|
|
330
314
|
|
|
331
|
-
The maker-blind **pre-mortem** critic is not a step of the spine
|
|
332
|
-
retired step 2.5 with the consolidation critic, whose one deterministic input
|
|
333
|
-
was a `## Delivery Slicing` table no Story carries). Run it when the operator
|
|
315
|
+
The maker-blind **pre-mortem** critic is not a step of the spine. Run it when the operator
|
|
334
316
|
asks for it, after Author and before Persist — the last point a finding folds
|
|
335
317
|
into a re-author:
|
|
336
318
|
|
|
@@ -369,30 +351,33 @@ a re-author round.
|
|
|
369
351
|
|
|
370
352
|
## What `--dry-run` actually gates
|
|
371
353
|
|
|
372
|
-
`plan-persist.js
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
354
|
+
A bare `plan-persist.js` runs the whole gate list write-free and then, on a
|
|
355
|
+
clean list, persists in the same invocation; `--dry-run` is that same first
|
|
356
|
+
half with the second suppressed. Either way every gate runs before the first
|
|
357
|
+
`createIssue` would fire. The gates split two ways, and the dry-run output is
|
|
358
|
+
where the second half is read:
|
|
376
359
|
|
|
377
360
|
**Hard — the run refuses:** a body that does not parse, a ticket that is not
|
|
378
|
-
a Story, an empty `acceptance[]
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
361
|
+
a Story, an empty `acceptance[]`, an unknown or cyclic `depends_on`, the
|
|
362
|
+
same-wave collision refusal at N>1, a supersede claim on a non-source id or
|
|
363
|
+
one claimed twice, and a `deletes` entry naming a path absent at base.
|
|
364
|
+
Commit subjects are not scanned — the `commit-msg` hook and
|
|
365
|
+
`normalize-pr-title.js` enforce them.
|
|
382
366
|
|
|
383
367
|
**Warnings — listed, then the persist proceeds:** a `creates` on a path that
|
|
384
368
|
exists at base or a `refactors-existing` on one that does not (including a
|
|
385
369
|
path the base branch deleted or renamed, named with the removing commit), a
|
|
386
|
-
goal or acceptance path absent at base,
|
|
387
|
-
|
|
388
|
-
|
|
370
|
+
goal or acceptance path absent at base, an empty `verify[]`, a source id
|
|
371
|
+
assigned to the primary Story by default, a `verify[]` command naming an
|
|
372
|
+
absent test file, an `open-question` in a body (`Flag if…`, `TBD`, a trailing
|
|
373
|
+
`?`), and a `pinned-identifier` in an acceptance item — a backticked bare symbol
|
|
389
374
|
that is not a path, a label, a kebab token, a flag or a command, which the
|
|
390
375
|
advisory `changes[]` is free to reshape out from under the criterion. The
|
|
391
376
|
list also names every **repair** the run applied — a plain-string bullet or a
|
|
392
377
|
trailing parenthetical rewritten into `{ path, assumption }` by probing base,
|
|
393
|
-
and an `AC-<n>:` handle normalised off an acceptance item. The same list rides
|
|
394
|
-
envelope as `warnings[]` and `repairs[]`,
|
|
395
|
-
|
|
378
|
+
and an `AC-<n>:` handle normalised off an acceptance item. The same list rides
|
|
379
|
+
the result envelope as `warnings[]` and `repairs[]`, carried from the
|
|
380
|
+
write-free pass onto the chained run's envelope.
|
|
396
381
|
|
|
397
382
|
A dry run that comes back clean has paid for every deterministic refusal, so
|
|
398
383
|
the real persist has nothing left to discover except network failure.
|
|
@@ -417,23 +402,17 @@ leave the common follow-up plan with nowhere to file itself. The three-Story
|
|
|
417
402
|
threshold governs **creation** only, where it still holds: at two Stories a
|
|
418
403
|
pair of ids is as easy to carry as one container id.
|
|
419
404
|
|
|
420
|
-
On a yes, pass `--epic <id>`. Persist
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
nothing;
|
|
425
|
-
2. after the Stories exist, appends one `- [ ] #N` row per new Story to the
|
|
426
|
-
Epic's checklist via `appendEpicChildIds`, which is idempotent and preserves
|
|
427
|
-
existing rows' **checked state**, their order, and the fingerprint marker;
|
|
428
|
-
3. mirrors a native sub-issue edge per child.
|
|
405
|
+
On a yes, pass `--epic <id>`. Persist resolves it **before the first create**
|
|
406
|
+
(dry run included) — it must be **open** and carry `type::epic`, or the run
|
|
407
|
+
hard-errors having written nothing — then appends a `- [ ] #N` checklist row
|
|
408
|
+
and a native sub-issue edge per new Story.
|
|
429
409
|
|
|
430
410
|
The refusal posture is the **opposite** of creation's, deliberately. Creation
|
|
431
411
|
degrades (an unensurable label just skips the container) because the operator
|
|
432
|
-
never named one
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
checklist write or sub-issue edge only warns.
|
|
412
|
+
never named one; adoption names a specific id, so silently not adopting it
|
|
413
|
+
would misfile the Stories. Hence a hard error, raised while nothing has been
|
|
414
|
+
written. Once the Stories are live the posture flips back — a failed checklist
|
|
415
|
+
write or sub-issue edge only warns.
|
|
437
416
|
|
|
438
417
|
**Only open Epics are adoptable.** A closed Epic is a finished body of work;
|
|
439
418
|
joining one would reopen a container the epilogue deliberately closed and
|
|
@@ -446,11 +425,9 @@ raised before any I/O.
|
|
|
446
425
|
### Creating a new container (N>2)
|
|
447
426
|
|
|
448
427
|
Above two Stories, `/mandrel-plan` offers to group them under one `type::epic`
|
|
449
|
-
container. Confirmed, persist opens it **after** the Stories
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
native GitHub sub-issue edge. Both are written because each survives what the
|
|
453
|
-
other does not; the delivery-side reader unions them.
|
|
428
|
+
container. Confirmed, persist opens it **after** the Stories and links every
|
|
429
|
+
created Story both ways: a `- [ ] #N` body checklist and a native GitHub
|
|
430
|
+
sub-issue edge, which the delivery-side reader unions.
|
|
454
431
|
|
|
455
432
|
What the Epic must never carry: an `agent::*` label (that absence keeps it out
|
|
456
433
|
of the bare `/mandrel-deliver` ready list and outside the `type::story`-scoped
|
|
@@ -458,18 +435,13 @@ body lint), a `## Spec`, an `acceptance[]` / `verify[]`, or any path, finding
|
|
|
458
435
|
or rationale a child does not already hold. It is a container; unique content
|
|
459
436
|
here is content no delivering agent reads.
|
|
460
437
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
still stands and each Story stays independently deliverable (ADR
|
|
464
|
-
`20260905-5139`).
|
|
438
|
+
Linkage runs parent→child only, which is why each Story stays independently
|
|
439
|
+
deliverable (ADR `20260905-5139`).
|
|
465
440
|
|
|
466
441
|
Degradation is deliberate: an unensurable `type::epic` label skips the Epic
|
|
467
|
-
entirely
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
existing Epic carrying the same fingerprint, which is keyed on the title **and
|
|
471
|
-
the exact child set**, so a run grouping different Stories never adopts the
|
|
472
|
-
wrong container.
|
|
442
|
+
entirely, while a failed sub-issue edge only warns. Either way the Stories are
|
|
443
|
+
untouched and deliver by id. A resumed persist adopts an existing Epic whose
|
|
444
|
+
fingerprint matches the title **and the exact child set**.
|
|
473
445
|
|
|
474
446
|
## Cross-plan `depends_on` (`#<id>`)
|
|
475
447
|
|
|
@@ -483,9 +455,8 @@ opened and never had to name.
|
|
|
483
455
|
`complexitySignals.predictedPaths`, each carrying the `overlappingPaths[]` that
|
|
484
456
|
matched. Overlap is computed on **declared footprints** and not on prose, using
|
|
485
457
|
the same `storyFootprint` the wave runner uses to withhold colliding Stories at
|
|
486
|
-
dispatch —
|
|
487
|
-
|
|
488
|
-
paths short-circuits to `[]` with no provider call at all.
|
|
458
|
+
dispatch — the collision the runtime would later enforce, seen while it is
|
|
459
|
+
still cheap to order around. A seed naming no paths short-circuits to `[]`.
|
|
489
460
|
|
|
490
461
|
It stays advisory: two Stories can touch a shared barrel file with no real
|
|
491
462
|
ordering between them, and only the operator knows.
|
|
@@ -495,9 +466,9 @@ a Story already open is not scheduled by this run, so it has no position in the
|
|
|
495
466
|
topological sort and cannot close a cycle back into a Story that does not exist
|
|
496
467
|
yet. They are validated **before any create** (dry run included): each must
|
|
497
468
|
resolve to an **open `type::story`**, and a closed issue, a container Epic, a
|
|
498
|
-
missing id or a non-Story hard-errors with every bad ref named in one pass
|
|
499
|
-
|
|
500
|
-
|
|
469
|
+
missing id or a non-Story hard-errors with every bad ref named in one pass — a
|
|
470
|
+
blocker that can never be satisfied would read to the delivery engine as a
|
|
471
|
+
permanent wedge.
|
|
501
472
|
|
|
502
473
|
Persist renders the entry unchanged as a `blocked by #<id>` footer line and
|
|
503
474
|
mirrors the native `blocked_by` edge, which is the same pair of surfaces a
|
|
@@ -508,13 +479,13 @@ state.
|
|
|
508
479
|
## Ready means fully persisted
|
|
509
480
|
|
|
510
481
|
`agent::ready` is the **terminal** step, not part of the creating POST.
|
|
511
|
-
The order is: create unlabelled → upsert `story-plan-state` on
|
|
512
|
-
|
|
513
|
-
`agent::ready`.
|
|
482
|
+
The order is: create unlabelled → upsert `story-plan-state` on every Story (one
|
|
483
|
+
comment carrying the plan summary: story set, delivery order, deliver command)
|
|
484
|
+
→ flip every Story to `agent::ready`.
|
|
514
485
|
|
|
515
486
|
This is what lets `/mandrel-deliver` trust the label: a Story carrying
|
|
516
|
-
`agent::ready` always has
|
|
517
|
-
pick it up mid-write and
|
|
487
|
+
`agent::ready` always has the operator's delivery instructions on the ticket,
|
|
488
|
+
so nothing can pick it up mid-write and act on a half-persisted plan.
|
|
518
489
|
|
|
519
490
|
## Resuming a failed persist
|
|
520
491
|
|
|
@@ -546,47 +517,34 @@ them **envelope-first**:
|
|
|
546
517
|
|
|
547
518
|
| Channel | When it wins |
|
|
548
519
|
| --- | --- |
|
|
549
|
-
| Envelope `sourceTickets[]` | **The normal path.** Written by step 1
|
|
520
|
+
| Envelope `sourceTickets[]` | **The normal path.** Written by step 1 to `<tempRoot>/plan-<slug>/` (or wherever `--out` points), then read from `--plan-context <file>` or auto-discovered at `<plan-dir>/plan-context.json`. No ids to re-type. |
|
|
550
521
|
| `--source-tickets <ids>` | Explicit **override** for hand-driven runs (no captured envelope, or deliberately narrowing the set). Wins over the envelope; a disagreement is warned about, not silently reconciled. |
|
|
551
522
|
|
|
552
523
|
The result envelope's `supersede.sourceTicketOrigin` reports which channel was
|
|
553
|
-
used (`envelope` \| `flag` \| `none`).
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
`--
|
|
557
|
-
says so rather than deciding silently:
|
|
558
|
-
|
|
559
|
-
| Situation | Behaviour |
|
|
560
|
-
| --- | --- |
|
|
561
|
-
| Neither `--plan-dir` nor `--plan-context` | **Warn** — nothing was read; only `--source-tickets` can supply ids. |
|
|
562
|
-
| Auto-discovered `<plan-dir>/plan-context.json` absent | **Warn** — degrade to `--source-tickets`; a `--seed` run legitimately has none. |
|
|
563
|
-
| Explicit `--plan-context` missing | **Fatal** — the operator named a file and meant it. |
|
|
564
|
-
| Envelope present but unparseable | **Fatal** — a corrupt envelope is not "no source tickets"; treating it as such is how a `--tickets` run used to report success having superseded nothing. |
|
|
524
|
+
used (`envelope` \| `flag` \| `none`). Every path with no envelope is
|
|
525
|
+
**audible**: an absent envelope warns and degrades to `--source-tickets` (a
|
|
526
|
+
`--seed` run legitimately has none), while an explicitly named but missing
|
|
527
|
+
`--plan-context`, or an unparseable envelope, is **fatal**.
|
|
565
528
|
|
|
566
529
|
Whichever channel supplies them, the supersede-map partition above still
|
|
567
|
-
fail-closes: a `--tickets` run whose Stories forgot `supersedes[]` is
|
|
568
|
-
**caught** (`source ticket #N is not claimed by any Story`)
|
|
569
|
-
partitioning an empty set and passing vacuously.
|
|
530
|
+
fail-closes: a `--tickets` run whose Stories forgot `supersedes[]` is
|
|
531
|
+
**caught** (`source ticket #N is not claimed by any Story`).
|
|
570
532
|
|
|
571
533
|
## Closing superseded source tickets
|
|
572
534
|
|
|
573
535
|
**Default on.** After the Stories exist, persist comments on each source
|
|
574
536
|
issue naming the specific Story that claims it — plus that Story's optional
|
|
575
537
|
per-supersede `note` — and closes it with reason **`not_planned`**
|
|
576
|
-
(`state_reason`)
|
|
577
|
-
be
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
| `--dry-run` | Posts no comment and closes nothing; reports what it would have done. |
|
|
587
|
-
| Re-run | Idempotent — the comment is keyed off a `superseded-by` structured-comment marker, and an already-closed source is skipped. |
|
|
588
|
-
| Already closed / deleted / inaccessible | Skipped and reported. Never throws. |
|
|
589
|
-
| Close-phase failure | **Never fails the run.** Stories stay created; the result envelope's `supersede` report names which tickets were and were not closed so the operator can finish by hand. |
|
|
538
|
+
(`state_reason`) — nothing has shipped at persist time, so `completed` would
|
|
539
|
+
be a lie.
|
|
540
|
+
|
|
541
|
+
The default also **clears the source's `agent::*` label** in the same write — a
|
|
542
|
+
retired ticket has no agent state. Pass **`--no-close-superseded`** for a
|
|
543
|
+
genuinely partial supersede — when the plan folded in only *part* of an issue
|
|
544
|
+
and the remainder must stay open. The phase is idempotent (keyed off a
|
|
545
|
+
`superseded-by` marker), skips already-closed or inaccessible sources, and
|
|
546
|
+
**never fails the run**: its `supersede` report names which tickets were and
|
|
547
|
+
were not closed so the operator can finish by hand.
|
|
590
548
|
|
|
591
549
|
`--seed` / `--seed-file` modes have no source tickets, so no close phase
|
|
592
550
|
runs at all.
|
|
@@ -110,6 +110,18 @@ ledger, conforming to [`qa-ledger.schema.json`](../../schemas/qa-ledger.schema.j
|
|
|
110
110
|
session. This is the single findings channel across all three workflows — there
|
|
111
111
|
is no per-workflow finding schema.
|
|
112
112
|
|
|
113
|
+
## Coverage tiers and the missing test
|
|
114
|
+
|
|
115
|
+
For the surface an item points at, gather the tests that exercise it and
|
|
116
|
+
classify each by path per
|
|
117
|
+
[`testing-standards.md` § The Three Tiers](../../rules/testing-standards.md#the-three-tiers)
|
|
118
|
+
— a `.feature` file is **acceptance**, a path containing `/contract/` or
|
|
119
|
+
`.contract.test.` is **contract**, and a path containing `.test.` or
|
|
120
|
+
`__tests__/` is **unit**; a skipped test leaves its tier uncovered. Then take
|
|
121
|
+
the lowest tier with no live test (unit → contract → acceptance) and write one
|
|
122
|
+
concrete sentence describing the test that would close it — the item's
|
|
123
|
+
`missingTest` (`null` when every tier is covered).
|
|
124
|
+
|
|
113
125
|
## Triage — classify → route → disposition → promote
|
|
114
126
|
|
|
115
127
|
Route the ledger through the shared classify/route/dedup/promote core. The
|