mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,45 +1,12 @@
1
1
  /**
2
- * behind-recovery.js — the one bounded `BEHIND` → `gh pr update-branch`
3
- * recovery decision (Story #5006).
4
- *
5
- * Two loops watch an open PR and both must fast-forward it when GitHub
6
- * reports `mergeStateStatus: BEHIND`:
7
- *
8
- * - the CI-watch loop (`pr-watch.js#watchPrToTerminal`),
9
- * which probes with a synchronous `gh pr view` spawn and re-enters its
10
- * poll loop after each update; and
11
- * - the merge wait (`single-story-close/phases/confirm-merge.js`), which
12
- * probes with an async `gh` facade and simply re-reads on the next tick.
13
- *
14
- * They had two copies of the same three-way decision — *is it BEHIND, is
15
- * there update budget left, did the update land* — differing only in
16
- * incidental ordering, which is exactly the shape that drifts. This module
17
- * owns the decision; the callers keep their own probe source, their own
18
- * timing model, and their own operator-facing wording (supplied as the
19
- * `on*` callbacks).
20
- *
21
- * Deliberately NOT owned here: probing `mergeStateStatus`, counting the
22
- * budget across iterations, and deciding what a caller does next with the
23
- * verdict. The helper is a single bounded step, not a loop.
2
+ * behind-recovery.js — one bounded `BEHIND` → `gh pr update-branch` step,
3
+ * shared by both merge loops; callers own probing, budget and wording.
24
4
  */
25
5
 
26
- /**
27
- * The `gh pr view --json mergeStateStatus` value that licenses a recovery.
28
- * Module-private: both call sites reach it through {@link applyBehindUpdate},
29
- * so exporting it would only add a symbol the reachability ratchet scores
30
- * dead.
31
- */
32
6
  const BEHIND_MERGE_STATE = 'BEHIND';
33
7
 
34
8
  /**
35
- * Normalise an `updateBranch()` settlement into `{ ok, detail }`.
36
- *
37
- * Both callers' invokers signal failure differently — the merge wait's `gh`
38
- * facade **throws**, the watcher's `spawnSync` port **resolves** a non-zero
39
- * status — so both shapes are accepted: a throw is a failure, and so is a
40
- * resolved object carrying `ok === false`. Anything else resolved (including
41
- * `undefined`) is a success, which is what a facade that only throws on
42
- * failure returns.
9
+ * Failure is a throw or a resolved `{ ok: false }`; anything else succeeds.
43
10
  *
44
11
  * @param {() => Promise<unknown>} updateBranch
45
12
  * @returns {Promise<{ ok: boolean, detail: string }>}
@@ -57,22 +24,14 @@ async function settleUpdate(updateBranch) {
57
24
  }
58
25
 
59
26
  /**
60
- * Apply at most one bounded `gh pr update-branch` to a PR that is BEHIND its
61
- * base.
62
- *
63
- * The order of the two guards is load-bearing: **not-BEHIND is checked
64
- * first**, so the budget-spent callback fires only for a PR that actually
65
- * wanted an update. Reversing them would announce an exhausted budget on
66
- * every poll of a perfectly up-to-date PR.
27
+ * Not-BEHIND is checked before the budget so an up-to-date PR never reports
28
+ * an exhausted budget; an unreadable probe never licenses a write.
67
29
  *
68
30
  * @param {object} args
69
- * @param {string|undefined|null} args.mergeStateStatus As probed by the
70
- * caller. Anything other than `BEHIND` (including a degraded/unknown probe)
71
- * is a no-op — an unreadable merge state must never license a write.
72
- * @param {number} [args.updatesUsed=0] Updates already applied this wait.
73
- * @param {number} [args.maxUpdates=0] Hard cap on updates per wait.
74
- * @param {() => Promise<unknown>} args.updateBranch Invoker that issues the
75
- * fast-forward. See {@link settleUpdate} for the accepted settlements.
31
+ * @param {string|undefined|null} args.mergeStateStatus
32
+ * @param {number} [args.updatesUsed=0]
33
+ * @param {number} [args.maxUpdates=0]
34
+ * @param {() => Promise<unknown>} args.updateBranch
76
35
  * @param {(args: { maxUpdates: number }) => void} [args.onBudgetSpent]
77
36
  * @param {(args: { updatesUsed: number, maxUpdates: number }) => void} [args.onUpdated]
78
37
  * @param {(detail: string) => void} [args.onUpdateFailed]
@@ -81,11 +40,7 @@ async function settleUpdate(updateBranch) {
81
40
  * updated: boolean,
82
41
  * outcome: 'not-behind'|'budget-spent'|'updated'|'update-failed',
83
42
  * }>}
84
- * `attempted` is true whenever the invoker ran — a failed update still
85
- * counts as an attempt (the merge wait treats it as a consumed tick and
86
- * re-reads the real state next poll). `updated` is true only when the
87
- * fast-forward actually landed, which is the signal a caller needs before
88
- * invalidating a terminal check outcome and re-polling.
43
+ * `updated` means terminal check outcomes must be re-polled.
89
44
  */
