mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,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) =>