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,86 +1,47 @@
1
1
  /**
2
- * plan-critic-conditions.js — the pre-mortem critic's dispatch decision for
3
- * the `/mandrel-plan` critic CLI (Epic #4474 PR6, design §4; narrowed to one
4
- * arm by Story #5312).
5
- *
6
- * The critic is a fresh-context sub-agent dispatch, and the dispatch is
7
- * **conditional**: the dominant plan cost is turns × standing context, and an
8
- * unconditional critic pays a full sub-agent spawn even when it provably has
9
- * nothing to find. This module computes the decision deterministically so
10
- * the workflow never judges its own dispatch condition.
11
- *
12
- * One trigger survives: the **external-dependency probe** (Story #4700),
13
- * which finds an out-of-repo marker in the plan text — a scoped package the
14
- * plan names that no manifest declares, a cross-repo reference, an external
15
- * service prerequisite — so a plan-time discoverable blocker does not reach
16
- * delivery unquestioned (the swarm-os #757 shape). The probe is deliberately
17
- * **conservative**: it matches only explicit markers (npm scoped-package
18
- * specs, `github.com/<owner>/<repo>` URLs, prerequisite-keyword-anchored
19
- * endpoints), never NLP guesswork.
20
- *
21
- * Story #5312 deleted the two triggers that sat beside it — the ticket count
22
- * reaching half a `maxTickets` budget, and a `planning.riskHeuristics` phrase
23
- * matching the plan text — with the constants they read. The count trigger
24
- * was unreachable at the default N=1; the phrase list was empty in every
25
- * consumer that resolved it. The consolidation critic went with them: its
26
- * one deterministic input was a `## Delivery Slicing` table no Story carries.
27
- *
28
- * Under-firing risk (design PR6 note): the persist validators are unchanged
29
- * hard gates; every skip decision this module produces is logged to the
30
- * plan-metrics ledger (`appendCriticSkip`) by the caller so under-firing is
31
- * auditable.
32
- *
33
- * Pure, synchronous, no I/O. The single caller is `plan-critics-evaluate.js`,
34
- * driven by the `plan-critics.js` CLI the operator runs between Author and
35
- * Persist when they want the critic; the CLI owns reading the authored
36
- * artifacts and the resolved config.
2
+ * plan-critic-conditions.js — the pre-mortem critic's deterministic dispatch
3
+ * decision. A spawn is costly, so the critic fires only when the
4
+ * external-dependency probe finds an out-of-repo marker a plan-time review
5
+ * could catch. The probe is conservative: explicit markers only, never NLP.
6
+ * Skips are logged by the caller (`appendCriticSkip`) so under-firing is
7
+ * auditable. Pure, synchronous, no I/O.
37
8
  */
38
9
 
39
10
  /**
40
11
  * @typedef {Object} CriticDispatchDecision
41
12
  * @property {'pre-mortem'} critic
42
13
  * @property {boolean} dispatch
43
- * @property {string[]} reasons Why the critic fires — or why it is safe to
44
- * skip. Never empty: a skip's reasons are the audit trail the
45
- * plan-metrics ledger records.
14
+ * @property {string[]} reasons Never empty — a skip's reasons are its audit
15
+ * trail.
46
16
  */
47
17
 
48
18
  /**
49
- * Explicit npm scoped-package marker: `@scope/name`. Requires the leading `@`
50
- * and an interior `/`, so bare GitHub handles (`@dsj1984`) and the
51
- * `@[USERNAME]` operator-handle placeholder never match.
19
+ * `@scope/name`: the interior `/` keeps bare handles and the `@[USERNAME]`
20
+ * placeholder from matching.
52
21
  */
53
22
  const SCOPED_PACKAGE_MARKER = /@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*/gi;
54
23
 
55
- /** Explicit cross-repo marker: a `github.com/<owner>/<repo>` URL. */
56
24
  const GITHUB_REPO_MARKER =
57
25
  /github\.com\/([a-z0-9][a-z0-9._-]*)\/([a-z0-9][a-z0-9._-]*)/gi;
