mandrel 2.60.0 → 2.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,33 +1,9 @@
1
1
  /**
2
- * phases/pre-gate-steps.js — the self-heal steps the standalone close runs on
3
- * the Story branch *before* the check-only gate chain scores it.
4
- *
5
- * Two steps live here, and they share one contract that is the reason they
6
- * share a module: each may author a commit on `story-<id>`, each must run
7
- * ahead of the gates so its commit is part of what the gates score and part of
8
- * the branch's own PR, and **neither may ever fail the close**. Downstream
9
- * there is always an authoritative gate — `biome ci` for formatting,
10
- * `check-baselines` for the ratchet — so a failure here is a missed
11
- * opportunity to self-heal, never a verdict.
12
- *
13
- * 1. **Scoped format-autofix** (Story #4250) — run the formatter over the
14
- * `baseBranch...storyBranch` diff and fold any rewrite into a
15
- * `fix(story-close):` commit, so benign JSON/YAML drift that lint-staged
16
- * does not glob never reaches the check-only format gate.
17
- * 2. **Upward baseline write-back** (Story #5224) — persist the
18
- * maintainability rows this branch improved on files it touched, as a
19
- * `baseline-refresh:` commit, so the committed baseline stops falling
20
- * behind the tree in the upward direction.
21
- * 3. **Context-budget write-back** (Story #5313) — persist the lower
22
- * documentation-tier totals this branch measured, so a trimmed tier's
23
- * gain locks in without `check-context-budget.js` ever going red on it.
24
- *
25
- * Extracted from `close-validation.js` when the second step landed. The phase
26
- * module's job is the gate chain, the evidence keyspace and the gate-log sink;
27
- * carrying two multi-branch best-effort wrappers inline alongside that was the
28
- * mass that made it the file it was. Both collaborators stay injectable — the
29
- * parent CLI's cache-busted bindings must win in tests that mock the upstream
30
- * module URLs — and are threaded through from the phase unchanged.
2
+ * phases/pre-gate-steps.js — self-heal steps run on the Story branch before
3
+ * the gates: scoped format-autofix, the upward maintainability baseline
4
+ * write-back, and the context-budget write-back. Each may commit on
5
+ * `story-<id>` (so the gates score it) and none may ever fail the close — an
6
+ * authoritative gate for each runs right after.
31
7
  */
32
8
 
33
9
  import { Logger } from '../../../Logger.js';
@@ -36,8 +12,6 @@ import { runContextBudgetWriteback as defaultRunContextBudgetWriteback } from '.
36
12
  import { runScopedFormatAutofix as defaultRunScopedFormatAutofix } from '../../story-close/format-autofix.js';
37
13
 
38
14
  /**
39
- * Run the scoped formatter self-heal.
40
- *
41
15
  * @param {object} ctx the shared step context (see {@link runPreGateSteps})
42
16
  * @returns {void}
43
17
  */