90
45
  export async function applyBehindUpdate({
91
46
  mergeStateStatus,
@@ -1,53 +1,8 @@
1
1
  /**
2
- * lib/orchestration/ceremony-routing.js — ceremony-profile acceptance
3
- * ceremony resolver.
4
- *
5
- * The sibling of `review-depth.js#resolveDepth`: it folds the operator
6
- * ceremony profile into a per-Story ceremony decision for the acceptance
7
- * verdict — **fresh-context spawn** vs the contract-identical **inline**
8
- * self-eval. It does NOT invent a risk score, and it no longer routes off
9
- * anything the diff says.
10
- *
11
- * ## The profile is the whole decision (Story #5343)
12
- *
13
- * - `minimal` — `inline`.
14
- * - `standard` — `inline` (the **default**).
15
- * - `strict` — `fresh`.
16
- *
17
- * A frontier-model worker scoring its own `acceptance[]` items against the
18
- * `verify[]` output it just produced is the default the delivery diet settled
19
- * on: the fresh critic's isolation bought a second full-context boot per
20
- * Story and, measured across the run, changed no verdict the inline pass did
21
- * not already reach. `strict` keeps the fresh-context critic for
22
- * high-assurance surfaces, and is the one profile that spawns one.
23
- *
24
- * **The derived change level is not an input here (Story #5366).** It is
25
- * still derived and still printed by `ceremony-derive.js`, because **review
26
- * depth** reads it — `review-depth.js#resolveDepth` continues to resolve
27
- * `deep` for any sensitive class, and that is untouched. What changed with
28
- * #5343 is which of the two decisions the level feeds: review depth, not the
29
- * verdict owner. Story #5366 finished the job by removing it (and the
30
- * per-cluster index beside it) from this function's signature: a decision
31
- * function that accepts what it ignores reads, to every caller and every
32
- * reviewer, as though the input still mattered. An unenumerable diff is
33
- * therefore not a fail-safe escalation here at all; it escalates review
34
- * depth instead, where the evidence it withholds actually matters.
35
- *
36
- * ## One verdict-owner per Story (Story #4723, narrowed by #5343)
37
- *
38
- * The resolved decision names the Story's **single verdict owner** via
39
- * `verdictOwner`: `'fresh-critic'` when the mode is `fresh`,
40
- * `'inline-self-eval'` when the mode is `inline`. Exactly one pass authors
41
- * the Story's verdict — the fresh maker-blind critic OR the
42
- * contract-identical inline self-eval, never both, and never an additional
43
- * pre-pass self-assessment before the owner runs. `acceptance-eval.js` is
44
- * the deterministic SCORER of that one authored verdict (schema validation,
45
- * round cap, proceed/redraft/block) — it is not a third pass over the
46
- * criteria. The verdict is **one file per Story**, scored in one gate call;
47
- * the cluster protocol that used to split it was retired with #5343.
48
- *
49
- * Pure and total: inputs in, decision out. No I/O, no throws. `null` /
50
- * `undefined` / malformed inputs degrade to the default profile.
2
+ * lib/orchestration/ceremony-routing.js — the acceptance verdict owner from
3
+ * the ceremony profile alone: `strict` → fresh critic, else inline self-eval.
4
+ * The change level is deliberately not an input (it feeds review depth).
5
+ * Exactly one pass authors the verdict. Pure and total.
51
6
  *
52
7
  * @typedef {'fresh'|'inline'} CeremonyMode
53
8
  * @typedef {'fresh-critic'|'inline-self-eval'} VerdictOwner
@@ -55,10 +10,6 @@
55
10
  */
56
11
 
57
12
  /**
58
- * Map a resolved ceremony mode to the Story's single verdict owner
59
- * (Story #4723). Total: any non-`fresh` value maps to the inline
60
- * self-eval owner, mirroring how the mode itself degrades.
61
- *
62
13
  * @param {CeremonyMode} mode
63
14
  * @returns {VerdictOwner}
64
15
  */
@@ -66,23 +17,12 @@ export function verdictOwnerForMode(mode) {
66
17
  return mode === 'fresh' ? 'fresh-critic' : 'inline-self-eval';
67
18
  }
68
19
 
69
- /**
70
- * The ceremony-profile vocabulary — the **single** place the three profile
71
- * names are written. `normalizeCeremonyProfile` is its reader and the
72
- * `CeremonyProfile` typedef is derived from it, so adding a profile is a
73
- * one-line change here (Story #4926).
74
- *
75
- * @type {readonly ['minimal', 'standard', 'strict']}
76
- */
20
+ /** @type {readonly ['minimal', 'standard', 'strict']} */
77
21
  const CEREMONY_PROFILES = Object.freeze(['minimal', 'standard', 'strict']);
78
22
 
79
- /** The profile an absent or unrecognized value degrades to. */
80
23
  const DEFAULT_CEREMONY_PROFILE = 'standard';
81
24
 
82
25
  /**
83
- * The one routing table: profile → mode + the reason the decision carries.
84
- * `strict` is the only profile that spawns a fresh critic.
85
- *
86
26
  * @type {Readonly<Record<CeremonyProfile, { mode: CeremonyMode, reason: string }>>}
87
27
  */
88
28
  const PROFILE_DECISIONS = Object.freeze({
@@ -102,9 +42,6 @@ const PROFILE_DECISIONS = Object.freeze({
102
42
  });
103
43
 
104
44
  /**
105
- * Normalize an operator/config ceremony profile. Unknown values degrade to
106
- * `standard` (fail toward the documented default, not toward less ceremony).
107
- *
108
45
  * @param {unknown} value
109
46
  * @returns {CeremonyProfile}
110
47
  */
@@ -115,10 +52,6 @@ function normalizeCeremonyProfile(value) {
115
52
  }
116
53
 
117
54
  /**
118
- * Resolve the acceptance ceremony for one Story from the ceremony profile —
119
- * its one and only input. See the module header for the profile table and why
120
- * the derived change level is not among them.
121
- *
122
55
  * @param {{
123
56
  * ceremonyProfile?: (CeremonyProfile|string|null|undefined),
124
57
  * }} [input]
@@ -130,9 +63,6 @@ function normalizeCeremonyProfile(value) {
130
63
  * }}
131
64
  */
132
65
  export function resolveCeremonyForRisk(input = {}) {
133
- // Optional chaining rather than a typeof guard: `normalizeCeremonyProfile`
134
- // is already total over anything that is not one of the three names, so a
135
- // non-object input degrades to `standard` through the same door.
136
66
  const profile = normalizeCeremonyProfile(input?.ceremonyProfile);
137
67
  const { mode, reason } = PROFILE_DECISIONS[profile];
138
68
  return { mode, reason, profile, verdictOwner: verdictOwnerForMode(mode) };
@@ -1,33 +1,12 @@
1
1
  /**
2
- * lib/orchestration/change-set.js — the **one** Story change-set enumerator
3
- * (Story #4593).
2
+ * lib/orchestration/change-set.js — the one Story change-set enumerator.
3
+ * Computed once and injected so ceremony, review depth and lens roster all
4
+ * route off the same file list.
4
5
  *
5
- * ## Why this exists
6
- *
7
- * A single Story delivery used to enumerate `git diff --name-only
8
- * <base>...<head>` three to four separate times: once for the ceremony
9
- * derivation in `helpers/deliver-story`, once inside `runCodeReview` (to derive
10
- * the review depth), once for the Story-scope local-lens roster, and once more
11
- * per fresh acceptance critic. Every one of those consumers must agree about
12
- * *what changed* — ceremony level and review depth both flow from
13
- * `deriveChangeLevel`, so two enumerations straddling a commit could route the
14
- * same Story two different ways. Computing the set once and injecting it closes
15
- * that window and drops the redundant git calls.
16
- *
17
- * ## Contract
18
- *
19
- * {@link computeChangeSet} is **total**: it never throws. A diff it cannot
20
- * enumerate (git failure, missing ref, spawn error) yields
21
- * `{ files: null, enumerated: false }` — the neutral "diff unknown" signal that
22
- * `deriveChangeLevel` / `resolveDepth` already fail safe on (`standard` depth, a
23
- * `fresh` critic). `null` is deliberately distinct from `[]`: an empty array is
24
- * the *fact* that nothing changed, whereas `null` is the *absence* of evidence,
25
- * and only the latter must never buy a change less checking.
26
- *
27
- * The returned `files` are trimmed, de-duplicated, and sorted, so two consumers
28
- * comparing the same change set compare byte-identical lists. The refs the set
29
- * was computed against ride along on the envelope so a downstream consumer can
30
- * report (or assert) its provenance rather than re-deriving it.
6
+ * Total: an unenumerable diff yields `{ files: null, enumerated: false }`.
7
+ * `null` (no evidence) is distinct from `[]` (nothing changed) — only the
8
+ * former must never buy less checking. `files` is trimmed, de-duplicated and
9
+ * sorted.
31
10
  *
32
11
  * @typedef {{
33
12
  * baseRef: string,
@@ -42,9 +21,6 @@
42
21
  import { gitSpawn } from '../git-utils.js';
43
22
 
44
23
  /**
45
- * Trim, drop empties, de-duplicate, and sort raw `git diff --name-only` output.
46
- * Pure.
47
- *
48
24
  * @param {string} stdout
49
25
  * @returns {string[]}
50
26
  */
@@ -58,11 +34,6 @@ function normalizeFileList(stdout) {
58
34
  }
59
35
 
60
36
  /**
61
- * Compute the change set for the `baseRef...headRef` diff **once**, for every
62
- * consumer that needs to know what a Story touched.
63
- *
64
- * Total — never throws; see the module header for the `null` vs `[]` contract.
65
- *
66
37
  * @param {{
67
38
  * baseRef: string,
68
39
  * headRef: string,
@@ -1,10 +1,6 @@
1
1
  /**
2
- * compare.js — Phase 3 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Owns the head-vs-base compare stage: scope resolution, base-baseline
5
- * read, per-kind classifier dispatch, and tolerance application.
6
- *
7
- * Extracted from `check-baselines.js` without behavior change.
2
+ * Head-vs-base compare stage of check-baselines: scope, base read, per-kind
3
+ * classifier, tolerance.
8
4
  *
9
5
  * @module lib/orchestration/check-baselines/phases/compare
10
6
  */
@@ -25,12 +21,9 @@ function baselineRelativePath(kind, gateBlock) {
25
21
  return configured ?? DEFAULT_BASELINE_PATHS[kind];
26
22
  }
27
23
 
28
- export function resolveDispatchScope({ kind, quality, env }) {
29
- const cfg = quality?.gateScoping ?? {};
24
+ export function resolveDispatchScope({ kind, env }) {
30
25
  return resolveScope({
31
26
  kind,
32
- configScope: cfg.scope,
33
- configRef: cfg.diffRef,
34
27
  envScope: env?.BASELINE_SCOPE,
35
28
  envRef: env?.BASELINE_REF,
36
29
  });
@@ -41,19 +34,8 @@ function emptyCompareResult(baseRef) {
41
34
  }
42
35
 
43
36
  /**
44
- * Story #4914 — a base read that FAILS is not a base that is ABSENT.
45
- *
46
- * `readBaseFromGit` already draws that line itself: it returns `null` only
47
- * for git exit 128 ("path does not exist in this revision") and throws on
48
- * everything else. Swallowing the throw conflated the two, so a broken read
49
- * silently emptied the whole head-vs-base arm — regressions AND additions —
50
- * while the floors arm kept the run at exit 0. A gate that fails open is
51
- * worse than no gate, because it is trusted.
52
- *
53
- * So the read failure fails CLOSED as `EXIT_CONFIG` (3) — "the gate could
54
- * not even start", the same code `assertFloorAxesExist` uses for a
55
- * misconfigured floor axis. `check-baselines.js#main` maps any throw out of
56
- * the pipeline onto that code.
37
+ * A failed base read is not an absent base: it fails closed as `EXIT_CONFIG`
38
+ * rather than silently emptying the compare arm to a trusted exit 0.
57
39
  */
58
40
  function buildBaseReadError({ kind, ref, file, cause }) {
59
41
  const detail = cause?.message ?? String(cause);
@@ -83,14 +65,7 @@ function readBaseBaselinePayload(scope, kind, gateBlock, cwd) {
83
65
  try {
84
66
  return JSON.parse(raw);
85
67
  } catch (cause) {
86
- // Story #5277 — the same distinction one line above, applied to the
87
- // second way a base read fails. `null` here means "no baseline at the base
88
- // ref", which empties the head-vs-base arm on purpose; an UNPARSEABLE base
89
- // blob is a read that failed, and reporting it as "no base" made a
90
- // corrupted or half-merged `baselines/*.json` on the base branch report
91
- // zero regressions at exit 0. Text-merged baselines are exactly how such a
92
- // blob gets onto the base branch, which is the failure this Story removes
93
- // upstream — this arm is what stops it being silent when it happens anyway.
68
+ // An unparseable (e.g. text-merged) base blob is a failed read too.
94
69
  throw buildBaseReadError({ kind, ref: scope.ref, file: rel, cause });
95
70
  }
96
71
  }
@@ -107,21 +82,9 @@ export async function evaluateCompare({ kind, gateBlock, scope, cwd }) {
107
82
  }
108
83
 
109
84
  /**
110
- * Is the base baseline comparable to the head baseline (Story #4775)?
111
- *
112
- * A kind can change its SCORING SEMANTICS — how it derives a row's metric —
113
- * without moving `kernelVersion`. Across that boundary the same row can carry
114
- * a different score for reasons that have nothing to do with the branch's
115
- * changes, so a head-vs-base diff manufactures phantom regressions (and can
116
- * hide real ones behind them).
117
- *
118
- * The head-side stamp is already a fail-closed gate: a stale HEAD baseline
119
- * never reaches this point. What reaches here is the opposite and legitimate
120
- * case — a branch that DOES carry a re-derived baseline, compared against a
121
- * base that predates the change. The only honest verdict is "no comparison";
122
- * floors still run, so a genuine ceiling breach is still caught, and once the
123
- * refreshed baseline is the base the ratchet returns to full strength on the
124
- * very next run without anything to remember to reset.
85
+ * Rows scored under different `scoringSemantics` are incomparable (phantom
86
+ * regressions), so a branch carrying a re-derived baseline skips compare
87
+ * against an older base; floors still run.
125
88
  */
126
89
  function baseIsComparable(headBaseline, basePayload) {
127
90
  const head = headBaseline?.scoringSemantics ?? null;
@@ -1,8 +1,6 @@
1
1
  /**
2
- * evaluate.js — Phase 4 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Runs the per-kind pipeline: load → floor → compare → tolerance → report.
5
- * Extracted from `check-baselines.js` without behavior change.
2
+ * Per-kind check-baselines pipeline: load → floor → compare → tolerance →
3
+ * acknowledgment → report.
6
4
  *
7
5
  * @module lib/orchestration/check-baselines/phases/evaluate
8
6
  */
@@ -19,33 +17,13 @@ import { applyFloors, flattenBreaches } from './floors.js';
19
17
  import { applyRefreshAcknowledgment } from './refresh-ack.js';
20
18
 
21
19
  /**
22
- * Defense-in-depth against an `ignoreGlobs`-poisoned baseline (Epic #4326
23
- * incident). The generation path already drops `ignoreGlobs`-matched files
24
- * before they reach `rows` (both the canonical `buildDefaultMaintainabilityScorer`
25
- * and the story-close `buildKindScorer`), so a freshly-generated baseline's
26
- * `rollup["*"]` never includes an ignored file. But the floor check trusts the
27
- * *stored* `rollup["*"]`: if a baseline is poisoned by some other route — a
28
- * stale branch's older tooling, a hand-edit, a future generation bug — an
29
- * ignored file's metric can still drag the global floor axis (e.g.
30
- * maintainability `min`) below its floor and block every downstream close.
31
- *
32
- * This recomputes the global `*` aggregate over the baseline rows that are NOT
33
- * matched by the gate's `ignoreGlobs`, using the kind's own canonical
34
- * `rollup()` aggregator, so the floor axis reflects only the files the gate is
35
- * meant to police. It is a **no-op for a correctly-generated baseline** (no
36
- * ignored file is present in `rows`, so the filtered set is identical and the
37
- * stored `rollup["*"]` is returned unchanged) and only affects the `*`
38
- * component the incident poisons; named-component rollups are left as stored.
39
- * The compare/regression stage is untouched — this only reshapes the floor
40
- * input. All three `ignoreGlobs`-configured gates (maintainability, crap,
41
- * duplication) are `path`-keyed, so the shared path matcher applies uniformly.
42
- *
43
- * Kept module-local (not exported): the poison-exclusion behaviour is covered
44
- * end-to-end through `evaluateKind` by the `check-baselines.min-floor` suite,
45
- * so there is no external consumer to justify widening the surface.
20
+ * Recompute the `*` floor rollup without `ignoreGlobs` rows, in case a
21
+ * baseline was poisoned by some route other than generation (which already
22
+ * drops them); an ignored file could otherwise breach a global floor. A no-op
23
+ * for a correct baseline; compare is untouched.
46
24
  *
47
25
  * @param {{ kind: string, baseline: { rollup?: object, rows?: object[] }, ignoreGlobs?: string[], cwd?: string }} args
48
- * @returns {object} the effective rollup to feed the floor check
26
+ * @returns {object}
49
27
  */
50
28
  function rollupExcludingIgnored({ kind, baseline, ignoreGlobs, cwd }) {
51
29
  const rollup = baseline?.rollup;
@@ -64,8 +42,6 @@ function rollupExcludingIgnored({ kind, baseline, ignoreGlobs, cwd }) {
64
42
  const p = row?.path;
65
43
  return typeof p !== 'string' || !isIgnoredByGlobs(p, ignoreGlobs, cwd);
66
44
  });
67
- // Nothing ignored is present → the stored rollup already excludes ignored
68
- // files (the correct-baseline fast path); return it untouched.
69
45
  if (kept.length === rows.length) return rollup;
70
46
  const recomputed = mod.rollup(kept);
71
47
  return { ...rollup, '*': recomputed?.['*'] ?? rollup?.['*'] };
@@ -109,17 +85,11 @@ function buildGateReport({
109
85
  additions: compareOutput.additions ?? [],
110
86
  regressionCount: compareOutput.regressions.length,
111
87
  baseRef: cmp.baseRef ?? null,
112
- // Story #4914 — the compare arm's read status was internal to compare.js,
113
- // which is why a dead compare arm looked byte-identical to a clean run.
114
- // Surfacing it makes "the head-vs-base arm did not run" diagnosable from
115
- // the JSON report alone.
88
+ // Without this a compare arm that never ran looks identical to a clean run.
116
89
  baseRead: cmp.baseRead === true,
117
90
  generatedAt: baseline.generatedAt,
118
91
  acknowledged: ack.acknowledged,
119
- // Story #5179 — `acknowledged` is now a PARTIAL statement: a refresh commit
120
- // clears only the rows it actually refreshed, so a run can acknowledge some
121
- // regressions and still fail on others. Naming the acknowledged keys makes
122
- // which-half-was-which readable from the JSON report without re-walking git.
92
+ // Acknowledgment can be partial; name which regressions it cleared.
123
93
  acknowledgedKeys: ack.acknowledgedKeys,
124
94
  };
125
95
  }
@@ -135,11 +105,8 @@ export async function evaluateKind({
135
105
  const headLoad = loadHeadBaseline(kind, cwd, configPath);
136
106
  if (headLoad.schemaError) return { kind, schemaError: headLoad.schemaError };
137
107
  const baseline = headLoad.baseline;
138
- // Story #4775 — scoring-semantics gate. A baseline whose rows were produced
139
- // by superseded scoring semantics is structurally valid but semantically
140
- // incomparable, so schema validation alone would wave it through. Fail
141
- // closed on the `semantics` tag rather than compare across the boundary;
142
- // the message names the exact re-baseline command.
108
+ // Rows from superseded scoring semantics pass schema but are incomparable;
109
+ // fail closed.
143
110
  const semanticsError = checkBaselineSemantics(kind, baseline);
144
111
  if (semanticsError) {
145
112
  return {
@@ -1,9 +1,5 @@
1
1
  /**
2
- * floors.js — Phase 2 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Pure floor-comparison helpers. Extracted verbatim from `check-baselines.js`
5
- * so `compareToFloor`, `assertFloorAxesExist`, and `applyFloors` keep their
6
- * named-export contracts for the existing unit tests.
2
+ * Pure floor-comparison helpers for check-baselines.
7
3
  *
8
4
  * @module lib/orchestration/check-baselines/phases/floors
9
5
  */
@@ -11,11 +7,7 @@
11
7
  import { EXIT_CONFIG } from '../../../baselines/exit-codes.js';
12
8
 
13
9
  /**
14
- * Which way a floor axis is compared: `gte` means the measured value must be
15
- * at or above the floor, `lte` at or below it. Exported (Story #4902) so the
16
- * baseline hotspot engine reports floor headroom with the same polarity the
17
- * gate enforces — a second copy of this table would let the two disagree
18
- * about which direction is "better" for a given axis.
10
+ * Floor polarity per axis; the single table every consumer must share.
19
11
  *
20
12
  * @param {string} kind
21
13
  * @param {string} axis
@@ -33,10 +25,7 @@ export function axisDirection(kind, axis) {
33
25
  return 'gte';
34
26
  }
35
27
 
36
- /**
37
- * Compare a single rollup component against a single floor object. Returns
38
- * the array of axis violations (empty when every axis meets its floor).
39
- */
28
+ /** Axis violations of one rollup component against its floor. */
40
29
  export function compareToFloor(kind, aggregate, floor) {
41
30
  const out = [];
42
31
  if (!floor || typeof floor !== 'object') return out;
@@ -52,10 +41,6 @@ export function compareToFloor(kind, aggregate, floor) {
52
41
  return out;
53
42
  }
54
43
 
55
- /**
56
- * Tiny helper to suggest the closest available axis when an operator
57
- * misnamed a floor axis. Substring containment is enough.
58
- */
59
44
  function suggestAxis(unknownAxis, availableKeys) {
60
45
  if (availableKeys.length === 0) return null;
61
46
  const target = unknownAxis.toLowerCase();
@@ -85,9 +70,8 @@ function buildAxisMismatchError({ kind, component, axis, availableKeys }) {
85
70
  }
86
71
 
87
72
  /**
88
- * Story #2193 / AC-6: fail closed when a configured floor axis is not
89
- * present in the rollup. See the original module docstring for the full
90
- * rationale (typo in `.agentrc.json` → exit code 3 instead of silent pass).
73
+ * Fail closed (exit 3) on a floor axis absent from the rollup, so a config
74
+ * typo never silently passes.
91
75
  */
92
76
  export function assertFloorAxesExist(kind, component, aggregate, floor) {
93
77
  if (!floor || typeof floor !== 'object') return;
@@ -119,9 +103,6 @@ function evaluateComponentFloor(kind, component, rollup, floors) {
119
103
  return { component, violations };
120
104
  }
121
105
 
122
- /**
123
- * Apply the floor policy across every component in a rollup. Pure.
124
- */
125
106
  export function applyFloors(kind, rollup, floors) {
126
107
  const out = [];
127
108
  for (const component of collectComponentNames(rollup, floors)) {
@@ -1,16 +1,7 @@
1
1
  /**
2
- * friction.js — Phase 5 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Centralised friction emission. The dispatcher is the single emission
5
- * site: per (kind, severity) tuple, exactly one friction event with the
6
- * canonical payload `{tool:'check-baselines', kind, severity, file?,
7
- * method?, delta?, baseRef}`.
8
- *
9
- * Severities:
10
- * - `floor` — at least one floor breach.
11
- * - `regression` — at least one head-vs-base regression.
12
- * - `schema` — head baseline failed schema validation / read.
13
- * - `kernel-mismatch` — baseline kernelVersion ≠ running kernel.
2
+ * The single check-baselines friction emission site: exactly one event per
3
+ * (kind, severity), severity one of `floor | regression | schema |
4
+ * kernel-mismatch`.
14
5
  *
15
6
  * @module lib/orchestration/check-baselines/phases/friction
16
7
  */
@@ -1,14 +1,5 @@
1
1
  /**
2
- * parse-args.js — Phase 1 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Owns CLI flag parsing and the canned `--help` text. Migrated in Story
5
- * #2989 to delegate the bulk of argv walking to
6
- * `parseStandardCliArgs`; the wrapper preserves the legacy parsed shape
7
- * (storyId / epicId are now numbers, the rest of the keys are unchanged).
8
- *
9
- * `parseArgs(argv)` is re-exported from `check-baselines.js` and exercised
10
- * directly by the unit tests, so the function name and signature are
11
- * load-bearing.
2
+ * check-baselines CLI flag parsing and `--help` text.
12
3
  *
13
4
  * @module lib/orchestration/check-baselines/phases/parse-args
14
5
  */
@@ -16,23 +7,19 @@
16
7
  import { parseStandardCliArgs } from '../../../cli/standard-args.js';
17
8
 
18
9
  export const KNOWN_KINDS = Object.freeze([
19
- 'lint',
20
10
  'coverage',
21
11
  'crap',
22
12
  'maintainability',
23
13
  'mutation',
24
- 'lighthouse',
25
14
  'bundle-size',
26
15
  'duplication',
27
16
  ]);
28
17
 
29
18
  export const DEFAULT_BASELINE_PATHS = Object.freeze({
30
- lint: 'baselines/lint.json',
31
19
  coverage: 'baselines/coverage.json',
32
20
  crap: 'baselines/crap.json',
33
21
  maintainability: 'baselines/maintainability.json',
34
22
  mutation: 'baselines/mutation.json',
35
- lighthouse: 'baselines/lighthouse.json',
36
23
  'bundle-size': 'baselines/bundle-size.json',
37
24
  duplication: 'baselines/duplication.json',
38
25
  });
@@ -55,8 +42,8 @@ Env vars:
55
42
  re-enforces the ratchet at full strength.
56
43
 
57
44
  Equivalent commit-tagged trigger: a commit in the
58
- compared range whose subject contains the gate's
59
- 'refreshTag' (default 'baseline-refresh:') AND whose
45
+ compared range whose subject contains
46
+ 'baseline-refresh:' AND whose
60
47
  diff touches that kind's baseline file. One-shot by
61
48
  construction — once merged the refreshed baseline is
62
49
  the new base and the tag leaves the range.
@@ -81,13 +68,7 @@ export function helpReport() {
81
68
  };
82
69
  }
83
70
 
84
- /**
85
- * Comma-split + repeat-aggregate the raw `--gate` tokens collected by
86
- * the shared parser. The original walker accepted both
87
- * `--gate coverage,lint` and `--gate coverage --gate lint` and
88
- * concatenated the values; we replicate that here in a single pass over
89
- * the `string-multi` array the shared parser produces.
90
- */
71
+ /** Accept both `--gate a,b` and repeated `--gate a --gate b`. */
91
72
  function flattenGateTokens(raw) {
92
73
  if (!Array.isArray(raw) || raw.length === 0) return null;
93
74
  const parts = [];
@@ -102,15 +83,6 @@ function flattenGateTokens(raw) {
102
83
  }
103
84
 
104
85
  /**
105
- * Parse the CLI flags. Pure — exported for tests.
106
- *
107
- * Note: the migration to `parseStandardCliArgs` (Story #2989) changes
108
- * `storyId` / `epicId` from string to number — both `parseTicketId`
109
- * (positive integer, leading `#` stripped, `null` on invalid). The
110
- * downstream `emitFrictionSignal` short-circuits on falsy, and
111
- * `signals-writer` documents `storyId` / `epicId` as `number`, so the
112
- * type alignment fixes a latent string-vs-number mismatch.
113
- *
114
86
  * @param {string[]} argv process.argv.slice(2)
115
87
  * @returns {{
116
88
  * configPath: string | null,
@@ -123,12 +95,8 @@ function flattenGateTokens(raw) {
123
95
  * }}
124
96
  */
125
97
  export function parseArgs(argv) {
126
- // `--help` / `-h` is a side-channel: the shared parser does not (yet)
127
- // surface a help flag; pre-scan and short-circuit before delegating.
98
+ // The shared parser has no help flag and accepts any `--format` string.
128
99
  const helpRequested = argv.some((t) => t === '--help' || t === '-h');
129
- // Pre-validate `--format` so the legacy "expects json/text" message
130
- // shape survives. The shared parser would accept any string for an
131
- // extras `string` flag.
132
100
  for (let i = 0; i < argv.length; i += 1) {
133
101
  if (argv[i] !== '--format') continue;
134
102
  const v = argv[i + 1];
@@ -151,7 +119,6 @@ export function parseArgs(argv) {
151
119
  });
152
120
  } catch (err) {
153
121
  if (err && err.code === 'UNKNOWN_FLAG') {
154
- // Preserve the legacy `unknown flag "--foo"` phrasing.
155
122
  throw new Error(`unknown flag "--${err.flag}"`);
156
123
  }
157
124
  throw err;