58
26
 
59
27
  /**
60
- * Explicit external-service prerequisite marker: a prerequisite keyword
61
- * followed, within the same clause, by an http(s) endpoint. The keyword gate
62
- * is what keeps casual documentation links from matching — only an endpoint
63
- * named as a precondition counts.
28
+ * A prerequisite keyword then an http(s) endpoint in the same clause; the
29
+ * keyword gate keeps casual doc links from matching.
64
30
  */
65
31
  const SERVICE_PREREQ_MARKER =
66
32
  /\b(?:requires?|required|prerequisite|provision(?:ed|ing)?|depends?\s+on|credentials?\s+for)\b[^.\n]*?\bhttps?:\/\/([a-z0-9][a-z0-9.-]*)/gi;
67
33
 
68
- /** Order-preserving de-duplication. */
69
34
  function uniquePreserveOrder(values) {
70
35
  return [...new Set(values)];
71
36
  }
72
37
 
73
- /** Quote each item for an evidence reason string. */
74
38
  function quoteList(values) {
75
39
  return values.map((v) => `"${v}"`).join(', ');
76
40
  }
77
41
 
78
42
  /**
79
- * Scoped packages named in the plan that no repo manifest declares.
80
- *
81
43
  * @param {string} planText
82
- * @param {string[]} knownPackages - Package specifiers the repo's own
83
- * manifests declare (own name + dependency maps + workspace package names).
44
+ * @param {string[]} knownPackages - Specifiers the repo's own manifests declare.
84
45
  * @returns {string[]}
85
46
  */
