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,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: [] };
@@ -1,20 +1,10 @@
1
1
  /**
2
- * lib/audit-suite/frontmatter.js — Markdown frontmatter + summary helpers.
3
- *
4
- * Extracted from `.agents/scripts/run-audit-suite.js` (Story #963, Epic #946).
5
- * Pure module — no IO, no provider calls, safe to unit-test in isolation.
6
- *
7
- * The functions here are the parsing seam used by the audit suite to derive
8
- * a 1–3-sentence summary from a workflow's `description` frontmatter field
9
- * (falling back to its first prose paragraph). Keep them tiny and free of
10
- * cross-module imports so the audit-suite entry-point stays orchestration-only.
2
+ * Pure frontmatter + workflow-summary helpers; keep free of cross-module
3
+ * imports.
11
4
  */
12
5
 
13
- // All RegExp instances are built via the constructor (rather than literal
14
- // `/.../`) so the maintainability engine's AST walker (typhonjs-escomplex) can
15
- // score this file. The walker has a long-standing bug where it crashes on
16
- // RegExp literals via `RegExpLiteral`, returning MI=0 — see the parse-time
17
- // fallback in lib/maintainability-engine.js#calculateForSource.
6
+ // RegExp constructors, not literals: typhonjs-escomplex crashes on
7
+ // `RegExpLiteral` and scores the file MI=0.
18
8
  // biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
19
9
  const FRONTMATTER_RE = new RegExp(String.raw`^---\r?\n([\s\S]*?)\r?\n---\r?\n`);
20
10
  const NEWLINE_SPLIT_RE = new RegExp(String.raw`\r?\n`);
@@ -27,9 +17,7 @@ const SUMMARY_MAX_SENTENCES = 3;
27
17
  const SUMMARY_MAX_CHARS = 280;
28
18
 
29
19
  /**
30
- * Pure: parse a workflow's leading `---` frontmatter block into a flat
31
- * key→value map. Quoted values are unwrapped; entries without a `:` separator
32
- * are skipped. Returns `{}` when no frontmatter is present.
20
+ * Flat key→value map; quotes unwrapped, `:`-less lines skipped.
33
21
  *
34
22
  * @param {string} content
35
23
  * @returns {Record<string, string>}
@@ -55,10 +43,6 @@ export function extractFrontmatter(content) {
55
43
  }
56
44
 
57
45
  /**
58
- * Pure: find the first prose paragraph after the frontmatter block, skipping
59
- * headings and `---` rules. Whitespace inside the paragraph is collapsed to
60
- * single spaces. Returns `''` when the body is empty / heading-only.
61
- *
62
46
  * @param {string} content
63
47
  * @returns {string}
64
48
  */
@@ -75,11 +59,6 @@ export function firstProseParagraph(content) {
75
59
  }
76
60
 
77
61
  /**
78
- * Pure: trim a candidate summary to at most three sentences and 280 chars.
79
- * Sentences are matched by `[^.!?\n]+[.!?]+`; bare paragraphs that contain no
80
- * terminator are returned verbatim (subject to the char clamp). The 280-char
81
- * trim appends an ellipsis to signal truncation to readers.
82
- *
83
62
  * @param {string} text
84
63
  * @returns {string}
85
64
  */
@@ -97,9 +76,6 @@ export function clampSummary(text) {
97
76
  }
98
77
 
99
78
  /**
100
- * Pure: derive a 1–3-sentence summary from a workflow's frontmatter
101
- * `description` field, falling back to the first prose paragraph.
102
- *
103
79
  * @param {string} content
104
80
  * @returns {string}
105
81
  */
@@ -1,17 +1,4 @@
1
- /**
2
- * lib/audit-suite/index.js — Audit-suite SDK barrel.
3
- *
4
- * Single library entry point for the audit-suite. Exports the two public
5
- * functions (`runAuditSuite`, `selectAudits`) plus the pure rule-matching
6
- * helpers (`matchesFilePattern`, `matchesAnyFilePattern`).
7
- *
8
- * Consumers import from this file — the former top-level CLI wrappers
9
- * (`run-audit-suite.js`, `select-audits.js`) were retired in #4482; this
10
- * barrel is the only supported entry point (Story #1083 / Epic #1072).
11
- *
12
- * @example
13
- * import { runAuditSuite, selectAudits } from './lib/audit-suite/index.js';
14
- */
1
+ /** Audit-suite barrel — the only supported entry point. */
15
2
 
