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.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -33,7 +33,7 @@ you read:
33
33
  | --- | --- | --- |
34
34
  | `/mandrel-deliver` | bare | List the open `agent::ready` Stories and ask which to deliver. Deliver nothing until answered. |
35
35
  | `/mandrel-deliver 4712` | ids | One Story via `helpers/deliver-story.md`, **inline in this session** — no `story-worker` spawn. |
36
- | `/mandrel-deliver 4712 4713 …` | ids | Resolve the set, sequence by the discovered graph via `stories-wave-tick.js`, dispatch sub-agents. |
36
+ | `/mandrel-deliver 4712 4713 …` | ids | Resolve the set, then beat `deliver-run.js` — it sequences by the discovered graph and hands back the spawns and closes. |
37
37
  | `/mandrel-deliver 4712 - 4716` | ids | A **range** — every id in the inclusive span. |
38
38
  | `/mandrel-deliver 4700` (a `type::epic`) | ids | The Epic's **open** child Stories. Mixes with Story ids. |
39
39
  | `/mandrel-deliver add a --json flag to doctor` | prompt | Unplanned work: gate, author a receipt Story, land it — [`helpers/deliver-light.md`](helpers/deliver-light.md). |
@@ -42,10 +42,10 @@ you read:
42
42
  id, and `^#?\d+\s*[-–—]\s*#?\d+$` an inclusive **range** — pass one on as a
43
43
  single unspaced token, never hand-expanded (reference). Either shape
44
44
  means ids; anything else means a prompt. A **mixed** invocation (ids *and*
45
- prose) is a **hard error** — refuse it and ask which was meant. A ticket that
46
- is neither `type::story` nor `type::epic`, or that carries an `Epic: #N`
47
- footer, is a hard error too — container Epics link parent→child only, so that
48
- footer stays refused.
45
+ prose) is **ambiguous, not fatal** — disambiguate it rather than refusing:
46
+ ask which was meant, or, when the reading is obvious, name the one you
47
+ inferred before acting on it. A ticket that is neither `type::story` nor
48
+ `type::epic` is a **hard error**.
49
49
 
50
50
  ## Saying what you want
51
51
 
@@ -67,41 +67,51 @@ to an attended run.
67
67
  1. **Resolve the set.** One command, one Story or many:
68
68
  `node .agents/scripts/resolve-stories.js --ids <id,id,...>`. It validates the
69
69
  set and shows what will run: read `stories[]`, `dag[]` and `done[]` to
70
- present the order in step 2, but do **not** thread them into step 3 — the
71
- tick re-resolves the graph every beat. An Epic id expands to its open child
70
+ present the order in step 2, but do **not** thread them into step 3 — every
71
+ beat re-resolves the graph. A one-id run comes back `dispatchMode: "inline"`
72
+ and runs [`helpers/deliver-story.md`](helpers/deliver-story.md) in this
73
+ session; step 3 is the multi-Story path. An Epic id expands to its open child
72
74
  Stories first — **announce it**. It hard-errors (exit 1) on an id that is
73
- neither a Story nor an Epic, on an `Epic: #N` footer, on an Epic with no
74
- open children, or on edges it cannot read — a missing gate would co-dispatch
75
- against an unlanded blocker.
75
+ neither a Story nor an Epic, on an Epic with no open children, or on edges
76
+ it cannot read — a missing gate would co-dispatch against an unlanded
77
+ blocker.
76
78
 
77
79
  2. **Confirm (N>1).** Present the order; wait unless `--yes`.
78
80
 
79
- 3. **Sequence.** Loop until the tick reports `epilogueDue: true`:
81
+ 3. **Run the beat.** One command per beat, repeated until the envelope reports
82
+ the run `done`:
80
83
 
81
84
  ```bash
82
- node .agents/scripts/stories-wave-tick.js \
83
- --stories <id,id,...> --probe-live \
84
- --dispatched <every id you have dispatched so far>
85
+ node .agents/scripts/deliver-run.js \
86
+ --stories <id,id,...> [--handoff <id>]...
85
87
  ```
86
88
 
87
89
  **Do not add `--concurrency` unless the operator explicitly asked for a
88
90
  per-run cap** — an explicit value wins over config, so a literal defeats a