86
47
  function matchExternalScopedPackages(planText, knownPackages) {
@@ -97,9 +58,8 @@ function matchExternalScopedPackages(planText, knownPackages) {
97
58
  }
98
59
 
99
60
  /**
100
- * `github.com/<owner>/<repo>` references outside the configured repo. When the
101
- * owner is unknown (no `github.owner` configured) the arm stays silent rather
102
- * than flag every URL as foreign.
61
+ * References outside the configured repo; silent when no owner is configured
62
+ * rather than flag every URL as foreign.
103
63
  *
104
64
  * @param {string} planText
105
65
  * @param {{ owner?: string|null, repo?: string|null }|null} ownerRepo
@@ -125,8 +85,6 @@ function matchCrossRepoRefs(planText, ownerRepo) {
125
85
  }
126
86
 
127
87
  /**
128
- * Endpoints named as prerequisites in the plan text.
129
- *
130
88
  * @param {string} planText
131
89
  * @returns {string[]}
132
90
  */
@@ -139,19 +97,12 @@ function matchExternalServicePrereqs(planText) {
139
97
  }
140
98
 
141
99
  /**
142
- * The external-dependency probe (Story #4700): a conservative, marker-only
143
- * scan of the draft plan text for artifacts outside the current repo that the
144
- * plan depends on. A match is the pre-mortem's dispatch condition; a no-match
145
- * plan skips the critic.
100
+ * Marker-only scan of the plan text for out-of-repo dependencies.
146
101
  *
147
102
  * @param {object} input
148
- * @param {string} [input.planText] - Concatenated plan text (tech spec +
149
- * serialized tickets).
150
- * @param {string[]} [input.knownPackages] - Package specifiers the repo's own
151
- * manifests declare, used to tell an external scoped package from a local one.
152
- * @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo] -
153
- * The configured `github.owner`/`github.repo` a cross-repo reference is
154
- * measured against.
103
+ * @param {string} [input.planText] - Tech spec + serialized tickets.
104
+ * @param {string[]} [input.knownPackages]
105
+ * @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo]
155
106
  * @returns {{ matched: boolean, reasons: string[] }}
156
107
  */
157
108
  export function evaluateExternalDependencyProbe({
@@ -188,18 +139,10 @@ export function evaluateExternalDependencyProbe({
188
139
  }
189
140
 
190
141
  /**
191
- * Decide the pre-mortem dispatch: an external-dependency probe match
192
- * (Story #4700) — the one deterministic trigger left after Story #5312.
193
- *
194
142
  * @param {object} input
195
- * @param {string} [input.planText] - Concatenated plan text the probe
196
- * matches against (tech spec + serialized tickets).
197
- * @param {string[]} [input.knownPackages] - Package specifiers the repo's own
198
- * manifests declare (own name + dependency maps + workspace package names),
199
- * passed to the external-dependency probe.
200
- * @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo] -
201
- * The configured `github.owner`/`github.repo`, passed to the
202
- * external-dependency probe's cross-repo arm.
143
+ * @param {string} [input.planText]
144
+ * @param {string[]} [input.knownPackages]
145
+ * @param {{ owner?: string|null, repo?: string|null }|null} [input.ownerRepo]
203
146
  * @returns {CriticDispatchDecision}
204
147
  */
205
148
  export function evaluatePremortemDispatch({
@@ -1,21 +1,7 @@
1
1
  /**
2
- * plan-critics-evaluate.js — shared critic-dispatch evaluation for the
3
- * collapsed /mandrel-plan flow (#4496 fix 6; pre-mortem only since Story #5312).
4
- *
5
- * One consumer: the `plan-critics.js` CLI, which the operator runs between
6
- * Author and Persist when they want the pre-mortem. The CLI loads the draft
7
- * artifacts, calls this module, prints the verdict as JSON, and records a
8
- * skip on the plan-metrics ledger; the workflow dispatches a fresh-context
9
- * critic sub-agent on a `dispatch: true` verdict and folds the findings into
10
- * a re-author round before persist.
11
- *
12
- * Story #4592 moved that evaluation here from `run-plan-persist.js`, which
13
- * ran it after authoring was finished and immediately before
14
- * `createStoryIssues` — the one point where a `dispatch: true` verdict has
15
- * no re-author loop to route to. Persist no longer evaluates critics; this
16
- * module has exactly one evaluation point.
17
- *
18
- * Pure evaluation: no file I/O, no GitHub calls, no ledger writes — the
2
+ * plan-critics-evaluate.js — the pre-mortem dispatch evaluation for the
3
+ * `plan-critics.js` CLI, run between Author and Persist so a
4
+ * `dispatch: true` verdict still has a re-author loop to route to. Pure: the
19
5
  * caller owns artifact loading and skip recording.
20
6
  *
21
7
  * @module lib/orchestration/plan-critics-evaluate
@@ -24,9 +10,6 @@
24
10
  import { evaluatePremortemDispatch } from './plan-critic-conditions.js';
25
11
 
26
12
  /**
27
- * Resolve the `{ owner, repo }` the external-dependency probe's cross-repo arm
28
- * (Story #4700) measures references against, from the canonical `github` block.
29
- *
30
13
  * @param {object} config
31
14
  * @returns {{ owner: string|null, repo: string|null }}
32
15
  */
@@ -38,23 +21,14 @@ function resolveOwnerRepo(config = {}) {
38
21
  }
39
22
 
40
23
  /**
41
- * Evaluate the pre-mortem critic's dispatch condition over the authored
42
- * planning artifacts: the external-dependency probe (Story #4700) matching an
43
- * out-of-repo marker — a scoped package absent from `knownPackages`, a
44
- * cross-repo `github.com/<owner>/<repo>` reference, or a named external
45
- * service prerequisite.
46
- *
47
24
  * @param {{
48
25
  * techSpecContent: string,
49
26
  * tickets?: Array<object>|null,
50
27
  * config?: object,
51
28
  * knownPackages?: string[],
52
29
  * }} args
53
- * @param {string[]} [args.knownPackages] - Package specifiers the repo's own
54
- * manifests declare, forwarded to the pre-mortem external-dependency probe
55
- * (Story #4700). The caller (the `plan-critics.js` CLI) owns the file I/O
56
- * that gathers them; this module stays pure. Empty when unresolved, which
57
- * only widens what the probe treats as external.
30
+ * @param {string[]} [args.knownPackages] - Specifiers the repo's manifests
31
+ * declare; empty only widens what counts as external.
58
32
  * @returns {{
59
33
  * premortem: { critic: string, dispatch: boolean, reasons: string[] },
60
34
  * }}
@@ -1,57 +1,13 @@
1
1
  /**
2
- * plan-metrics.js — append-only plan-invocation ledger (Epic #4474, PR1).
2
+ * plan-metrics.js — append-only NDJSON ledger of plan CLI invocations
3
+ * (`{ v, cli, mode, epicId, startedAt, endedAt, durationMs, ok }`) plus
4
+ * `kind: 'critic-skip'` records. Readers key on `kind`, never on absent
5
+ * fields. Counts CLI invocations from the parent session, not turns.
3
6
  *
4
- * The `/mandrel-plan` collapse (#4474) is measured, not asserted: before any pipeline
5
- * phase is removed, every plan CLI invocation stamps an entry/exit record so
6
- * the current 12-phase baseline is captured on disk. Each record is one
7
- * newline-terminated JSON line appended to
8
- * `temp/run-<id>/plan-metrics.json` (per-Epic plan CLIs) or
9
- * `temp/standalone/plan-metrics.json` (Epic-less plan and healthcheck runs —
10
- * same standalone routing the friction ledger uses).
11
- *
12
- * Record shape (v1):
13
- *
14
- * ```json
15
- * { "v": 1, "cli": "plan-context", "mode": "emit",
16
- * "epicId": 4474, "startedAt": "...", "endedAt": "...",
17
- * "durationMs": 1234, "ok": true }
18
- * ```
19
- *
20
- * Critic-skip records (Epic #4474 PR6 — additive `kind` extension): the
21
- * conditional-critic layer logs every skip decision so under-firing is
22
- * auditable from the same stream:
23
- *
24
- * ```json
25
- * { "v": 1, "kind": "critic-skip", "cli": "plan-critics",
26
- * "critic": "pre-mortem", "reasons": ["..."], "epicId": 4474,
27
- * "at": "..." }
28
- * ```
29
- *
30
- * Records without a `kind` field are invocation records (the PR1 shape);
31
- * readers key on `kind`, never on the absence of other fields.
32
- *
33
- * Attribution note (#4474 PR1 risk register): these records count **CLI
34
- * invocations from the parent session's perspective**. Sub-agent sessions
35
- * spawned by the workflow do not write here; they are attributed separately
36
- * by the host's session accounting. Do not read `invocations` as "turns".
37
- *
38
- * Robustness contract (mirrors `lib/observability/signals-writer.js`):
39
- * - **Best-effort writes.** A failed append is a missing metric, not a
40
- * failed plan phase — fs errors are swallowed after a `Logger.warn`.
41
- * - **No buffering / rotation.** The append tail (open → append one line →
42
- * rotate at the byte cap → close) is owned by the shared
43
- * `lib/observability/metrics-ledger.js` module (Story #4712); every
44
- * appender here routes through it. The close-domain findings-yield
45
- * entry point (Story #4699) lives there too, so the story-close review
46
- * spine never imports this plan-domain module.
47
- * - **Malformed-line tolerance on read.** The reader skips unparseable
48
- * lines (counting them) instead of throwing, so a torn write can never
49
- * wedge the analyzer.
50
- *
51
- * `plan-metrics.json` is intentionally NOT in
52
- * `lib/plan-phase-cleanup.js#PHASE_TEMP_BASENAMES`: the ledger must survive
53
- * phase cleanup so the whole plan run (spec → decompose → healthcheck) is
54
- * visible in one stream.
7
+ * Writes are best-effort (a failed append is a missing metric, never a failed
8
+ * phase) via the shared `metrics-ledger.js` tail; reads skip and count
9
+ * malformed lines. The file deliberately survives phase cleanup so a whole
10
+ * plan run is one stream.
55
11
  */
56
12
 
57
13
  import fs from 'node:fs/promises';
@@ -63,13 +19,10 @@ import {
63
19
  planMetricsPath,
64
20
  } from '../observability/metrics-ledger.js';
65
21
 
66
- /** Record kind for a logged critic skip decision (Epic #4474 PR6). */
67
22
  export const PLAN_METRICS_KIND_CRITIC_SKIP = 'critic-skip';
68
23
 
69
24
  /**
70
- * Append one invocation record to the ledger. Best-effort: returns `false`
71
- * (after a `Logger.warn`) instead of throwing on any fs failure, so metric
72
- * capture can never fail a plan phase.
25
+ * Append one invocation record. Best-effort: warns and returns `false`.
73
26
  *
74
27
  * @param {{
75
28
  * cli: string,
@@ -126,12 +79,8 @@ export async function appendPlanMetric(entry, config, opts = {}) {
126
79
  }
127
80
 
128
81
  /**
129
- * Append one critic-skip audit record (Epic #4474 PR6). Every conditional
130
- * critic that decides NOT to dispatch logs the decision here — with the
131
- * deterministic reasons — so an under-firing critic layer (a distorted
132
- * plan sailing through) is auditable after the fact. Best-effort with the
133
- * same contract as `appendPlanMetric`: a failed append can never fail the
134
- * plan step.
82
+ * Append a critic-skip record with its reasons, so an under-firing critic
83
+ * layer is auditable. Best-effort like `appendPlanMetric`.
135
84
  *
136
85
  * @param {{
137
86
  * critic: string,
@@ -181,10 +130,8 @@ export async function appendCriticSkip(entry, config, opts = {}) {
181
130
  }
182
131
 
183
132
  /**
184
- * Wrap one plan CLI invocation: stamp `startedAt`, run `fn`, stamp
185
- * `endedAt` + `ok`, append the record, and re-throw the original error on
186
- * failure. The metric write itself is best-effort and can never mask or
187
- * replace the wrapped function's outcome.
133
+ * Run `fn` and record the invocation; the metric write never masks `fn`'s
134
+ * outcome.
188
135
  *
189
136
  * @template T
190
137
  * @param {{ cli: string, mode: string, epicId?: number|null, config?: object }} meta
@@ -216,9 +163,7 @@ export async function recordPlanInvocation(meta, fn) {
216
163
  }
217
164
 
218
165
  /**
219
- * Read the active ledger generation. Missing file → `{ entries: [],
220
- * malformedLines: 0, missing: true }`. Malformed lines are skipped and
221
- * counted, never thrown.
166
+ * Read the active ledger generation; malformed lines are counted, not thrown.
222
167
  *
223
168
  * @param {number|null} epicId
224
169
  * @param {object} [config]
@@ -256,22 +201,18 @@ export async function readPlanMetrics(epicId, config) {
256
201
  }
257
202
 
258
203
  /**
259
- * Roll a read ledger up into the compact summary surfaced by the persist
260
- * summary. (Story #4545 deleted its second consumer, `analyze-execution.js`,
261
- * with the execution-analysis surface.) Returns `null` when there is nothing
262
- * to summarize (missing ledger or zero parseable entries).
263
- *
264
- * Critic-skip records (kind: 'critic-skip') are counted separately from
265
- * invocations — `criticSkips` totals them and `criticSkipsByCritic` breaks
266
- * them down, so the skip-audit trail is visible in the persist summary
267
- * without inflating the turns-per-plan proxy.
268
- *
269
- * Pass `opts.since` (an ISO-8601 instant) to scope the roll-up to one plan
270
- * run (Story #4541). The Epic-less ledger at `temp/standalone/` is shared by
271
- * every plan the repo has ever run, so an unfiltered summary reported
272
- * lifetime totals under a line the reader takes to describe the invocation
273
- * in front of them. Records are timestamped `startedAt` (invocations) or
274
- * `at` (critic skips); either at-or-after `since` is in scope.
204
+ * @param {object} entry
205
+ * @returns {string|null}
206
+ */
207
+ function recordTimestamp(entry) {
208
+ const stamp = typeof entry?.kind === 'string' ? entry.at : entry?.startedAt;
209
+ return typeof stamp === 'string' ? stamp : null;
210
+ }
211
+
212
+ /**
213
+ * Roll a ledger up for the persist summary; `null` when empty. Critic skips
214
+ * are tallied apart from invocations. `opts.since` (ISO-8601) scopes to one
215
+ * run — the standalone ledger is shared by every plan ever run.
275
216
  *
276
217
  * @param {{ entries: object[], malformedLines?: number }} ledger
277
218
  * @param {{ since?: string|null }} [opts]
@@ -289,23 +230,10 @@ export async function readPlanMetrics(epicId, config) {
289
230
  * malformedLines: number,
290
231
  * }|null}
291
232
  */
292
- /**
293
- * Timestamp a ledger record is ordered by: `startedAt` for invocation
294
- * records, `at` for kinded records (critic-skip, findings-yield).
295
- *
296
- * @param {object} entry
297
- * @returns {string|null}
298
- */
299
- function recordTimestamp(entry) {
300
- const stamp = typeof entry?.kind === 'string' ? entry.at : entry?.startedAt;
301
- return typeof stamp === 'string' ? stamp : null;
302
- }
303
-
304
233
  export function summarizePlanMetrics(ledger, opts = {}) {
305
234
  const all = ledger?.entries ?? [];
306
235
  const since = typeof opts.since === 'string' ? opts.since : null;
307
- // ISO-8601 UTC strings sort lexicographically in time order, so a string
308
- // compare is a correct (and allocation-free) instant compare here.
236
+ // ISO-8601 UTC strings compare correctly as strings.
309
237
  const entries =
310
238
  since === null
311
239
  ? all
@@ -333,9 +261,7 @@ export function summarizePlanMetrics(ledger, opts = {}) {
333
261
  continue;
334
262
  }
335
263
  if (typeof e.kind === 'string') {
336
- // Any other kinded record (e.g. `findings-yield`, Story #4699) is not
337
- // an invocation — readers key on `kind`, never on absent fields, so it
338
- // must not inflate the invocation/failure tallies.
264
+ // Other kinded records (e.g. `findings-yield`) are not invocations.
339
265
  continue;
340
266
  }
341
267
  invocationEntries.push(e);
@@ -375,11 +301,6 @@ export function summarizePlanMetrics(ledger, opts = {}) {
375
301
  }
376
302
 
377
303
  /**
378
- * Render the one-line human summary (snapshot-tested). Example:
379
- *
380
- * `plan-metrics: 3 invocation(s) (1 failed) across plan-context ×1,
381
- * plan-critics ×1, plan-persist ×1 — span 12m 3s`
382
- *
383
304
  * @param {ReturnType<typeof summarizePlanMetrics>} summary
384
305
  * @returns {string}
385
306
  */
@@ -409,7 +330,7 @@ export function renderPlanMetricsSummaryLine(summary) {
409
330
  }
410
331
 
411
332
  /**
412
- * Compact duration formatter: `45s`, `12m 3s`, `2h 5m`.
333
+ * `45s`, `12m 3s`, `2h 5m`.
413
334
  *
414
335
  * @param {number} ms
415
336
  * @returns {string}
@@ -1,19 +1,9 @@
1
1
  /**
2
- * plan-navigation.js — shared navigability helpers for the persist-side
3
- * draft reachability check (`plan-reachability.js`).
4
- *
5
- * Extracted from the retired `epic-plan-healthcheck.js` so the live
6
- * draft-ticket scan owns its own mechanics without pulling in the
7
- * deleted post-plan healthcheck CLI.
2
+ * plan-navigation.js — navigability helpers for `plan-reachability.js`.
8
3
  */
9
4
 
10
5
  /**
11
- * Resolve the navigation config that drives the reachability check.
12
- *
13
- * The check is opt-in: a consumer that has not configured
14
- * `planning.navigation.routeGlobs` gets a silent no-op. The nav-registry
15
- * token list is what a route-adding Story is expected to reference
16
- * somewhere in its body or `## Acceptance` section.
6
+ * Opt-in: no `planning.navigation.routeGlobs` means a silent no-op.
17
7
  *
18
8
  * @param {object} config Resolved `.agentrc.json`.
19
9
  * @returns {{ routeGlobs: string[], navRegistry: string[] }}
@@ -31,20 +21,15 @@ export function resolveNavConfig(config) {
31
21
  }
32
22
 
33
23
  /**
34
- * Translate a route glob (`pages/**`, `app/**\/route.ts`) into a RegExp that
35
- * matches a path string. Supports `**` (any depth, including `/`), `*` (any
36
- * run of non-separator chars), and `?` (single non-separator char). All other
37
- * characters are matched literally.
24
+ * `**` any depth, `*` any non-separator run, `?` one non-separator char;
25
+ * everything else literal.
38
26
  *
39
27
  * @param {string} glob
40
28
  * @returns {RegExp}
41
29
  */
42
30
  export function globToRegExp(glob) {
43
- // Collapse adjacent `**` segments before compiling. `**/**` and `***` both
44
- // mean "any depth", but compiling them literally emits adjacent `.*` runs
45
- // (`.*/.*` / `.*.*`) that backtrack catastrophically on a long non-matching
46
- // path. Collapsing to a single `**` preserves semantics and keeps the
47
- // matcher linear (ReDoS hardening).
31
+ // Collapse `**/**` and `***` to `**`: adjacent `.*` runs backtrack
32
+ // catastrophically on long non-matching paths (ReDoS).
48
33
  const normalized = glob
49
34
  .replace(/\*\*(?:\/\*\*)+/g, '**')
50
35
  .replace(/\*{3,}/g, '**');
@@ -68,10 +53,8 @@ export function globToRegExp(glob) {
68
53
  }
69
54
 
70
55
  /**
71
- * Extract the candidate route-touching paths a Story declares. Reads the
72
- * `## Changes` block (the decompose-author emits one `{"path":...}` JSON
73
- * object per bullet) and falls back to any bare `` `path/like/this` ``
74
- * inline-code spans in the body.
56
+ * Paths a Story declares: `"path": "…"` change descriptors plus path-like
57
+ * inline code spans.
75
58
  *
76
59
  * @param {string} body
77
60
  * @returns {string[]}
@@ -79,11 +62,9 @@ export function globToRegExp(glob) {
79
62
  export function extractStoryPaths(body) {
80
63
  if (typeof body !== 'string' || body.length === 0) return [];
81
64
  const paths = new Set();
82
- // `{"path":"pages/foo.tsx", ...}` change descriptors.
83
65
  for (const m of body.matchAll(/"path"\s*:\s*"([^"]+)"/g)) {
84
66
  paths.add(m[1]);
85
67
  }
86
- // Inline-code spans that look like a path (contain a slash or a dotted ext).
87
68
  for (const m of body.matchAll(/`([^`]+)`/g)) {
88
69
  const token = m[1].trim();
89
70
  if (/[/.]/.test(token) && !token.includes(' ')) paths.add(token);
@@ -1,24 +1,7 @@
1
1
  /**
2
- * acceptance-handle-repair.js — repair-before-judging for the `AC-<n>:`
3
- * presentation handle on authored acceptance items (Story #5323).
4
- *
5
- * The handle belongs to the body renderer, which numbers each checkbox from
6
- * its position in `acceptance[]` (`story-body.js`). An author planning from
7
- * an existing ticket reads that rendered body as a template and carries the
8
- * handle forward, so the persisted checkbox reads `- [ ] AC-1: AC-1: …`; a
9
- * lettered handle copied out of a hand-edited source (`AC-14a:`) misnumbers
10
- * the rest of the list against its own text.
11
- *
12
- * The correction is mechanical and total — strip the handle the renderer
13
- * will re-apply — so this module applies it and **reports** it, exactly as
14
- * `changes-repair.js` does for the `{ path, assumption }` formality. Charging
15
- * the author a re-draft round to paste back text the strip already produced
16
- * buys nothing.
17
- *
18
- * It lives beside the validator rather than inside it for the same reason
19
- * `changes-repair.js` does: the validator's job is to judge, and mixing a
20
- * mutating repair pass into a module of pure collectors muddies both.
21
- * `persist-helpers.js#validateTickets` calls this first, then the validators.
2
+ * Strip an authored `AC-<n>:` handle from acceptance items (the body renderer
3
+ * numbers checkboxes itself, so a carried handle doubles or misnumbers) and
4
+ * report each strip rather than refusing.
22
5
  *
23
6
  * @module lib/orchestration/plan-persist/acceptance-handle-repair
24
7
  */
@@ -27,13 +10,10 @@ import { stripAcceptanceHandle } from '../../story-body/story-body.js';
27
10
  import { renderChangeRepair } from './changes-repair.js';
28
11
 
29
12
  /**
30
- * Strip the handle off one surface's `acceptance[]`, recording each distinct
31
- * strip on `repairs`.
32
- *
33
- * @param {object} surface An object that may carry an `acceptance` array.
13
+ * @param {object} surface
34
14
  * @param {string} slug
35
- * @param {Set<string>} reported Items already reported for this ticket.
36
- * @param {object[]} repairs Accumulator, mutated.
15
+ * @param {Set<string>} reported
16
+ * @param {object[]} repairs Mutated.
37
17
  * @returns {void}
38
18
  */
39
19
  function repairSurface(surface, slug, reported, repairs) {
@@ -51,18 +31,9 @@ function repairSurface(surface, slug, reported, repairs) {
51
31
  }
52
32
 
53
33
  /**
54
- * Strip the presentation `AC-<n>:` handle off every authored `acceptance[]`
55
- * item, on both surfaces that can carry one: the ticket's top-level array
56
- * (the machine contract) and a structured body's.
57
- *
58
- * A serialized **string** body needs no pass of its own — `parse()` strips
59
- * the handle with the same grammar this does, so the two surfaces converge
60
- * on one list whichever carried the handle, and the contract sync (which
61
- * fails closed on a disagreement) sees them agree.
62
- *
63
- * Mutates `tickets` in place — the persist pipeline threads this same array
64
- * on to assembly. Total: a non-array argument and non-Story tickets are
65
- * no-ops.
34
+ * Covers the top-level array and a structured body; a string body needs no
35
+ * pass since `parse()` strips with the same grammar, so the fail-closed
36
+ * contract sync sees both agree. Mutates `tickets` in place.
66
37
  *
67
38
  * @param {object[]} tickets
68
39
  * @returns {Array<{ kind: 'acceptance-handle', slug: string, from: string, to: string }>}
@@ -74,8 +45,7 @@ export function normalizeAcceptanceHandles(tickets) {
74
45
  continue;
75
46
  }
76
47
  const slug = ticket.slug ?? ticket.title ?? '<unknown>';
77
- // A ticket normally carries the same list on both surfaces, so report
78
- // each distinct item once — the operator reads one correction, not two.
48
+ // Both surfaces usually carry the same list; report each item once.
79
49
  const reported = new Set();
80
50
  repairSurface(ticket, slug, reported, repairs);
81
51
  const body = ticket.body;
@@ -87,15 +57,8 @@ export function normalizeAcceptanceHandles(tickets) {
87
57
  }
88
58
 
89
59
  /**
90
- * Render one entry of the dry-run's mixed repair list.
91
- *
92
- * The list carries two kinds — a `changes[]` entry repaired by probing base,
93
- * and an `acceptance[]` item whose handle was normalised off — and both are
94
- * mechanical corrections the run applied on the author's behalf, so both
95
- * belong on the one list the operator reads. This module owns the dispatch
96
- * because it owns the newer kind: it renders its own line and delegates
97
- * every other kind to `changes-repair.js`, so neither producer has to know
98
- * the other's shape.
60
+ * Render one entry of the mixed repair list; non-handle kinds delegate to
61
+ * `changes-repair.js`.
99
62
  *
100
63
  * @param {{ kind?: string, slug: string, from: string, to?: string }} repair
101
64
  * @returns {string}