mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) 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/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,39 +1,9 @@
1
1
  /**
2
- * run-plan-persist.js — flat Story persist for the v2 `/mandrel-plan` collapse
3
- * (Stage 3 — `docs/roadmap.md`).
4
- *
5
- * Ordered pipeline — hard gates refuse, everything else is a **warning** the
6
- * dry-run lists (Story #5312):
7
- *
8
- * 1. `changes[]` repair + ticket validator + file-assumption + DAG
9
- * 2. Draft reachability (named soft failure, exit 3)
10
- * 3. Same-wave collision refusal (`assertNoWaveCollisions`) + spec fold
11
- * 4. Create Story issues (`type::story` + sanitized authored labels —
12
- * deliberately NOT `agent::ready`), resumably via a plan fingerprint
13
- * 5. Upsert the `story-plan-state` comment on every created Story — since
14
- * Story #5343 the one comment persist posts, carrying the plan summary
15
- * 6. Flip every Story to `agent::ready` — the terminal step, so `ready`
16
- * always implies "plan comments written"
17
- * 7. Comment on + close the superseded `--tickets` source issues
18
- * (Story #4535) — bookkeeping only; never fails the run
19
- * 8. Temp cleanup at terminal success + a stale-plan-dir reap
20
- *
21
- * **Why `agent::ready` moved to the end (Story #4541).** Issues used to be
22
- * born `agent::ready` in the creating POST while the plan comments were
23
- * written afterwards. Anything picking a Story up in that window — or after
24
- * a comment failure aborted the loop — found a ready Story carrying none of
25
- * the operator's delivery instructions. Creating unlabelled, writing the
26
- * comments, then flipping closes that race.
27
- *
28
- * **No authored risk artifact (Story #4542).** Persist neither requires nor
29
- * accepts a risk verdict, derives no envelope from one, and computes no
30
- * review routing. Review depth and the acceptance-critic mode are derived from
31
- * the diff at close time (`review-depth.js#deriveChangeLevel`); `--force-review`
32
- * is an explicit operator flag, recorded here as a receipt and never inferred.
33
- *
34
- * Hard cutover: no Epic parent, no reconciler, no `deliveryShape`, no
35
- * `--amend` tree cascades. Those surfaces die with Stages 4–5 for any
36
- * remaining epic-delivery readers.
2
+ * Flat Story persist. Hard gates refuse; everything else is a warning the
3
+ * dry-run lists. Order: validate → reachability → wave-collision gate →
4
+ * create (without `agent::ready`) → plan comment on every Story → flip to
5
+ * `agent::ready` last, so `ready` implies "plan comments written" → close
6
+ * superseded sources (never fails the run) → temp cleanup.
37
7
  *
38
8
  * @module lib/orchestration/plan-persist/run-plan-persist
39
9
  */
@@ -79,31 +49,15 @@ import { buildPlanSummaryCommentBody, buildWaveTable } from './summary.js';
79
49
  import { closeSupersededTickets } from './supersede-ops.js';
80
50
  import { assertNoWaveCollisions } from './wave-collision-gate.js';
81
51
 
82
- /** Structured-comment type for the per-plan Story comment. */
52
+ /** Marker that makes a re-persist upsert the comment in place. */
83
53
  const STORY_PLAN_STATE_TYPE = 'story-plan-state';
84
54
 
85
55
  /**
86
- * Write the plan comment on a Story — the **one** comment persist posts per
87
- * Story (Story #5343).
88
- *
89
- * It carries the human plan summary: the created Story set, the delivery order
90
- * and the exact deliver command. That summary used to be a second
91
- * `plan-summary` comment on the primary Story only, which meant the operator's
92
- * instructions lived on a different marker from the rest — and on a different
93
- * ticket from four Stories out of five.
94
- *
95
- * **No machine payload (Story #5367).** The comment used to lead with a fenced
96
- * JSON checkpoint (a persist receipt: completion time, Story count, the
97
- * cohort). Nothing ever read it back — the one module that parsed it had no
98
- * production importer — so the payload and its readers are gone. The
99
- * `story-plan-state` marker stays: it is what makes a re-persist upsert this
100
- * comment in place instead of appending a second one.
56
+ * The one comment persist posts per Story, carrying the plan summary.
101
57
  *
102
58
  * @param {object} provider
103
59
  * @param {number} storyId
104
- * @param {string} summary Rendered plan-summary markdown. The comment exists
105
- * to carry it, so an empty summary is a caller bug rather than a degenerate
106
- * comment worth posting.
60
+ * @param {string} summary Must be non-empty.
107
61
  * @returns {Promise<void>}
108
62
  */