89
91
  `.agentrc.local.json` override.
90
92
 
91
- Each beat re-probes live state to derive done / in-flight itself; you never
92
- compute them. `--dispatched` is the one thing you must supply — the
93
- append-only list of every id you spawned this run. Cross-run de-confliction
94
- via the assignee lease is automatic. Branch on the exit code:
95
- - **0** — dispatch each `ready` id (already capped and overlap-free); an
96
- empty `ready` with work in flight means "waiting", so keep looping;
97
- `epilogueDue: true` means every Story is done — step 4.
93
+ Each beat re-probes live state and keeps its own accounting: the run ledger
94
+ under `<tempRoot>/run-<id>/` records every id it hands out, so **nothing is
95
+ maintained across beats by you**. Cross-run de-confliction via the assignee
96
+ lease is automatic. Branch on the exit code:
97
+ - **0** — spawn one `story-worker` per `ready[]` entry, **all in one turn**,
98
+ each with that entry's `promptPath` file as its prompt; run each `close[]`
99
+ entry's command foreground and serialized as hand-offs arrive. An empty
100
+ `ready` with work in flight means "waiting", so beat again — **unless
101
+ `stalledDispatch[]` is non-empty**: those ids were dispatched but still
102
+ read `agent::ready`, which is a live init window the first beats or two
103
+ and a spawn that never started one after that. Beating again cannot
104
+ clear it. Relay `stalledDispatchReason` — it carries the recovery — and
105
+ let the operator decide; never edit the ledger for them.
106
+ `done: true` means every Story is landed — step 4.
98
107
  - **2 / 3 / 4** — `cycleError` / `wedged` / `blocked`: stop the loop and
99
108
  route per reference. **4** is the protocol's HITL pause
100
109
  ([`instructions.md` § 1.J](../instructions.md)) — surface it and wait for
101
110
  the operator; never poll.
102
111
 
103
- 4. **Close each hand-off** (§ Closing what the workers hand back), then, with
104
- every Story landed, run the **per-run epilogue (N>1)**:
112
+ 4. **Land what the workers hand back** (§ Closing what the workers hand back —
113
+ the beat renders each command), then, with every Story landed, run the
114
+ **per-run epilogue (N>1)**:
105
115
  `node .agents/scripts/plan-run-epilogue.js --stories 101,102`; N=1 has none
106
116
  ([reference](helpers/deliver-reference.md)). Every close rolls its container
107
117
  Epic up from its children.
@@ -117,7 +127,10 @@ to an attended run.
117
127
  **The tail is the orchestrator's, not the worker's.** A dispatched
118
128
  `story-worker` stops at a pushed branch and returns a hand-off; **you** run
119
129
  [`helpers/deliver-story.md`](helpers/deliver-story.md) Step 3
120
- (`single-story-close.js`) for it, foreground, and relay its envelope.
130
+ (`single-story-close.js`) for it, foreground, and relay its envelope. Pass the
131
+ id as `--handoff` on the next beat and run the `close[]` command it prints
132
+ verbatim — the beat knows the run topology, so it decides
133
+ `--merge-watch-mode async` for you.
121
134
 
122
135
  **Serialize the tail.** Implementation runs in parallel; closing does not.
123
136
  Close one Story at a time — closes contend on the base branch, the merge queue
@@ -133,9 +146,11 @@ envelope — `landed` | `pending` | `blocked` | `failed`; statuses, exits and
133
146
  fields are digest § 5. `pending` is **not** a failure — run its `nextCommand`.
134
147
 
135
148
  **Branch model (authoritative).** `story-<id>` → PR → `main` (squash +
136
- required checks), per digest § 2; dependent Stories land sequentially. Ceremony
137
- depth (profiles + the derived level via `ceremony-routing.js`, which review
138
- depth reads): reference § Ceremony.
149
+ required checks), per digest § 2; dependent Stories land sequentially. The
150
+ acceptance verdict owner follows the ceremony profile alone
151
+ (`ceremony-routing.js`); the **derived level** feeds review depth instead
152
+ (`review-depth.js`). The rule and its one home are digest § 3; the profile
153
+ table is reference § Ceremony.
139
154
 
140
155
  ## Constraints
141
156
 
