mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,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;
@@ -1,11 +1,6 @@
1
1
  /**
2
- * pipeline.js — Phase 7 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Orchestrates the per-kind dispatch: filter enabled kinds, fan-out via
5
- * `Promise.all`, aggregate exit codes through the shared helper, run
6
- * friction emission, and assemble the final structured report.
7
- *
8
- * Extracted from `check-baselines.js` without behavior change.
2
+ * check-baselines dispatch: enabled kinds in parallel, aggregated exit
3
+ * codes, friction emission, final report.
9
4
  *
10
5
  * @module lib/orchestration/check-baselines/phases/pipeline
11
6
  */
@@ -58,7 +53,7 @@ function dispatchPerKind({ wanted, quality, env, cwd, configPath }) {
58
53
  return Promise.all(
59
54
  wanted.map((kind) => {
60
55
  const gateBlock = quality.gates[kind];
61
- const scope = resolveDispatchScope({ kind, quality, env });
56
+ const scope = resolveDispatchScope({ kind, env });
62
57
  return evaluateKind({ kind, gateBlock, scope, cwd, configPath, env });
63
58
  }),
64
59
  );
@@ -1,11 +1,6 @@
1
1
  /**
2
- * refresh-ack.js — the one-shot baseline refresh acknowledgment (Story #5179).
3
- *
4
- * Extracted from `evaluate.js`, where it grew from a bundle-size env flag
5
- * (Story #151) through a maintainability env-or-commit-tag pair (Story #4731)
6
- * into the kind-generic trigger (Story #4802). Story #5179 narrowed the
7
- * commit-tag arm from a whole-run blanket to the rows the tagged commit
8
- * actually refreshed, which is enough logic to own its own module.
2
+ * One-shot baseline refresh acknowledgment, scoped to the rows a tagged
3
+ * commit actually refreshed.
9
4
  *
10
5
  * @module lib/orchestration/check-baselines/phases/refresh-ack
11
6
  */
@@ -20,8 +15,8 @@ import { Logger } from '../../../Logger.js';
20
15
  import { applyTolerance } from './compare.js';
21
16
  import { DEFAULT_BASELINE_PATHS } from './parse-args.js';
22
17
 
23
- /** Default refresh-tag substring when the gate omits `refreshTag`. */
24
- const DEFAULT_REFRESH_TAG = 'baseline-refresh:';
18
+ /** Commit-subject substring that acknowledges a deliberate refresh. */
19
+ const REFRESH_TAG = 'baseline-refresh:';
25
20
 
26
21
  function resolveBaselinePath(kind, gateBlock) {
27
22
  const configured =
@@ -31,34 +26,11 @@ function resolveBaselinePath(kind, gateBlock) {
31
26
  return configured ?? DEFAULT_BASELINE_PATHS[kind] ?? null;
32
27
  }
33
28
 
34
- function resolveRefreshTag(gateBlock) {
35
- return typeof gateBlock?.refreshTag === 'string' &&
36
- gateBlock.refreshTag.length
37
- ? gateBlock.refreshTag
38
- : DEFAULT_REFRESH_TAG;
39
- }
40
-
41
29
  /**
42
- * Resolve the one-shot refresh trigger for any ratcheted kind. Two paths, either
43
- * of which acknowledges:
44
- *
45
- * 1. Env parity: `<KIND>_REFRESH=1` (the manual override) — upper-snaked, so
46
- * the two pre-existing names (`BUNDLE_SIZE_REFRESH`,
47
- * `MAINTAINABILITY_REFRESH`) keep working unchanged.
48
- * 2. Commit tag: a commit in the compared range `<baseRef>..HEAD` whose
49
- * subject contains the configured `refreshTag` AND whose diff touches that
50
- * kind's baseline file. One-shot by construction — once merged, the
51
- * refreshed baseline becomes the base and the tag leaves the range.
52
- *
53
- * The tag is matched as a plain substring of a conventional commit subject, so
54
- * commitlint stays satisfied (e.g. `chore(baselines): baseline-refresh: …`).
55
- *
56
- * The two arms are reported separately because Story #5179 scopes them
57
- * differently: see `applyRefreshAcknowledgment`.
58
- *
59
- * Fails closed: a kind whose baseline path is neither configured nor present in
60
- * `DEFAULT_BASELINE_PATHS` simply skips the commit-tag path rather than
61
- * throwing, leaving that arm un-acknowledged.
30
+ * Refresh trigger: env `<KIND>_REFRESH=1`, or a commit in `<baseRef>..HEAD`
31
+ * whose subject contains the tag (a substring, so commitlint still passes) and
32
+ * whose diff touches the kind's baseline. One-shot: after merge the tag leaves
33
+ * the range. A kind with no known baseline path skips the commit arm.
62
34
  *
63
35
  * @returns {{ triggered: boolean, reasons: string[], envAcknowledged: boolean,
64
36
  * refreshCommits: { sha: string, subject: string }[], baselinePath: string | null }}
@@ -73,15 +45,14 @@ function resolveRefreshTrigger({ kind, gateBlock, cmp, cwd, env }) {
73
45
  const refreshCommits = [];
74
46
  const baseRef = cmp?.baseRef ?? null;
75
47
  if (baseRef && typeof baselinePath === 'string' && baselinePath.length) {
76
- const refreshTag = resolveRefreshTag(gateBlock);
77
48
  const commits = readRangeCommitsTouchingFile(baseRef, baselinePath, {
78
49
  cwd,
79
50
  });
80
51
  for (const commit of commits) {
81
- if (!commit.subject.includes(refreshTag)) continue;
52
+ if (!commit.subject.includes(REFRESH_TAG)) continue;
82
53
  refreshCommits.push(commit);
83
54
  reasons.push(
84
- `refresh commit "${commit.subject}" (subject contains ${JSON.stringify(refreshTag)}, touches ${baselinePath})`,
55
+ `refresh commit "${commit.subject}" (subject contains ${JSON.stringify(REFRESH_TAG)}, touches ${baselinePath})`,
85
56
  );
86
57
  }
87
58
  }
@@ -96,20 +67,9 @@ function resolveRefreshTrigger({ kind, gateBlock, cmp, cwd, env }) {
96
67
  }
97
68
 
98
69
  /**
99
- * Read the baseline rows as of one git ref.
100
- *
101
- * Returns `null` — never throws and never a partial row set — when the blob is
102
- * unreadable or unparseable at that ref. The caller treats `null` as "this
103
- * commit acknowledges nothing", which keeps the ratchet at full strength rather
104
- * than acknowledging on a guess.
105
- *
106
- * A blob that is genuinely ABSENT at the ref reads as `{ rows: [] }`, not
107
- * `null`. The distinction only matters for the `sha^` read below: the commit
108
- * that CREATES a baseline has no blob at its parent, and treating that as
109
- * unreadable would make the first refresh of any kind acknowledge nothing.
110
- * `readBaseFromGit` already draws exactly this line — `null` for git's exit
111
- * 128 "path does not exist in this revision", a throw for everything else — so
112
- * the two cases are distinguishable rather than guessed at.
70
+ * Baseline rows at a ref; `null` (acknowledge nothing) when unreadable. An
71
+ * absent blob reads as `{ rows: [] }` so a baseline-creating commit's `sha^`
72
+ * read still works.
113
73
  *
114
74
  * @returns {{ rows: Array<object> }|null}
115
75
  */
@@ -130,24 +90,11 @@ function readRowsAtRef(ref, baselinePath, cwd) {
130
90
  }
131
91
 
132
92
  /**
133
- * Which row identities did the tagged commit itself REWRITE (Story #5277)?
134
- *
135
- * This is the half Story #5179 left open. It scoped the acknowledgment to the
136
- * rows present in the baseline blob *at* the tagged commit — but a blob is a
137
- * whole-file snapshot, so it also contains every row an EARLIER, untagged
138
- * commit on the same branch lowered. Such a row is present at the refresh
139
- * commit and unchanged at head, so it classified as `ok` and was acknowledged
140
- * by a commit that never touched it. The observed shape: a branch lowers a
141
- * maintainability row while refactoring, later refreshes an unrelated CRAP row
142
- * with a `baseline-refresh:` commit, and the first regression is waved through.
93
+ * Row keys the tagged commit itself rewrote (`sha^ → sha`, no tolerance). The
94
+ * blob at the commit is a whole-file snapshot that also carries rows earlier
95
+ * untagged commits lowered; only this diff attributes a row to the commit.
143
96
  *
144
- * Diffing `sha^ → sha` is what makes the acknowledgment a statement about the
145
- * COMMIT rather than about the branch's accumulated state. No tolerance is
146
- * applied: any movement at all means the commit re-scored that identity, which
147
- * is the only question being asked here.
148
- *
149
- * @returns {Set<string>|null} null when the diff is unusable, which
150
- * acknowledges nothing from this commit.
97
+ * @returns {Set<string>|null} null (acknowledge nothing) when unusable.
151
98
  */
152
99
  function keysTouchedByCommit({ mod, rowsAtSha, rowsAtParent }) {
153
100
  try {
@@ -165,25 +112,10 @@ function keysTouchedByCommit({ mod, rowsAtSha, rowsAtParent }) {
165
112
  }
166
113
 
167
114
  /**
168
- * Classify the head rows against one refresh commit's rows, using the kind's
169
- * own classifier and the gate's own tolerance.
170
- *
171
- * Row identity is deliberately never derived here. A kind's `keyField` names
172
- * the row property the kind is *about*, which is not always its compare key:
173
- * CRAP declares `keyField: 'path'` but keys rows as `path::method@startLine`,
174
- * because one file holds many methods. Reading `row[keyField]` would produce a
175
- * key matching no regression, silently acknowledging nothing for that kind.
176
- * `compare()` is the one thing that knows a kind's key, so every key here comes
177
- * back out of it — the same reason direction and tolerance are delegated rather
178
- * than reimplemented.
179
- *
180
- * That also collapses both tests into one classification:
181
- *
182
- * - `regressions` — present in both, worse at head: post-refresh drift.
183
- * - `improvements` / `unchanged` — present in both, no worse: the rows this
184
- * commit vouches for.
185
- * - `additions` — present at head but absent from the refresh blob, i.e.
186
- * never refreshed by this commit, so deliberately in neither set.
115
+ * Classify head rows against a refresh commit's rows with the kind's own
116
+ * `compare()` and tolerance. Keys always come out of `compare()`: `keyField`
117
+ * is not the compare key (CRAP keys `path::method@startLine`). `ok` =
118
+ * no worse since refresh; `drifted` = worse; additions are in neither.
187
119
  *
188
120
  * @returns {{ ok: string[], drifted: string[] } | null} null when the
189
121
  * classifier is unusable, which acknowledges nothing.
@@ -210,29 +142,8 @@ function classifyAgainstRefresh({ mod, headRows, refreshRows, tolerance }) {
210
142
  }
211
143
 
212
144
  /**
213
- * Which regression keys are acknowledgeable by the tagged commits (Story #5179)?
214
- *
215
- * The acknowledgment is a statement about what a refresh commit re-scored, so a
216
- * key is acknowledgeable only when the commit both covered it and recorded a
217
- * value the head has not since fallen below. Both tests come out of
218
- * `classifyAgainstRefresh` above:
219
- *
220
- * 1. **Row membership** — a key absent from the refresh blob lands in
221
- * `additions`, never in `ok`. This was the larger half of the leak: a
222
- * single tagged commit cleared regressions on rows in directories it never
223
- * touched.
224
- * 2. **No post-refresh drift** — a key worse at head than the commit recorded
225
- * lands in `drifted`. Drift from commits landing AFTER the refresh is what
226
- * "the baseline commit must be the branch's last score-moving commit" asks
227
- * for by convention and nothing enforced.
228
- * 3. **The commit actually rewrote it** (Story #5277) — `keysTouchedByCommit`
229
- * diffs `sha^ → sha`. Tests 1 and 2 both read the blob AT the commit,
230
- * which is a whole-file snapshot and therefore also carries rows an
231
- * earlier untagged commit lowered; those rows passed both tests without
232
- * the tagged commit having touched them.
233
- *
234
- * Fails closed at every step: an unreadable blob, a missing `compare`, or a
235
- * classifier that throws contributes nothing, so those regressions stand.
145
+ * Regression keys a tagged commit acknowledges: in its blob, not drifted worse
146
+ * since, and actually rewritten by that commit. Fails closed at every step.
236
147
  *
237
148
  * @returns {Set<string>}
238
149
  */
@@ -258,9 +169,7 @@ function acknowledgeableKeys({
258
169
  if (typeof mod?.compare !== 'function') return acknowledgeable;
259
170
 
260
171
  const headRows = Array.isArray(headBaseline?.rows) ? headBaseline.rows : [];
261
- // `readRangeCommitsTouchingFile` returns newest-first, and a key the newest
262
- // refresh already ruled on is not reopened by an older one: the newest is the
263
- // state the branch is asking to be held to.
172
+ // Newest-first: an older refresh never reopens a key a newer one ruled on.
264
173
  const decided = new Set();
265
174
  for (const { sha } of refreshCommits) {
266
175
  const atSha = readRowsAtRef(sha, baselinePath, cwd);
@@ -313,27 +222,10 @@ function logAcknowledgment({ kind, reasons, acknowledged, kept }) {
313
222
  }
314
223
 
315
224
  /**
316
- * One-shot baseline refresh/acknowledge for any ratcheted kind. When triggered,
317
- * demote acknowledged head-vs-base regressions to `unchanged` for this run only
318
- * — floors still apply, so a row below its floor still breaches. The trigger is
319
- * read fresh every run and never persisted: post-merge the refreshed baseline is
320
- * the new base and the tag leaves the range, so the ratchet returns to full
321
- * strength automatically.
322
- *
323
- * The two trigger arms are scoped differently, deliberately:
324
- *
325
- * - **Commit tag** — scoped to the rows the tagged commits actually rewrote,
326
- * per `acknowledgeableKeys`. Before Story #5179 this cleared every regression
327
- * in the range, so a branch merged carrying a stale row and the ratchet ran
328
- * loose on that file; the failure recurred six times. Story #5277 closed the
329
- * remainder: the scoping read the blob at the tagged commit, which still
330
- * carried rows an earlier untagged commit had lowered.
331
- * - **Env parity** (`<KIND>_REFRESH=1`) — stays whole-run. There is no commit to
332
- * anchor row-scoping to, and setting the variable is an explicit, deliberate
333
- * operator act rather than a signal inferred from history.
334
- *
335
- * A no-op absent a trigger, so an unacknowledged run of any kind reports its
336
- * regressions exactly as before.
225
+ * When triggered, demote acknowledged regressions to `unchanged` for this run
226
+ * only (floors still apply; nothing persists). The commit-tag arm is scoped to
227
+ * rewritten rows; the env arm stays whole-run, as an explicit operator act
228
+ * with no commit to anchor to.
337
229
  *
338
230
  * @returns {{ compareOutput: object, acknowledged: boolean, acknowledgedKeys: string[] }}
339
231
  */
@@ -1,9 +1,5 @@
1
1
  /**
2
- * report.js — Phase 6 of the check-baselines pipeline (Story #2466).
3
- *
4
- * Formats the structured report for stdout. Pure. Extracted verbatim from
5
- * `check-baselines.js`; the public `formatReport(report, format)` named
6
- * export is preserved on the CLI shell for test consumers.
2
+ * Formats the check-baselines report for stdout.
7
3
  *
8
4
  * @module lib/orchestration/check-baselines/phases/report
9
5
  */
@@ -27,18 +23,12 @@ function formatGateLine(g) {
27
23
  ? ''
28
24
  : ` [kernel drift ${g.kernelBaseline} → ${g.kernelCurrent}]`;
29
25
  const baseRef = g.baseRef ? ` [baseRef=${g.baseRef}]` : '';
30
- // Story #4914 — a compare arm that never read its base reports zero
31
- // regressions and zero additions, which is indistinguishable from a clean
32
- // run unless the text report says so out loud.
26
+ // A compare that never ran would otherwise read as a clean run.
33
27
  const baseRead =
34
28
  g.baseRef && g.baseRead === false
35
29
  ? ' [baseRead=false — compare skipped]'
36
30
  : '';
37
- // Story #5179 — a refresh commit acknowledges only the rows it refreshed, so
38
- // the count says how much was cleared and the status ahead of it still shows
39
- // FAIL when regressions outside those rows survived. `buildGateReport` always
40
- // sets `acknowledgedKeys` alongside `acknowledged` from the same result
41
- // object, so the array needs no guard of its own here.
31
+ // `acknowledgedKeys` is always set alongside `acknowledged`.
42
32
  const ack = g.acknowledged
43
33
  ? ` [ACKNOWLEDGED ${g.acknowledgedKeys.length} row(s) — this run only]`
44
34
  : '';
@@ -0,0 +1,92 @@
1
+ // .agents/scripts/lib/orchestration/check-state.js
2
+ /**
3
+ * check-state.js — the one CI check-state classifier and rerun rule; the
4
+ * merge wait and recovery watch keep separate sources but adapt through here
5
+ * so a GitHub state means the same on both sides. Pure.
6
+ */
7
+
8
+ /** A `Map` so a key like `constructor` cannot hit a prototype member. */
9
+ const RAW_TO_OUTCOME = new Map([
10
+ // Still running — the only non-terminal outcome.
11
+ ['', 'pending'],
12
+ ['pending', 'pending'],
13
+ ['queued', 'pending'],
14
+ ['in_progress', 'pending'],
15
+ ['requested', 'pending'],
16
+ ['waiting', 'pending'],
17
+ ['expected', 'pending'],
18
+ ['success', 'success'],
19
+ ['completed', 'success'],
20
+ ['pass', 'success'],
21
+ ['failure', 'failure'],
22
+ ['startup_failure', 'failure'],
23
+ ['error', 'failure'],
24
+ ['fail', 'failure'],
25
+ ['neutral', 'neutral'],
26
+ ['cancelled', 'cancelled'],
27
+ ['cancel', 'cancelled'],
28
+ ['timed_out', 'timed_out'],
29
+ ['action_required', 'action_required'],
30
+ ['stale', 'stale'],
31
+ ['skipped', 'skipped'],
32
+ ['skipping', 'skipped'],
33
+ ]);
34
+
35
+ const NON_FAILING_OUTCOMES = new Set(['success', 'neutral', 'skipped']);
36
+
37
+ /**
38
+ * Unknown → `skipped`, so a new GitHub state cannot wedge a poll loop.
39
+ *
40
+ * @param {unknown} raw
41
+ * @returns {string}
42
+ */
43
+ function classifyCheckState(raw) {
44
+ const key = String(raw ?? '')
45
+ .trim()
46
+ .toLowerCase();
47
+ return RAW_TO_OUTCOME.get(key) ?? 'skipped';
48
+ }
49
+
50
+ /**
51
+ * @param {string} outcome A {@link classifyCheckState} result.
52
+ * @returns {'pass'|'fail'|'pending'}
53
+ */
54
+ export function checkVerdict(outcome) {
55
+ if (outcome === 'pending') return 'pending';
56
+ return NON_FAILING_OUTCOMES.has(outcome) ? 'pass' : 'fail';
57
+ }
58
+
59
+ /**
60
+ * CheckRun (`status`/`conclusion`) or legacy StatusContext (`state`).
61
+ *
62
+ * @param {{ status?: string, conclusion?: string, state?: string }} [check]
63
+ * @returns {string}
64
+ */
65
+ export function classifyRollupEntry(check) {
66
+ const conclusion = String(check?.conclusion ?? '').trim();
67
+ if (conclusion) return classifyCheckState(conclusion);
68
+ const status = String(check?.status ?? '').trim();
69
+ if (status && status.toUpperCase() !== 'COMPLETED') return 'pending';
70
+ return classifyCheckState(check?.state ?? status);
71
+ }
72
+
73
+ /**
74
+ * @param {{ state?: string, bucket?: string }} [entry]
75
+ * @returns {string}
76
+ */
77
+ export function classifyRequiredCheck(entry) {
78
+ return classifyCheckState(entry?.state || entry?.bucket || '');
79
+ }
80
+
81
+ /**
82
+ * A red required check is never re-run by automation (fix on a new head)
83
+ * unless a `file-ci-gap.js` verdict is recorded for this head; an advisory
84
+ * check may be. Anything not `required: false` counts as required.
85
+ *
86
+ * @param {{ required?: boolean, allowanceRecorded?: boolean }} [check]
87
+ * @returns {boolean}
88
+ */
89
+ export function isRerunPermitted({ required, allowanceRecorded = false } = {}) {
90
+ if (required === false) return true;
91
+ return allowanceRecorded === true;
92
+ }