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,43 +1,16 @@
1
1
  // .agents/scripts/lib/source-text/strip-js-comments.js
2
2
  /**
3
- * The one string-literal-aware JavaScript comment stripper.
3
+ * The one string-literal-aware JS comment stripper, for guards that grep for
4
+ * a pattern in real code (so a guard's own rationale cannot satisfy it).
4
5
  *
5
- * Several guards in this repository grep source text for a pattern that must
6
- * appear in real code rather than in a docblock — a CLI citation, an import
7
- * specifier, a schema path. Each grew its own stripper, and the four
8
- * implementations disagreed on what a stripped block comment leaves behind:
9
- * one preserved newlines only, one deleted the comment outright (losing line
10
- * numbers), one blanked it to whitespace, and one used a regex that did not
11
- * honour string literals at all. A fix to any of them silently missed the
12
- * others, and a guard whose own rationale mentions the pattern it greps for
13
- * can satisfy itself if the stripping is wrong.
14
- *
15
- * **Semantics: comment bodies become equivalent whitespace.** Every character
16
- * of a comment is replaced by a space except newlines, which survive. That is
17
- * the most information-preserving of the four behaviours and the only one that
18
- * is safe for all of them:
19
- *
20
- * - line and column positions are unchanged, so a guard can report a
21
- * `file:line` that matches the original source;
22
- * - a regex looking for code cannot match comment text, because none
23
- * survives;
24
- * - the output is the same length as the input, so byte offsets hold.
25
- *
26
- * String and template literals are copied through verbatim, so a `//` inside a
27
- * URL or a `/*` inside a message is not mistaken for a comment opener. Escape
28
- * sequences are honoured, so an escaped quote does not end the literal early.
29
- *
30
- * An unterminated comment or literal runs to end of input rather than
31
- * throwing: this is a lint helper reading files that may be mid-edit, and a
32
- * crash there would be a worse failure than a slightly over-stripped tail.
33
- *
34
- * Builtins only — no dependency, so the guards that run before a consumer's
35
- * install can use it.
6
+ * Every comment character except newlines becomes a space, so line, column
7
+ * and byte offsets all survive. Literals pass through verbatim, honouring
8
+ * escapes. An unterminated comment or literal runs to end of input rather
9
+ * than throwing — files may be mid-edit. Builtins only, so it runs before a
10
+ * consumer's install.
36
11
  */
37
12
 
38
13
  /**
39
- * Replace every non-newline character of `text` with a space.
40
- *
41
14
  * @param {string} text
42
15
  * @returns {string}
43
16
  */
@@ -46,12 +19,9 @@ function blank(text) {
46
19
  }
47
20
 
48
21
  /**
49
- * Index just past the string or template literal opening at `start`.
50
- * Runs to end of input when the literal is never closed.
51
- *
52
22
  * @param {string} text
53
23
  * @param {number} start - index of the opening quote
54
- * @returns {number}
24
+ * @returns {number} index just past the literal, or end of input.
55
25
  */