@@ -143,10 +158,11 @@ depth reads): reference § Ceremony.
143
158
  default to close-and-land (`delivery.routing.closeAndLand: true`); rest at
144
159
  `agent::closing` only when a human owns the merge.
145
160
  - **`/mandrel-deliver` never plans.** Planned tickets come from
146
- [`/mandrel-plan`](mandrel-plan.md), and an over-scope prompt **escalates and
147
- ends** — never invoke `/mandrel-plan` in this session to rescue it
148
- ([`helpers/deliver-light.md`](helpers/deliver-light.md) § Escalation is
149
- terminal).
161
+ [`/mandrel-plan`](mandrel-plan.md), and a refused prompt **escalates**: the
162
+ light path ends, and the escalation's `nextCommand` is what owns the work —
163
+ seeded with `escalation.reasons`, in this session or a fresh one
164
+ ([`helpers/deliver-light.md`](helpers/deliver-light.md) § Continuing into
165
+ `/mandrel-plan`).
150
166
 
151
167
  ## See also
152
168
 
@@ -47,14 +47,14 @@ checkpoints, not sibling tickets ([ref](helpers/plan-reference.md)).
47
47
  ### 1. Interrogate
48
48
 
49
49
  ```bash
50
- node .agents/scripts/plan-context.js --seed "<seed>" \
51
- --out temp/plan-<slug>/plan-context.json
50
+ node .agents/scripts/plan-context.js --seed "<seed>"
52
51
  # or: --seed-file <path> | --tickets 123,456 | --amends #<id>
53
52
  ```
54
53
 