16
3
  export {
17
4
  buildChecklistPayload,
@@ -23,7 +10,6 @@ export { buildDispatchChecklist } from './dispatch-checklist.js';
23
10
  export {
24
11
  countChangedLines,
25
12
  evaluateLensDiffFloor,
26
- resolveLensDiffFloor,
27
13
  } from './lens-diff-floor.js';
28
14
  export { runAuditSuite } from './runner.js';
29
15
  export {
@@ -1,34 +1,13 @@
1
1
  /**
2
- * lib/audit-suite/lens-checklist.js — distill an `audit-<lens>.md` workflow
3
- * body into a compact, drift-gated authoring checklist.
4
- *
5
- * Epic #4405 (shift-left audit) moves each lens's concerns to the innermost,
6
- * write-time tier: instead of an engineer only learning what a lens checks
7
- * when `/audit-<lens>` runs, a compact per-lens checklist ships as a committed
8
- * build artifact under `.agents/audit-checklists/`. This module is the pure
9
- * distillation seam — no IO — so it is unit-testable and the generator
10
- * (`generate-lens-checklists.js`) owns only the file read/write/prune and the
11
- * `--check` drift gate.
12
- *
13
- * The distillation is a deterministic transform of the workflow markdown: it
14
- * lifts the lens's *concern* labels — the bold lead-ins of the analysis /
15
- * evaluation list items — from the audit region of the workflow (everything
16
- * before the `Output Requirements` / report-template boundary), skipping the
17
- * recurring boilerplate sections (Role, Context, Scope, Execution strategy,
18
- * Configuration). When a lens exposes no bold concern items it falls back to
19
- * its audit-step headings so every checklist is non-empty. The output is
20
- * hard-capped at {@link MAX_CHECKLIST_LINES} lines.
21
- *
22
- * Pure: no IO, no provider calls, safe to unit-test in isolation.
23
- *
24
- * @see Story #4408 — per-lens authoring checklists as drift-gated artifacts.
2
+ * Pure distillation of an `audit-<lens>.md` workflow into the committed,
3
+ * drift-gated authoring checklist (the generator owns I/O). Lifts bold
4
+ * concern lead-ins from the audit region, skipping boilerplate sections and
5
+ * stopping at the report-template boundary; falls back to step headings.
25
6
  */
26
7
 
27
8
  import { clampSummary, extractFrontmatter } from './frontmatter.js';
28
9
 
29
- // All RegExp instances are built via the constructor (rather than literal
30
- // `/.../`) so the maintainability engine's AST walker (typhonjs-escomplex) can
31
- // score this file — see the note in lib/audit-suite/frontmatter.js.
10
+ // RegExp constructors, not literals: typhonjs-escomplex crashes on literals.
32
11
  // biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
33
12
  const LINE_SPLIT_RE = new RegExp(String.raw`\r?\n`);
34
13
  const FRONTMATTER_BLOCK_RE = new RegExp(
@@ -44,14 +23,11 @@ const BOLD_LEAD_ITEM_RE = new RegExp(
44
23
  );
45
24
  const STEP_PREFIX_RE = new RegExp(String.raw`^Step\s+\d+\s*[:.]?\s*`, 'i');
46
25
  const TRAILING_COLON_RE = new RegExp(String.raw`\s*:\s*$`);
47
- // A `##` section whose heading opens with one of these is workflow boilerplate,
48
- // not a lens concern — its list items are skipped during concern extraction.
49
26
  const BOILERPLATE_SECTION_RE = new RegExp(
50
27
  String.raw`^(Role|Context & Objective|Scope|Execution strategy|Configuration|Run Context|Target set)\b`,
51
28
  'i',
52
29
  );
53
- // The report-template / output-contract boundary. Everything at or after the
54
- // first heading matching this is template scaffolding, never a concern.
30
+ // Everything from this heading on is report-template scaffolding.
55
31
  const OUTPUT_BOUNDARY_RE = new RegExp(
56
32
  '(Output Requirements|Generate the Report)',
57
33
  'i',
@@ -61,15 +37,9 @@ const OUTPUT_BOUNDARY_RE = new RegExp(
61
37
  /** Hard cap on generated checklist lines (asserted by the drift test). */
62
38
  export const MAX_CHECKLIST_LINES = 40;
63
39
 
64
- /** Fixed header/intro line budget consumed before the checklist items. */
65
40
  const HEADER_LINE_BUDGET = 12;
66
41
 
67
42
  /**
68
- * Pure: walk the workflow body once, collecting the lens's concern labels (bold
69
- * lead-ins of analysis/evaluation list items) and, as a fallback, its audit
70
- * step headings. Extraction stops at the report-template boundary and ignores
71
- * boilerplate sections.
72
- *
73
43
  * @param {string} content — raw `audit-<lens>.md` markdown.
74
44
  * @returns {{ title: string|null, concerns: string[], stepHeadings: string[] }}
75
45
  */
@@ -114,10 +84,8 @@ export function extractLensConcerns(content) {
114
84
  }
115
85
 
116
86
  /**
117
- * Pure: resolve a workflow's `description` to a single clamped line, folding a
118
- * YAML block scalar (`description: >-` / `|` with indented continuation lines)
119
- * back into one line. `extractFrontmatter` only sees the indicator token
120
- * (`>-`) for a block scalar, so this reads the continuation lines directly.
87
+ * One clamped description line; folds a YAML block scalar, whose indicator
88
+ * token is all `extractFrontmatter` sees.
121
89
  *
122
90
  * @param {string} content — raw workflow markdown.
123
91
  * @param {Record<string, string>} fm — parsed frontmatter map.
@@ -146,7 +114,7 @@ export function resolveDescription(content, fm) {
146
114
  }
147
115
 
148
116
  /**
149
- * Pure: dedupe a list case-insensitively, preserving first-seen order.
117
+ * Case-insensitive, first-seen order.
150
118
  *
151
119
  * @param {string[]} items
152
120
  * @returns {string[]}
@@ -164,10 +132,7 @@ function dedupePreserveOrder(items) {
164
132
  }
165
133
 
166
134
  /**
167
- * Pure: render the authoring checklist for a single lens from its workflow
168
- * markdown. The output is deterministic (a pure function of `content`) and
169
- * hard-capped at {@link MAX_CHECKLIST_LINES} lines including the trailing
170
- * newline, so the same input always regenerates byte-identically.
135
+ * Deterministic, capped at {@link MAX_CHECKLIST_LINES} lines.
171
136
  *
172
137
  * @param {string} lens — canonical lens name (e.g. `security`).
173
138
  * @param {string} content — raw `audit-<lens>.md` markdown.
@@ -1,74 +1,22 @@
1
1
  /**
2
- * lib/audit-suite/lens-diff-floor.js — the close-scope lens diff-floor
3
- * (Story #4699).
4
- *
5
- * ## Why this exists
6
- *
7
- * The Story-scope local-lens pass materialized ~28 KB of lens prompts per
8
- * close while sampled closes yielded almost zero findings — and none above
9
- * Suggestion severity. The cheapest correct response is a deterministic
10
- * floor: a *small* diff that touches *no* sensitive path earns no lens
11
- * materialization at all. The floor is measured in **changed lines**
12
- * (additions + deletions across the diff), configured via
13
- * `delivery.review.lensDiffFloor` (default {@link DEFAULT_LENS_DIFF_FLOOR};
14
- * `0` disables the skip entirely).
15
- *
16
- * ## Fail-open contract
17
- *
18
- * The skip only fires on positive evidence that the diff is small and
19
- * non-sensitive. Every degraded input — an unknown line count, an
20
- * unreadable manifest, a disabled floor — resolves to "do not skip", so a
21
- * measurement failure can never buy a change less review. Sensitive-path
22
- * hits are matched with the same `sensitivePaths` classes the review-depth
23
- * derivation reads (`selectSensitivePathClasses`), so the floor and the
24
- * depth tiering can never disagree about what "sensitive" means.
25
- *
26
- * All exports are total: no throws, no I/O beyond the injected git spawn in
27
- * {@link countChangedLines}.
2
+ * Close-scope lens diff-floor: a diff under the changed-line floor that
3
+ * touches no sensitive path skips lens materialization. Fail-open — every
4
+ * degraded input (unknown count, unreadable manifest, floor `0`) means "do
5
+ * not skip". Sensitive classes come from the same selector as review depth,
6
+ * so the two never disagree. Total; no I/O beyond the injected git spawn.
28
7
  */
29
8
 
30
9
  import { gitSpawn } from '../git-utils.js';
31
10
  import { readNumstatRows } from '../orchestration/diff-magnitude.js';
32
11
  import { selectSensitivePathClasses } from './selector.js';
33
12
 
34
- /**
35
- * Default changed-line floor below which a non-sensitive diff skips lens
36
- * materialization. Chosen from the measured distribution (Story #4699): the
37
- * sampled zero-yield closes clustered well under this size.
38
- */
13
+ /** Measured: zero-yield closes clustered well under this size. */
39
14
  export const DEFAULT_LENS_DIFF_FLOOR = 40;
40
15
 
41
16
  /**
42
- * Resolve the configured lens diff-floor from a resolved config wrapper.
43
- * `delivery.review.lensDiffFloor` must be a non-negative integer; anything
44
- * else (absent block, wrong type, negative, non-finite) falls back to
45
- * {@link DEFAULT_LENS_DIFF_FLOOR}. `0` is a valid, deliberate "floor off".
46
- *
47
- * @param {object|null|undefined} config Resolved `.agentrc.json` wrapper.
48
- * @returns {number}
49
- */
50
- export function resolveLensDiffFloor(config) {
51
- const value = config?.delivery?.review?.lensDiffFloor;
52
- if (typeof value === 'number' && Number.isInteger(value) && value >= 0) {
53
- return value;
54
- }
55
- return DEFAULT_LENS_DIFF_FLOOR;
56
- }
57
-
58
- /**
59
- * Count the changed lines (additions + deletions) in the
60
- * `baseRef...headRef` diff via `git diff --numstat`.
61
- *
62
- * The read and the parse are shared with the light path's magnitude backstop
63
- * ({@link module:lib/orchestration/diff-magnitude.readNumstatRows}) so the two
64
- * cannot disagree about how a diff is measured. This one keeps a whole-diff
65
- * total: the lens floor asks "is this diff small", not "is its implementation
66
- * half small", so it deliberately does **not** apply the companion exemption.
67
- *
68
- * Total — never throws. Returns `null` (the neutral "count unknown" signal
69
- * the floor fails open on) for any git failure or unparseable output, and
70
- * `0` for a genuinely empty diff. Binary rows (`-\t-\tpath`) contribute 0
71
- * text lines but do not poison the parse.
17
+ * Whole-diff additions + deletions (no companion exemption: the question is
18
+ * "is this diff small"). Shares the numstat parse with the light path's
19
+ * backstop. `null` on any git failure; binary rows count 0.
72
20
  *
73
21
  * @param {{
74
22
  * baseRef: string,
@@ -90,20 +38,8 @@ export function countChangedLines({
90
38
  }
91
39
 
92
40
  /**
93
- * Decide whether the close-scope lens pass should skip materialization for
94
- * this diff. Skips **only** when all of the following hold:
95
- *
96
- * 1. The floor is enabled (`floor > 0`).
97
- * 2. The changed-line count is *known* and strictly below the floor.
98
- * 3. The changed-file set intersects **zero** registered sensitive-path
99
- * classes (`audit-rules.json#sensitivePaths`).
100
- *
101
- * Every other state — floor disabled, unknown count, at-or-above floor, a
102
- * sensitive-path hit — resolves to `skip: false` with a named reason, so
103
- * the verdict is auditable in the findings-yield ledger.
104
- *
105
- * Pure and total: never throws (a throwing sensitive-path matcher degrades
106
- * to "not skippable").
41
+ * Skip only when the floor is enabled, the count is known and below it, and
42
+ * no sensitive-path class matches; every other state names its reason.
107
43
  *
108
44
  * @param {{
109
45
  * changedFiles?: string[]|null,
@@ -153,7 +89,6 @@ export function evaluateLensDiffFloor(input = {}) {
153
89
  injectedRules: input.injectedRules,
154
90
  });
155
91
  } catch {
156
- // An unreadable manifest is not evidence the change is safe to skip.
157
92
  return verdict(false, 'sensitive-classes-unknown');
158
93
  }
159
94
  const matched = Array.isArray(classes) ? classes : [];
@@ -1,20 +1,6 @@
1
1
  /**
2
- * lib/audit-suite/runner.js — `runAuditSuite` aggregation core.
3
- *
4
- * Extracted from the former `run-audit-suite.js` CLI (Story #963, Epic #946;
5
- * the CLI wrapper itself was retired in #4482 — `runAuditSuite` via the
6
- * barrel is the only supported entry point).
7
- *
8
- * The runner composes the focused helpers from this directory:
9
- * - frontmatter.js → `summarizeWorkflow`
10
- * - substitutions.js → `applySubstitutions`, `computeAllowedKeys`
11
- * - findings.js → `aggregateSummary`
12
- * - workflow-loader.js → `loadWorkflow`, `defaultWriteArtifact`
13
- *
14
- * It owns the audit envelope shape (`metadata`, `findings`, `workflows`) and
15
- * the per-audit fan-out + result reduction. The former CLI entry-point
16
- * (`run-audit-suite.js`) was retired in #4482; callers invoke
17
- * `runAuditSuite` via the `lib/audit-suite/index.js` barrel.
2
+ * `runAuditSuite`: owns the audit envelope shape (`metadata`, `findings`,
3
+ * `workflows`) and the per-audit fan-out; invoked via the barrel.
18
4
  */
19
5
 
20
6
  import fs from 'node:fs/promises';
@@ -149,35 +135,19 @@ async function reduceResults({
149
135
  }
150
136
 
151
137
  /**
152
- * Run a suite of named audit workflows.
153
- *
154
- * For each audit name the suite will:
155
- * 1. Validate it is registered in audit-rules.json.
156
- * 2. Locate the corresponding `.agents/workflows/<auditName>.md` file.
157
- * 3. Return a slim `workflow` descriptor (audit name, source path, summary,
158
- * byte size) for the calling AI agent. Full prompt bodies are written to
159
- * `<auditOutputDir>/audit-<runId>-<audit>.md` (resolved from
160
- * `project.paths.tempRoot`, default `temp/audits/`) when `artifactPrefix`
161
- * (or `runId`) is provided, so downstream agents can read them locally
162
- * without bloating the GitHub comment surface.
163
- *
164
- * Substitutions: callers may pass a `substitutions` map of `{{key}}` → value
165
- * pairs. Allowed keys are the built-ins (auditOutputDir, ticketId, baseBranch,
166
- * changedFiles) plus any `substitutionKeys` declared on the requested audits in
167
- * audit-rules.json, aggregated across auditWorkflows. Unknown keys
168
- * raise a ValidationError.
138
+ * Resolve registered audit workflows into slim descriptors; with
139
+ * `artifactPrefix`, full bodies are written to disk instead of travelling in
140
+ * the envelope. Substitution keys beyond the built-ins must be declared as
141
+ * `substitutionKeys` in audit-rules.json, else ValidationError.
169
142
  *
170
143
  * @param {object} opts
171
- * @param {string[]} opts.auditWorkflows - List of audit names to run.
172
- * @param {Record<string,string>} [opts.substitutions] - Optional template substitutions.
173
- * @param {string} [opts.artifactPrefix] - When set, write full bodies to
174
- * `<artifactsDir>/audit-<artifactPrefix>-<audit>.md`.
175
- * @param {string} [opts.artifactsDir] - Override the artifacts directory
176
- * (default: `<PROJECT_ROOT>/<auditOutputDir>`, which resolves to
177
- * `<tempRoot>/audits` — `temp/audits` with default config).
178
- * @param {Function} [opts.injectedLoadWorkflow] - Optional override for testing.
179
- * @param {object} [opts.injectedRules] - Optional override for the audit-rules content (testing).
180
- * @param {Function} [opts.injectedWriteArtifact] - Optional override for filesystem-free testing.
144
+ * @param {string[]} opts.auditWorkflows
145
+ * @param {Record<string,string>} [opts.substitutions]
146
+ * @param {string} [opts.artifactPrefix] - writes `audit-<prefix>-<audit>.md`.
147
+ * @param {string} [opts.artifactsDir] - defaults to `<auditOutputDir>`.
148
+ * @param {Function} [opts.injectedLoadWorkflow]
149
+ * @param {object} [opts.injectedRules]
150
+ * @param {Function} [opts.injectedWriteArtifact]
181
151
  * @returns {Promise<object>} Aggregated audit results.
182
152
  */
183
153
  export async function runAuditSuite({