56
26
  function endOfLiteral(text, start) {
57
27
  const quote = text[start];
@@ -69,9 +39,6 @@ function endOfLiteral(text, start) {
69
39
  }
70
40
 
71
41
  /**
72
- * Strip JavaScript comments, replacing their bodies with equivalent
73
- * whitespace so line numbers, columns and byte offsets all survive.
74
- *
75
42
  * @param {string} source - JavaScript source text. Nullish is treated as empty.
76
43
  * @returns {string} the source with every comment body blanked to whitespace
77
44
  */
@@ -1,39 +1,16 @@
1
- // .agents/scripts/lib/stdio-flush.js
2
1
  /**
3
- * Stdio drain helper (Story #4783).
4
- *
5
- * `process.stdout` / `process.stderr` are only synchronous when they point at
6
- * a TTY or a regular file. On a **pipe** — every `cmd | consumer`, every
7
- * `child_process` capture, every `$(...)` substitution — Node writes
8
- * asynchronously once the 64 KiB kernel pipe buffer fills: `write()` returns
9
- * `false` and the remaining bytes sit in the stream's internal queue until the
10
- * reader drains it.
11
- *
12
- * `process.exit()` does not wait for that queue. Anything still buffered when
13
- * the process terminates is discarded, so a CLI that emits more than a pipe
14
- * buffer's worth of output and then exits eagerly silently truncates — the
15
- * exit code still reads green, and the consumer parses a half-written
16
- * envelope. `runAsCli` is the shared boundary where that used to happen for
17
- * every `.agents/scripts` entry point.
18
- *
19
- * The fix is to stop exiting eagerly (set `process.exitCode` and let the loop
20
- * drain naturally). This helper is the belt-and-braces half: an explicit await
21
- * on the queued bytes, so the flush is complete before the CLI's last frame
22
- * unwinds even when something further out terminates the process.
2
+ * Stdio drain helper. On a pipe, stdout/stderr write asynchronously once the
3
+ * kernel buffer fills, and `process.exit()` discards the queue — a green exit
4
+ * with a truncated envelope. CLIs set `exitCode` instead of exiting; this
5
+ * explicitly awaits the queued bytes as the second guard.
23
6
  *
24
7
  * @module stdio-flush
25
8
  */
26
9
 
27
10
  /**
28
- * Await the point at which one writable stream's queued bytes have been handed
29
- * to the OS. Resolves immediately when the stream has nothing queued, is not
30
- * writable, or is not a stream at all — a flush must never be the reason a
31
- * process hangs.
32
- *
33
- * Both settle paths are covered: the zero-length `write()` callback (which
34
- * fires after every previously queued chunk, since writes are ordered) and the
35
- * `'drain'` event (which fires when a backed-up stream empties). Whichever
36
- * lands first resolves; the other is detached.
11
+ * Resolve once queued bytes reach the OS, via whichever of the ordered empty
12
+ * `write()` callback or `'drain'` lands first. Resolves immediately for
13
+ * anything not flushable — a flush must never hang a process.
37
14
  *
38
15
  * @param {NodeJS.WritableStream & { writableLength?: number, writableEnded?: boolean, destroyed?: boolean }} [stream]
39
16
  * @returns {Promise<void>}
@@ -52,18 +29,14 @@ function drainStream(stream) {
52
29
  resolve();
53
30
  };
54
31
  stream.once?.('drain', done);
55
- // The write callback fires once this (empty) chunk — and therefore every
56
- // chunk queued ahead of it — has been flushed to the underlying handle.
57
32
  stream.write('', done);
58
33
  });
59
34
  }
60
35
 
61
36
  /**
62
- * Await the drain of the process's stdio streams. Never rejects: a stream that
63
- * errored, closed, or was never writable resolves as already-flushed.
37
+ * Never rejects.
64
38
  *
65
- * @param {Array<NodeJS.WritableStream|undefined>} [streams] Defaults to
66
- * `[process.stdout, process.stderr]`.
39
+ * @param {Array<NodeJS.WritableStream|undefined>} [streams]
67
40
  * @returns {Promise<void>}
68
41
  */
69
42
  export async function flushStdio(streams = [process.stdout, process.stderr]) {
@@ -1,26 +1,8 @@
1
1
  /**
2
- * lib/story-adjacency.js — the single story-level adjacency builder.
3
- *
4
- * Both pre-v2 Epic wave wrappers and the v2 `/mandrel-deliver` ready-set path bottom out in the shared
5
- * `lib/Graph.js` kernel (`detectCycle` / `assignLayers` / `computeWaves`),
6
- * but each historically re-implemented the step that turns a list of Story
7
- * records into the `Map<storyId, number[]>` adjacency the kernel consumes.
8
- * This module is now the one home for that step; the live consumer is:
9
- *
10
- * - `lib/wave-runner/ready-set.js` (`planReadySet`, the path-agnostic
11
- * continuous scheduler the `stories-wave-tick.js` adapter dispatches through)
12
- * - `stories-wave-tick.js` (for cycle detection, before delegating
13
- * selection to `planReadySet`)
14
- *
15
- * (Pre-v2: `epic-runner/phases/build-wave-dag.js` and `dispatch-pipeline.js`
16
- * also called here; both entry seams were deleted.)
17
- *
18
- * Dependency source order (must stay aligned with `manifest-builder.js` and
19
- * `helpers/deliver-story.md` so planning and runtime scheduling never disagree):
20
- * 1. Canonical: `blocked by #NNN` / `depends on #NNN` parsed from the
21
- * Story body via `parseBlockedBy` (the same parser planning uses).
22
- * 2. Fallback: an explicit `dependencies` (ticket shape) or
23
- * `dependsOn` (operator-DAG shape) array on the Story record.
2
+ * The single Story-records → `Map<storyId, number[]>` adjacency builder for
3
+ * the `lib/Graph.js` kernel. Dependency sources must match planning
4
+ * (`manifest-builder.js`) so scheduling never disagrees: body `blocked by` /
5
+ * `depends on` refs, unioned with a `dependencies` / `dependsOn` array.
24
6
  *
25
7
  * @module lib/story-adjacency
26
8
  */
@@ -28,28 +10,14 @@
28
10
  import { parseBlockedBy } from './dependency-parser.js';
29
11
 
30
12
  /**
31
- * Build a story-level adjacency map (`Map<storyId, dependencyIds[]>`)
32
- * from an ordered list of Story records.
33
- *
34
- * Each record contributes one adjacency entry keyed by
35
- * `Number(record.id ?? record.number)`. Dependencies are the deduped
36
- * union of body-parsed `blocked by` references and the record's
37
- * explicit `dependencies` / `dependsOn` array, with self-edges and
38
- * non-integer ids always dropped.
13
+ * Self-edges and non-integer ids are always dropped.
39
14
  *
40
15
  * @param {Array<{id?: number|string, number?: number, body?: string,
41
16
  * dependencies?: Array<number|string>, dependsOn?: Array<number|string>}>} stories
42
- * Story records (live ticket payloads, fixture tickets, or operator
43
- * DAG nodes).
44
17
  * @param {object} [opts]
45
- * @param {boolean} [opts.dropForeign=false] When `false` (the v2 default,
46
- * matching the `/mandrel-deliver` path — `stories-wave-tick.js` and the
47
- * `planReadySet` core), the operator-DAG contract is preserved: a
48
- * dependency on an id absent from the input is treated as not-yet-done
49
- * and withholds the dependent until it completes. When `true` (the
50
- * pre-v2 Epic-scoped-wrapper semantics), edges pointing at ids outside
51
- * the supplied story set are dropped so the DAG stays closed over the
52
- * scheduled set.
18
+ * @param {boolean} [opts.dropForeign=false] Default keeps edges to ids absent
19
+ * from the input (treated as not-yet-done, withholding the dependent);
20
+ * `true` drops them so the DAG is closed over the supplied set.
53
21
  * @returns {Map<number, number[]>}
54
22
  */
55
23
  export function buildStoryAdjacency(stories, { dropForeign = false } = {}) {
@@ -1,73 +1,29 @@
1
1
  /**
2
- * body-format-lints.js — SSOT for the deterministic body-format lints that can
3
- * REJECT an authored Story body at persist time, plus the mechanical auto-fix
4
- * inference a failing dry-run surfaces (Story #4684).
2
+ * body-format-lints.js — SSOT for the deterministic lints that can reject an
3
+ * authored Story body at persist time (rendered into the story-author prompt
4
+ * so a first draft is lint-clean), plus the mechanical `## Changes` fix-it.
5
5
  *
6
- * The problem this closes: deterministic format rules (structured `## Changes`
7
- * bullet shape, non-empty sections) used to be discovered only as persist
8
- * dry-run failures — every miss cost a full re-author round-trip at
9
- * resident-context prices. This module is the single home for two remedies:
10
- *
11
- * 1. `BODY_FORMAT_LINTS` — the enumerated rejecting lints, each carrying a
12
- * concrete good/bad example. `templates/decomposer-prompts.js` renders
13
- * them into the story-author system prompt so the first draft is
14
- * lint-clean by construction; a test enumerates the registry against the
15
- * rendered prompt (Story #4684 AC-1).
16
- * 2. `suggestPathEntryFix` — the mechanical rewrite. `story-body.js`
17
- * (`parsePathEntry`) and `task-body-validator.js`
18
- * (`collectChangesErrors`) call it so a failing lint emits the corrected
19
- * form ready to paste rather than a bare reject (AC-2), and the persist
20
- * dry-run applies the same salvage for real (Story #5312,
21
- * `plan-persist/changes-repair.js`).
22
- *
23
- * Story #5312 deleted the `verify-tier-suffix` / `verify-manual-reason` lints
24
- * with the tier suffix itself: a `verify[]` entry is any command, and the
25
- * `manual:<reason>` escape is gone with the rule it escaped. Story #5342
26
- * deleted `verify-non-empty`: an empty `verify[]` is a dry-run warning, not a
27
- * refusal, so it is no longer a rejecting lint — this registry carries only
28
- * the rules that still refuse.
29
- *
30
- * Import hygiene: this module imports only the cycle-free
31
- * `file-assumption-enum.js` leaf. It must NOT import `story-body.js` or
32
- * `task-body-validator.js` — both import this module, and either back-edge
33
- * would introduce a cycle (see the note in `file-assumption-enum.js`).
6
+ * Imports only the cycle-free `file-assumption-enum.js` leaf: story-body.js
7
+ * and task-body-validator.js both import this module, so importing either
8
+ * back would create a cycle.
34
9
  */
35
10
 
36
11
  import { FILE_ASSUMPTION_VALUES } from '../orchestration/file-assumption-enum.js';
37
12
 
38
- /**
39
- * The default assumption a mechanical `## Changes` auto-fix proposes. Most
40
- * bare-path bullets an author drops are in-place edits, so `refactors-existing`
41
- * is the safe default — the fix-it text tells the author to switch it to
42
- * `creates` / `deletes` when the edit is net-new or a removal.
43
- */
13
+ // Most bare-path bullets are in-place edits; the fix-it text tells the author
14
+ // to switch to creates/deletes when needed.
44
15
  const DEFAULT_SUGGESTED_ASSUMPTION = 'refactors-existing';
45
16
 
46
17
  /**
47
- * The bare-path bullet grammar (Story #5342, widened by Story #5361) — the
48
- * **one** definition of what a `## Changes` / `## References` bullet has to
49
- * look like to be a path rather than prose.
50
- *
51
- * It lives here, in the cycle-free lint leaf, because two consumers need the
52
- * identical judgment and neither may import the other: the story-body parser
53
- * (`story-body.js#parsePathEntry`) and the persist repair pass
54
- * (`plan-persist/changes-repair.js`). They carried a copy each, and the
55
- * copies drifted.
56
- *
57
- * A bullet is a path when it is a single token git could track: any run of
58
- * non-whitespace, optionally wrapped in a matched pair of backticks. That
59
- * admits the shapes the earlier `[\w@*-]*[/.][\w@./*-]+` class refused
60
- * outright — route-segment paths (`app/[slug]/page.tsx`,
61
- * `app/(marketing)/page.tsx`, `src/routes/$id.svelte`) and extensionless
62
- * top-level files (`Makefile`) — while still refusing prose, since
63
- * whitespace is the one thing that reliably marks a sentence.
18
+ * The one definition of a path bullet, shared by the story-body parser and
19
+ * the persist repair pass (which cannot import each other). Any single
20
+ * non-whitespace token, optionally backtick-wrapped — this admits route
21
+ * segments (`app/[slug]/page.tsx`) and extensionless files (`Makefile`) while
22
+ * whitespace still marks prose.
64
23
  */
65
24
  const BARE_PATH_TOKEN_RE = /^(?:`([^\s`]+)`|([^\s`]+))$/;