55
- **Always pass `--out`.** Persist auto-discovers the envelope from `--plan-dir`
56
- and derives source ids from its `sourceTickets[]`; it also writes
57
- **`stories.template.json`**, step 2's skeleton.
54
+ It writes the envelope and **`stories.template.json`** (step 2's skeleton) to
55
+ `<tempRoot>/plan-<slug>/` and prints a digest naming both; `--out` overrides
56
+ the path. Persist auto-discovers the envelope from `--plan-dir` and derives
57
+ source ids from its `sourceTickets[]`.
58
58
 
59
59
  The envelope carries docs context, the story-author prompt (`systemPrompts.story`,
60
60
  plus `systemPrompts.storySplitRules` for an N>1 draft and
@@ -87,10 +87,11 @@ persist parses either, serializes canonical markdown and syncs top-level
87
87
  `acceptance[]` / `verify[]` in — never dual-author them.
88
88
 
89
89
  **Grounding = your reads + Phase 8.** Nothing inventories the repo: read each
90
- file you cite; persist hard-errors on any `{path, assumption}` absent from the
91
- tree — a `refactors-existing` on a path the base branch **deleted or renamed**
92
- included. One rescue: a **never-tracked** one normalises to `creates`. Fields:
93
- [ref](helpers/plan-reference.md).
90
+ file you cite. A `changes[]` entry is a **bare path** by default — persist
91
+ derives its assumption by probing the base branch and reports the derivation;
92
+ pin `{path, assumption}` only when the probe would get it wrong, and always
93
+ for a `deletes`, which is the one shape still refused on an absent path.
94
+ Fields: [ref](helpers/plan-reference.md).
94
95
 
95
96
  Artifacts under `temp/plan-<slug>/`: `stories.json` (**length 1 by default**;
96
97
  a Spec is as long as the work needs, inline, never under `docs/`) and optional
@@ -120,15 +121,11 @@ Under `--yes`, auto-proceed.
120
121
  **any N** (`--epic <id>`); else, at **N>2**, a new container (`--epic-title` /
121
122
  `--epic-goal`). Never unasked ([ref](helpers/plan-reference.md)).
122
123
 
123
- Run persist `--dry-run` **first** — same command, writes suppressed; every gate
124
- runs before the first `createIssue` — including the **same-wave collision
125
- refusal**, which rejects an N>1 draft whose siblings declare a common path
126
- (merge them, or order them with `depends_on`) — and the run **lists its
127
- warnings**
128
- (a `creates` / `refactors-existing` the base branch disagrees with, a goal or
129
- acceptance path absent at base, an open question in a body) and the
130
- `changes[]` repairs it applied ([list](helpers/plan-reference.md)). Read
131
- them; they never stop the persist:
124
+ **One command.** Persist runs every gate write-free first — including the
125
+ **same-wave collision refusal**, which rejects an N>1 draft whose siblings
126
+ declare a common path (merge them, or order them with `depends_on`) — and,
127
+ when the gate list comes back clean, creates the issues in the same
128
+ invocation:
132
129
 
133
130
  ```bash
134
131
  node .agents/scripts/plan-persist.js \
@@ -139,8 +136,12 @@ node .agents/scripts/plan-persist.js \
139
136
  [--epic <id> | --epic-title "<name>" --epic-goal "<one paragraph>"]
140
137
  ```
141
138
 
142
- `--chain-on-clean` folds a clean dry-run into the persist for **any** plan —
143
- the dry-run's warning list is the review.
139
+ The run **lists its warnings** (a `creates` / `refactors-existing` the base
140
+ branch disagrees with, a goal or acceptance path absent at base, an empty
141
+ `verify[]`, a source id assigned to the primary Story by default, an open
142
+ question in a body) and the `changes[]` repairs it applied
143
+ ([list](helpers/plan-reference.md)). Read them; they never stop the persist.
144
+ Add `--dry-run` to validate without creating anything.
144
145
 
145
146
  Persist creates `type::story` issue(s), a **metadata-only** `plan-run::<id>`
146
147
  label, `blocked by #<id>` footers for every `depends_on` edge, and on a Gate #3
@@ -155,7 +156,7 @@ also comments on and closes each source id ([ref](helpers/plan-reference.md)).
155
156
  - Duplicate search targets open Stories (`type::story`), not Epics; and
156
157
  deterministic gates still fail closed under `--yes`.
157
158
  - A container Epic is never a work item and only an **open** one is adoptable;
158
- no Story body gains an `Epic: #N` footer (linkage is parent→child only).
159
+ linkage is parent→child only.
159
160
  - `depends_on` takes a sibling slug or `#<id>` (open Story).
160
161
 
161
162
  ## See also
@@ -7,7 +7,7 @@ description: >-
7
7
  leaves unowned: reconcile `.agentrc.json`, install the stabilized
8
8
  quality-gate surface, refresh the harness permission allowlist, reconcile
9
9
  the consumer's `AGENTS.md` / runbooks against the surfaced changelog, and
10
- stage + commit the staged lockfile bump.
10
+ stage + commit the dependency bump the CLI's closing report describes.
11
11
  ---
12
12
 
13
13
  # /mandrel-update
@@ -19,14 +19,15 @@ description: >-
19
19
  > **distribution-agnostic judgment steps** the CLI deliberately does **not**
20
20
  > perform — config reconciliation, the quality-gate installs, the
21
21
  > permission-allowlist refresh, the consumer-side changelog reconciliation,
22
- > and the stage-and-commit of the staged lockfile bump.
22
+ > and the stage-and-commit of the dependency bump.
23
23
 
24
24
  The upgrade contract, in brief: the version only moves on explicit
25
25
  invocation (no `postinstall` drift — teammates track the committed
26
26
  lockfile pin, and CI's `npm ci` honours it); majors apply like any other
27
27
  bump (Mandrel ships hard cutovers — the surfaced changelog is the
28
- migration guide); the CLI **never commits** (the lockfile bump is left
29
- staged for operator review); and the only authoritative writer of the
28
+ migration guide); the CLI **never mutates git** — it reads the index and
29
+ **reports** whether the bump is staged, so the operator follows that
30
+ report rather than an assumption; and the only authoritative writer of the
30
31
  generated `.claude/commands/` tree is
31
32
  [`sync-claude-commands.js`](../scripts/sync-claude-commands.js), invoked by
32
33
  the CLI's sync step.
@@ -80,22 +81,32 @@ npx mandrel update
80
81
  The dry run resolves the newest published version and prints the ordered
81
82
  step plan (`npm-update → runSync → runMigrations → doctor → surface
82
83
  changelog`) without touching anything — read the planned target version
83
- before applying. The live run drives those phases in order, leaves the
84
- lockfile bump **staged** (never committed), and finishes by printing the
85
- `docs/CHANGELOG.md` sections covering the applied range `(current, target]`.
86
- **Capture that changelog output** — Step 4 reconciles the consumer's own
87
- instructions against it. Already-newest is a clean no-op (`Already up to
88
- date`, exit 0).
84
+ before applying. The live run drives those phases in order, never commits,
85
+ and finishes by printing the `docs/CHANGELOG.md` sections covering the
86
+ applied range `(current, target]`. **Capture that changelog output** —
87
+ Step 4 reconciles the consumer's own instructions against it.
88
+ Already-newest is a clean no-op (`Already up to date`, exit 0).
89
+
90
+ **Read the closing line — it reports the real index state.** Staging is
91
+ package-manager-specific (`npm install` may stage; `pnpm add` / `yarn add`
92
+ stage nothing), so the CLI probes git read-only and tells you which of three
93
+ states you are in rather than asserting one:
94
+
95
+ | Closing line | What it means | What you do |
96
+ | --- | --- | --- |
97
+ | `The dependency bump is staged for review (package.json, <lockfile>).` | The index already carries both. | Go to Step 2. |
98
+ | `The dependency bump is NOT staged. … Review and stage it: git add …` | Nothing (or only half) is staged. | Run the exact `git add` the line prints — it names `.agents/` too when this consumer tracks the materialized tree. |
99
+ | `Review the working tree and commit the bump (git not available to report staging state).` | The probe could not read git; the update still succeeded (exit 0). | Inspect `git status` yourself before Step 5. |
89
100
 
90
101
  ## Step 2.5 — Partial-upgrade recovery (**blocker — resolve before Step 5**)
91
102
 
92
- The install phase stages the lockfile bump *before* the later phases run,
103
+ The install phase writes the dependency bump *before* the later phases run,
93
104
  and by deliberate design the CLI **never rolls back the install on
94
105
  failure**. So when a post-install phase (`sync` / `sync-commands` /
95
106
  `migrate` / `doctor`) exits non-zero you land in a **partially-upgraded
96
- state**: the bump is already staged while `.agents/` may be
97
- half-materialized, the command tree out of sync, or a migration partially
98
- applied — and the operator is one `git commit` away from recording a broken
107
+ state**: the bump is already on disk (and possibly in the index) while
108
+ `.agents/` may be half-materialized, the command tree out of sync, or a
109
+ migration partially applied — and the operator is one `git commit` away from recording a broken
99
110
  half-upgrade as "done". **Treat any post-install phase failure as an
100
111
  explicit blocker: do not proceed to Step 5 until the failed phase is
101
112
  recovered and a clean re-run reports success.**
@@ -203,22 +214,25 @@ between the installed and target versions:
203
214
  workflows for renamed flags / changed exit codes / removed scripts.
204
215
 
205
216
  Do not invent updates — silence is a valid review outcome. Stage every
206
- consumer-side edit alongside the staged lockfile bump so the upgrade and
207
- the reconciliation land in one reviewable commit.
217
+ consumer-side edit alongside the dependency bump so the upgrade and the
218
+ reconciliation land in one reviewable commit.
208
219
 
209
220
  ## Step 5 — Commit the bump
210
221
 
211
- > **Blocker check before you commit.** The staged lockfile bump is only safe
222
+ > **Blocker check before you commit.** The dependency bump is only safe
212
223
  > to commit once every post-install phase has gone green. If `npx mandrel
213
224
  > update` exited non-zero, resolve it via
214
225
  > [Step 2.5 — Partial-upgrade recovery](#step-25--partial-upgrade-recovery-blocker--resolve-before-step-5)
215
226
  > **before** the `git commit` below. Committing over a half-upgrade records
216
227
  > a broken state as "done".
217
228
 
218
- Stage and commit the bump plus everything the wraparound touched:
229
+ Stage and commit the bump plus everything the wraparound touched. Start from
230
+ the `git add` the CLI's closing report printed (it names the detected
231
+ lockfile, and `.agents/` when this consumer tracks it), then add the
232
+ wraparound paths:
219
233
 
220
234
  ```bash
221
- git add package.json package-lock.json .agentrc.json .claude/settings.json AGENTS.md # plus any runbook files touched in Step 4
235
+ git add package.json package-lock.json .agentrc.json .claude/settings.json AGENTS.md # lockfile per the CLI report; plus any runbook files touched in Step 4
222
236
  git commit -m "chore: update mandrel to v<NEW_VERSION>
223
237
 
224
238
  Upgraded v<OLD_VERSION> → v<NEW_VERSION> via mandrel update.
@@ -239,8 +253,9 @@ materialized tree.
239
253
 
240
254
  - **Idempotent.** A second `mandrel update` after a successful run hits the
241
255
  no-op short-circuit — exit 0, nothing bumped.
242
- - **No auto-commit.** The CLI leaves the lockfile bump staged and never runs
243
- git; the operator writes the commit (Step 5).
256
+ - **No auto-commit.** The CLI never stages and never commits — it reads git
257
+ only to report whether the bump is staged; the operator writes the commit
258
+ (Step 5).
244
259
  - **No framework-side version bump.** This workflow advances the
245
260
  *consumer's* pinned version; framework releases remain the maintainer's
246
261
  call via release-please.
@@ -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
 
@@ -6,29 +6,18 @@ description: Agent-led exploratory-QA loop — the agent Plans a surface with an
6
6
 
7
7
  Drive a **bounded, agent-led exploratory-QA session** as a human-in-the-loop
8
8
  (HITL) loop: **Plan → Capture → Triage**. The operator names a single surface;
9
- the agent (acting as the QA engineer) **plans** how it will reach that surface,
10
- **drives** it itself — through the browser MCP by default, or statically as a
11
- documented interim — and records each observation as a structured ledger item
12
- under a strictly read-only capture invariant. Only after explicit operator
13
- confirmation does it triage the ledger into routed, classified, dedup'd
14
- follow-up dispositions.
15
-
16
- This is the **agent-led** front-end of exploratory QA: **the agent drives, the
17
- operator watches and gates.** Its human-led sibling is
18
- [`/qa-assist`](qa-assist.md) — there the *human* drives a single observation and
19
- the agent scribes/enriches. No human-driven flow lives in `/qa-explore`.
20
-
21
- Unlike [`/qa-run`](qa-run.md) (which steps a known set of Gherkin `.feature`
22
- scenarios through a browser), `/qa-explore` is **open-ended exploration**: the
23
- agent probes the surface for product bugs, environment-setup friction,
24
- tooling/DX gaps, missing tests, and enhancement ideas — each captured as a
25
- `QaLedgerItem`.
9
+ the agent drives it itself — **the agent drives, the operator watches and
10
+ gates** — and records each observation as a `QaLedgerItem` under a strictly
11
+ read-only capture invariant. Its human-led sibling is
12
+ [`/qa-assist`](qa-assist.md); no human-driven flow lives in `/qa-explore`.
13
+ Unlike [`/qa-run`](qa-run.md) (a known set of Gherkin `.feature` scenarios),
14
+ this is **open-ended exploration** for product bugs, environment-setup
15
+ friction, tooling/DX gaps, missing tests, and enhancement ideas.
26
16
 
27
17
  The shared machinery — contract resolution + loud failure, the session & ledger
28
18
  contract, redact-first, the `QaLedgerItem` shape, the triage procedure, and the
29
19
  HITL write gate — lives once in [`helpers/qa-core.md`](helpers/qa-core.md); this
30
- workflow states only the `/qa-explore`-specific phases (Plan / Capture) plus a
31
- Constraints delta.
20
+ workflow states only the `/qa-explore`-specific phases (Plan / Capture).
32
21
 
33
22
  > **When to run**: ad-hoc agent-driven exploration of a freshly delivered Story
34
23
  > or Feature, a regression sweep over a risky surface before `/mandrel-deliver`, or a
@@ -69,9 +58,7 @@ the skill owns them.
69
58
  | `surface` | yes | `feature:login`, `area:onboarding` | A human label for the single surface to explore. Recorded as each ledger item's `coverage`. |
70
59
 
71
60
  If no `surface` is supplied, **stop and ask** the operator to name one — do not
72
- invent scope. `/qa-explore` is **bounded to one surface per session**: explore
73
- exactly the named surface, do not wander into adjacent surfaces, and start a
74
- fresh session for a different surface.
61
+ invent scope.
75
62
 
76
63
  ## Contract & session
77
64
 
@@ -171,23 +158,16 @@ For each observation the agent makes while driving:
171
158
 
172
159
  1. **Redact first** (per [`helpers/qa-core.md`](helpers/qa-core.md)) — scrub the
173
160
  evidence string through `redactEvidence` before it touches disk.
174
- 2. **Read the coverage tiers** for the surface the observation points at:
175
- gather the tests that exercise it and classify each by path per
176
- [`testing-standards.md` § The Three Tiers](../rules/testing-standards.md#the-three-tiers)
177
- — a `.feature` file is **acceptance**, a path containing `/contract/` or
178
- `.contract.test.` is **contract**, and a path containing `.test.` or
179
- `__tests__/` is **unit**. A skipped test leaves its tier uncovered.
180
- 3. **Name the missing test** (if any): take the lowest tier with no live test
181
- (unit → contract → acceptance) and write one concrete sentence describing
182
- the test that would close it. Every tier covered means no missing test.
183
- Record that sentence as the ledger item's `missingTest` (or `null`).
184
- 4. **Append a `QaLedgerItem`** to the ledger (shape per
161
+ 2. **Read the coverage tiers and name the missing test** per
162
+ [`helpers/qa-core.md`](helpers/qa-core.md) § Coverage tiers, recording the
163
+ sentence as the ledger item's `missingTest` (or `null`).
164
+ 3. **Append a `QaLedgerItem`** to the ledger (shape per
185
165
  [`helpers/qa-core.md`](helpers/qa-core.md)): a stable `id`, the redacted
186
166
  `evidence`, the `coverage` label (the `surface`, or `unknown`), a tentative
187
167
  `class` and `severity`, the `missingTest`, and `disposition` left untriaged.
188
- 5. Continue driving until the agent believes the surface is covered, then
168
+ 4. Continue driving until the agent believes the surface is covered, then
189
169
  propose that exploration is complete.
190
- 6. **Gate:** present the captured ledger (item count, classes, the driving
170
+ 5. **Gate:** present the captured ledger (item count, classes, the driving
191
171
  method used, the rolling backlog) and ask the operator to confirm moving to
192
172
  Triage. Do **not** triage until they confirm.
193
173
 
@@ -212,30 +192,10 @@ resumed session will pick up.
212
192
 
213
193
  ## Constraints
214
194
 
215
- Beyond the shared core ([`helpers/qa-core.md`](helpers/qa-core.md): contract +
216
- loud failure, session/ledger, redact-first, QaLedgerItem, triage, HITL gate)
217
- and the driving conventions
218
- ([`stack/qa/qa-harness`](../skills/stack/qa/qa-harness/SKILL.md)),
219
- the `/qa-explore`-specific deltas are:
220
-
221
- - **Agent-led, bounded per surface.** The agent drives one named surface per
222
- session and proposes when it is covered; the operator gates the boundary. No
223
- human-driven flow lives here — that is [`/qa-assist`](qa-assist.md).
224
- - **Pick the driving method at Plan time** (drive default; static the documented
225
- interim, chosen with a recorded reason, never a silent fallback); do not
226
- switch mid-surface without a new Plan note.
227
- - **Capture is read-only.** The only Capture write is appending ledger lines
228
- under `temp/qa/`. No source edits, ticket mutations, product writes, or
229
- destructive form submissions. Reach an authenticated surface only through the
230
- resolved environment's `signInSeam`; where no seam resolves, record the gap
231
- and fall back to static.
232
- - **Broken navigation is a finding, not a workaround** — never URL-jump around a
233
- missing affordance, a nav 404, or a guard redirect loop.
234
- - **Read tier placement from the rule, not from prose you invent.** The three
235
- path rules in
236
- [`testing-standards.md` § The Three Tiers](../rules/testing-standards.md#the-three-tiers)
237
- decide which tier a test occupies; the missing-test sentence is yours to write
238
- from the lowest uncovered tier.
195
+ The shared core in [`helpers/qa-core.md`](helpers/qa-core.md) and the driving
196
+ conventions in [`stack/qa/qa-harness`](../skills/stack/qa/qa-harness/SKILL.md)
197
+ bind this workflow. The `/qa-explore` deltas are stated once, above: one
198
+ surface per session, the method chosen at Plan time, and a read-only Capture.
239
199
 
240
200
  ## See also
241
201