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,18 +1,7 @@
1
1
  /**
2
- * headroom.js — how much slack sits between each configured floor and the
3
- * number actually measured (Story #4902).
4
- *
5
- * A floor set far from reality is a gate that cannot fail. Headroom is the
6
- * distance the measurement could still drift before the gate notices, and it
7
- * is the direct input to the only remediation this lens ever recommends:
8
- * tighten the floor to what the repo already achieves.
9
- *
10
- * Both sides come from the repository, never from this module: the floor
11
- * from `resolveQuality()` over `.agentrc.json` (so a consumer's own floors
12
- * are the ones reported), and the measurement from the committed baseline's
13
- * whole-repo rollup. Polarity comes from `axisDirection` in the gate's own
14
- * floors phase, so "better" always means the same thing here as it does when
15
- * `check-baselines.js` decides pass or fail.
2
+ * Slack between each configured floor and the measured rollup — a floor far
3
+ * from reality is a gate that cannot fail. Polarity comes from the gate's own
4
+ * `axisDirection`, so "better" means what `check-baselines.js` means.
16
5
  *
17
6
  * @module lib/audit-baselines/headroom
18
7
  */
@@ -21,8 +10,7 @@ import { axisDirection } from '../orchestration/check-baselines/phases/floors.js
21
10
  import { rollupOf } from './kinds.js';
22
11
 
23
12
  /**
24
- * Signed distance from the floor, positive when the measurement sits on the
25
- * good side of it. Null when the baseline carries no value for the axis.
13
+ * Positive on the good side of the floor, negative when breached.
26
14
  *
27
15
  * @param {number | undefined} measured
28
16
  * @param {number} floor
@@ -35,8 +23,6 @@ function headroomFor(measured, floor, direction) {
35
23
  }
36
24
 
37
25
  /**
38
- * Build the `headroom[]` section across every configured gate kind.
39
- *
40
26
  * @param {{
41
27
  * kinds: string[],
42
28
  * quality: object,
@@ -60,8 +46,6 @@ export function buildHeadroom({ kinds, quality, baselines }) {
60
46
  floor,
61
47
  measured: typeof measured === 'number' ? measured : null,
62
48
  direction,
63
- // Positive headroom = the measurement is on the good side of the
64
- // floor by this much; negative = the floor is already breached.
65
49
  headroom: headroomFor(measured, floor, direction),
66
50
  });
67
51
  }
@@ -1,24 +1,12 @@
1
1
  /**
2
- * hotspots.js — join per-gate outliers into ranked, per-file clusters
3
- * (Story #4902).
4
- *
5
- * The signal a baseline review is looking for is *convergence*: the file that
6
- * is simultaneously a CRAP outlier, a maintainability outlier, and a
7
- * duplication outlier is a different kind of problem from three unrelated
8
- * files each bad at one thing. Reading the baselines one at a time cannot see
9
- * it, because each gate's own top-20 is a different list.
10
- *
11
- * So severity **adds across gate memberships** and the three cost
12
- * multipliers apply to the sum. Two gate memberships of severity s therefore
13
- * outrank one membership of severity s at equal churn, centrality, and
14
- * friction — which is the ranking property this section exists to provide.
2
+ * Per-file clusters of per-gate outliers. Severity adds across gate
3
+ * memberships before the cost multipliers apply, so convergence (one file bad
4
+ * on several gates) outranks a single membership.
15
5
  *
16
6
  * @module lib/audit-baselines/hotspots
17
7
  */
18
8
 
19
9
  /**
20
- * Group per-gate outlier rows by cluster id and rank them.
21
- *
22
10
  * @param {{
23
11
  * outliers: Array<object>,
24
12
  * weightsFor: (id: string) => {
@@ -1,31 +1,18 @@
1
1
  /**
2
- * kinds.js — the two halves of the gate surface, and how to read a row out
3
- * of each (Story #4902).
4
- *
5
- * Mandrel's baseline surface is not one list. `delivery.quality.gates` is a
6
- * **closed** AJV schema of eight kinds, enforced by `check-baselines.js`.
7
- * Alongside it sit out-of-band **ratchet** baselines — dead exports (two
8
- * passes), import cycles, context budget — which no gate block declares and
9
- * only the CI baselines job runs. An engine that walks one half and calls it
10
- * "the baselines" silently drops the other; both halves are enumerated here.
11
- *
12
- * `GATE_KINDS` is derived from `GATES_SCHEMA` rather than re-typed, so a
13
- * ninth gate kind landing in the schema reaches this engine automatically.
2
+ * Both halves of the baseline surface (gate kinds and out-of-band ratchets)
3
+ * and how to read rows from each.
14
4
  *
15
5
  * @module lib/audit-baselines/kinds
16
6
  */
