mandrel 2.60.0 → 2.62.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 (662) 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/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. 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;