mandrel 2.60.0 → 2.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -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. It replaced the acceptance partition,
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 (a shape borrowed from the Wayfinder skill's
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 (Story #5312). Nothing on that line stops the run,
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[]`. The one arm left measures the `MEMORY.md` index against the
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 — operator invocation is the entire design, because the value is a human
142
- looking at a layout before its UI acceptance criteria are frozen. Under
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,12 +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 #5312 deleted the plan-side lite claim that used to read them
154
- (`--route-downgrade-reason`, the persist shape backstop, the `route::lite`
155
- hint): every Story lands through the same engine and the same close gates,
156
- and the acceptance verdict owner follows the operator's ceremony profile —
157
- never anything a plan authored.
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.
158
151
 
159
152
  ## Correct-by-construction authoring template
160
153
 
@@ -163,7 +156,7 @@ never anything a plan authored.
163
156
  `complexitySignals` ran:
164
157
 
165
158
  - **`verify[]` entries are commands.** There is no tier suffix and no
166
- `manual:<reason>` escape (Story #5312): write the exact command or test
159
+ `manual:<reason>` escape: write the exact command or test
167
160
  path the deliverer runs and the acceptance critic reads as evidence.
168
161
  - **`changes[]` names what the deliverer authors.** Generated artifacts —
169
162
  quality baselines, generated test indexes, migration journals, lockfiles —
@@ -201,12 +194,10 @@ numbers each checkbox from its array position, so a carried handle renders
201
194
  doubled. Persist normalises one off rather than refusing, and names the strip
202
195
  on the dry-run's repair list.
203
196
 
204
- Nothing in that shape inventories the repo for the author. `changes[]` arrives
205
- filled in from the working-tree probe, and Phase 8's
206
- `validateStoryFileAssumptions` re-probes every resolved `{path, assumption}`
207
- at persist — so the grounding contract is the author's own targeted reads plus
208
- that gate. There is no pre-computed codebase snapshot to fall back on, and no
209
- 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.
210
201
 
211
202
  ### Per-Story audit provenance (`provenance`)
212
203
 
@@ -234,20 +225,16 @@ work this plan already tracked.
234
225
  | Present but empty (`{}`) | Nothing. "Owns no findings" is a real answer. |
235
226
  | **Absent** | The **whole seed's** footers (the union) — the recall-safe default. |
236
227
 
237
- **The union fallback is load-bearing, not legacy.** Leaving the authoring agent
238
- to hand-carry provenance out of the seed's HTML comments was measured to fail —
239
- a remembered step is no step at all — and the mechanical union carry is what
240
- closed it. Attribution is additive: it sharpens a plan that opts in and changes
241
- nothing for one that does not. Never remove the fallback to "finish the
242
- migration".
243
-
244
- Attribution is what makes the next sweep's dedup answerable rather than
245
- arbitrary. Under the union every sibling carried every key, so a finding
246
- confirming against several open Stories could only pick one at random, and a
247
- key whose owning Story had since **closed** was masked by any open neighbour —
248
- a genuine regression filed as a routine update. With ownership stamped, the
249
- issue carrying a finding's own fingerprint decides both the match and its
250
- 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`).
251
238
 
252
239
  The audit path authors this mechanically from the per-group footers the seed
253
240
  already carries — see [`audit-to-stories`](../audit-to-stories.md). A `--seed`
@@ -257,24 +244,17 @@ or `--tickets` plan has nothing to attribute and omits the field.
257
244
 
258
245
  The conflict passes run **twice**: once over the raw `stories.json` payload
259
246
  (alongside the freshness, file-assumption and sizing gates), and again over the
260
- **assembled, footer-stamped bodies** — the artifact persist actually posts.
261
- The second pass is not belt-and-braces. The canonical authoring shape carries
262
- `acceptance[]` / `verify[]` at the ticket's top level and assembly folds them
263
- into the body, so the passes that scan `body.acceptance` / `body.verify`
264
- saw two empty arrays on the real payload and emitted nothing; the two
265
- substring-match advisories that depended on it are retired, leaving
266
- `shared-editor` as the one conflict kind. Both passes complete before the first
267
- `createIssue`, so a refusal still costs no writes.
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.
268
251
 
269
252
  `shared-editor` findings are rendered into the plan-summary section of every
270
- Story's posted `story-plan-state` comment, directly beneath the wave table: the table promises which Stories can run
271
- together, and a path two same-wave Stories both write is exactly where that
272
- promise breaks. Promise and caveat belong on one durable surface — previously
273
- the caveat was a stderr warning nobody kept.
274
-
275
- Every conflict class is advisory (Story #5312 retired the
276
- `planning.failOn*` / `requireExplicitCrossStoryDeps` upgrade knobs with the
277
- registry and fan-out findings): co-editing one file is routine and often
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
278
258
  correct — the delivery scheduler already serializes file-overlapping Stories —
279
259
  and a path reference matched by substring can read as a dependency a prose
280
260
  mention never meant. A finding names the Stories and the fix (a `depends_on`
@@ -284,10 +264,10 @@ edge, or folding the shared edit into one Story) for the operator to weigh.
284
264
 
285
265
  A `--tickets` envelope carries a third author prompt beside
286
266
  `systemPrompts.story` and `systemPrompts.storySplitRules`:
287
- **`systemPrompts.storyTicketsRules`**. It exists because a
288
- source ticket arrives already in Story shape — rendered `AC-<n>:` checkboxes,
289
- a `## Verify` list, a `## Changes` footprint — and an author reading it as a
290
- template carries that shape forward instead of re-deriving it. The addendum
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
291
271
  binds the author to re-derive `acceptance[]` from the goal, to express
292
272
  mechanical checks (a refreshed baseline, a lint exiting 0, a regenerated
293
273
  index) as `verify[]` commands rather than acceptance items, and to take the
@@ -332,9 +312,7 @@ the default is not what you mean.
332
312
 
333
313
  ## The pre-mortem critic — operator-invoked
334
314
 
335
- The maker-blind **pre-mortem** critic is not a step of the spine (Story #5312
336
- retired step 2.5 with the consolidation critic, whose one deterministic input
337
- 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
338
316
  asks for it, after Author and before Persist — the last point a finding folds
339
317
  into a re-author:
340
318
 
@@ -374,18 +352,17 @@ a re-author round.
374
352
  ## What `--dry-run` actually gates
375
353
 
376
354
  A bare `plan-persist.js` runs the whole gate list write-free and then, on a
377
- clean list, persists in the same invocation (Story #5342); `--dry-run` is that
378
- same first half with the second suppressed. Either way every gate runs before
379
- the first `createIssue` would fire. Since Story #5312 the gates split two
380
- ways, and the dry-run output is where the second half is read:
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:
381
359
 
382
360
  **Hard — the run refuses:** a body that does not parse, a ticket that is not
383
361
  a Story, an empty `acceptance[]`, an unknown or cyclic `depends_on`, the
384
362
  same-wave collision refusal at N>1, a supersede claim on a non-source id or
385
363
  one claimed twice, and a `deletes` entry naming a path absent at base.
386
- Story #5342 retired two: the commit-subject-prefix scan is gone entirely —
387
- the `commit-msg` hook and `normalize-pr-title.js` enforce subjects — and an
388
- empty `verify[]` is now a warning.
364
+ Commit subjects are not scanned — the `commit-msg` hook and
365
+ `normalize-pr-title.js` enforce them.
389
366
 
390
367
  **Warnings — listed, then the persist proceeds:** a `creates` on a path that
391
368
  exists at base or a `refactors-existing` on one that does not (including a
@@ -399,15 +376,11 @@ advisory `changes[]` is free to reshape out from under the criterion. The
399
376
  list also names every **repair** the run applied — a plain-string bullet or a
400
377
  trailing parenthetical rewritten into `{ path, assumption }` by probing base,
401
378
  and an `AC-<n>:` handle normalised off an acceptance item. The same list rides
402
- the result envelope as `warnings[]` and `repairs[]` — and because the repairs
403
- are applied in the write-free pass, the chained run carries that pass's
404
- `repairs[]` and `warnings[]` onto the envelope it returns, so the evidence
405
- survives the hand-off rather than being re-derived from an already-repaired
406
- draft.
379
+ the result envelope as `warnings[]` and `repairs[]`, carried from the
380
+ write-free pass onto the chained run's envelope.
407
381
 
408
382
  A dry run that comes back clean has paid for every deterministic refusal, so
409
- the real persist has nothing left to discover except network failure — which
410
- is why the clean case no longer waits for a second operator invocation.
383
+ the real persist has nothing left to discover except network failure.
411
384
 
412
385
  ## The container Epic (Gate #3)
413
386
 
@@ -429,23 +402,17 @@ leave the common follow-up plan with nowhere to file itself. The three-Story
429
402
  threshold governs **creation** only, where it still holds: at two Stories a
430
403
  pair of ids is as easy to carry as one container id.
431
404
 
432
- On a yes, pass `--epic <id>`. Persist then:
433
-
434
- 1. resolves the id **before the first create** (dry run included) — it must be
435
- **open** and carry `type::epic`, or the run hard-errors having written
436
- nothing;
437
- 2. after the Stories exist, appends one `- [ ] #N` row per new Story to the
438
- Epic's checklist via `appendEpicChildIds`, which is idempotent and preserves
439
- existing rows' **checked state**, their order, and the fingerprint marker;
440
- 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.
441
409
 
442
410
  The refusal posture is the **opposite** of creation's, deliberately. Creation
443
411
  degrades (an unensurable label just skips the container) because the operator
444
- never named one. Adoption cannot: the operator named a specific id, so silently
445
- not adopting it would leave them believing their Stories were filed somewhere
446
- they were not. Hence a hard error, raised while nothing has been written and
447
- the fix is free. Once the Stories are live the posture flips back — a failed
448
- 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.
449
416
 
450
417
  **Only open Epics are adoptable.** A closed Epic is a finished body of work;
451
418
  joining one would reopen a container the epilogue deliberately closed and
@@ -458,11 +425,9 @@ raised before any I/O.
458
425
  ### Creating a new container (N>2)
459
426
 
460
427
  Above two Stories, `/mandrel-plan` offers to group them under one `type::epic`
461
- container. Confirmed, persist opens it **after** the Stories — its body embeds
462
- their issue numbers and its sub-issue edges need their database ids — and
463
- links every created Story both ways it can: a `- [ ] #N` body checklist and a
464
- native GitHub sub-issue edge. Both are written because each survives what the
465
- 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.
466
431
 
467
432
  What the Epic must never carry: an `agent::*` label (that absence keeps it out
468
433
  of the bare `/mandrel-deliver` ready list and outside the `type::story`-scoped
@@ -474,12 +439,9 @@ Linkage runs parent→child only, which is why each Story stays independently
474
439
  deliverable (ADR `20260905-5139`).
475
440
 
476
441
  Degradation is deliberate: an unensurable `type::epic` label skips the Epic
477
- entirely (an unlabelled container is not a container), while a failed
478
- sub-issue edge only warns — the checklist still lists every child. Either way
479
- the Stories are untouched and deliver by id. A resumed persist adopts an
480
- existing Epic carrying the same fingerprint, which is keyed on the title **and
481
- the exact child set**, so a run grouping different Stories never adopts the
482
- 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**.
483
445
 
484
446
  ## Cross-plan `depends_on` (`#<id>`)
485
447
 
@@ -493,9 +455,8 @@ opened and never had to name.
493
455
  `complexitySignals.predictedPaths`, each carrying the `overlappingPaths[]` that
494
456
  matched. Overlap is computed on **declared footprints** and not on prose, using
495
457
  the same `storyFootprint` the wave runner uses to withhold colliding Stories at
496
- dispatch — so the planner sees the collision the runtime would later enforce,
497
- one layer earlier and while it is still cheap to order around. A seed naming no
498
- 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 `[]`.
499
460
 
500
461
  It stays advisory: two Stories can touch a shared barrel file with no real
501
462
  ordering between them, and only the operator knows.
@@ -505,9 +466,9 @@ a Story already open is not scheduled by this run, so it has no position in the
505
466
  topological sort and cannot close a cycle back into a Story that does not exist
506
467
  yet. They are validated **before any create** (dry run included): each must
507
468
  resolve to an **open `type::story`**, and a closed issue, a container Epic, a
508
- missing id or a non-Story hard-errors with every bad ref named in one pass. The
509
- strictness is the point — a blocker that can never be satisfied reads to the
510
- delivery engine as a permanent wedge rather than as an error worth reporting.
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.
511
472
 
512
473
  Persist renders the entry unchanged as a `blocked by #<id>` footer line and
513
474
  mirrors the native `blocked_by` edge, which is the same pair of surfaces a
@@ -518,10 +479,9 @@ state.
518
479
  ## Ready means fully persisted
519
480
 
520
481
  `agent::ready` is the **terminal** step, not part of the creating POST.
521
- The order is: create unlabelled → upsert `story-plan-state` on every Story —
522
- since Story #5343 one comment, carrying the plan summary (story set, delivery
523
- order, deliver command) and nothing else, since Story #5367 deleted the machine
524
- checkpoint no reader consumed — → flip every Story to `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`.
525
485
 
526
486
  This is what lets `/mandrel-deliver` trust the label: a Story carrying
527
487
  `agent::ready` always has the operator's delivery instructions on the ticket,
@@ -561,43 +521,30 @@ them **envelope-first**:
561
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. |
562
522
 
563
523
  The result envelope's `supersede.sourceTicketOrigin` reports which channel was
564
- used (`envelope` \| `flag` \| `none`).
565
-
566
- Every path with no envelope is **audible** — persist cannot tell a legitimate
567
- `--seed` run from a `--tickets` run whose envelope was never captured, so it
568
- says so rather than deciding silently:
569
-
570
- | Situation | Behaviour |
571
- | --- | --- |
572
- | Neither `--plan-dir` nor `--plan-context` | **Warn** — nothing was read; only `--source-tickets` can supply ids. |
573
- | Auto-discovered `<plan-dir>/plan-context.json` absent | **Warn** — degrade to `--source-tickets`; a `--seed` run legitimately has none. |
574
- | Explicit `--plan-context` missing | **Fatal** — the operator named a file and meant it. |
575
- | 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**.
576
528
 
577
529
  Whichever channel supplies them, the supersede-map partition above still
578
- fail-closes: a `--tickets` run whose Stories forgot `supersedes[]` is now
579
- **caught** (`source ticket #N is not claimed by any Story`) instead of
580
- 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`).
581
532
 
582
533
  ## Closing superseded source tickets
583
534
 
584
535
  **Default on.** After the Stories exist, persist comments on each source
585
536
  issue naming the specific Story that claims it — plus that Story's optional
586
537
  per-supersede `note` — and closes it with reason **`not_planned`**
587
- (`state_reason`). Nothing has shipped at persist time and the issue will not
588
- be actioned in its own right, so `not_planned` is the honest reason;
589
- `completed` would be a lie. This is what keeps the tracker from asserting
590
- that already-planned work is still unowned, and it writes down the supersede
591
- link that makes the history readable.
592
-
593
- | Behaviour | Contract |
594
- | --- | --- |
595
- | Default | Comment + close every source ticket as `not_planned`, **clearing its `agent::*` label** in the same write — a retired ticket has no agent state, and `agent::done` would claim a delivery that never happened. |
596
- | `--no-close-superseded` | Skips all commenting and closing. Story creation is unchanged. Use it for a genuinely partial supersede — when the plan folded in only *part* of an issue and the remainder must stay open. |
597
- | `--dry-run` | Posts no comment and closes nothing; reports what it would have done. |
598
- | Re-run | Idempotent — the comment is keyed off a `superseded-by` structured-comment marker, and an already-closed source is skipped. |
599
- | Already closed / deleted / inaccessible | Skipped and reported. Never throws. |
600
- | 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.
601
548
 
602
549
  `--seed` / `--seed-file` modes have no source tickets, so no close phase
603
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
@@ -101,7 +101,7 @@ count the directory, never the plan. The stamp is the operator's record of
101
101
  the pass; nothing in the framework reads it back.
102
102
 
103
103
  The `/mandrel-plan` Phase 0 advisory re-arms on exactly one condition:
104
- `MEMORY.md` exceeding `planning.memoryPool.indexByteCeiling` (24576) bytes —
104
+ `MEMORY.md` exceeding the fixed 24576-byte index ceiling —
105
105
  the harness cap past which the index it loads is truncated. Pool size and
106
106
  stamp age never trigger it (Story #5312 retired those arms): a pass that
107
107
  rewrites long index lines short quiets it without pruning an entry.
@@ -6,36 +6,21 @@ description: Human-led QA assist loop — set up, then ride a rolling multi-obse
6
6
 
7
7
  Drive a **human-led, rolling QA-assist session**. The operator tests; the agent
8
8
  rides alongside as the QA engineer and captures what they see into a
9
- high-quality, triage-ready ledger. The session has four movements:
10
-
11
- 1. **Setup & Ready** (Phase 0) — load codebase context, resolve the contract,
12
- open (or resume) the rolling ledger, then tell the operator what it will do
13
- and that it is **ready for observations**.
14
- 2. **Rolling intake** (Phases 1–3, looped) — the operator reports observations
15
- **in any order and any quantity**: one at a time, or a **brain dump** of many
16
- at once. The agent splits a multi-observation message into discrete items and
17
- runs each through **Intake → Enrich → Record**, then **loops straight back**
18
- for more. It **records and enriches only — it never plans or fixes during
19
- intake.**
20
- 3. **Done** — when the operator says they have finished testing, the agent does
21
- a final review of the **entire** ledger and asks any last clarifying
22
- questions.
23
- 4. **Triage & Plan** (Phase 4) — only then does it route the full ledger through
24
- [`/mandrel-plan`](mandrel-plan.md) to generate Stories.
25
-
26
- Unlike [`/qa-explore`](qa-explore.md) (where the *agent* drives open-ended
27
- exploration of a named surface), `/qa-assist` is **human-led**: the human owns
28
- the signal, the agent owns the enrichment. It is the front door for "I'm
29
- testing — ride along and capture everything well." Each observation is a
30
- `QaLedgerItem` on the same ledger `/qa-explore` produces, so a `/qa-assist` item
31
- flows through the identical dedup, classification, and promotion machinery in
32
- Phase 4.
9
+ high-quality, triage-ready ledger: Setup (Phase 0), a rolling
10
+ **Intake → Enrich → Record** loop over observations reported in any order and
11
+ quantity (Phases 1–3 — record only, never plan), then Triage & Plan (Phase 4)
12
+ once the operator says they are done.
13
+
14
+ Unlike [`/qa-explore`](qa-explore.md) (where the *agent* drives exploration of
15
+ a named surface), `/qa-assist` is **human-led**: the human owns the signal, the
16
+ agent owns the enrichment. Each observation is a `QaLedgerItem` on the same
17
+ ledger `/qa-explore` produces, so it flows through the identical dedup,
18
+ classification, and promotion machinery in Phase 4.
33
19
 
34
20
  The shared machinery — contract resolution + loud failure, the session & ledger
35
21
  contract, redact-first, the `QaLedgerItem` shape, the triage procedure, and the
36
22
  HITL write gate — lives once in [`helpers/qa-core.md`](helpers/qa-core.md); this
37
- workflow states only the `/qa-assist`-specific phases (Intake / Enrich) plus a
38
- Constraints delta.
23
+ workflow states only the `/qa-assist`-specific phases.
39
24
 
40
25
  > **When to run**: a developer or operator is about to test (or is mid-test) and
41
26
  > wants every bug and enhancement idea captured as a high-quality,
@@ -97,9 +82,8 @@ rolling loop stays fluid:
97
82
  done. Second, **every write that leaves the local ledger** — filing a ticket,
98
83
  invoking `/mandrel-plan`, or mutating a label. Present the artifact, ask, and wait.
99
84
 
100
- In short: appending to the rolling ledger is the natural product of intake and
101
- needs no gate beyond the echo-back; **planning and anything that leaves the
102
- ledger is hard-gated.**
85
+ Appending to the rolling ledger needs no gate beyond the echo-back; **planning
86
+ and anything that leaves the ledger is hard-gated.**
103
87
 
104
88
  ---
105
89
 
@@ -160,8 +144,10 @@ first, then run Intake for **each** before returning for the next message.
160
144
 
161
145
  ## Phase 2 — Enrich (per observation)
162
146
 
163
- Goal: turn the observation into a high-quality, triage-ready finding. Delegate
164
- every decision to the shared helpers; never re-derive them in prose.
147
+ Goal: turn the observation into a high-quality, triage-ready finding. The
148
+ classification comes from its deterministic helper and tier placement from the
149
+ three path rules; context lookup and the missing-test sentence are your own
150
+ judgment.
165
151
 
166
152
  1. **Redact first** (per [`helpers/qa-core.md`](helpers/qa-core.md)) — scrub the
167
153
  evidence string through `redactEvidence` before it touches disk or GitHub.
@@ -178,17 +164,10 @@ every decision to the shared helpers; never re-derive them in prose.
178
164
  `gh issue view <ticketNumber> --json title,body,labels`, and verify each
179
165
  surface-map path resolves with `git cat-file -e HEAD:<path>` — flag every
180
166
  miss rather than citing a path that does not exist.
181
- 4. **Read the coverage tiers** for the surface the observation points at:
182
- gather the tests that exercise it and classify each by path per
183
- [`testing-standards.md` § The Three Tiers](../rules/testing-standards.md#the-three-tiers)
184
- — a `.feature` file is **acceptance**, a path containing `/contract/` or
185
- `.contract.test.` is **contract**, and a path containing `.test.` or
186
- `__tests__/` is **unit**. A skipped test leaves its tier uncovered.
187
- 5. **Name the missing test** (if any): take the lowest tier with no live test
188
- (unit → contract → acceptance) and write one concrete sentence describing
189
- the test that would close it. Every tier covered means no missing test.
190
- Record that sentence as the ledger item's `missingTest`.
191
- 6. **Classify** the finding via
167
+ 4. **Read the coverage tiers and name the missing test** per
168
+ [`helpers/qa-core.md`](helpers/qa-core.md) § Coverage tiers, recording the
169
+ sentence as the ledger item's `missingTest`.
170
+ 5. **Classify** the finding via
192
171
  [`classify-finding.js`](../scripts/lib/findings/classify-finding.js) so the
193
172
  tentative `class` resolves to the correct focus/meta label set. The helper
194
173
  **throws** on an absent/unknown class — fix the finding's class rather than
@@ -236,10 +215,9 @@ its transition is **explicitly operator-gated**.
236
215
  `file`-dispositioned findings through `promoteFindings` → `/mandrel-plan` (never a raw
237
216
  Issue), stamping each cluster's `fingerprintFooter(sha)` into the seed.
238
217
  `defer` carries an item forward as backlog; `dismiss` marks it non-actionable.
239
- 3. **Gate:** the move into this phase, and every write inside it (seed write,
240
- `/mandrel-plan` invocation, ticket-filing, label mutation), is **operator-gated** —
241
- confirm each one. The plan→deliver hard stop is preserved; redaction has
242
- already run, so nothing unredacted reaches disk or GitHub.
218
+ 3. **Gate:** every write inside this phase (seed write, `/mandrel-plan`
219
+ invocation, ticket-filing, label mutation) is **operator-gated** — confirm
220
+ each one. The plan→deliver hard stop is preserved.
243
221
 
244
222
  After planning, summarize: the findings recorded, the route/promotion decisions
245
223
  (`new`/`update-existing`/`duplicate`/`regression-of-closed`), whether each
@@ -250,31 +228,9 @@ resumed session will pick up.
250
228
 
251
229
  ## Constraints
252
230
 
253
- Beyond the shared core ([`helpers/qa-core.md`](helpers/qa-core.md): contract +
254
- loud failure, session/ledger, redact-first, QaLedgerItem, triage, HITL gate),
255
- the `/qa-assist`-specific deltas are:
256
-
257
- - **Human-led, rolling, multi-observation.** The operator owns the signal and
258
- reports in any order and quantity — one at a time or a brain dump. The agent
259
- splits a brain dump (echoing the split for correction), then enriches and
260
- records each. **Never invent an observation**; ask clarifying questions only
261
- when one is ambiguous, batched across the dump.
262
- - **Record during intake; plan only on "done".** Phases 1–3 enrich, append, and
263
- loop — never triage, route, file, or invoke `/mandrel-plan`. All of that is Phase 4,
264
- entered only on explicit operator confirmation that testing is done.
265
- - **Light intake gate, firm boundary gate.** Intake → Enrich → Record is fluid
266
- (echo-back, no ceremony); the move into Phase 4 and every write that leaves the
267
- ledger are hard-gated.
268
- - **Persistent, resumable rolling session** — `/qa-assist` defaults to resuming
269
- the same session and appending; a reused session carries the untriaged backlog
270
- forward and never overwrites a prior ledger.
271
- - **Enrichment delegates where a helper exists** — the finding classification
272
- comes from its deterministic helper, never from prose; tier placement comes
273
- from the three path rules in
274
- [`testing-standards.md`](../rules/testing-standards.md#the-three-tiers).
275
- Context lookup and the missing-test sentence are the model's own work: they
276
- are judgments, not computations, and routing them through a module only
277
- bought a round-trip.
231
+ The shared core in [`helpers/qa-core.md`](helpers/qa-core.md) binds this
232
+ workflow. The `/qa-assist` deltas are stated once, above: never invent an
233
+ observation, record during intake, and plan only on "done" (§ Phase gates).
278
234
 
279
235
  ## See also
280
236