66
25
 
67
26
  /**
68
- * Read the bare path token out of a bullet, or `null` when the bullet is not
69
- * one single token.
70
- *
71
27
  * @param {unknown} raw
72
28
  * @returns {string|null} The path, with any wrapping backticks peeled.
73
29
  */
@@ -78,10 +34,8 @@ export function matchBarePathToken(raw) {
78
34
  }
79
35
 
80
36
  /**
81
- * Whether a rejected bullet is prose — it carries whitespace, so no path
82
- * grammar could ever have admitted it. The counterpart failure is a
83
- * single token that still names no usable path; the two get different
84
- * refusals because they need different fixes.
37
+ * Prose (carries whitespace) versus a single non-path token — distinct
38
+ * failures with distinct fixes.
85
39
  *
86
40
  * @param {unknown} raw
87
41
  * @returns {boolean}
@@ -90,33 +44,23 @@ export function isProseBullet(raw) {
90
44
  return typeof raw === 'string' && /\s/.test(raw.trim());
91
45
  }
92
46
 
93
- // A token that looks like a file path / glob / module id: it carries a `/` or a
94
- // `.`-separated segment. Deliberately loose — the suggestion is best-effort, and
95
- // a false positive only produces an unhelpful (still-valid) fix-it string.
47
+ // Deliberately loose: a false positive only yields an unhelpful fix-it.
96
48
  const PATH_LIKE_RE = /[\w@*-]*[/.][\w@./*-]+/;
97
49
 
98
50
  /**
99
- * Propose the canonical `{ path, assumption }` object form for a `## Changes` /
100
- * `## References` bullet an author wrote as a bare path string (or a humanized
101
- * bullet with a bad assumption). Returns `null` when no path-shaped token can
102
- * be salvaged.
103
- *
104
- * The returned string is inline-JSON that round-trips cleanly back through the
105
- * story-body parser, so it is paste-ready.
51
+ * Paste-ready inline-JSON `{ path, assumption }` for a rejected bullet, or
52
+ * `null` when no path-shaped token can be salvaged.
106
53
  *
107
54
  * @param {unknown} raw
108
55
  * @returns {string|null} e.g. `{"path":"src/app.js","assumption":"refactors-existing"}`.
109
56
  */
