mandrel 2.59.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 (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,17 +1,7 @@
1
1
  /**
2
- * weights.js — the three ranking multipliers, and their degradations
3
- * (Story #4902).
4
- *
5
- * A hotspot's severity says how bad the code measures. These three say how
6
- * much that badness costs: how often the file changes (churn), how much of
7
- * the repository depends on it (import in-degree), and how often agents have
8
- * actually tripped over it (friction signals).
9
- *
10
- * All three are **optional inputs**. A shallow clone has no git history, a
11
- * fresh checkout has no friction ledger, and a consumer whose sources live
12
- * outside the scanned roots has no resolvable import graph. Each degrades to
13
- * a neutral multiplier of exactly 1.0 — never 0 (which would erase the
14
- * hotspot) and never a guess. The engine exits 0 in every degraded case.
2
+ * Hotspot ranking multipliers — churn, import in-degree, friction signals.
3
+ * Each input is optional and degrades to exactly 1.0: never 0 (which would
4
+ * erase the hotspot), never a guess.
15
5
  *
16
6
  * @module lib/audit-baselines/weights
17
7
  */
@@ -21,14 +11,11 @@ import path from 'node:path';
21
11
  import { execFileCapture } from '../child-exec.js';
22
12
  import { computeInDegree, resolveRepoGraph } from '../import-graph.js';
23
13
 
24
- /** Neutral multiplier every degraded weight collapses to. */
25
14
  const NEUTRAL_WEIGHT = 1.0;
26
15
 
27
16
  /**
28
- * Saturating count → multiplier in `[1, 2)`. Zero observations gives exactly
29
- * `NEUTRAL_WEIGHT`, so "no signal" and "signal says nothing notable" are the
30
- * same number — the degradation is indistinguishable from an honest zero,
31
- * which is the point: neither should move the ranking.
17
+ * Saturating count → `[1, 2)`; zero equals the degraded weight, so neither
18
+ * moves the ranking.
32
19
  *
33
20
  * @param {number} count
34
21
  * @param {number} half count at which the multiplier reaches 1.5
@@ -40,12 +27,10 @@ function saturate(count, half) {
40
27
  }
41
28
 
42
29
  /**
43
- * Count commits touching each file in the recent history window.
30
+ * Commits per file in the window; `degraded` when git cannot answer at all.
44
31
  *
45
32
  * @param {{ cwd: string, windowDays?: number, run?: Function }} args
46
33
  * @returns {{ counts: Map<string, number>, degraded: boolean }}
47
- * `degraded` is true when git could not answer at all — not a git work
48
- * tree, no commits yet, or the binary is unavailable.
49
34
  */
50
35
  export function readChurn({ cwd, windowDays = 180, run }) {
51
36
  let stdout;
@@ -62,8 +47,7 @@ export function readChurn({ cwd, windowDays = 180, run }) {
62
47
  {
63
48
  run,
64
49
  cwd,
65
- // git narrates "not a git repository" on stderr; the degradation is
66
- // reported in the envelope, not shouted at the operator.
50
+ // Degradation is reported in the envelope, not on stderr.
67
51
  stdio: ['ignore', 'pipe', 'ignore'],
68
52
  },
69
53
  );
@@ -80,8 +64,6 @@ export function readChurn({ cwd, windowDays = 180, run }) {
80
64
  }
81
65
 
82
66
  /**
83
- * Import in-degree per module, keyed by repo-relative posix path.
84
- *
85
67
  * @param {{ cwd: string, graph?: Map<string, string[]> | null }} args
86
68
  * @returns {{ degrees: Map<string, number>, degraded: boolean }}
87
69
  */
@@ -91,12 +73,9 @@ export function readCentrality({ cwd, graph }) {
91
73
  return { degrees: computeInDegree(resolved), degraded: false };
92
74
  }
93
75
 
94
- /** Path tokens that look like repository files, harvested from signal text. */
95
76
  const PATH_TOKEN_RE = /[\w@][\w./@-]*\.(?:js|mjs|cjs|ts|tsx|json|md)\b/g;
96
77
 
97
78
  /**
98
- * Collect every `signals.ndjson` under `tempRoot`. Absent tree → empty list.
99
- *
100
79
  * @param {string} tempRootAbs
101
80
  * @returns {string[]} absolute paths
102
81
  */
@@ -121,12 +100,8 @@ function findSignalStreams(tempRootAbs) {
121
100
  }
122
101
 
123
102
  /**
124
- * Count friction signals blaming each file.
125
- *
126
- * Signal records carry no dedicated path field — the blamed file surfaces
127
- * inside free-form `details` / `emitter.command` text — so paths are
128
- * harvested by token scan over each record's serialized form. A malformed
129
- * line is skipped, never fatal.
103
+ * Friction signals per blamed file. Records have no path field, so paths are
104
+ * token-scanned from `details` / `emitter.command`; bad lines are skipped.
130
105
  *
131
106
  * @param {{ tempRootAbs: string, kinds?: Set<string> }} args
132
107
  * @returns {{ counts: Map<string, number>, degraded: boolean, streams: number }}
@@ -167,9 +142,6 @@ export function readFriction({
167
142
  }
168
143
 
169
144
  /**
170
- * Bundle the three weight lookups into one resolver the hotspot builder can
171
- * call per cluster id, plus the degradation flags the envelope reports.
172
- *
173
145
  * @param {{
174
146
  * churn: { counts: Map<string, number>, degraded: boolean },
175
147
  * centrality: { degrees: Map<string, number>, degraded: boolean },
@@ -1,31 +1,16 @@
1
1
  /**
2
- * lib/audit-suite/audit-rules-reader.js — the one synchronous reader of the
3
- * `audit-rules.json` manifest, memoized for the process lifetime.
4
- *
5
- * The manifest is shipped framework configuration resolved from one fixed
6
- * path per process, and the shape-derivation path reads it once per Story at
7
- * resolve AND persist — an un-memoized read is pure repeated I/O (measured
8
- * 221 µs/op raw vs 5.5 µs seamed on the run adhoc-4722-4723 audit). Only a
9
- * successful parse is cached: a read failure stays a per-call throw so a
10
- * caller can observe a manifest that becomes readable later. Tests never
11
- * reach this read — they inject fixture rules through the callers'
12
- * `injectedRules` seam.
2
+ * The one synchronous `audit-rules.json` reader, memoized per process. Only a
3
+ * successful parse is cached, so a failure stays a per-call throw and a
4
+ * manifest that later becomes readable is seen.
13
5
  */
14
6
 
15
7
  import { readFileSync } from 'node:fs';
16
8
  import path from 'node:path';
17
9
  import { getPaths, PROJECT_ROOT, resolveConfig } from '../config-resolver.js';
18
10
 
19
- /** Process-lifetime memo of the parsed manifest (successful parses only). */
20
11
  let auditRulesCache = null;
21
12
 
22
13
  /**
23
- * Read and parse the `audit-rules.json` manifest synchronously from the
24
- * project's configured `schemasRoot`. Shared by the synchronous, ticket-free
25
- * readers (`resolveLensTier`, `selectLocalLenses`,
26
- * `selectSensitivePathClasses`) so the path resolution and read-failure
27
- * handling live in one place rather than being duplicated per reader.
28
- *
29
14
  * @returns {{ audits?: Record<string, object> }} Parsed manifest.
30
15
  * @throws {Error} When the manifest cannot be read or parsed.
31
16
  */
@@ -1,39 +1,7 @@
1
1
  /**
2
- * lib/audit-suite/checklist-threading.js — write-time local-lens checklist
3
- * threading (Epic #4405, Story #4410).
4
- *
5
- * Given a Story's predicted footprint (its `changes[]` / `references[]` path
6
- * list), select the distilled authoring checklists for the **footprint-matched
7
- * LOCAL lenses only** and assemble them into one payload the dispatch/hydrator
8
- * seam threads into the Story maker prompt. This moves each local-lens concern
9
- * to the innermost, write-time tier so makers author against it on fresh
10
- * context instead of paying an Epic-close remediation loop on stale context.
11
- *
12
- * Matching is the **light** path, deliberately NOT `selectAudits`:
13
- * - tier gate — a lens is in scope only when `resolveLensTier(lens) ===
14
- * 'local'` (the pure `scope`-field read; cumulative/global
15
- * lenses are owned by the Epic-close tier, never threaded
16
- * here).
17
- * - file gate — the pure `matchesAnyFilePattern` matcher runs the lens's
18
- * own `triggers.filePatterns` (from `audit-rules.json`)
19
- * against the predicted footprint.
20
- *
21
- * `selectAudits` is the wrong tool here: it is gate-aware and provider-backed
22
- * (it reads the ticket through an `ITicketingProvider` and diffs the working
23
- * tree via `git`). The write-time path has a *predicted* footprint, not a git
24
- * diff, and no ticket to fetch — so this module reaches for the two pure
25
- * primitives directly and never touches a provider or `git`. That purity is
26
- * load-bearing (asserted by the test): the threading path must be a pure
27
- * function of the footprint and the on-disk manifest/checklists.
28
- *
29
- * A hard token budget caps the assembled payload. When the matched lenses'
30
- * checklists together exceed the budget, the payload is truncated
31
- * deterministically (a stable prefix in {@link AUDIT_LENSES} order is kept;
32
- * the overflowing tail is dropped) and every dropped lens is logged so the
33
- * elision is never silent.
34
- *
35
- * Pure (modulo the default disk reads for `audit-rules.json` and the checklist
36
- * artifacts, both injectable seams). No git, no provider, no network.
2
+ * Write-time checklists for LOCAL lenses matching a predicted footprint,
3
+ * under a token budget. Not `selectAudits`: this must stay a pure function of
4
+ * footprint + on-disk files — no git, provider, or network (tested).
37
5
  */
38
6
 
39
7
  import fs from 'node:fs';
@@ -48,11 +16,7 @@ import {
48
16
  } from './selector.js';
49
17
 
50
18
  /**
51
- * Rough token estimate: ~4 characters per token. Deliberately cheap and
52
- * deterministic — this budget is the one surviving ceiling that speaks in
53
- * tokens (Story #5312 deleted the plan-time sizing ceilings that shared the
54
- * estimator), so the approximation matters far less than the payload and
55
- * the cap agreeing on one number.
19
+ * ~4 chars per token; what matters is that payload and cap agree on one number.
56
20
  *
57
21
  * @param {string} text
58
22
  * @returns {number}
@@ -62,24 +26,14 @@ function estimateTokens(text) {
62
26
  }
63
27
 
64
28
  /**
65
- * Hard cap on the assembled checklist payload, in the ≈4-char/token estimate
66
- * above ({@link estimateTokens}). Generous
67
- * relative to the real checklist sizes (each distilled lens checklist is
68
- * ~130–190 tokens, and at most the seven local lenses can match), so a normal
69
- * Story is never truncated — the cap is a safety ceiling against a pathological
70
- * footprint that matches every local lens, not a routine squeeze. Callers may
71
- * override per-invocation via `tokenBudget`.
29
+ * Safety ceiling, not a routine squeeze: all seven local lenses together fit.
72
30
  */
73
31
  export const DEFAULT_CHECKLIST_TOKEN_BUDGET = 4000;
74
32
 
75
- /** Separator between concatenated per-lens checklist sections. */
76
33
  const SECTION_SEPARATOR = '\n\n';
77
34
 
78
35
  /**
79
- * The `audit-rules.json` / `resolveLensTier` lens key for a canonical lens
80
- * name. The taxonomy in {@link AUDIT_LENSES} carries bare names (`clean-code`);
81
- * the manifest and the tier resolver key off the `audit-`-prefixed form
82
- * (`audit-clean-code`).
36
+ * Manifest key for a bare taxonomy lens name (`clean-code` → `audit-clean-code`).
83
37
  *
84
38
  * @param {string} lens
85
39
  * @returns {string}
@@ -89,13 +43,9 @@ function lensKeyFor(lens) {
89
43
  }
90
44
 
91
45
  /**
92
- * Absolute path to the committed distilled-checklist directory. Mirrors the
93
- * SSOT the generator writes to (`generate-lens-checklists.js` →
94
- * `<agentRoot>/audit-checklists/<lens>.md`), resolved through the same
95
- * `agentRoot` the rest of the config surface uses so a consumer that relocates
96
- * `.agents` reads its checklists from the relocated tree.
46
+ * `<agentRoot>/audit-checklists`, honouring a relocated agent root.
97
47
  *
98
- * @param {object} [config] resolved config wrapper (defaults to a fresh read).
48
+ * @param {object} [config]
99
49
  * @returns {string}
100
50
  */
101
51
  function checklistsDir(config = resolveConfig()) {
@@ -107,12 +57,9 @@ function checklistsDir(config = resolveConfig()) {
107
57
  }
108
58
 
109
59
  /**
110
- * Read and parse `audit-rules.json` (the same manifest {@link selectAudits}
111
- * and {@link resolveLensTier} consume), resolved through the configured
112
- * `schemasRoot`. Synchronous — this is a pure-ish read with no git and no
113
- * provider.
60
+ * Parse `audit-rules.json` from the configured `schemasRoot`.
114
61
  *
115
- * @param {object} [config] resolved config wrapper (defaults to a fresh read).
62
+ * @param {object} [config]
116
63
  * @returns {{ audits?: Record<string, { triggers?: { filePatterns?: string[] } }> }}
117
64
  */
118
65
  export function readAuditRules(config = resolveConfig()) {
@@ -125,12 +72,6 @@ export function readAuditRules(config = resolveConfig()) {
125
72
  }
126
73
 
127
74
  /**
128
- * The `triggers.filePatterns` a lens declares in the manifest, or `[]` when
129
- * the lens declares none. (`audit-clean-code` carries the universal
130
- * match-everything glob, so it footprint-matches every non-empty change
131
- * set — the selector.js twin comment documents the same post-#4405
132
- * follow-up fix.)
133
- *
134
75
  * @param {object} rules parsed `audit-rules.json`.
135
76
  * @param {string} lens canonical lens name.
136
77
  * @returns {string[]}
@@ -140,9 +81,6 @@ function filePatternsFor(rules, lens) {
140
81
  }
141
82
 
142
83
  /**
143
- * The full `triggers` block a lens declares in the manifest (or `undefined`).
144
- * Used to read non-glob trigger fields (e.g. `sourceWithoutSiblingTest`).
145
- *
146
84
  * @param {object} rules parsed `audit-rules.json`.
147
85
  * @param {string} lens canonical lens name.
148
86
  * @returns {object|undefined}
@@ -152,10 +90,6 @@ function triggerFor(rules, lens) {
152
90
  }
153
91
 
154
92
  /**
155
- * Normalize a predicted footprint into a clean path list. Accepts a plain
156
- * `string[]` (the shape the caller derives from a Story's `changes[]` /
157
- * `references[]` entries); drops empty and non-string entries.
158
- *
159
93
  * @param {unknown} footprint
160
94
  * @returns {string[]}
161
95
  */
@@ -168,21 +102,13 @@ function normalizeFootprint(footprint) {
168
102
  }
169
103
 
170
104
  /**
171
- * Select, in stable {@link AUDIT_LENSES} order, the LOCAL lenses whose
172
- * `filePatterns` match the predicted footprint. This is the whole matching
173
- * contract — `resolveLensTier(lens) === 'local'` for the tier gate plus the
174
- * pure `matchesAnyFilePattern` matcher for the file gate — with no provider and
175
- * no git diff.
176
- *
177
- * A lens whose tier cannot be resolved (not registered / malformed scope) is
178
- * skipped rather than allowed to throw the whole selection; the generator and
179
- * schema keep the manifest well-formed, so this only guards against drift.
105
+ * LOCAL lenses matching the footprint, in {@link AUDIT_LENSES} order. A lens
106
+ * whose tier cannot be resolved is skipped rather than failing the selection.
180
107
  *
181
108
  * @param {object} params
182
109
  * @param {string[]} params.footprint predicted footprint path list.
183
- * @param {object} [params.rules] parsed `audit-rules.json` (injectable seam).
184
- * @param {(lens: string) => string} [params.resolveTier] tier resolver
185
- * (injectable seam; defaults to {@link resolveLensTier}).
110
+ * @param {object} [params.rules] parsed `audit-rules.json`.
111
+ * @param {(lens: string) => string} [params.resolveTier]
186
112
  * @returns {string[]} matched local lens names, in taxonomy order.
187
113
  */
188
114
  export function matchLocalLenses({
@@ -206,9 +132,8 @@ export function matchLocalLenses({
206
132
  const patterns = filePatternsFor(rules, lens);
207
133
  const fileMatch =
208
134
  patterns.length > 0 && matchesAnyFilePattern(patterns, paths);
209
- // Coverage-gap routing (#4628): thread the quality checklist at write-time
210
- // on the same sibling-test predicate the selector uses, so a source change
211
- // that ships without a test is reminded of the quality lens up front.
135
+ // Same sibling-test predicate as the selector: a source change without a
136
+ // test gets the quality checklist up front.
212
137
  const siblingMatch =
213
138
  triggerFor(rules, lens)?.sourceWithoutSiblingTest === true &&
214
139
  changeSetLacksSiblingTest(paths);
@@ -218,13 +143,9 @@ export function matchLocalLenses({
218
143
  }
219
144
 
220
145
  /**
221
- * Default checklist reader: read `<agentRoot>/audit-checklists/<lens>.md`.
222
- * Returns `null` when the artifact is absent (a matched lens with no committed
223
- * checklist), so the caller skips it rather than crashing.
224
- *
225
146
  * @param {string} lens
226
147
  * @param {object} [config]
227
- * @returns {string|null}
148
+ * @returns {string|null} `null` when the checklist artifact is absent
228
149
  */
229
150
  function readChecklistFile(lens, config = resolveConfig()) {
230
151
  const file = path.join(checklistsDir(config), `${lens}.md`);
@@ -236,31 +157,16 @@ function readChecklistFile(lens, config = resolveConfig()) {
236
157
  }
237
158
 
238
159
  /**
239
- * Build the write-time checklist payload for a Story's predicted footprint.
240
- *
241
- * Returns the assembled payload string plus the accounting the caller (and the
242
- * test) asserts against: which lenses were included, which were dropped by the
243
- * budget, the full matched set, and the payload's estimated token count.
244
- *
245
- * Truncation is deterministic prefix truncation: lenses are considered in
246
- * stable {@link AUDIT_LENSES} order and appended while the running payload
247
- * estimate stays within `tokenBudget`; the first lens that would overflow — and
248
- * every remaining matched lens — is dropped, and the drop is logged. The
249
- * returned `payload` therefore always satisfies
250
- * `estimateTokens(payload) <= tokenBudget`.
160
+ * Prefix truncation: the first overflowing lens and all later ones are
161
+ * dropped and logged.
251
162
  *
252
163
  * @param {object} params
253
- * @param {string[]} params.footprint predicted footprint (`changes[]` /
254
- * `references[]` path list).
255
- * @param {number} [params.tokenBudget] hard cap (defaults to
256
- * {@link DEFAULT_CHECKLIST_TOKEN_BUDGET}).
257
- * @param {object} [params.rules] parsed `audit-rules.json` (injectable seam).
258
- * @param {(lens: string) => string} [params.resolveTier] tier resolver
259
- * (injectable seam).
260
- * @param {(lens: string) => (string|null)} [params.readChecklist] checklist
261
- * reader (injectable seam; defaults to the on-disk reader).
262
- * @param {{ warn?: (msg: string) => void }} [params.logger] logger for the drop
263
- * record (defaults to {@link Logger}).
164
+ * @param {string[]} params.footprint predicted footprint path list.
165
+ * @param {number} [params.tokenBudget]
166
+ * @param {object} [params.rules] parsed `audit-rules.json`.
167
+ * @param {(lens: string) => string} [params.resolveTier]
168
+ * @param {(lens: string) => (string|null)} [params.readChecklist]
169
+ * @param {{ warn?: (msg: string) => void }} [params.logger]
264
170
  * @returns {{
265
171
  * payload: string,
266
172
  * includedLenses: string[],
@@ -294,9 +200,7 @@ export function buildChecklistPayload({
294
200
  const lens = matchedLenses[i];
295
201
  const content = readChecklist(lens);
296
202
  if (content == null) {
297
- // Matched a lens with no committed checklist artifact — skip it (never a
298
- // budget drop). The generator keeps every lens's checklist in tree, so
299
- // this only trips on drift, which we surface rather than swallow.
203
+ // Missing artifact is drift, not a budget drop: surface and skip.
300
204
  logger?.warn?.(
301
205
  `[checklist-threading] no checklist artifact for matched local lens '${lens}' — skipping`,
302
206
  );
@@ -306,8 +210,6 @@ export function buildChecklistPayload({
306
210
  const trimmed = content.trim();
307
211
  const candidate = [...sections, trimmed].join(SECTION_SEPARATOR);
308
212
  if (estimateTokens(candidate) > tokenBudget) {
309
- // Deterministic prefix truncation: this lens and every remaining matched
310
- // lens are dropped, keeping the payload within budget.
311
213
  droppedLenses.push(...matchedLenses.slice(i));
312
214
  break;
313
215
  }
@@ -1,21 +1,8 @@
1
1
  /**
2
- * lib/audit-suite/dispatch-checklist.js — the deliver-dispatch call site for
3
- * write-time checklist threading (Story #4627, activating Epic #4405's
4
- * Story #4410 machinery).
5
- *
6
- * `checklist-threading.js#buildChecklistPayload` was built and unit-tested but
7
- * had **zero production call sites**: nothing derived a footprint, assembled
8
- * the payload, or handed a `checklistPath` to the spawned Story worker. This
9
- * module is that call site. Given a Story's predicted footprint (its
10
- * `changes[]` / `references[]` path entries), it assembles the footprint-matched
11
- * local-lens checklist payload, writes it to the run's temp dir, and returns
12
- * the `checklistPath` the deliver-story spawn threads into the maker's prompt
13
- * (the same way the docs digest reaches the worker as `docsDigestPath`).
14
- *
15
- * Pure modulo the single file write, which is an injectable seam
16
- * (`writeFileFn`) so the builder is unit-testable without touching disk. No
17
- * git, no provider, no network — the footprint is the planner's *prediction*,
18
- * not a diff, so no repository read is involved.
2
+ * Deliver-dispatch call site for checklist threading: builds the payload from
3
+ * a Story's predicted `changes[]` + `references[]` footprint, writes it to
4
+ * the run temp dir, and returns the `checklistPath` the worker spawn threads.
5
+ * The footprint is a prediction, not a diff: no git, provider, or network.
19
6
  */
20
7
 
21
8
  import fs from 'node:fs';
@@ -23,9 +10,7 @@ import path from 'node:path';
23
10
  import { buildChecklistPayload } from './checklist-threading.js';
24
11
 
25
12
  /**
26
- * Extract clean path strings from a Story's `changes[]` / `references[]`
27
- * entries. Accepts both the parsed `{ path, assumption }` PathEntry shape and a
28
- * bare `string`, dropping empty / non-string entries.
13
+ * Accepts `{ path }` entries or bare strings.
29
14
  *
30
15
  * @param {unknown} entries
31
16
  * @returns {string[]}
@@ -39,13 +24,7 @@ function footprintFromEntries(entries) {
39
24
  }
40
25
 
41
26
  /**
42
- * Derive the predicted footprint the checklist matcher reads: the union of a
43
- * Story's `changes[]` and `references[]` path entries, in that order.
44
- *
45
- * Module-local: a detail of {@link buildDispatchChecklist}, exercised through
46
- * that public entry point (assert the footprint the injected payload builder
47
- * received) rather than imported directly, so it adds no test-only public
48
- * export the dead-export ratchet would flag.
27
+ * Module-local so it adds no test-only export for the dead-export ratchet.
49
28
  *
50
29
  * @param {{ changes?: unknown, references?: unknown }} [args]
51
30
  * @returns {string[]}
@@ -58,8 +37,6 @@ function deriveDispatchFootprint({ changes, references } = {}) {
58
37
  }
59
38
 
60
39
  /**
61
- * Default file writer: ensure the parent dir exists, then write the payload.
62
- *
63
40
  * @param {string} filePath
64
41
  * @param {string} content
65
42
  * @returns {void}
@@ -70,24 +47,16 @@ function defaultWriteFile(filePath, content) {
70
47
  }
71
48
 
72
49
  /**
73
- * Build the write-time checklist payload for a Story and write it to the run's
74
- * temp dir, returning the `checklistPath` the deliver-story spawn threads.
75
- *
76
- * When the footprint matches no local lens (the common case for a
77
- * docs-only or infra-only Story), nothing is written and `checklistPath` is
78
- * `null` — the worker then runs with no write-time checklist, exactly as it
79
- * does today, and lens-aware coverage still runs maker-blind at Story-scope
80
- * close.
50
+ * No matched lens → nothing written, `checklistPath: null`.
81
51
  *
82
52
  * @param {object} args
83
- * @param {number|string} args.storyId — names the payload file.
84
- * @param {unknown} [args.changes] — the Story's `changes[]` path entries.
85
- * @param {unknown} [args.references] — the Story's `references[]` path entries.
86
- * @param {string} args.runTempDir — the run temp dir the payload is written to.
87
- * @param {number} [args.tokenBudget] — override the payload cap.
88
- * @param {typeof buildChecklistPayload} [args.buildPayloadFn] — injectable seam.
89
- * @param {(filePath: string, content: string) => void} [args.writeFileFn] —
90
- * injectable write seam (defaults to the on-disk writer).
53
+ * @param {number|string} args.storyId
54
+ * @param {unknown} [args.changes]
55
+ * @param {unknown} [args.references]
56
+ * @param {string} args.runTempDir
57
+ * @param {number} [args.tokenBudget]
58
+ * @param {typeof buildChecklistPayload} [args.buildPayloadFn]
59
+ * @param {(filePath: string, content: string) => void} [args.writeFileFn]
91
60
  * @returns {{
92
61
  * checklistPath: string|null,
93
62
  * skipped: boolean,
@@ -1,26 +1,13 @@
1
1
  /**
2
- * lib/audit-suite/findings.js — Findings histogram + baseline delta emitters.
3
- *
4
- * `aggregateSummary` (Story #963, Epic #946) populates the `metadata.summary`
5
- * block of the audit-suite envelope with a severity histogram.
6
- *
7
- * `aggregateBaselineDelta` (Task #1920, Epic #1786) reports per-component
8
- * rollup deltas between two committed baseline envelopes loaded via
9
- * `lib/baselines/reader.js`. It supersedes the prior row-by-row diff —
10
- * row-level deltas surfaced noise from churn that did not move any
11
- * component's rollup, drowning out the regressions that actually mattered.
12
- *
13
- * The delta function is **pure**: it takes the two `{ rollup, rows }`
14
- * envelopes returned by the reader plus the resolved components map and
15
- * returns a deterministic per-component delta. No filesystem I/O.
2
+ * Findings severity histogram and per-component baseline rollup deltas.
3
+ * Deltas are per rollup, not per row: row churn that moves no rollup is noise.
4
+ * Pure, no I/O.
16
5
  */
17
6
 
18
7
  import { groupRows, resolveComponents } from '../baselines/components.js';
19
8
 
20
9
  /**
21
- * Pure: count findings into a {critical,high,medium,low} histogram. Findings
22
- * with severities outside that set are ignored, keeping the rendered summary
23
- * truthful even if upstream callers append non-standard severities.
10
+ * Non-standard severities are ignored.
24
11
  *
25
12
  * @param {Array<{ severity?: string }>|null|undefined} findings
26
13
  * @returns {{ critical: number, high: number, medium: number, low: number }}
@@ -36,20 +23,10 @@ export function aggregateSummary(findings) {
36
23
  }
37
24
 
38
25
  /**
39
- * The single halting rule for the unified `verification-results` findings
40
- * contract (Story #4411, Epic #4405): a **surviving** (unfixed) Critical
41
- * finding halts the delivery gate. Every code consumer of the contract —
42
- * the in-process code-review producer (`runCodeReview`) and the auto-merge
43
- * integration gate (`evaluateAutoMergePredicate`) — routes its
44
- * halt-on-critical decision through this one predicate so the rule has a
45
- * single definition rather than a re-derived `critical > 0` expression at
46
- * each site.
47
- *
48
- * Accepts either the severity **count object** produced by
49
- * `countBySeverity` / {@link aggregateSummary} (`{ critical: n, ... }`) or a
50
- * raw `Finding[]`. A non-numeric / absent `critical` count (e.g. the
51
- * auto-merge gate's "unparseable body" sentinel `null`) is **not** a halt —
52
- * the caller owns that fail-open path separately. Pure; never throws.
26
+ * The single halting rule: a surviving Critical finding halts delivery. Every
27
+ * consumer routes through this rather than re-deriving `critical > 0`.
28
+ * Accepts a severity count object or a `Finding[]`; a non-numeric `critical`
29
+ * (e.g. an unparseable-body `null`) is not a halt — the caller owns that path.
53
30
  *
54
31
  * @param {{ critical?: unknown }|Array<{ severity?: string }>|null|undefined} input
55
32
  * @returns {boolean} `true` when at least one surviving Critical is present.
@@ -63,11 +40,7 @@ export function hasSurvivingCritical(input) {
63
40
  }
64
41
 
65
42
  /**
66
- * Resolve the per-component rollup map for an envelope. When the envelope
67
- * already carries a `rollup` block (every writer-produced baseline does), we
68
- * trust it as the source of truth. When `rollup` is absent (raw test
69
- * fixtures, hand-written cases) we recompute from rows via the supplied
70
- * `recompute` callback so the function stays useful in both shapes.
43
+ * The envelope's own `rollup` when present, else recomputed from rows.
71
44
  *
72
45
  * @param {{ rollup?: object, rows?: Array<object> }} envelope
73
46
  * @param {Record<string, string[]>} components
@@ -89,13 +62,8 @@ function resolveRollup(envelope, components, keyField, recompute) {
89
62
  }
90
63
 
91
64
  /**
92
- * Compare two component rollup objects (`{ axis: value }`) and emit one
93
- * delta entry per axis that differs. Pure.
94
- *
95
- * The direction is informational only — the audit emitter does not enforce
96
- * pass/fail policy; floor enforcement happens in `check-baselines.js`. We
97
- * report `before`, `after`, and the signed delta so a reviewer can read the
98
- * sign in context (lint count up = bad; coverage % down = bad).
65
+ * One entry per differing axis. Informational only — floors are enforced by
66
+ * `check-baselines.js`.
99
67
  *
100
68
  * @param {Record<string, number>|null|undefined} before
101
69
  * @param {Record<string, number>|null|undefined} after
@@ -120,12 +88,6 @@ function diffAxes(before, after) {
120
88
  }
121
89
 
122
90
  /**
123
- * Compute per-component rollup deltas between two baseline envelopes.
124
- *
125
- * Inputs are the shapes returned by `lib/baselines/reader.js#load(kind)`.
126
- * The function is pure — disk reads happen in the caller so the audit
127
- * emitter (and its tests) can drive synthetic before/after pairs.
128
- *
129
91
  * @param {{
130
92
  * before: { rollup?: object, rows?: Array<object> },
131
93
  * after: { rollup?: object, rows?: Array<object> },
@@ -137,9 +99,7 @@ function diffAxes(before, after) {
137
99
  * component: string,
138
100
  * axes: Array<{ axis: string, before: number|null, after: number|null, delta: number|null }>
139
101
  * }>}
140
- * One entry per component whose rollup changed. `*` always sorts first;
141
- * the remainder is alpha. Components with no axis changes are omitted so
142
- * an unchanged baseline yields `[]`.
102
+ * Changed components only, `*` first then alpha.
143
103
  */
144
104
  export function aggregateBaselineDelta(params = {}) {
145
105
  const before = params.before ?? { rollup: {}, rows: [] };