17
7
 
18
8
  import { GATES_SCHEMA } from '../config/gates/index.js';
19
9
 
20
- /** The closed `delivery.quality.gates` kind set, in stable order. */
10
+ /** Derived from the schema so a new gate kind arrives automatically. */
21
11
  export const GATE_KINDS = Object.freeze(
22
12
  Object.keys(GATES_SCHEMA.properties).sort(),
23
13
  );
24
14
 
25
- /**
26
- * Out-of-band ratchet baselines: committed under `baselines/` and enforced
27
- * only by the CI baselines job, never by `check-baselines.js`.
28
- */
15
+ /** Enforced only by the CI baselines job, never by `check-baselines.js`. */
29
16
  const RATCHET_KINDS = Object.freeze([
30
17
  'arch-cycles',
31
18
  'context-budget',
@@ -34,13 +21,10 @@ const RATCHET_KINDS = Object.freeze([
34
21
  'dead-exports-production',
35
22
  ]);
36
23
 
37
- /** Every kind the engine walks, gates first then ratchets. */
38
24
  export const ALL_KINDS = Object.freeze([...GATE_KINDS, ...RATCHET_KINDS]);
39
25
 
40
26
  /**
41
- * Resolve a kind's baseline path from config, falling back to the framework
42
- * default layout. Never hardcodes a consumer's location: a repo that moved
43
- * `baselines/crap.json` via `gates.crap.baselinePath` is followed.
27
+ * Honours `gates.<kind>.baselinePath`, else `baselines/<kind>.json`.
44
28
  *
45
29
  * @param {string} kind
46
30
  * @param {object | null | undefined} quality resolved `delivery.quality`
@@ -55,9 +39,8 @@ export function baselinePathFor(kind, quality) {
55
39
  }
56
40
 
57
41
  /**
58
- * Flatten `context-budget.json` into `{ id, value }` rows. Its three
59
- * sections all measure the same axis (bytes of context a file costs) under
60
- * different keys, so they fold into one row set rather than three.
42
+ * All three `context-budget.json` sections measure bytes, so they fold into
43
+ * one row set.
61
44
  *
62
45
  * @param {object} baseline
63
46
  * @returns {Array<{ id: string, value: number }>}
@@ -79,8 +62,7 @@ function contextBudgetRows(baseline) {
79
62
  }
80
63
 
81
64
  /**
82
- * Count how many allowlisted cycles each module participates in. A module in
83
- * three cycles is a worse architectural hotspot than one in a single cycle.
65
+ * Allowlisted-cycle memberships per module.
84
66
  *
85
67
  * @param {object} baseline
86
68
  * @returns {Array<{ id: string, value: number }>}
@@ -96,8 +78,7 @@ function archCycleRows(baseline) {
96
78
  }
97
79
 
98
80
  /**
99
- * Count dead exports per file. The row grain is `{ file, symbol }`; the
100
- * hotspot grain is the file.
81
+ * Dead exports per file (rows are per symbol).
101
82
  *
102
83
  * @param {object} baseline
103
84
  * @returns {Array<{ id: string, value: number }>}
@@ -112,10 +93,8 @@ function deadExportRows(baseline) {
112
93
  }
113
94
 
114
95
  /**
115
- * Build the `{ id, value }` extractor for an envelope-shaped gate kind.
116
- *
117
- * @param {string} idKey row property carrying the cluster identity
118
- * @param {string} metric row property carrying the measured value
96
+ * @param {string} idKey
97
+ * @param {string} metric
119
98
  * @returns {(baseline: object) => Array<{ id: string, value: number }>}
120
99
  */
121
100
  function envelopeRows(idKey, metric) {
@@ -126,36 +105,21 @@ function envelopeRows(idKey, metric) {
126
105
  }
127
106
 
128
107
  /**
129
- * Fold `{ id, value }` rows into one whole-repo number.
130
- *
131
- * `TOTAL` is for **additive** metrics — dead-export symbols, context bytes,
132
- * lint errors — where the sum is the quantity the instrument measures.
133
- * `TALLY` is for **non-additive** ones — percentages, indices, scores — where
134
- * summing per-file values would fabricate a statistic; the honest whole-repo
135
- * number is how many rows are tracked, and the unit name says so.
108
+ * `TOTAL` sums additive metrics; `TALLY` counts rows for non-additive ones
109
+ * (percentages, indices), where a sum would fabricate a statistic.
136
110
  */
137
111
  const TOTAL = (rows) => rows.reduce((sum, row) => sum + row.value, 0);
138
112
  const TALLY = (rows) => rows.length;
139
113
 
140
114
  /**
141
- * `[unit, fold]` per kind: the unit each kind's whole-repo total is
142
- * denominated in, and how its rows fold into it.
143
- *
144
- * This is the fix for the roll-up that counted **files** for every kind
145
- * (Story #4962). `dead-exports-production` moving 590 → 589 *symbols* across
146
- * 187 files on both sides read as a delta of 0, and a 421-byte context-budget
147
- * growth read as 0 too, because the fallback counted rows — a grain finer than
148
- * the file for dead exports and coarser than the byte for context budget.
149
- * Naming the unit is half the fix: an axis called `symbols` or `bytes` cannot
150
- * be re-read as a file count the way a bare `rowCount` was.
115
+ * `[unit, fold]` per kind. The named unit keeps a whole-repo total from being
116
+ * misread as a file count.
151
117
  */
152
118
  const TREND_UNITS = Object.freeze({
153
119
  'bundle-size': ['rawKb', TOTAL],
154
120
  coverage: ['filesTracked', TALLY],
155
121
  crap: ['filesTracked', TALLY],
156
122
  duplication: ['filesTracked', TALLY],
157
- lighthouse: ['routesTracked', TALLY],
158
- lint: ['errorCount', TOTAL],
159
123
  maintainability: ['filesTracked', TALLY],
160
124
  mutation: ['filesTracked', TALLY],
161
125
  'arch-cycles': ['cycleMemberships', TOTAL],
@@ -166,16 +130,8 @@ const TREND_UNITS = Object.freeze({
166
130
  });
167
131
 
168
132
  /**
169
- * Per-kind row spec.
170
- *
171
- * - `metric` — the axis a hotspot is measured on.
172
- * - `worse` — which end of that axis is the bad end.
173
- * - `rows` — baseline → `{ id, value }` pairs, already aggregated where
174
- * the on-disk grain is finer than the file (dead exports,
175
- * cycles).
176
- * - `idKind` — what the cluster key names. Every kind but `lighthouse`
177
- * (routes) and `bundle-size` (bundle names) keys on a
178
- * repository file path.
133
+ * Per-kind row spec: hotspot `metric`, which end is `worse`, `rows`
134
+ * extractor (aggregated to file grain), and what the `idKind` key names.
179
135
  */
180
136
  export const KIND_SPECS = Object.freeze({
181
137
  'bundle-size': {
@@ -202,18 +158,6 @@ export const KIND_SPECS = Object.freeze({
202
158
  idKind: 'path',
203
159
  rows: envelopeRows('path', 'percentage'),
204
160
  },
205
- lighthouse: {
206
- metric: 'performance',
207
- worse: 'lower',
208
- idKind: 'route',
209
- rows: envelopeRows('route', 'performance'),
210
- },
211
- lint: {
212
- metric: 'errorCount',
213
- worse: 'higher',
214
- idKind: 'path',
215
- rows: envelopeRows('path', 'errorCount'),
216
- },
217
161
  maintainability: {
218
162
  metric: 'mi',
219
163
  worse: 'lower',
@@ -259,10 +203,8 @@ export const KIND_SPECS = Object.freeze({
259
203
  });
260
204
 
261
205
  /**
262
- * The whole-repo rollup for a kind, or `null` when the kind does not carry
263
- * one. Ratchet baselines have no rollup — which is why stub detection asks
264
- * for an all-zero rollup rather than merely empty rows: an `arch-cycles`
265
- * baseline with zero cycles is a passing gate, not a dead instrument.
206
+ * The `*` rollup, or `null` (ratchets carry none — a zero-cycle `arch-cycles`
207
+ * is a passing gate, not a stub).
266
208
  *
267
209
  * @param {object | null} baseline
268
210
  * @returns {object | null}
@@ -273,12 +215,8 @@ export function rollupOf(baseline) {
273
215
  }
274
216
 
275
217
  /**
276
- * The whole-repo quantity a kind measures, in the unit it measures it in —
277
- * `{ unit, value }`, or `null` when the kind or the baseline is unreadable.
278
- *
279
- * This sits beside `rowCount` in `gateSurface[]` precisely because the two
280
- * disagree: `dead-exports-production` carries 589 rows across 187 files, so a
281
- * lone `rowCount: 187` reads as a symbol count and is not one.
218
+ * Whole-repo quantity in its own unit; differs from `rowCount` whenever the
219
+ * row grain is not the unit.
282
220
  *
283
221
  * @param {string} kind
284
222
  * @param {object | null} baseline
@@ -293,12 +231,8 @@ export function measuredTotalOf(kind, baseline) {
293
231
  }
294
232
 
295
233
  /**
296
- * The rollup a trend sample compares on. Gate kinds carry their own, already
297
- * axis-named; ratchet baselines carry none, so the whole-repo total stands in
298
- * under its own unit — "dead exports went 590 → 589 **symbols**" is exactly
299
- * the direction-of-travel question trend answers, and skipping the ratchet
300
- * half here would leave it visible in `gateSurface[]` but invisible in
301
- * `trend[]`.
234
+ * Trend comparison rollup: the declared one, else (ratchets) the measured
235
+ * total under its unit, so ratchets appear in `trend[]` too.
302
236
  *
303
237
  * @param {string} kind
304
238
  * @param {object | null} baseline
@@ -1,31 +1,18 @@
1
1
  /**
2
- * outliers.js — bounded top-N outlier extraction per gate (Story #4902).
3
- *
4
- * `baselines/crap.json` alone is ~650KB of per-method rows. The engine must
5
- * never embed a whole baseline in its envelope, so every kind is narrowed to
6
- * at most `topN` rows here, before anything downstream sees them.
7
- *
8
- * Narrowing happens in two steps:
9
- *
10
- * 1. **Aggregate to the cluster grain.** Baseline rows are per-method
11
- * (crap) or per-symbol (dead exports); hotspots are per-file. Each id
12
- * keeps its single worst value, plus how many rows it contributed.
13
- * 2. **Score, then cut.** `severityWeight` is the row's position in its
14
- * own kind's distribution, from 0 (the best value present) to 1 (the
15
- * worst). Scoring within the kind is what makes CRAP 29 and MI 74
16
- * comparable at all — the two axes share no unit, and the whole point
17
- * of a cluster is to add them up.
2
+ * Bounded top-N outliers per gate, so no whole baseline enters the envelope.
3
+ * Rows fold to the file grain (worst value kept), then `severityWeight` is
4
+ * the position in the kind's own distribution (0 best … 1 worst) — which is
5
+ * what makes unit-less axes like CRAP and MI summable in a cluster.
18
6
  *
19
7
  * @module lib/audit-baselines/outliers
20
8
  */
21
9
 
22
10
  import { KIND_SPECS } from './kinds.js';
23
11
 
24
- /** Default bound on rows extracted per gate. */
25
12
  export const DEFAULT_TOP_N = 20;
26
13
 
27
14
  /**
28
- * Fold `{ id, value }` rows to one entry per id, keeping the worst value.
15
+ * One entry per id, worst value kept.
29
16
  *
30
17
  * @param {Array<{ id: string, value: number }>} rows
31
18
  * @param {'higher' | 'lower'} worse
@@ -48,9 +35,7 @@ function aggregateById(rows, worse) {
48
35
  }
49
36
 
50
37
  /**
51
- * Position of `value` in `[min, max]` normalized so 1 is always the worst
52
- * end. A degenerate distribution (every value identical) scores 1 for every
53
- * row: they are all equally the worst, and equally the best.
38
+ * 1 is always the worst end; a degenerate distribution scores all 1.
54
39
  *
55
40
  * @param {number} value
56
41
  * @param {number} min
@@ -65,8 +50,6 @@ function normalizeSeverity(value, min, max, worse) {
65
50
  }
66
51
 
67
52
  /**
68
- * Extract the bounded worst-N rows for one kind.
69
- *
70
53
  * @param {{ kind: string, baseline: object | null, topN?: number }} args
71
54
  * @returns {Array<{
72
55
  * kind: string, id: string, metric: string, value: number,
@@ -1,12 +1,6 @@
1
1
  /**
2
- * read.js — tolerant, strictly read-only filesystem access for the baseline
3
- * hotspot engine (Story #4902).
4
- *
5
- * The engine's job is to *report on* the baseline surface, including the
6
- * parts of it that are missing or malformed. So no read here throws: a
7
- * missing file, an unreadable directory, or a JSON parse error is evidence
8
- * the envelope carries, not a crash. Nothing in this module opens a file for
9
- * writing — the read-only invariant over `baselines/` starts here.
2
+ * Tolerant, strictly read-only fs access: a missing or malformed file is
3
+ * evidence for the envelope, never a throw.
10
4
  *
11
5
  * @module lib/audit-baselines/read
12
6
  */
@@ -15,8 +9,6 @@ import fs from 'node:fs';
15
9
  import path from 'node:path';
16
10
 
17
11
  /**
18
- * Read and parse a JSON file without throwing.
19
- *
20
12
  * @param {string} absolutePath
21
13
  * @returns {{ exists: boolean, parsed: object | null, parseError: string | null }}
22
14
  */
@@ -39,10 +31,6 @@ export function readJsonFile(absolutePath) {
39
31
  }
40
32
 
41
33
  /**
42
- * List every file under `rootDir` as a posix repo-relative path, skipping
43
- * `node_modules`, `.git`, and `.worktrees`. Returns `[]` for an absent or
44
- * unreadable root rather than throwing.
45
- *
46
34
  * @param {string} repoRoot
47
35
  * @param {string} rootDir repo-relative directory to walk
48
36
  * @returns {string[]} sorted repo-relative posix paths
@@ -72,8 +60,7 @@ export function listFilesUnder(repoRoot, rootDir) {
72
60
  }
73
61
 
74
62
  /**
75
- * Age in whole days between `generatedAt` and `now`. Null when the stamp is
76
- * absent or unparseable — the engine reports "unknown", never a fabricated 0.
63
+ * Whole days; `null` (unknown) rather than a fabricated 0.
77
64
  *
78
65
  * @param {unknown} generatedAt
79
66
  * @param {Date} now
@@ -1,17 +1,7 @@
1
1
  /**
2
- * staleness.js — the two clocks a baseline is stale against (Story #4962).
3
- *
4
- * Wall-clock age answers the wrong question on a busy repository.
5
- * `coverage.json` and `maintainability.json` both read `staleDays: 0` while
6
- * already predating merges that had rescored files they still carry rows for:
7
- * refreshed an hour ago, and behind already. The second clock is the one that
8
- * matters — how many commits have touched the **measured surface** since the
9
- * baseline was last committed. A baseline older than the surface it scores is
10
- * stale at zero wall-clock days.
11
- *
12
- * Read-only and degrading, like the rest of this engine: a shallow clone, an
13
- * untracked baseline, or a surface that is not path-keyed all report `null`.
14
- * Unknown is never rounded down to a reassuring 0.
2
+ * Baseline staleness on two clocks: wall-clock age, and commits touching the
3
+ * measured surface since the baseline was committed — a baseline behind its
4
+ * surface is stale at zero days. Unknown reports `null`, never a reassuring 0.
15
5
  *
16
6
  * @module lib/audit-baselines/staleness
17
7
  */
@@ -21,9 +11,7 @@ import { KIND_SPECS } from './kinds.js';
21
11
  import { ageInDays } from './read.js';
22
12
 
23
13
  /**
24
- * Run a git command under `cwd`, returning trimmed stdout, or `null` on any
25
- * failure or empty result. Buffer and shell policy come from the shared
26
- * child-process surface ([`child-exec.js`](../child-exec.js)).
14
+ * Trimmed stdout, or `null` on failure or empty output.
27
15
  *
28
16
  * @param {string[]} args
29
17
  * @param {{ cwd: string, run?: Function }} io
@@ -45,11 +33,8 @@ function git(args, { cwd, run }) {
45
33
  }
46
34
 
47
35
  /**
48
- * The repo-relative paths whose commits would invalidate this baseline: the
49
- * gate's declared `targetDirs` when it has them, else the baseline's own row
50
- * ids — which are file paths for every kind but `lighthouse` (routes) and
51
- * `bundle-size` (bundle names). Those two get an empty surface rather than a
52
- * route name handed to git as a pathspec.
36
+ * `targetDirs`, else path-keyed row ids; non-path kinds get an empty surface
37
+ * rather than a bundle name as a git pathspec.
53
38
  *
54
39
  * @param {{ kind: string, gateBlock: object | null, rows: Array<{id: string}> }} args
55
40
  * @returns {string[]}
@@ -64,9 +49,7 @@ function measuredSurfaceOf({ kind, gateBlock, rows }) {
64
49
  }
65
50
 
66
51
  /**
67
- * Commits touching `surfacePaths` since `relPath` was last committed. An
68
- * empty surface yields `null` too: nothing was checked, so nothing can be
69
- * claimed.
52
+ * Empty surface → `null`: nothing checked, nothing claimed.
70
53
  *
71
54
  * @param {{ relPath: string, surfacePaths: string[], io: object }} args
72
55
  * @returns {number | null}
@@ -84,8 +67,6 @@ function commitsSinceBaseline({ relPath, surfacePaths, io }) {
84
67
  }
85
68
 
86
69
  /**
87
- * The four staleness fields of one `gateSurface[]` entry, on both clocks.
88
- *
89
70
  * @param {{
90
71
  * kind: string, gateBlock: object | null, rows: Array<{id: string}>,
91
72
  * relPath: string, baseline: object | null, now: Date,
@@ -1,16 +1,6 @@
1
1
  /**
2
- * surface-entry.js — the health report for one measuring instrument
3
- * (Story #4902, split out in #4962).
4
- *
5
- * A baseline review that only reads the numbers cannot see the failure mode
6
- * that matters most: an instrument that is not measuring anything. A gate can
7
- * be unconfigured, its baseline file can be missing, it can be a **stub**
8
- * (committed with no rows and an all-zero rollup, so it passes every run
9
- * vacuously), it can be stale on either clock, and its `ignoreGlobs` can name
10
- * paths that no longer exist — each of which reads as "green" from the gate's
11
- * exit code. This module turns all of that into declarative fields for one
12
- * kind; [`gate-surface.js`](gate-surface.js) walks the kinds and
13
- * [`staleness.js`](staleness.js) owns the two clocks.
2
+ * Health of one measuring instrument: unconfigured, missing, stub, stale, or
3
+ * dead `ignoreGlobs` — each of which reads green from the gate's exit code.
14
4
  *
15
5
  * @module lib/audit-baselines/surface-entry
16
6
  */
@@ -20,9 +10,7 @@ import { GATE_KINDS, KIND_SPECS, measuredTotalOf, rollupOf } from './kinds.js';
20
10
  import { stalenessOf } from './staleness.js';
21
11
 
22
12
  /**
23
- * True when every numeric leaf of the rollup is zero. A rollup with no
24
- * numeric leaves at all is not all-zero — it carries no measurement to call
25
- * zero, and treating it as such would flag shapes this engine cannot read.
13
+ * A rollup with no numeric leaves is not all-zero.
26
14
  *
27
15
  * @param {object | null} rollup
28
16
  * @returns {boolean}
@@ -34,10 +22,8 @@ function isAllZeroRollup(rollup) {
34
22
  }
35
23
 
36
24
  /**
37
- * A **stub instrument**: zero rows AND an all-zero rollup. Both halves are
38
- * required. Ratchet baselines carry no rollup, so a clean `arch-cycles`
39
- * allowlist — genuinely zero cycles, the success state — is never mistaken
40
- * for a dead instrument.
25
+ * Zero rows AND an all-zero rollup, so a clean ratchet (no rollup) is never
26
+ * called a stub.
41
27
  *
42
28
  * @param {{ rowCount: number, rollup: object | null }} args
43
29
  * @returns {boolean}
@@ -47,11 +33,9 @@ function isStubInstrument({ rowCount, rollup }) {
47
33
  }
48
34
 
49
35
  /**
50
- * Which of a gate's configured `ignoreGlobs` match zero files on disk.
51
- *
52
36
  * @param {string[]} ignoreGlobs
53
37
  * @param {string[]} files repo-relative posix paths
54
- * @returns {string[]}
38
+ * @returns {string[]} globs matching zero files
55
39
  */
56
40
  function findDeadIgnoreGlobs(ignoreGlobs, files) {
57
41
  const dead = [];
@@ -64,12 +48,7 @@ function findDeadIgnoreGlobs(ignoreGlobs, files) {
64
48
  }
65
49
 
66
50
  /**
67
- * Assemble one `gateSurface[]` entry from an already-read baseline.
68
- *
69
- * `rowCount` and `measured` both appear because they legitimately disagree:
70
- * rows are counted after the kind's per-file aggregation, while `measured` is
71
- * the quantity the instrument reports in its own unit — 589 dead-export
72
- * symbols sit in 187 files.
51
+ * `rowCount` (per-file) and `measured` (own unit) legitimately differ.
73
52
  *
74
53
  * @param {{
75
54
  * kind: string, quality: object, read: object, relPath: string,
@@ -1,17 +1,7 @@
1
1
  /**
2
- * trend.js — per-kind rollup deltas read out of each baseline file's own git
3
- * history (Story #4902).
4
- *
5
- * A ratchet only tells you whether today is worse than yesterday. The
6
- * question a baseline review asks is the other one: which direction has this
7
- * number been moving, and is the ratchet actually ratcheting? That answer is
8
- * already committed — every baseline refresh is a commit against the same
9
- * path — so it is read with `git log` + `git show`, never recomputed by
10
- * re-running an instrument.
11
- *
12
- * Degradation: any git failure (shallow clone, no history for the path, not
13
- * a work tree) yields an empty `trend[]` and exit 0. A missing history is
14
- * missing evidence, not an error.
2
+ * Per-kind rollup direction of travel, read from each baseline's own git
3
+ * history — never recomputed. Any git failure yields no trend entry: missing
4
+ * history is missing evidence, not an error.
15
5
  *
16
6
  * @module lib/audit-baselines/trend
17
7
  */
@@ -20,7 +10,7 @@ import { execFileCapture } from '../child-exec.js';
20
10
  import { trendRollupOf } from './kinds.js';
21
11
 
22
12
  /**
23
- * List the most recent commits touching `relPath`, newest first.
13
+ * Newest first.
24
14
  *
25
15
  * @param {{ cwd: string, relPath: string, limit: number, run?: Function }} args
26
16
  * @returns {Array<{ sha: string, committedAt: string }>}
@@ -47,8 +37,6 @@ function listCommits({ cwd, relPath, limit, run }) {
47
37
  }
48
38
 
49
39
  /**
50
- * Read the comparable rollup of a baseline as it existed at `sha`.
51
- *
52
40
  * @param {{ cwd: string, kind: string, sha: string, relPath: string, run?: Function }} args
53
41
  * @returns {object | null}
54
42
  */
@@ -71,9 +59,8 @@ function rollupAt({ cwd, kind, sha, relPath, run }) {
71
59
  }
72
60
 
73
61
  /**
74
- * Numeric axis-by-axis difference `to - from`. Axes missing from either side
75
- * are omitted rather than defaulted — a rollup that gained an axis has no
76
- * delta on it, and inventing one would read as a regression.
62
+ * `to - from` per axis; an axis missing on either side is omitted, since an
63
+ * invented delta would read as a regression.
77
64
  *
78
65
  * @param {object} from
79
66
  * @param {object} to
@@ -91,7 +78,7 @@ function rollupDelta(from, to) {
91
78
  }
92
79
 
93
80
  /**
94
- * Build the `trend[]` section: newest-vs-previous rollup deltas per kind.
81
+ * Newest-vs-previous rollup deltas per kind.
95
82
  *
96
83
  * @param {{
97
84
  * cwd: string, kinds: string[], pathFor: (kind: string) => string,