109
63
  export async function writePlanSummaryComment(provider, storyId, summary) {
@@ -120,20 +74,8 @@ export async function writePlanSummaryComment(provider, storyId, summary) {
120
74
  }
121
75
 
122
76
  /**
123
- * Enforce the ticket validator's hard errors and collect its warnings.
124
- *
125
- * Since Story #5312 the only hard refusal the validator batches into
126
- * `errors[]` is a `deletes` naming a path absent at base; every other
127
- * footprint probe — a `creates` / `refactors-existing` mismatch, a goal,
128
- * acceptance or verify path absent at base — lands on `warnings[]`, which
129
- * the dry-run prints and the persist proceeds past. The `changes[]` repairs
130
- * the helper applied are reported alongside so the operator sees what was
131
- * rewritten.
132
- *
133
- * The returned freshness counts feed the posted summary's freshness
134
- * line: every warning is a reference the base branch disagreed with, so it
135
- * counts as `stale` there rather than the comment reading "clean" on a run
136
- * that had something to say.
77
+ * Throw on validator hard errors; return warnings (with applied `changes[]`
78
+ * repairs) and freshness counts for the summary.
137
79
  *
138
80
  * @returns {{ warnings: string[], freshness: { stale: number, ambiguous: number } }}
139
81
  */
@@ -156,10 +98,8 @@ function enforceTicketValidation(validated) {
156
98
  }
157
99
 
158
100
  /**
159
- * Freshness counts for the posted plan summary. Every validator warning is
160
- * a reference the base branch disagreed with — `stale` when a base ref was
161
- * actually read, `ambiguous` when none resolved in this checkout and the
162
- * probes were skipped, since nothing was verified either way.
101
+ * Every validator warning counts `stale` when a base ref was read, else
102
+ * `ambiguous` (the probes were skipped, nothing was verified).
163
103
  *
164
104
  * @param {string|null} probeRef
165
105
  * @param {string[]} warnings
@@ -170,18 +110,13 @@ function freshnessCounts(probeRef, warnings) {
170
110
  return { stale: warnings.length, ambiguous: 0 };
171
111
  }
172
112
 
173
- /** How each text-hygiene finding kind names itself on the warning list. */
174
113
  const TEXT_HYGIENE_LABELS = {
175
114
  'open-question': 'open question in body',
176
115
  'pinned-identifier': 'pinned identifier in acceptance[]',
177
116
  };
178
117
 
179
118
  /**
180
- * The advisory text-hygiene lints over the draft (Story #5312, #5323) — an
181
- * operator-directed question persisted into a Story a non-interactive
182
- * sub-agent executes, and an acceptance item pinning an internal symbol the
183
- * advisory `changes[]` may reshape. Warnings the dry-run lists, never
184
- * refusals.
119
+ * Advisory text-hygiene lints (warnings, never refusals).
185
120
  *
186
121
  * @param {object[]} rawStories
187
122
  * @returns {string[]}
@@ -196,11 +131,6 @@ function collectTextHygieneWarnings(rawStories) {
196
131
  }
197
132
 
198
133
  /**
199
- * Print every warning the run collected under one heading. The dry-run is
200
- * where an operator reads these; the persist prints the same list so the
201
- * chained run loses nothing on stderr, as the chain's envelope merge keeps
202
- * it from losing anything on stdout (Story #5361).
203
- *
204
134
  * @param {string[]} warnings
205
135
  * @returns {void}
206
136
  */
@@ -215,12 +145,8 @@ function logWarnings(warnings) {
215
145
  }
216
146
 
217
147
  /**
218
- * Run the supersede close phase behind a belt-and-braces guard.
219
- *
220
- * `closeSupersededTickets` already swallows per-ticket failures, but this
221
- * phase runs *after* `createIssue`, so an unexpected throw anywhere in it
222
- * would leave the run half-done with Stories already live. Degrade to a
223
- * reported failure instead.
148
+ * Runs after the Stories are live, so an unexpected throw degrades to a
149
+ * reported failure rather than a half-done run.
224
150
  *
225
151
  * @returns {Promise<import('./supersede-ops.js').SupersedeReport>}
226
152
  */
@@ -249,28 +175,11 @@ async function runSupersedePhase(args) {
249
175
  }
250
176
 
251
177
  /**
252
- * Render the plan-metrics line for the **posted** summary section,
253
- * scoped to this invocation.
254
- *
255
- * The ordering hazard this closes: the ledger record for the current run is
256
- * appended by `recordPlanInvocation`'s `finally`, which by construction only
257
- * fires once `runPlanPersist` has *resolved* — long after this comment body
258
- * is composed. A plain `since`-filtered ledger read therefore summarized
259
- * every run except the one being summarized, and on an otherwise-quiet
260
- * ledger it rendered "plan-metrics: no invocations recorded" onto the very
261
- * comment reporting the run. (The stdout envelope was always correct: its
262
- * `attachPlanMetrics` read runs after the wrapper returns.)
263
- *
264
- * **The `finally` stays where it is.** It is what guarantees a persist that
265
- * throws is still recorded, so moving the append earlier — or moving this
266
- * read later, past the GitHub writes it feeds — would trade a cosmetic bug
267
- * for a real one. Instead of racing it, fold in a synthetic record standing
268
- * for the in-flight invocation. It is the same record the wrapper is about to
269
- * write, minus a final duration; it cannot double-count, because the real one
270
- * does not exist yet at this point in the pipeline.
271
- *
272
- * `ok: true` is honest here: this line is only ever composed on the success
273
- * path, after `createStoryIssues` has returned.
178
+ * Plan-metrics line for the posted summary, scoped to this invocation. The
179
+ * run's own ledger record is appended by the wrapper's `finally` (which must
180
+ * stay there so a throwing persist is still recorded) only after this
181
+ * resolves, so fold in a synthetic in-flight record; it cannot double-count.
182
+ * `ok: true` holds because this runs only on the success path.
274
183
  *
275
184
  * @param {{ config: object, since: string, startedAt: string, mode: string }} args
276
185
  * @returns {Promise<string|null>}
@@ -306,20 +215,13 @@ async function renderRunScopedPlanMetricsLine({
306
215
  }
307
216
 
308
217
  /**
309
- * Re-run the cross-Story conflict passes over the assembled bodies
310
- * (Story #5045).
311
- *
312
- * `validateTickets` runs before assembly, over the raw payload, so until now
313
- * plan-time conflict analysis judged an artifact that is not the one persist
314
- * writes — and the passes that scan `body.acceptance` / `body.verify` were
315
- * inert on the canonical top-level authoring shape as a result. Findings the
316
- * raw pass already reported are dropped so the same collision is not
317
- * announced twice per run; the rest are returned for the summary
318
- * comment, which is where these findings stop being a stderr line nobody
319
- * keeps. Every finding is advisory (Story #5312).
218
+ * Re-run the conflict passes over the assembled bodies — the artifact persist
219
+ * actually writes (the body-scanning passes are inert on the raw payload).
220
+ * Only findings the raw pass did not already report are surfaced; all are
221
+ * advisory.
320
222
  *
321
223
  * @param {{ stories: object[], rawFindings: object[] }} args
322
- * @returns {object[]} The assembled-pass findings, for the summary comment.
224
+ * @returns {object[]}
323
225
  */
324
226
  function analyzeAssembledStories({ stories, rawFindings }) {
325
227
  const findings = computeAssembledConflictFindings({ stories });
@@ -336,23 +238,9 @@ function analyzeAssembledStories({ stories, rawFindings }) {
336
238
  }
337
239
 
338
240
  /**
339
- * Reap abandoned `plan-*` directories under the temp root (Story #4541).
340
- *
341
- * Terminal-success cleanup only ever removed the *current* run's `planDir`,
342
- * so every plan that failed a gate, was abandoned mid-authoring, or ran
343
- * `--dry-run` left its directory behind forever. This sweeps the stragglers
344
- * on each persist.
345
- *
346
- * Story #4794 folded the age-floored reap into the shared temp-retention
347
- * engine — `planDirs` is one of its declared classes, so the plan path and
348
- * the delivery path now converge on one classifier and one staleness floor
349
- * (`delivery.tempRetention.staleDays`, still 7 days by default) instead of
350
- * this module owning a private constant. Behaviour is unchanged: only
351
- * `plan-*` directories are considered, the age test is the directory's own
352
- * mtime, and the current run's `planDir` is excluded.
353
- *
354
- * Best-effort throughout: this is hygiene, never a reason to fail a run that
355
- * has already created Stories.
241
+ * Reap abandoned `plan-*` directories (failed, abandoned, or dry-run plans)
242
+ * via the shared temp-retention staleness floor, excluding this run's.
243
+ * Best-effort hygiene.
356
244
  *
357
245
  * @param {{ config?: object, keepDir?: string|null, now?: number }} args
358
246
  * @returns {Promise<{ reaped: string[] }>}
@@ -373,11 +261,6 @@ export async function reapStalePlanDirs({
373
261
  }
374
262
 
375
263
  /**
376
- * Fail closed on a payload that cannot be persisted. Extracted from
377
- * `runPlanPersist` (Story #4926) so the entry point carries the flow, not the
378
- * guards. The reviewability budget that used to sit beside this check went
379
- * with Story #5312 — a plan is as many Stories as the split policy yields.
380
- *
381
264
  * @param {unknown} rawStories
382
265
  * @returns {void}
383
266
  * @throws {Error} On an empty payload.
@@ -392,7 +275,7 @@ function assertPersistablePlan(rawStories) {
392
275
  }
393
276
 
394
277
  /**
395
- * Enforce the draft-reachability critic: orphans throw, a skip is ledgered.
278
+ * Orphans throw; a skip is ledgered.
396
279
  *
397
280
  * @param {{ status: string, reasons: string[], orphans?: object[] }} reachability
398
281
  * @param {object} config
@@ -420,19 +303,9 @@ async function enforceReachability(reachability, config) {
420
303
  }
421
304
 
422
305
  /**
423
- * Write the per-Story plan comment — one comment per Story, carrying the plan
424
- * summary (Story #5343) — and flip every created Story to `agent::ready`.
425
- * Terminal ordering is load-bearing: `agent::ready` lands last so it can
426
- * honestly mean "fully persisted" (Story #4541). A dry run performs none of it.
427
- *
428
- * **The comments fan out; the phase boundary does not** (Story #4952). The
429
- * per-Story upserts are independent of one another and run under bounded
430
- * concurrency, but the `await` on that whole fan-out is what keeps the
431
- * Story #4541 invariant intact: *every* Story carries its plan comment before
432
- * the first `agent::ready` flip is issued, so `ready` still means "fully
433
- * persisted" and the operator's instructions are never missing from a ticket
434
- * something else may already be picking up. Concurrency inside the phase is
435
- * safe; overlapping the phases is the race this ordering exists to close.
306
+ * Plan comments fan out concurrently, but the whole fan-out is awaited before
307
+ * the first `agent::ready` flip, so `ready` always means "fully persisted".
308
+ * Never overlap the two phases.
436
309
  *
437
310
  * @param {object} args
438
311
  * @returns {Promise<void>}
@@ -441,19 +314,12 @@ async function persistStoryArtifacts({ provider, created, summaryBody }) {
441
314
  await concurrentMap(
442
315
  created,
443
316
  (story) => writePlanSummaryComment(provider, story.id, summaryBody),
444
- // The per-Story comment upserts (Story #4952): each targets a
445
- // different issue and reads nothing another writes, so this loop was
446
- // serial only by construction — but see {@link persistStoryArtifacts}
447
- // for the phase ordering that is *not* incidental.
448
317
  { concurrency: FANOUT_CONCURRENCY },
449
318
  );
450
319
  await markStoriesReady({ provider, created });
451
320
  }
452
321
 
453
322
  /**
454
- * Remove this run's plan directory on terminal success, then sweep the
455
- * abandoned ones terminal-success cleanup can never reach (Story #4541).
456
- *
457
323
  * @param {{ config: object, planDir: string|null, skipCleanup: boolean }} args
458
324
  * @returns {Promise<void>}
459
325
  */
@@ -469,9 +335,6 @@ async function cleanupPlanDirs({ config, planDir, skipCleanup }) {
469
335
  }
470
336
 
471
337
  /**
472
- * Log the operator-facing persist epilogue: adoption, the ready primary, the
473
- * deliver command, and the cohort grouping label.
474
- *
475
338
  * @param {{
476
339
  * created: object[],
477
340
  * primary: object,
@@ -500,11 +363,7 @@ function logPersistEpilogue({
500
363
  Logger.info(
501
364
  `[plan-persist] Deliver with: /mandrel-deliver ${created.map((s2) => s2.id).join(' ')}`,
502
365
  );
503
- // Metadata only — a GitHub filter for the cohort this run authored, never
504
- // a delivery-resolution input (/mandrel-deliver stays ids-only, Story #4540).
505
- // Gated on the ensure result: the label ensure degrades non-fatally, and
506
- // advertising a filter GitHub just refused to create is worse than saying
507
- // nothing (Story #5201). The derived id survives in the result envelope.
366
+ // Never advertise a filter for a label the ensure failed to create.
508
367
  if (planRunLabelApplied) {
509
368
  Logger.info(
510
369
  `[plan-persist] Cohort grouping label: ${planRunLabel} — filter with ` +
@@ -514,8 +373,6 @@ function logPersistEpilogue({
514
373
  }
515
374
 
516
375
  /**
517
- * Execute the flat Story persist end to end.
518
- *
519
376
  * @param {{
520
377
  * provider: object,
521
378
  * artifacts: {
@@ -558,16 +415,11 @@ export async function runPlanPersist({
558
415
  sourceTicketIds = [],
559
416
  sourceTicketOrigin = 'none',
560
417
  closeSuperseded = true,
561
- // Story #5139 — the optional container Epic. `null` (the default) is the
562
- // ordinary shape: no Epic is created unless `/mandrel-plan` offered one
563
- // above the threshold and the operator confirmed it.
418
+ // Optional container Epic; only set when the operator confirmed one.
564
419
  epic = null,
565
420
  } = opts;
566
421
 
567
- // Boundary for the plan-metrics summary below: everything this invocation
568
- // appends to the ledger is stamped at or after this instant, so filtering
569
- // on it scopes the counts to *this* run rather than every plan ever run
570
- // through the shared standalone ledger (Story #4541).
422
+ // Scopes the plan-metrics summary to this run's ledger entries.
571
423
  const runStartedAt = opts.metricsSince ?? new Date().toISOString();
572
424
 
573
425
  assertPersistablePlan(rawStories);
@@ -591,59 +443,38 @@ export async function runPlanPersist({
591
443
  });
592
444
  await enforceReachability(reachability, config);
593
445
 
594
- // Story #5155 — the plan's outward references (`--epic <id>`, and any
595
- // `#<id>` blocker) resolve BEFORE the first create, dry run included.
446
+ // Outward references (`--epic <id>`, `#<id>` blockers) resolve before the
447
+ // first create, dry run included.
596
448
  const adoptionTarget = await resolveCrossPlanLinks({
597
449
  provider,
598
450
  stories: rawStories,
599
451
  epicId: opts.adoptEpicId ?? null,
600
452
  });
601
453
 
602
- // Inline Spec fold (Specs stay inline, never under docs/).
603
454
  const seedContent = planContextEnvelope?.seed?.content ?? '';
604
455
  const { stories: assembled, warnings: supersedeWarnings } =
605
456
  assemblePlanStories(rawStories, {
606
457
  sharedSpec: techSpecContent,
607
458
  sourceTicketIds,
608
- // The seed this plan was authored from: an audit sweep's Single-plan seed
609
- // carries the `audit-fingerprints` / `audit-semantic-keys` footers, and
610
- // assembly copies them into the persisted Story bodies so the next sweep
611
- // recognises what it already planned (Story #4877). Since Story #5045 this
612
- // is the **fallback** — it is carried onto every Story that did not
613
- // attribute its own `provenance`, which keeps an un-attributed plan exactly
614
- // as recall-safe as it was. Empty for a `--tickets` run, a no-op there.
459
+ // Audit footers carried onto every Story that did not attribute its own
460
+ // `provenance`; empty for a `--tickets` run.
615
461
  provenanceSource: seedContent,
616
462
  });
617
463
 
618
- // Story #5342: the source ids assembly assigned to the primary Story by
619
- // default. They ride the same list every other dry-run warning does, so a
620
- // default-assigned supersede is visible in the output the operator already
621
- // reads rather than only in the tracker afterwards.
622
464
  warnings.push(...supersedeWarnings);
623
465
  logWarnings(supersedeWarnings);
624
466
 
625
- // Stamp the `audit::*` labels the dedup corpus is listed by. Without them a
626
- // Story this path files is absent from the pool an indexed sweep matches
627
- // against, and an indexed run answers exact lookups from that pool without
628
- // ever reaching the provider — so the provenance footers alone leave it
629
- // invisible (Story #5307). A non-audit seed carries none: a no-op there.
467
+ // The dedup corpus is listed by `audit::*` label; footers alone leave the
468
+ // Story invisible to an indexed sweep.
630
469
  const stories = withAuditLabels(assembled, seedContent);
631
470
 
632
- // Story #5045: the cross-Story conflict passes re-run over the assembled,
633
- // footer-stamped bodies — the artifact persist actually writes — before any
634
- // GitHub call, so a policy upgrade still refuses the plan pre-creation.
635
471
  const assembledConflicts = analyzeAssembledStories({
636
472
  stories,
637
473
  rawFindings: validated.findings,
638
474
  });
639
475
 
640
- // Story #5332 — the split gate, ahead of the first create. `buildWaveTable`
641
- // needs only `{slug, title, depends_on}` and the prediction needs only the
642
- // assembled bodies, so both can run before anything is written; they used
643
- // to sit *after* creation, which is why the collision table could only ever
644
- // be a receipt for a plan already live. The same computed value is handed
645
- // to the summary rendering below rather than recomputed, so the refusal and
646
- // the receipt can never disagree.
476
+ // The split gate runs before the first create; the same values feed the
477
+ // summary so the refusal and the receipt cannot disagree.
647
478
  const waveTable = buildWaveTable(
648
479
  stories.map((s) => ({
649
480
  slug: s.slug,
@@ -652,12 +483,8 @@ export async function runPlanPersist({
652
483
  })),
653
484
  );
654
485
 
655
- // Story #5265: the table says which Stories share an order; the dispatcher
656
- // decides which of those actually run together. Run its own predicate over
657
- // the assembled bodies — the exact artifact the tick will read back off
658
- // GitHub — so an N>1 draft it would serialize is refused here, and the
659
- // summary comment names the serialisation instead of promising parallelism
660
- // the next tick refuses. One enumeration feeds both.
486
+ // The dispatcher's own predicate over the assembled bodies, so a draft it
487
+ // would serialize is refused here rather than promised as parallel.
661
488
  const waveCollisions = assertNoWaveCollisions(waveTable, stories, {
662
489
  tempRoot: getPaths(config).tempRoot,
663
490
  });
@@ -669,20 +496,10 @@ export async function runPlanPersist({
669
496
  opts: { dryRun },
670
497
  });
671
498
 
672
- // What this run filed, recorded where the next audit sweep reads it
673
- // (Story #5307). A dry run created nothing, and the call knows it.
674
499
  recordAuditFilings({ stories, created, tickets: rawStories, dryRun });
675
500
 
676
501
  const primary = created[0];
677
502
 
678
- // Story #4541: `readPlanMetrics` is declared `(epicId, config)` but was
679
- // called with `config` first, so the ledger path resolver received the
680
- // config object as an `epicId` and threw its guard on every single run —
681
- // a throw this try/catch then swallowed into a silently absent summary.
682
- // v2 persist is always Epic-less, hence the explicit `null`. The `since`
683
- // filter keeps the counts about this invocation, and the in-flight record
684
- // is folded in because the wrapper has not written it yet — see
685
- // `renderRunScopedPlanMetricsLine`.
686
503
  const planMetricsLine = await renderRunScopedPlanMetricsLine({
687
504
  config,
688
505
  since: runStartedAt,
@@ -700,9 +517,6 @@ export async function runPlanPersist({
700
517
  mode: 'stories',
701
518
  planMetricsLine,
702
519
  stories: created,
703
- // Story #5045: the wave table promises what can run in parallel; the
704
- // collisions the conflict passes found belong on the same surface, or the
705
- // promise is the only half anyone reads.
706
520
  conflictFindings: assembledConflicts,
707
521
  waveCollisions,
708
522
  });
@@ -711,11 +525,8 @@ export async function runPlanPersist({
711
525
  await persistStoryArtifacts({ provider, created, summaryBody });
712
526
  }
713
527
 
714
- // Story #5139 — the container Epic is created LAST among the writes: its
715
- // body embeds the child issue numbers and its sub-issue edges need their
716
- // database ids, neither of which exists until the Stories are live. It is
717
- // never load-bearing, so a failure here degrades to "no container" and the
718
- // Stories still deliver by id.
528
+ // Last among the writes: the Epic needs the children's numbers and database
529
+ // ids. Never load-bearing — a failure degrades to "no container".
719
530
  const containerEpic = await resolveContainerEpic({
720
531
  provider,
721
532
  adoptionTarget,
@@ -729,16 +540,12 @@ export async function runPlanPersist({
729
540
  stories,
730
541
  created,
731
542
  sourceTicketIds,
732
- // Story #5280 — closing a source ticket is a child state change, so the
733
- // phase re-derives the container above it. It needs the config the rollup
734
- // reads its board and operator handle from.
543
+ // Closing a source ticket re-derives its container Epic's rollup.
735
544
  config,
736
545
  dryRun,
737
546
  closeSuperseded,
738
547
  });
739
- // Record which channel the ids came from so a run that superseded nothing
740
- // says *why* (`none` = neither the envelope nor --source-tickets carried
741
- // any) rather than reading as a clean no-op — Story #4554.
548
+ // Lets a run that superseded nothing say why.
742
549
  supersede.sourceTicketOrigin = sourceTicketOrigin;
743
550
 
744
551
  await cleanupPlanDirs({ config, planDir, skipCleanup });
@@ -756,15 +563,9 @@ export async function runPlanPersist({
756
563
  forceReview,
757
564
  reachability,
758
565
  freshness,
759
- // Story #5312: what the run rewrote and what it noticed. The dry-run is
760
- // the review surface now that the footprint probes warn instead of
761
- // refusing, so the list rides the result envelope, not just stderr.
762
566
  warnings,
763
567
  repairs: validated.repairs ?? [],
764
568
  waveTable,
765
- // Story #5265 AC-2/AC-4: both halves of what persist concluded but used
766
- // to keep to itself — the `refactors-existing` declarations it rewrote,
767
- // and the same-order pairs the dispatcher will serialize.
768
569
  assumptionNormalizations: validated.normalizations ?? [],
769
570
  waveCollisions,
770
571
  supersede,
@@ -1,13 +1,6 @@
1
1
  /**
2
2
  * Soft-finding reporting for plan-persist.
3
3
  *
4
- * Story #5312 retired the fan-out gate that shared this file: the delete
5
- * blast-radius probe never refused a real plan, and its `--allow-large-fan-out`
6
- * override was a flag nobody typed. What remains is the one surface that
7
- * announces every advisory finding the validator produced, each under its
8
- * own kind, so the operator reads a conflict as a conflict and a nudge as a
9
- * nudge (Story #4907).
10
- *
11
4
  * @module lib/orchestration/plan-persist/soft-findings
12
5
  */
13
6
 
@@ -18,11 +11,8 @@ import {
18
11
  } from '../ticket-validator-conflicts.js';
19
12
 
20
13
  /**
21
- * Report every soft finding the validator produced, each under its own kind.
22
- *
23
- * Only the {@link CONFLICT_KINDS} are cross-Story conflicts. Any other soft
24
- * kind is a single-Story nudge, and announcing it as a conflict overstated it
25
- * and taught readers to discount the whole channel.
14
+ * Only {@link CONFLICT_KINDS} are reported as conflicts; other soft kinds are
15
+ * single-Story advisories, so the channel is not overstated.
26
16
  *
27
17
  * @param {object[]} findings
28
18
  * @param {string} [tag]