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,82 +1,23 @@
1
- // .agents/scripts/lib/baselines/git-base.js
1
+ // The one loader for base-ref baseline reads: `git show <ref>:<file>` via
2
+ // argv tokens (no shell), with a `(ref, file)` LRU that also caches `null`.
2
3
  //
3
- // Story #1962 / Task #1969 — Single safe loader for base-ref baseline
4
- // reads. Every per-kind regression CLI in Epic #1943 needs to read the
5
- // committed baseline from a base ref (typically the Epic branch tip or
6
- // `origin/main`) and diff it against the head's working-tree baseline.
7
- // Routing every read through `readBaseFromGit(ref, file)` guarantees:
8
- //
9
- // - One implementation of "spawn `git show <ref>:<file>`", with
10
- // identical argv shape, identical env scrubbing, and identical
11
- // error semantics. Per-kind CLIs do not get to invent their own
12
- // git invocations and drift apart.
13
- // - One LRU cache keyed by `(ref, file)`. Within a single dispatcher
14
- // run, the same `(ref, file)` tuple is read at most once even when
15
- // multiple gates need it (e.g. when scope resolution and the
16
- // regression compare both touch the same baseline file). The cache
17
- // stores the full result — including `null` for "no such file at
18
- // ref" — so a missing baseline does not re-spawn git on every
19
- // subsequent lookup.
20
- // - `child_process.spawn`-based execution (no shell), which is the
21
- // security baseline (`security-baseline.md` § Output & Rendering):
22
- // `ref` and `file` are passed as separate argv tokens, never
23
- // interpolated into a shell command.
24
- //
25
- // Story #5009 moved the spawn itself, the stdout ceiling and the
26
- // failure-message shape out to `lib/child-exec.js` — the one child-process
27
- // surface — so this module now owns only what is genuinely its own: the
28
- // `(ref, file)` LRU, the exit-code semantics below, and the test seam. The
29
- // `__setSpawnRunner` seam still injects a mock runner; it is threaded through
30
- // the shared wrapper as `run` rather than calling `spawnSync` directly.
31
- //
32
- // Exit semantics are intentionally narrow:
33
- //
34
- // - Exit 0: stdout is the file contents, returned as a UTF-8 string.
35
- // - Exit 128: git's "path does not exist in this revision" — the
36
- // loader treats this as a normal "no baseline at base ref" case
37
- // and returns `null`. Callers branch on `result === null` rather
38
- // than catching an error.
39
- // - Any other outcome (bad ref, corrupted repo, git binary missing, or
40
- // the child killed by signal so `status` is `null`): thrown so the
41
- // dispatcher can surface a config-error exit code rather than
42
- // silently treating the failure as "no baseline". A bad ref is a
43
- // config bug, not a missing file.
44
- //
45
- // That two-way split is load-bearing (Story #4914): `null` means and only
46
- // means "path absent at ref". Callers may therefore treat a throw as a
47
- // hard failure without having to re-diagnose it.
4
+ // Exit semantics: 0 → contents; 128 → `null` ("path absent at ref", and only
5
+ // that); anything else (bad ref, signal-killed child) throws, so callers may
6
+ // treat a throw as a hard config failure, never as "no baseline".
48
7
 
49
8
  import { formatChildFailure, spawnChild } from '../child-exec.js';
50
9
 
51
- // ---------------------------------------------------------------------------
52
- // LRU cache. Small footprint — even a fan-out across all seven baseline
53
- // kinds against two refs (head + base) is 14 entries. Capping at 64 keeps
54
- // long-lived dispatcher runs (e.g. orchestrators that loop across
55
- // multiple stories) bounded without ever evicting a hot entry in normal
56
- // use. The cache stores `null` as a real value so missing-file lookups
57
- // also hit on the second call.
58
- // ---------------------------------------------------------------------------
59
-
10
+ // Seven kinds × two refs is 14 entries; 64 bounds long-lived runs without
11
+ // evicting hot entries.
60
12
  const DEFAULT_MAX_ENTRIES = 64;
61
13
 