@@ -73,12 +47,7 @@ function formatAutofixStep({
73
47
  }
74
48
 
75
49
  /**
76
- * Run one of the two baseline write-backs and report it on one progress line.
77
- *
78
- * Both steps (Story #5224's maintainability rows, Story #5313's context-budget
79
- * totals) take the same context and answer in the same shape — `committed`
80
- * with a `sha`, or a named `reason` — so one wrapper serves both; `describe`
81
- * renders the committed outcome in the step's own words.
50
+ * Serves both write-backs, which share an input and result shape.
82
51
  *
83
52
  * @param {object} ctx the shared step context (see {@link runPreGateSteps})
84
53
  * @param {{ tag: string, run: Function, describe: (w: object) => string, noun: string }} step
@@ -106,13 +75,7 @@ async function writebackStep(
106
75
  }
107
76
 
108
77
  /**
109
- * Run one step, absorbing any throw into a progress line.
110
- *
111
- * The absorption is the point, not laziness about error handling: every step
112
- * here is the *refresh* half of a loop whose *enforcement* half runs
113
- * immediately afterwards. A step that could abort the close would convert a
114
- * self-heal opportunity into an outage, and would do it on the path with the
115
- * least operator attention.
78
+ * Absorbs any throw: these are refresh halves; enforcement runs right after.
116
79
  *
117
80
  * @param {{ tag: string, label: string, progress: Function, run: () => Promise<void>|void }} opts
118
81
  * @returns {Promise<void>}
@@ -129,12 +92,7 @@ async function bestEffort({ tag, label, progress, run }) {
129
92
  }
130
93
 
131
94
  /**
132
- * Run every pre-gate self-heal step for a standalone Story close.
133
- *
134
- * Both steps commit to `story-<id>`, so both are skipped — with a log line, not
135
- * a throw — when the caller has no `storyBranch`. That is the resume/legacy
136
- * path, which has no branch to commit onto and must not trip an exception for
137
- * saying so.
95
+ * Without a `storyBranch` there is nothing to commit onto: skip with a log line.
138
96
  *
139
97
  * @param {{
140
98
  * cwd: string,
@@ -1,44 +1,10 @@
1
1
  /**
2
- * phases/pull-request.js — open, reuse, or decline to open the PR for a
3
- * standalone Story.
2
+ * phases/pull-request.js — open, reuse, or decline to open the Story's PR.
4
3
  *
5
- * Probes for an existing PR with `head = storyBranch`; creates one if none
6
- * exists. Returns `{ url, alreadyMerged, created }`.
7
- *
8
- * `gh pr view --head` is not available on all `gh` versions, so we probe
9
- * with `gh pr list --head <branch>` and fall back to `gh pr create`.
10
- *
11
- * Story #2990 routed the underlying `gh pr list` / `gh pr create` calls
12
- * through the `lib/gh-exec.js` facade (the same shim the
13
- * `providers/github/` gateways use) so this phase inherits the typed
14
- * error classification, timeout handling, and JSON parsing surface
15
- * instead of carrying its own `execFileSync('gh', …)` plumbing.
16
- *
17
- * ## An already-merged PR is not an absent PR (Story #4873)
18
- *
19
- * The probe used to ask for `--state open` only. On the recovery path that is
20
- * a false negative with teeth: a resumed close pushes the branch, the push
21
- * turns the checks green, armed auto-merge lands the ORIGINAL PR server-side,
22
- * and the resumed close then sees no OPEN PR on the head — so it opened a
23
- * SECOND PR against a branch that is now byte-identical to base and
24
- * squash-merged a zero-file commit onto `main`. Both halves of that are now
25
- * closed:
26
- *
27
- * 1. The probe reads `--state all` and reports a MERGED PR on this head as
28
- * the outcome (`alreadyMerged: true`), so the caller lands on the merge
29
- * that already happened instead of manufacturing a new one. An OPEN PR
30
- * still wins over a merged one — a re-opened head is a live PR.
31
- * 2. Creation is REFUSED outright when the head-versus-base diff contains no
32
- * files. An empty diff means there is nothing to merge, so a PR opened on
33
- * it can only ever produce an empty commit.
34
- *
35
- * The empty-diff guard fails **open**, not closed: `computeChangeSet` returns
36
- * `files: null` when it cannot enumerate the diff at all, and absence of
37
- * evidence must never block a legitimate PR — only a positively-observed empty
38
- * file list refuses.
39
- *
40
- * The function still accepts an injected `gh` facade so tests can wire
41
- * a fake without spawning real children.
4
+ * A MERGED PR on the head is reported as the outcome, not treated as absent:
5
+ * a resumed close whose original PR auto-merged would otherwise open a second
6
+ * PR and squash an empty commit onto `main`. Creation is also refused on a
7
+ * positively empty diff; an unenumerable diff fails open.
42
8
  */
43
9
 
44
10
  import { gh as defaultGh } from '../../../gh-exec.js';
@@ -47,21 +13,9 @@ import { computeChangeSet as defaultComputeChangeSet } from '../../change-set.js
47
13
  import { buildPullRequestFields } from './normalize-pr-title.js';
48
14
 
49
15
  /**
50
- * Pick the PR this head branch should resolve to from a `gh pr list
51
- * --state all` projection. A live PR always wins; otherwise the first MERGED
52
- * PR is the outcome to report. A head whose only PRs were CLOSED without
53
- * merging resolves to nothing — there is a new PR to open.
54
- *
55
- * A row carrying a url but no recognizable `state` reads as live, not as
56
- * nothing: the projection this phase asks for always includes `state`, so an
57
- * absent one means an older/other `gh`, and the old `--state open` probe
58
- * treated every returned row as a reusable open PR. Guessing "no PR" there is
59
- * the failure mode with teeth — it opens a duplicate.
60
- *
61
- * Pure, and module-private on purpose: `ensurePullRequestWith` is the only
62
- * caller and the only surface worth pinning, so the precedence is asserted
63
- * through it rather than through a test-only export the production
64
- * dead-export ratchet would then flag.
16
+ * OPEN wins, then the first MERGED; CLOSED-only resolves to null. A row with
17
+ * no recognizable `state` reads as live, since guessing "no PR" opens a
18
+ * duplicate. Module-private: a test-only export would trip dead-exports.
65
19
  *
66
20
  * @param {Array<{url?: string, state?: string, mergedAt?: string}>} rows
67
21
  * @returns {{ url: string, state: 'OPEN'|'MERGED' }|null}
@@ -84,14 +38,8 @@ function pickHeadPullRequest(rows) {
84
38
  }
85
39
 
86
40
  /**
87
- * Enumerate the head-versus-base diff and report whether it is positively
88
- * empty. `null` (diff unenumerable) is NOT empty — see the module header.
89
- *
90
- * The diff is taken against `origin/<baseBranch>` when that ref resolves,
91
- * because the local base ref can trail the remote by exactly the merge that
92
- * makes this diff empty — the very state the guard exists to catch. It falls
93
- * back to the local ref, and finally to "unknown", when the remote ref cannot
94
- * be enumerated.
41
+ * Prefers `origin/<base>`: the local ref can trail by exactly the merge that
42
+ * makes the diff empty. Unenumerable is NOT empty.
95
43
  *
96
44
  * @returns {{ empty: boolean, baseRef: string|null }}
97
45
  */
@@ -105,9 +53,6 @@ function probeEmptyDiff({ cwd, baseBranch, storyBranch, computeChangeSet }) {
105
53
  }
106
54
 
107
55
  /**
108
- * Probe for an existing PR with `head = storyBranch`; create one if none
109
- * exists. Exported for testing.
110
- *
111
56
  * @param {{
112
57
  * cwd: string,
113
58
  * storyId: number,
@@ -132,16 +77,9 @@ export async function ensurePullRequestWith({
132
77
  computeChangeSetFn = defaultComputeChangeSet,
133
78
  progress = () => {},
134
79
  }) {
135
- // `cwd` is preserved on the call signature for backwards compatibility
136
- // with the SUT's thin wrapper, but `gh-exec` spawns `gh` against the
137
- // current process cwd. `single-story-close.js` chdirs into the worktree
138
- // before invoking the phase, so the effective cwd matches the legacy
139
- // `execFileSync('gh', …, { cwd })` shape.
80
+ // `gh-exec` spawns `gh` in the process cwd, not `_cwd`.
140
81
  try {
141
- // `gh pr list --head <branch> --state all --json url,state,mergedAt`
142
- // returns a JSON array of rows; an empty array means this head has never
143
- // had a PR. `--state all` (not `open`) is load-bearing — see the module
144
- // header's duplicate-empty-PR note.
82
+ // `--state all`, not `open`: a merged PR must be seen.
145
83
  const rows = await gh.pr.list(
146
84
  ['--head', storyBranch, '--state', 'all'],
147
85
  ['url', 'state', 'mergedAt'],
@@ -160,16 +98,11 @@ export async function ensurePullRequestWith({
160
98
  return { url: existing.url, alreadyMerged: true, created: false };
161
99
  }
162
100
  } catch (err) {
163
- // `gh pr list` failure is recoverable — fall through to create. Log
164
- // the error so an auth issue surfaces visibly.
165
101
  Logger.warn?.(
166
102
  `[single-story-close] ⚠️ \`gh pr list\` probe failed (continuing to create): ${err?.message ?? err}`,
167
103
  );
168
104
  }
169
105
 
170
- // Nothing to merge → nothing to open. Refused before `gh pr create` so the
171
- // failure names the empty diff rather than surfacing later as a zero-file
172
- // squash commit on the base branch.
173
106
  const emptyDiff = probeEmptyDiff({
174
107
  cwd: _cwd ?? process.cwd(),
175
108
  baseBranch,
@@ -187,10 +120,6 @@ export async function ensurePullRequestWith({
187
120
  }
188
121
 
189
122
  progress('PR', `Opening PR for ${storyBranch} → ${baseBranch}...`);
190
- // The repo squash-merges and GitHub uses the PR title as the squash subject
191
- // on `main`, so both fields are derived rather than typed — see
192
- // `normalize-pr-title.js`. `gh-exec` spawns `gh` against the current process
193
- // cwd (the worktree), so the branch read uses the same cwd.
194
123
  const { title, body } = buildPullRequestFields({
195
124
  storyTitle,
196
125
  storyId,
@@ -1,44 +1,16 @@
1
1
  /**
2
2
  * phases/push.js — push the Story branch to origin.
3
3
  *
4
- * `git push -u` makes the local branch track origin/story-<id> so
5
- * subsequent fetches are cheap. A push failure raises so the caller
6
- * fails non-zero — the operator must resolve before retrying.
7
- *
8
- * Issue #4483 — this phase IS the standalone path's deterministic
9
- * land-or-block backstop (the counterpart to the Epic finalize seam's
10
- * `delivery-branch-missing-on-origin` blocker). `git push` exits 0 only
11
- * after origin has accepted the ref, so the throw below is the origin
12
- * assertion: every later close phase (PR open, auto-merge, the
13
- * `closeResult` success envelope) is unreachable unless the Story branch
14
- * verifiably landed on origin. No post-push `ls-remote` re-probe is
15
- * added because it would re-ask a question the push exit code already
16
- * answered authoritatively.
17
- *
18
- * Issue #4990 — the push runs in the Story worktree, not the main
19
- * checkout. `core.hooksPath` is the relative `.husky/_`, so the
20
- * invocation directory is what selects which tree `pre-push` resolves
21
- * and measures. Pushing from the main checkout therefore validated a
22
- * tree other than the one being sent — false red when that checkout sat
23
- * on unrelated work, and worse, false green whenever it happened to be
24
- * clean. `worktreePath` falls back to `cwd` because single-tree mode and
25
- * a disabled `delivery.worktreeIsolation` both legitimately have no
26
- * worktree, and there the main checkout IS the tree being pushed. The
27
- * two sibling phases resolve their tree the same way
28
- * (`base-sync.js`, `close-validation.js`).
29
- *
30
- * `gitSync` is accepted as an injected dependency rather than statically
31
- * imported so the caller's (cache-busted) binding wins. The
32
- * `single-story-close.js` orchestrator owns the static import; test
33
- * suites mock the git-utils module URL and re-import the SUT to refresh
34
- * the binding it passes in.
4
+ * `git push` exits 0 only once origin accepted the ref, so the throw is the
5
+ * origin assertion every later phase depends on. It runs from the worktree:
6
+ * `core.hooksPath` is relative, so the invocation directory decides which
7
+ * tree `pre-push` measures (the main checkout gave false greens). With no
8
+ * worktree, the main checkout is the pushed tree.
35
9
  */
36
10
 
37
11
  import { gitSync as defaultGitSync } from '../../../git-utils.js';
38
12
 
39
13
  /**
40
- * Push the Story branch with `-u` so the upstream is set.
41
- *
42
14
  * @param {{
43
15
  * cwd: string,
44
16
  * worktreePath?: string|null,
@@ -56,12 +28,7 @@ export function pushStoryBranch({
56
28
  }) {
57
29
  progress('GIT', `Pushing ${storyBranch} to origin...`);
58
30
  try {
59
- // No hook-bypass flag here, deliberately. Close runs its own gate chain
60
- // before this point, but `--skip-validation` skips that chain, and the
61
- // bypass then left nothing running at all. `pre-push` is the backstop,
62
- // and it only became reachable once hooks were materialized into
63
- // worktrees — which is where every Story branch is built, and where the
64
- // cwd below now resolves so the hook reads that tree.
31
+ // Never bypass hooks: under `--skip-validation`, `pre-push` is the only gate.
65
32
  gitSync(worktreePath ?? cwd, 'push', '-u', 'origin', storyBranch);
66
33
  progress('GIT', `✅ Pushed ${storyBranch}.`);
67
34
  } catch (err) {
@@ -33,12 +33,7 @@ export async function handleCriticalReviewBlock({
33
33
  `[single-story-close] failed to post review-block friction: ${err?.message ?? err}`,
34
34
  );
35
35
  }
36
- // Story #4539 — route through the canonical mutator rather than writing
37
- // labels directly. A bare `provider.updateTicket` skips the Projects v2
38
- // column sync (Story #2548), leaving the board on the Story's prior
39
- // status. That is benign today only because agent::blocked and
40
- // agent::executing happen to map to the same column — a coincidence, not
41
- // a design, and exactly how the next drift gets in.
36
+ // Canonical mutator, not a bare label write, so the Projects v2 column syncs.
42
37
  try {
43
38
  await transitionTicketState(provider, storyId, STATE_LABELS.BLOCKED, {});
44
39
  } catch (err) {
@@ -1,33 +1,13 @@
1
1
  /**
2
- * phases/review-outcome.js — operator-facing rendering of the Story-scope
3
- * review outcome (Story #4839).
4
- *
5
- * The review phase used to report a severity tally and nothing else, which made
6
- * "every gate ran and found nothing" and "a gate never ran" render identically.
7
- * Both surfaces the operator actually reads — the close progress stream and the
8
- * cross-reference comment on the Story — now state the degraded gates
9
- * explicitly, and always state them (as `none` when healthy) so an absent line
10
- * can never be mistaken for a clean gate.
11
- *
12
- * A degraded gate is **reported, not blocking**: this review is a secondary
13
- * read, and the close does not gate the merge on it. The rationale for that
14
- * posture lives with the channel itself in
15
- * [`review-providers/degraded-gates.js`](../../review-providers/degraded-gates.js).
16
- *
17
- * What this module must **not** do (Story #5193) is tell the operator that the
18
- * canonical `npm run lint` close gate covered the surface instead. A stub
19
- * `lint` script is a supported consumer shape, so that claim is unverifiable
20
- * from here — and asserting it talks the operator out of the exact concern the
21
- * degradation was raised to surface. State the posture; never vouch for
22
- * coverage this module cannot see.
2
+ * phases/review-outcome.js — renders the review outcome, always stating the
3
+ * degraded gates (`none` when healthy) so "never ran" cannot read as
4
+ * "found nothing". Degraded is reported, not blocking — and never claim
5
+ * another gate covered the surface; this module cannot see that.
23
6
  */
24
7
 
25
8
  import { summarizeDegradations } from '../../review-providers/degraded-gates.js';
26
9
 
27
10
  /**
28
- * Pure: the tally suffix shared by the progress line and the cross-reference
29
- * comment — severity counts plus the degraded-gate state.
30
- *
31
11
  * @param {{ severity: { critical: number, high: number, medium: number, suggestion: number }, degradations?: unknown }} args
32
12
  * @returns {string}
33
13
  */
@@ -40,10 +20,6 @@ export function buildOutcomeTally({ severity, degradations }) {
40
20
  }
41
21
 
42
22
  /**
43
- * Pure: the progress lines announcing a completed review. Always one line
44
- * naming the tally; a second, explicitly-worded line when a gate did not run so
45
- * the degradation cannot be skimmed past.
46
- *
47
23
  * @param {{
48
24
  * severity: { critical: number, high: number, medium: number, suggestion: number },
49
25
  * degradations?: unknown,
@@ -1,26 +1,7 @@
1
1
  /**
2
- * phases/review-override.js — the sanctioned, logged override of a Story-scope
3
- * code-review critical blocker.
4
- *
5
- * Split out of `phases/review-block.js`, which owns the opposite outcome: the
6
- * blocker that *holds*. Keeping the two in one module meant one file owning
7
- * both "park this Story" and "ship it anyway", and the override's audit trail is
8
- * substantial enough — three write surfaces, each independently best-effort —
9
- * to be its own reason to change.
10
- *
11
- * **Why an override exists at all.** A critical review finding halts
12
- * `single-story-close.js` before auto-merge, and no flag overrode a review
13
- * verdict: `--skip-validation` bypasses the gate chain and `--no-auto-merge`
14
- * declines to arm, but neither touches the review. So an operator who had read a
15
- * finding and judged it wrong could only land by merging the PR by hand, which
16
- * bypasses the gate with no record anywhere of what was overridden or why. This
17
- * module does not weaken the gate; it relocates that escape hatch out of an
18
- * untraceable hand-merge and into a mandatory-reason audit trail.
19
- *
20
- * Live provenance: Story #5007 / PR #5022, where a FALSE critical blocker — an
21
- * MI finding on files `delivery.quality.gates.maintainability.ignoreGlobs`
22
- * exempts, which the `check-baselines.js` ratchet correctly ignored in the same
23
- * run — halted a legitimate delivery with a hand-merge as the only way out.
2
+ * phases/review-override.js — the sanctioned, logged override of a critical
3
+ * review blocker. It replaces an untraceable hand-merge (the only escape from
4
+ * a false blocker) with a mandatory-reason audit trail.
24
5
  */
25
6
 
26
7
  import { Logger } from '../../../Logger.js';
@@ -33,22 +14,9 @@ import {
33
14
  upsertStructuredComment,
34
15
  } from '../../ticketing.js';
35
16
 
36
- /** Cap on the reason text copied into the friction signal's `details`. */
37
17
  const REASON_SIGNAL_LIMIT = 500;
38
18
 
39
19
  /**
40
- * Build the audit record posted when an operator overrides a review blocker.
41
- * Pure.
42
- *
43
- * The body restates the count, the reason, and the fact that auto-merge was
44
- * armed anyway — an override whose trail says only "overridden" is no better
45
- * than the hand-merge it replaces.
46
- *
47
- * Module-local: an implementation detail of
48
- * {@link handleOverriddenReviewBlock}, whose posted body is observable through
49
- * that public entry point. Exporting it would add a public symbol no production
50
- * path reaches — the exact dead-export shape this repo ratchets against.
51
- *
52
20
  * @param {{ prUrl: string, criticalCount: number, reason: string }} args
53
21
  * @returns {string}
54
22
  */
@@ -70,15 +38,7 @@ function buildReviewOverrideBody({ prUrl, criticalCount, reason }) {
70
38
  }
71
39
 
72
40
  /**
73
- * Post one audit record, swallowing the failure into a warning.
74
- *
75
- * Every write here is best-effort by design: an override whose audit trail
76
- * partly failed must still land the delivery the operator authorized, because
77
- * the close would otherwise fail for a reason the operator cannot act on. The
78
- * friction signal is the durable record — it is what makes a rising override
79
- * count visible to the retro.
80
- *
81
- * Module-local: the two call sites below are its only callers.
41
+ * Best-effort: a partly failed trail must not block an authorized delivery.
82
42
  *
83
43
  * @param {{ post: () => Promise<unknown>, surface: string }} args
84
44
  * @returns {Promise<boolean>} true when the record landed.
@@ -96,13 +56,8 @@ async function postAuditRecord({ post, surface }) {
96
56
  }
97
57
 
98
58
  /**
99
- * Record an operator-authorized override of a critical code-review blocker,
100
- * then let close continue to the auto-merge phase.
101
- *
102
- * Writes to three surfaces: the Story issue via `upsert` so a re-run does not
103
- * stack duplicates; the PR via `post` so the trail is append-only on the surface
104
- * a human reviews, and so a reviewer reading the PR need not open the Story to
105
- * learn the blocker was overridden; and the friction stream.
59
+ * Records to the Story (upsert, so re-runs don't stack), the PR (append-only,
60
+ * where reviewers look), and the friction stream.
106
61
  *
107
62
  * @param {{
108
63
  * provider: object,
@@ -1,30 +1,13 @@
1
1
  /**
2
- * phases/worktree-reap.js — reap the per-Story worktree after close.
3
- *
4
- * The Story branch is still alive on `origin` so the PR can land; the
5
- * local worktree is no longer needed once the PR is open. Reap is
6
- * best-effort: any failure is logged loudly and the close result still
7
- * reports success because the operator can clean stale worktrees out of
8
- * band.
9
- *
10
- * **Report what happened, not what was attempted** (Story #4539). This
11
- * phase used to set `worktreeReaped = true` and log "🧹 Reaped worktree"
12
- * on any non-throwing call — without reading the returned envelope. Since
13
- * `reap` signals refusal by *returning* `{ removed: false, reason }`
14
- * rather than throwing, and a v2-era precondition refused every
15
- * `story-<id>` worktree outright, the result was that no close ever
16
- * actually reaped and every close said it did. Best-effort means the close
17
- * still succeeds on refusal; it does not mean the close may claim an
18
- * outcome it never checked.
2
+ * phases/worktree-reap.js — best-effort reap of the per-Story worktree once
3
+ * the PR is open. `reap` refuses by RETURNING `{ removed: false }`, so report
4
+ * what happened, never merely that the call did not throw.
19
5
  */
20
6
 
21
7
  import { Logger } from '../../../Logger.js';
22
8
  import { WorktreeManager as DefaultWorktreeManager } from '../../../worktree-manager.js';
23
9
 
24
10
  /**
25
- * Reap the worktree for a standalone Story when isolation is enabled and
26
- * `reapOnSuccess` is not explicitly disabled.
27
- *
28
11
  * @param {{
29
12
  * cwd: string,
30
13
  * storyId: number,
@@ -56,20 +39,9 @@ export async function reapWorktreePhase({
56
39
  error: (m) => Logger.error(`[single-story-close] ${m}`),
57
40
  },
58
41
  });
59
- // Deliberately NO base ref. This phase runs BEFORE the merge (see
60
- // `../runner.js` — reap precedes the confirm phase), so "is this work
61
- // integrated into the base?" is the wrong question: the answer is
62
- // always no, and supplying a ref would activate `isSafeToRemove`'s
63
- // merge-reachability gate and refuse every reap with
64
- // `unmerged-commits` — trading one always-refuse precondition for
65
- // another.
66
- //
67
- // What actually makes the reap safe here is that close has already
68
- // pushed `story-<id>` to origin and opened the PR, so the work is
69
- // durable off-machine; and `isSafeToRemove` still refuses a dirty
70
- // tree (`uncommitted-changes`), which is the check that protects
71
- // unsaved work. Refusal is signalled by the returned envelope rather
72
- // than by throwing — so read it.
42
+ // NO base ref: this runs before the merge, so a merge-reachability
43
+ // check would refuse every reap. Safe because the work is pushed, and
44
+ // a dirty tree is still refused.
73
45
  const result = await wm.reap(storyId);
74
46
  worktreeReaped = result?.removed === true;
75
47
  if (worktreeReaped) {