110
57
  export function suggestPathEntryFix(raw) {
111
58
  if (typeof raw !== 'string') return null;
112
- // Strip a leading markdown bullet marker.
113
59
  let s = raw
114
60
  .trim()
115
61
  .replace(/^[-*]\s+/, '')
116
62
  .trim();
117
- // Take the segment before any humanized "— assumption" tail.
118
63
  s = s.split('—')[0].trim();
119
- // Peel surrounding backticks / quotes.
120
64
  s = s
121
65
  .replace(/^[`'"]+/, '')
122
66
  .replace(/[`'"]+$/, '')
@@ -126,21 +70,16 @@ export function suggestPathEntryFix(raw) {
126
70
  }
127
71
 
128
72
  /**
129
- * A single deterministic body-format lint the persist path enforces.
130
- *
131
73
  * @typedef {object} BodyFormatLint
132
74
  * @property {string} id Stable identifier (also the prompt anchor).
133
- * @property {string} summary One-line statement of the requirement.
134
- * @property {string} badExample A form the lint rejects.
135
- * @property {string} goodExample The lint-clean form to author instead.
75
+ * @property {string} summary
76
+ * @property {string} badExample
77
+ * @property {string} goodExample
136
78
  * @property {boolean} autoFixable Whether a failing dry-run emits a fix-it.
137
79
  */
138
80
 
139
81
  /**
140
- * The enumerated deterministic lints that can reject an authored Story body at
141
- * persist time. Each carries a concrete example so the story-author prompt can
142
- * state the requirement example-first (Story #4684 AC-1). The one `autoFixable`
143
- * lint is the mechanical rewrite the dry-run applies (Story #5312).
82
+ * Only rules that still refuse; warnings live elsewhere.
144
83
  *
145
84
  * @type {ReadonlyArray<BodyFormatLint>}
146
85
  */
@@ -1,42 +1,23 @@
1
1
  /**
2
- * footer-block.js — the Story body's `---` footer grammar.
3
- *
4
- * A Story body is prose an operator edits. Its **declared dependency edges**
5
- * are not: they live in a footer block, in one exact line shape, and that
6
- * distinction is the whole safety property. An unanchored whole-body scan
7
- * (what `parseBlockedBy` used to be) turned any sentence that merely mentioned
8
- * a blocker into a real dispatch gate — an example, a changelog note, an
9
- * acceptance criterion quoting the phrase — and withheld the Story until an
10
- * unrelated issue closed.
11
- *
12
- * This module is the single home for that grammar. Both readers go through it:
13
- * `lib/story-body/story-body.js` (what a body round-trips as `depends_on`) and
14
- * `lib/dependency-parser.js` (what gates dispatch). Sharing one implementation
15
- * is what keeps them from drifting apart into two different answers about the
16
- * same body.
2
+ * footer-block.js — the Story body's `---` footer grammar, shared by the body
3
+ * parser and the dispatch-edge parser so they cannot disagree. Dependency
4
+ * edges are declared only by an exact line in the footer; an unanchored body
5
+ * scan turned any sentence mentioning a blocker into a real dispatch gate.
17
6
  *
18
7
  * @module lib/story-body/footer-block
19
8
  */
20
9
 
21
- /**
22
- * The one line shape that declares a dependency edge: `blocked by #N` alone on
23
- * its own line inside the footer block. Anchored at both ends deliberately —
24
- * `depends on #N`, `Blocked by: #N`, and `blocked by #N once X lands` all
25
- * declare nothing.
26
- */
10
+ // Anchored at both ends: `Blocked by: #N` or `blocked by #N once X` declare
11
+ // nothing.
27
12
  const FOOTER_BLOCKED_BY_LINE_RE = /^blocked by\s+(#\d+)$/i;
28
13
 
29
- /** A `---` rule on its own line. */
30
14
  const FOOTER_RULE_RE = /^---\s*$/;
31
15
 
32
- /** Footer keys that qualify a bare `---` rule as the footer separator. */
33
16
  const FOOTER_KEY_RE = /^(parent:|Epic:|blocked by)/im;
34
17
 
35
18
  /**
36
- * True when line `index` opens the footer block: a `---` on its own line whose
37
- * remaining lines start with a recognised footer key (`parent:`, `Epic:`,
38
- * `blocked by`). A `---` opening a thematic break or a table mid-body is
39
- * therefore not mistaken for the footer.
19
+ * A `---` counts only when later lines start with a footer key, so a mid-body
20
+ * thematic break is not mistaken for the footer.
40
21
  *
41
22
  * @param {string} line
42
23
  * @param {string[]} lines
@@ -49,16 +30,8 @@ export function isFooterSeparator(line, lines, index) {
49
30
  }
50
31
 
51
32
  /**
52
- * Return the footer block of a body — everything after the footer separator —
53
- * or `''` when the body carries no footer.
54
- *
55
- * Module-private: `parseFooterBlockedByIds` is its only caller. The body
56
- * parser splits its own sections and reaches for `parseFooterBlockedByRefs`
57
- * with the footer it already has, so exporting this would ship a symbol with
58
- * no consumer.
59
- *
60
33
  * @param {string} body
61
- * @returns {string}
34
+ * @returns {string} everything after the footer separator, or ''.
62
35
  */
63
36
  function extractFooterBlock(body) {
64
37
  if (!body) return '';
@@ -68,11 +41,8 @@ function extractFooterBlock(body) {
68
41
  }
69
42
 
70
43
  /**
71
- * Extract the `blocked by #N` refs from an already-split footer block, as the
72
- * `"#N"` strings a Story body's `depends_on` field round-trips.
73
- *
74
44
  * @param {string} footerBlock
75
- * @returns {string[]}
45
+ * @returns {string[]} `"#N"` refs, as `depends_on` round-trips them.
76
46
  */
77
47
  export function parseFooterBlockedByRefs(footerBlock) {
78
48
  if (!footerBlock) return [];
@@ -83,11 +53,8 @@ export function parseFooterBlockedByRefs(footerBlock) {
83
53
  }
84
54
 
85
55
  /**
86
- * Parse a body's declared blocker issue **numbers**, deduped — the
87
- * dispatch-edge view of the same footer the body parser reads.
88
- *
89
56
  * @param {string} body
90
- * @returns {number[]}
57
+ * @returns {number[]} deduped blocker issue numbers.
91
58
  */
92
59
  export function parseFooterBlockedByIds(body) {
93
60
  const ids = parseFooterBlockedByRefs(extractFooterBlock(body)).map((ref) =>