62
- /**
63
- * Injected spawn runner, or `undefined` to use the shared surface's real one.
64
- * Story #4914's explicit 64 MB ceiling still applies to both git reads below —
65
- * it is now `child-exec.js`'s `MAX_BUFFER_BYTES`, applied by `spawnChild`.
66
- *
67
- * @type {Function | undefined}
68
- */
14
+ /** @type {Function | undefined} */
69
15
  let _spawnRunner;
70
16
  let _cache = new Map();
71
17
  let _maxEntries = DEFAULT_MAX_ENTRIES;
72
18
 
73
19
  /**
74
- * Test-only seam. Lets the unit test inject a mock `spawnSync` (to
75
- * count invocations and assert "spawn, not exec") and a fresh cache (so
76
- * test order does not leak through the module-global LRU).
77
- *
78
- * Production code MUST NOT call this. The double-underscore prefix is
79
- * the contract.
20
+ * Test-only.
80
21
  *
81
22
  * @param {object} [opts]
82
23
  * @param {Function} [opts.spawn] - Mock spawnSync.
@@ -92,10 +33,6 @@ export function __setSpawnRunner(opts = {}) {
92
33
  _cache = new Map();
93
34
  }
94
35
 
95
- /**
96
- * Reset the loader to factory defaults. Tests call this in `afterEach`
97
- * to keep state from leaking across files.
98
- */
99
36
  export function __resetForTests() {
100
37
  _spawnRunner = undefined;
101
38
  _maxEntries = DEFAULT_MAX_ENTRIES;
@@ -103,8 +40,7 @@ export function __resetForTests() {
103
40
  }
104
41
 
105
42
  /**
106
- * Internal: build the cache key. Joining with a NUL byte is cheap and
107
- * collision-free — neither git refs nor POSIX paths may contain NUL.
43
+ * NUL-joined: neither refs nor paths may contain NUL.
108
44
  *
109
45
  * @param {string} ref
110
46
  * @param {string} file
@@ -115,9 +51,7 @@ function cacheKey(ref, file) {
115
51
  }
116
52
 
117
53
  /**
118
- * Internal: bump an entry to the most-recently-used end of the LRU. Map
119
- * iteration order is insertion order, so deleting and re-setting moves
120
- * the entry to the back.
54
+ * Move to the MRU end (Map iteration is insertion order) and evict the LRU.
121
55
  *
122
56
  * @param {string} key
123
57
  * @param {string | null} value
@@ -126,18 +60,14 @@ function touch(key, value) {
126
60
  _cache.delete(key);
127
61
  _cache.set(key, value);
128
62
  while (_cache.size > _maxEntries) {
129
- // Evict the least-recently-used entry (first key in iteration).
130
63
  const oldest = _cache.keys().next().value;
131
64
  _cache.delete(oldest);
132
65
  }
133
66
  }
134
67
 
135
68
  /**
136
- * Build a child-process env that drops every `GIT_*` variable inherited
137
- * from the parent. Mirrors `git-utils.js#cleanGitEnv` — see that file for
138
- * the long-form explanation. Without this, husky-driven invocations
139
- * inherit the parent's `GIT_DIR` / `GIT_WORK_TREE` and end up reading
140
- * from the wrong worktree.
69
+ * Drop inherited `GIT_*` vars: under husky, `GIT_DIR`/`GIT_WORK_TREE` would
70
+ * point git at the wrong worktree.
141
71
  */
142
72
  function cleanGitEnv() {
143
73
  return Object.fromEntries(
@@ -145,21 +75,15 @@ function cleanGitEnv() {
145
75
  );
146
76
  }
147
77
 
148
- /** Both reads reject the same way on a missing or non-string argument. */
149
78
  function isNonEmptyString(value) {
150
79
  return typeof value === 'string' && value.length > 0;
151
80
  }
152
81
 
153
- /** Both reads coerce a missing stdout to the empty string rather than throwing. */
154
82
  function stdoutOf(result) {
155
83
  return typeof result?.stdout === 'string' ? result.stdout : '';
156
84
  }
157
85
 
158
86
  /**
159
- * Run a git subprocess through the shared child surface. Both reads below need
160
- * the identical shape — injected runner, resolved cwd, `GIT_*`-scrubbed env,
161
- * argv tokens rather than a shell string — so it lives here once.
162
- *
163
87
  * @param {string[]} args
164
88
  * @param {{ cwd?: string }} opts
165
89
  */
@@ -172,18 +96,9 @@ function runGit(args, opts) {
172
96
  }
173
97
 
174
98
  /**
175
- * Read `<file>` at the given git ref. Returns the file contents as a
176
- * UTF-8 string when the path exists, or `null` when git reports the
177
- * path does not exist at the ref.
178
- *
179
- * Cached: subsequent calls with the same `(ref, file)` skip the
180
- * subprocess and return the cached value (including a cached `null`).
181
- *
182
- * @param {string} ref - Any ref git understands (`HEAD`, `epic/1943`,
183
- * `origin/main`, a SHA, …).
184
- * @param {string} file - Repo-relative path to the file.
185
- * @param {{ cwd?: string }} [opts] - Optional cwd override; defaults to
186
- * `process.cwd()`.
99
+ * @param {string} ref
100
+ * @param {string} file - Repo-relative path.
101
+ * @param {{ cwd?: string }} [opts]
187
102
  * @returns {string | null}
188
103
  */
189
104
  export function readBaseFromGit(ref, file, opts = {}) {
@@ -196,7 +111,6 @@ export function readBaseFromGit(ref, file, opts = {}) {
196
111
 
197
112
  const key = cacheKey(ref, file);
198
113
  if (_cache.has(key)) {
199
- // Hot path — re-touch to refresh LRU position, but no spawn.
200
114
  const cached = _cache.get(key);
201
115
  touch(key, cached);
202
116
  return cached;
@@ -205,8 +119,7 @@ export function readBaseFromGit(ref, file, opts = {}) {
205
119
  const spec = `${ref}:${file}`;
206
120
  const result = runGit(['show', spec], opts);
207
121
 
208
- // `child_process.spawnSync` returns `status: null` when the child died
209
- // by signal. Treat that as a hard failure rather than "no file".
122
+ // `status: null` (signal-killed) falls through to the throw.
210
123
  const status = result.status;
211
124
  if (status === 0) {
212
125
  const out = stdoutOf(result);
@@ -214,10 +127,7 @@ export function readBaseFromGit(ref, file, opts = {}) {
214
127
  return out;
215
128
  }
216
129
 
217
- // Git uses exit 128 for "path does not exist in this revision" and a
218
- // handful of other "ref/path not found" cases. The stderr message
219
- // varies across git versions; matching on the exit code keeps us
220
- // version-independent and i18n-safe.
130
+ // Match the exit code, not stderr: stable across git versions and locales.
221
131
  if (status === 128) {
222
132
  touch(key, null);
223
133
  return null;
@@ -233,39 +143,11 @@ export function readBaseFromGit(ref, file, opts = {}) {
233
143
  }
234
144
 
235
145
  /**
236
- * Read the commits, within the range `<baseRef>..HEAD`, that touched `<file>`
237
- * (Story #4731; widened to carry SHAs by Story #5179). Powers the baseline
238
- * refresh-acknowledgment trigger: a `baseline-refresh:`-tagged commit in the
239
- * compared range that touches a kind's baseline acknowledges that run's
240
- * head-vs-base regressions.
241
- *
242
- * Story #5179 — this returned SUBJECTS ONLY, and that omission was load-bearing
243
- * in the wrong direction. With no commit handle, the acknowledgment could not
244
- * ask what the tagged commit actually rewrote, so it could only be a whole-run
245
- * blanket: every regression in the range demoted, including rows that commit
246
- * never touched and drift that landed after it. Carrying `sha` alongside
247
- * `subject` is what lets the caller read the baseline blob AT the refresh
248
- * commit and scope the acknowledgment to it.
249
- *
250
- * Restricting the log to `-- <file>` means the returned commits already satisfy
251
- * the "commit whose diff touches the baseline file" half of the predicate; the
252
- * caller only has to match the tag substring against each subject. Runs through
253
- * the same shared `spawnChild` surface and injected runner as
254
- * `readBaseFromGit`, so it inherits the identical env scrubbing (drop inherited
255
- * `GIT_*`), the same stdout ceiling, and the spawn-not-exec security posture
256
- * (argv tokens, `shell: false`).
257
- *
258
- * A NUL separator between the two fields is what makes this parse safely: a
259
- * commit subject may contain anything except a newline, so any printable
260
- * delimiter could appear inside one, but neither field may contain NUL.
261
- *
262
- * Returns an empty array whenever the range cannot be walked (missing base ref,
263
- * git failure, empty range) — the acknowledgment path treats "no matching
264
- * commit" and "could not determine" identically: the ratchet stays at full
265
- * strength. Not cached: the range result depends on live HEAD, which the
266
- * `(ref, file)` LRU key does not capture.
146
+ * Commits in `<baseRef>..HEAD` touching `<file>`; `sha` lets the refresh
147
+ * acknowledgment scope to what that commit rewrote. `[]` on failure keeps the
148
+ * ratchet strict. Uncached: depends on live HEAD.
267
149
  *
268
- * @param {string} baseRef - Range base (e.g. `main`, `origin/main`, a SHA).
150
+ * @param {string} baseRef
269
151
  * @param {string} file - Repo-relative path to the baseline file.
270
152
  * @param {{ cwd?: string }} [opts]
271
153
  * @returns {{ sha: string, subject: string }[]} newest first; `[]` on any failure.
@@ -298,8 +180,7 @@ export function readRangeCommitsTouchingFile(baseRef, file, opts = {}) {
298
180
  }
299
181
 
300
182
  /**
301
- * Inspect the current cache size. Test-only — production code should
302
- * not reason about cache state.
183
+ * Test-only.
303
184
  *
304
185
  * @returns {number}
305
186
  */
@@ -1,27 +1,7 @@
1
1
  /**
2
- * kernel.js — per-kind kernel-version resolution (Story #1891, Epic #1786).
3
- *
4
- * Every committed baseline stamps a `kernelVersion` semver string in its
5
- * envelope. The version tracks the in-repo (or upstream) kernel that
6
- * produced the rows — a bump invalidates every committed baseline of
7
- * that kind, signalling consumers to regenerate. The version source is
8
- * **per-kind**:
9
- *
10
- * - CRAP and Maintainability share the `typhonjs-escomplex` upstream
11
- * package version; both modules' `kernelVersion()` read it from the
12
- * nearest `node_modules/typhonjs-escomplex/package.json`.
13
- * - Lint, Coverage, Mutation, Lighthouse, Bundle-Size carry a static
14
- * in-repo semver bumped by hand whenever the scoring/rollup math
15
- * changes. Their `kernelVersion()` just returns the constant.
16
- *
17
- * This module is the public surface: callers ask
18
- * `currentKernelVersion(kind)` and get a single string back, no matter
19
- * which strategy the kind uses internally.
20
- *
21
- * `checkKernelVersion(kind, baselineVersion)` is the drift-detection
22
- * helper. It returns `{ match, current }` so a CI gate can compare the
23
- * baseline's stamp against the running kernel and decide whether to
24
- * regenerate or fail.
2
+ * Kind-module registry and kernel-version resolution. CRAP and MI stamp the
3
+ * installed scorer package version; the other kinds stamp a static semver
4
+ * bumped by hand when their scoring or rollup math changes.
25
5
  *
26
6
  * @module lib/baselines/kernel
27
7
  */
@@ -76,30 +56,6 @@ import {
76
56
  rowIdentity as duplicationRowIdentity,
77
57
  sortRows as duplicationSortRows,
78
58
  } from './kinds/duplication.js';
79
- import {
80
- applyEpsilon as lighthouseApplyEpsilon,
81
- compare as lighthouseCompare,
82
- kernelVersion as lighthouseKernelVersion,
83
- keyField as lighthouseKeyField,
84
- mergeRows as lighthouseMergeRows,
85
- name as lighthouseName,
86
- projectRow as lighthouseProjectRow,
87
- rollup as lighthouseRollup,
88
- rowIdentity as lighthouseRowIdentity,
89
- sortRows as lighthouseSortRows,
90
- } from './kinds/lighthouse.js';
91
- import {
92
- applyEpsilon as lintApplyEpsilon,
93
- compare as lintCompare,
94
- kernelVersion as lintKernelVersion,
95
- keyField as lintKeyField,
96
- mergeRows as lintMergeRows,
97
- name as lintName,
98
- projectRow as lintProjectRow,
99
- rollup as lintRollup,
100
- rowIdentity as lintRowIdentity,
101
- sortRows as lintSortRows,
102
- } from './kinds/lint.js';
103
59
  import {
104
60
  applyEpsilon as maintainabilityApplyEpsilon,
105
61
  compare as maintainabilityCompare,
@@ -127,14 +83,8 @@ import {
127
83
  } from './kinds/mutation.js';
128
84
 
129
85
  /**
130
- * Assemble the kind-module protocol from named imports.
131
- *
132
- * Prefer named imports over `import * as kind` here: knip (and the
133
- * dead-exports ratchet) cannot see members reached only through
134
- * `getKindModule(kind).projectRow(...)` after a namespace import, so
135
- * star-imports of `kinds/*.js` produced systematic false-positive dead
136
- * exports for the protocol surface (`name`, `keyField`, `kernelVersion`,
137
- * `projectRow`, `sortRows`, `rollup`, …).
86
+ * Named imports, not `import * as`: knip cannot see members reached through
87
+ * a namespace, which reports the protocol surface as dead exports.
138
88
  *
139
89
  * @param {object} members
140
90
  * @returns {object}
@@ -143,8 +93,7 @@ function bindKindModule(members) {
143
93
  return Object.freeze({
144
94
  name: members.name,
145
95
  keyField: members.keyField,
146
- // Story #5215: the merge identity, distinct from the `keyField`
147
- // grouping key above — CRAP groups by file and identifies by method.
96
+ // Merge identity; distinct from the `keyField` grouping key.
148
97
  rowIdentity: members.rowIdentity,
149
98
  kernelVersion: members.kernelVersion,
150
99
  projectRow: members.projectRow,
@@ -153,32 +102,14 @@ function bindKindModule(members) {
153
102
  compare: members.compare,
154
103
  applyEpsilon: members.applyEpsilon,
155
104
  mergeRows: members.mergeRows,
156
- // Optional per-kind hooks (Story #4775). `envelopeExtras` contributes
157
- // envelope-level stamps the shared writer would not otherwise know about;
158
- // `assertBaselineCompatible` lets a kind refuse a loaded baseline whose
159
- // scoring semantics predate the running scorer.
105
+ // Optional hooks: extra envelope stamps; refusal of an incompatible baseline.
160
106
  envelopeExtras: members.envelopeExtras,
161
107
  assertBaselineCompatible: members.assertBaselineCompatible,
162
108
  });
163
109
  }
164
110
 
165
- /**
166
- * Registry of every shipped kind module. Keys mirror the per-kind schema
167
- * filenames so a future "list all kinds" iterator can stay declarative.
168
- */
111
+ /** Keys mirror the per-kind schema filenames. */
169
112
  const KIND_MODULES = Object.freeze({
170
- lint: bindKindModule({
171
- name: lintName,
172
- keyField: lintKeyField,
173
- rowIdentity: lintRowIdentity,
174
- kernelVersion: lintKernelVersion,
175
- projectRow: lintProjectRow,
176
- sortRows: lintSortRows,
177
- rollup: lintRollup,
178
- compare: lintCompare,
179
- applyEpsilon: lintApplyEpsilon,
180
- mergeRows: lintMergeRows,
181
- }),
182
113
  coverage: bindKindModule({
183
114
  name: coverageName,
184
115
  keyField: coverageKeyField,
@@ -230,18 +161,6 @@ const KIND_MODULES = Object.freeze({
230
161
  mergeRows: mutationMergeRows,
231
162
  assertBaselineCompatible: mutationAssertBaselineCompatible,
232
163
  }),
233
- lighthouse: bindKindModule({
234
- name: lighthouseName,
235
- keyField: lighthouseKeyField,
236
- rowIdentity: lighthouseRowIdentity,
237
- kernelVersion: lighthouseKernelVersion,
238
- projectRow: lighthouseProjectRow,
239
- sortRows: lighthouseSortRows,
240
- rollup: lighthouseRollup,
241
- compare: lighthouseCompare,
242
- applyEpsilon: lighthouseApplyEpsilon,
243
- mergeRows: lighthouseMergeRows,
244
- }),
245
164
  'bundle-size': bindKindModule({
246
165
  name: bundleSizeName,
247
166
  keyField: bundleSizeKeyField,
@@ -269,8 +188,7 @@ const KIND_MODULES = Object.freeze({
269
188
  });
270
189
 
271
190
  /**
272
- * Look up a kind module by name. Throws when the kind isn't registered so
273
- * callers can't silently fall through to undefined behaviour.
191
+ * Throws on an unregistered kind.
274
192
  *
275
193
  * @param {string} kind
276
194
  * @returns {{ name: string, keyField: string, kernelVersion: () => string,
@@ -290,10 +208,6 @@ export function getKindModule(kind) {
290
208
  }
291
209
 
292
210
  /**
293
- * Resolve the running kernel version for `kind`. Delegates to the per-kind
294
- * module's `kernelVersion()` — see the module preamble for which strategy
295
- * each kind uses.
296
- *
297
211
  * @param {string} kind
298
212
  * @returns {string}
299
213
  */
@@ -302,10 +216,6 @@ export function currentKernelVersion(kind) {
302
216
  }
303
217
 
304
218
  /**
305
- * Resolve a kind module, or null when the kind is not registered. Lets the
306
- * optional-hook callers below stay expression-shaped instead of threading a
307
- * mutable binding through a try/catch.
308
- *
309
219
  * @param {string} kind
310
220
  * @returns {object|null}
311
221
  */
@@ -318,10 +228,8 @@ function tryGetKindModule(kind) {
318
228
  }
319
229
 
320
230
  /**
321
- * Ask a kind whether a loaded baseline is compatible with the running
322
- * scorer's SEMANTICS — a dimension `kernelVersion` cannot express, because a
323
- * kind's scoring can change while the upstream package it stamps does not
324
- * (Story #4775). Kinds without the hook always answer "compatible".
231
+ * Semantic compatibility, which `kernelVersion` cannot express: scoring can
232
+ * change while the stamped package does not. Kinds without the hook pass.
325
233
  *
326
234
  * @param {string} kind
327
235
  * @param {object|null} baseline
@@ -334,10 +242,6 @@ export function checkBaselineSemantics(kind, baseline) {
334
242
  }
335
243
 
336
244
  /**
337
- * Compare a baseline's stamped version against the currently running
338
- * kernel for the same kind. Returns `{ match, current }` so callers can
339
- * format a drift signal or trigger a regenerate.
340
- *
341
245
  * @param {string} kind
342
246
  * @param {string} baselineVersion
343
247
  * @returns {{ match: boolean, current: string }}
@@ -351,10 +255,6 @@ export function checkKernelVersion(kind, baselineVersion) {
351
255
  }
352
256
 
353
257
  /**
354
- * List every kind registered with the kernel. Useful for the writer's
355
- * envelope sanity check and for tests that want to iterate all shipped
356
- * kinds.
357
- *
358
258
  * @returns {string[]}
359
259
  */
360
260
  export function listKinds() {
@@ -1,26 +1,8 @@
1
- /**
2
- * _crap-new-method-gate.js — the policy `kinds/crap.js#compareCrap` applies to
3
- * a method that has no baseline row (Story #5002).
4
- *
5
- * Underscore-prefixed like `_shared-metric.js`: this is a helper for the
6
- * per-kind modules in this directory, not a kind of its own.
7
- *
8
- * A leaf — it imports nothing, so `kinds/crap.js` can consume it without
9
- * adding an edge to anything the comparator does not already reach.
10
- */
1
+ /** The gate `compareCrap` applies to a method with no baseline row. A leaf. */
11
2
 
12
3
  /**
13
- * The set of scanned files in which **every** measured method resolved 0%
14
- * coverage — the observable signature of a source no test loads at all.
15
- *
16
- * Deliberately derived from the scan rows rather than plumbed down from the
17
- * coverage artifact: the rows are the only thing both the preview gate and the
18
- * close-validation projection hand the comparator, and "the whole file is at
19
- * zero" is exactly what an all-zero istanbul entry produces here.
20
- *
21
- * A row carrying `coverage: null` is skipped, not counted as a zero — an
22
- * absent observation is not a measured one, and letting it vote would hand the
23
- * relief below to a file nothing measured at all.
4
+ * Files whose every measured method is at 0% coverage (no test loads them).
5
+ * `coverage: null` rows do not vote: unmeasured is not zero.
24
6
  *
25
7
  * @param {Array<{file: string, coverage?: number|null}>} currentRows
26
8
  * @returns {Set<string>}
@@ -40,24 +22,10 @@ export function deriveUncoveredFiles(currentRows) {
40
22
  }
41
23
 
42
24
  /**
43
- * The score a **new** method is judged against `newMethodCeiling` with.
44
- *
45
- * Normally the measured CRAP. In a file whose every method scored 0%, the
46
- * complexity term `c` alone.
47
- *
48
- * **Why.** `crap = c²·(1 − cov)³ + c` collapses to `c² + c` at zero coverage,
49
- * so the default ceiling of 30 caps a *brand-new* method in an untested file
50
- * at `c ≈ 5`. For the code that is untestable by construction — argv parsing,
51
- * `spawn` wiring, a CLI's top-level `main()` — that is not a quality signal
52
- * but a fragmentation tax: the only way past it is to shatter cohesive wiring
53
- * into sub-five-branch fragments, which raises the file's method count and its
54
- * reader's cost while measuring nothing. The coverage term still governs every
55
- * method in a file the tests *do* reach, and a genuinely sprawling function is
56
- * still refused — `c` alone must clear the ceiling.
57
- *
58
- * This is a **gate** decision, not a scoring one: the persisted baseline row
59
- * keeps its measured `c² + c`, so the regression arm on the next run compares
60
- * like with like.
25
+ * The score a new method meets the ceiling with: measured CRAP, or complexity
26
+ * `c` alone in a wholly uncovered file. At zero coverage CRAP is `c² + c`,
27
+ * which caps untestable wiring (argv, spawn, `main()`) at `c ≈ 5` and forces
28
+ * fragmentation. Gate-only: the persisted row keeps the measured CRAP.
61
29
  *
62
30
  * @param {{file: string, crap: number, cyclomatic?: number}} row
63
31
  * @param {Set<string>} uncoveredFiles
@@ -69,12 +37,8 @@ export function newMethodGateScore(row, uncoveredFiles) {
69
37
  }
70
38
 
71
39
  /**
72
- * Assemble a new-method violation.
73
- *
74
- * `gateScore` is written **only** when the ceiling was judged against
75
- * something other than the measured `crap` — the same write-only-when-
76
- * non-default idiom `projectRow` uses for its row markers — so the printer can
77
- * name the number that actually failed instead of one nothing tested.
40
+ * `gateScore` is set only when it differs from `crap`, so the printer names
41
+ * the number that actually failed.
78
42
  *
79
43
  * @param {object} row
80
44
  * @param {number} ceiling
@@ -92,8 +56,6 @@ export function buildNewViolation(row, ceiling, gateScore) {
92
56
  }
93
57
 
94
58
  /**
95
- * Render the measured-vs-gated half of a new-method violation line.
96
- *
97
59
  * @param {{crap: number, gateScore?: number}} v
98
60
  * @returns {string}
99
61
  */
@@ -1,23 +1,6 @@
1
1
  /**
2
- * _crap-read.js — the CRAP baseline read path (Story #5002).
3
- *
4
- * Underscore-prefixed like `_shared-metric.js`: a helper for the per-kind
5
- * modules in this directory, not a kind of its own. `kinds/crap.js` re-exports
6
- * `loadCrapBaseline` so existing importers keep one door.
7
- *
8
- * **This module is the whole read path, and there is only one.** `crap-utils.js`
9
- * used to carry a second one — `projectCrapEnvelopeToLegacy` plus its
10
- * `COMPAT_STAMP_*` allow-lists — so `check-baselines` (through
11
- * `baselines/reader.js`) and the `quality-preview` pre-commit arm (through that
12
- * projection) fed the same compat axes from two hand-maintained field lists. A
13
- * stamp added to one and not the other yielded two opposite verdicts on one
14
- * envelope, three times over: Story #4866 (`scoringSemantics`,
15
- * `tsTranspilerVersion`), #4969 (`rows[].anonymous`), #4986
16
- * (`provenanceStamped`). Every one of those axes keys on a POSITIVE marker, so
17
- * a dropped field read `undefined` and failed the baseline closed with a remedy
18
- * that could not work — re-deriving it wrote the stamp the read path then
19
- * discarded. With one reader that drift class is structurally impossible, so no
20
- * allow-list needs maintaining.
2
+ * The single CRAP baseline read path, built on `baselines/reader.js` so every
3
+ * gate feeds the compat axes the same stamps. Re-exported by `kinds/crap.js`.
21
4
  */
22
5
 
23
6
  import path from 'node:path';
@@ -29,19 +12,8 @@ import {
29
12
  } from '../reader.js';
30
13
 
31
14
  /**
32
- * Read the committed CRAP baseline off the working tree through
33
- * `baselines/reader.js` and project it onto the `file`-keyed shape the
34
- * comparator and the compat axes consume.
35
- *
36
- * `baselinePath` selects the explicit-path reader variant (the worktree /
37
- * epic-ref callers always know their own path); without one the reader
38
- * resolves the configured location for the `crap` kind itself.
39
- *
40
- * Returns `null` on any read/parse/schema failure; the preview gate maps that
41
- * to "no baseline" and fails open, as it always did.
42
- *
43
- * Deliberately module-local: `loadCrapBaseline`'s `readFromTree` default is the
44
- * single production door to it, and tests inject their own loader.
15
+ * Read the working-tree baseline, projected onto the `file`-keyed comparator
16
+ * shape. `null` on any failure; the preview gate then fails open.
45
17
  *
46
18
  * @param {{baselinePath?: string, projectRoot?: string}} [opts]
47
19
  * @returns {object|null}
@@ -74,14 +46,8 @@ function readCrapBaselineFromTree({ baselinePath, projectRoot } = {}) {
74
46
  }
75
47
 
76
48
  /**
77
- * Re-key one on-disk row (`path`) onto the `file` field `compareCrap` matches
78
- * on, carrying the two write-only-when-non-default row markers verbatim.
79
- *
80
- * Both markers are BASELINE facts. Dropping `anonymous` would leave every
81
- * re-keyed row looking like an unmarked anonymous one — precisely the shape the
82
- * `anon-identity-unstamped` axis fails closed (Story #4969) — and dropping
83
- * `coordinateSystem` would let the comparator drift-resolve across two
84
- * coordinate systems (Story #4866).
49
+ * Re-key `path` to `file`, carrying `coordinateSystem` and `anonymous`
50
+ * verbatim: dropping either breaks a compat axis or the comparator.
85
51
  *
86
52
  * @param {{path: string, method: string, startLine: number, crap: number,
87
53
  * coordinateSystem?: string, anonymous?: boolean}} row
@@ -101,14 +67,8 @@ function projectBaselineRow(row) {
101
67
  }
102
68
 
103
69
  /**
104
- * Pure helper: resolve the CRAP baseline either from the working tree (via
105
- * `readCrapBaselineFromTree`) or, when `epicRef` is supplied, from
106
- * `git show <epicRef>:<baselinePath>` via `readBaselineAtRef`.
107
- *
108
- * Story #1120 threads `epic/<id>` into close-validation so the comparison runs
109
- * against the Epic-branch HEAD's committed baseline. This helper delegates the
110
- * read to baseline-store and applies the CRAP shape-check +
111
- * `tsTranspilerVersion` back-fill on top.
70
+ * From the working tree, or from `<epicRef>:<baselinePath>` when `epicRef` is
71
+ * set; only the ref path needs the shape-check and transpiler back-fill.
112
72
  */
113
73
  export function loadCrapBaseline({
114
74
  baselinePath,
@@ -125,9 +85,6 @@ export function loadCrapBaseline({
125
85
  logger,
126
86
  label: 'CRAP',
127
87
  });
128
- // No-epicRef path delegates to readFromTree which already applies the
129
- // shape-check + tsTranspilerVersion back-fill, so a tree read returns either
130
- // a valid envelope or null. Epic-ref path bypasses that helper — shape-check
131
88
  if (!epicRef) return parsed;
132
89
  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
133
90
  return null;