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,28 +1,14 @@
1
1
  /**
2
- * ITicketingProvider — Abstract Ticketing Provider Interface
3
- *
4
- * All ticketing interactions in the v5 Story-centric orchestration are mediated
5
- * through this interface. Concrete implementations (e.g., `providers/github.js`)
6
- * extend this class and override every method.
7
- *
8
- * Unoverridden methods throw `Error('Not implemented: <method>')` to enforce
9
- * the contract at runtime rather than silently returning `undefined`.
10
- *
11
- * @see docs/architecture.md — Provider Abstraction Layer
12
- * @see docs/v5-implementation-plan.md Sprint 1A
2
+ * Abstract ticketing provider. Implementations (e.g. `providers/github.js`)
3
+ * override every method; unoverridden ones throw rather than return
4
+ * `undefined`.
13
5
  */
14
6
 
15
7
  export class ITicketingProvider {
16
- // ---------------------------------------------------------------------------
17
- // Read Operations
18
- // ---------------------------------------------------------------------------
8
+ // Reads
19
9
 
20
10
  /**
21
- * Fetch the Epic issue with its body — the single planning document
22
- * (ideation sections plus the folded Tech Spec / Acceptance Table
23
- * managed sections, Story #4324).
24
- *
25
- * @param {number} epicId - GitHub Issue number of the Epic.
11
+ * @param {number} epicId
26
12
  * @returns {Promise<{
27
13
  * id: number,
28
14
  * title: string,
@@ -34,10 +20,8 @@ export class ITicketingProvider {
34
20
  throw new Error('Not implemented: getEpic');
35
21
  }
36
22
  /**
37
- * Fetch all child tickets for an Epic, optionally filtered by labels or state.
38
- *
39
- * @param {number} epicId - GitHub Issue number of the Epic.
40
- * @param {{ label?: string, state?: string }} [filters={}] - Filter criteria.
23
+ * @param {number} epicId
24
+ * @param {{ label?: string, state?: string }} [filters={}]
41
25
  * @returns {Promise<Array<{
42
26
  * id: number,
43
27
  * title: string,
@@ -50,9 +34,7 @@ export class ITicketingProvider {
50
34
  }
51
35
 
52
36
  /**
53
- * Fetch all immediate sub-tickets of a given parent ticket.
54
- *
55
- * @param {number} parentId - GitHub Issue number of the parent.
37
+ * @param {number} parentId
56
38
  * @returns {Promise<Array<{
57
39
  * id: number,
58
40
  * title: string,
@@ -65,9 +47,7 @@ export class ITicketingProvider {
65
47
  }
66
48
 
67
49
  /**
68
- * Retrieve a single ticket with full metadata.
69
- *
70
- * @param {number} ticketId - GitHub Issue number.
50
+ * @param {number} ticketId
71
51
  * @returns {Promise<{
72
52
  * id: number,
73
53
  * title: string,
@@ -82,41 +62,19 @@ export class ITicketingProvider {
82
62
  }
83
63
 
84
64
  /**
85
- * Pre-populate the provider's per-instance ticket cache with a batch of
86
- * already-hydrated tickets so subsequent `getTicket(id)` calls can be
87
- * served from cache instead of issuing a REST round-trip.
88
- *
89
- * Default no-op: providers without a cache (e.g. the manual adapter or
90
- * test stubs) need not override. Call sites can therefore invoke
91
- * `provider.primeTicketCache(tickets)` unconditionally without an
92
- * `instanceof` / `typeof === 'function'` capability check.
65
+ * Seed the ticket cache so later `getTicket` calls skip a round-trip. A
66
+ * no-op by default, so callers need no capability check.
93
67
  *
94
68
  * @param {Array<{ id: number }>} _tickets
95
69
  * @returns {void}
96
70
  */
97
- primeTicketCache(_tickets) {
98
- // Intentional no-op. Concrete providers that maintain a cache override.
99
- }
71
+ primeTicketCache(_tickets) {}
100
72
 
101
73
  /**
102
- * List every ticket carrying `labels`, in the **mapped** ticket shape.
103
- *
104
- * This is the declared read for a label scan, and the only one callers
105
- * should reach for. Implementations MUST map every issue the way every
106
- * other read on this interface does — in particular `id` is the **issue
107
- * number**, not the backend's internal database id.
108
- *
109
- * That single rule is the whole reason the method exists. The raw REST
110
- * payload names the issue number `number` and the database id `id`, so a
111
- * consumer handed either shape wrote `number ?? id` and appeared to cope —
112
- * while silently addressing issues by database id on the mapped shape,
113
- * because there `id` is already the number and the fallback never fires.
114
- * A declared shape removes the choice rather than documenting it.
115
- *
116
- * `state` selects `open` (default), `closed` or `all`. Implementations MUST
117
- * honour it: a caller asking for `all` is asking a question — "did this
118
- * child reopen?" — that an open-only listing answers wrongly rather than
119
- * partially.
74
+ * List tickets carrying `labels` in the mapped shape: `id` MUST be the issue
75
+ * number, never the backend database id (a raw-vs-mapped `number ?? id`
76
+ * fallback silently addresses the wrong issue). `state` (default `open`)
77
+ * MUST be honoured.
120
78
  *
121
79
  * @param {{ state?: 'open'|'closed'|'all', labels?: string }} [_opts]
122
80
  * @returns {Promise<Array<{
@@ -134,19 +92,9 @@ export class ITicketingProvider {
134
92
  }
135
93
 
136
94
  /**
137
- * Read a parent's native sub-issue children as issue numbers.
138
- *
139
- * Takes **both** identifiers because they address different things: the
140
- * backend's child edge is keyed by the parent's opaque node id, while
141
- * `number` exists only so a degraded read can name the parent it failed on.
142
- * Passing the number where the node id belongs is not a type error — it is
143
- * a successful call about the wrong issue — which is why the parameter
144
- * order is fixed here rather than left to each call site.
145
- *
146
- * Implementations MUST return `[]` rather than throw when the sub-issue
147
- * feature is unavailable on the backend: absence of the feature is not a
148
- * failed read, and callers union this with a body checklist that still
149
- * answers the question.
95
+ * Native sub-issue children as issue numbers. The edge is keyed by node id;
96
+ * passing the number there succeeds about the wrong issue. MUST return `[]`
97
+ * when the backend lacks the feature (callers union a body checklist).
150
98
  *
151
99
  * @param {string} _nodeId Opaque node id of the parent.
152
100
  * @param {number} _number Parent's issue number, for diagnostics only.
@@ -157,30 +105,19 @@ export class ITicketingProvider {
157
105
  }
158
106
 
159
107
  /**
160
- * Resolve a ticket's container parent in **one** call.
108
+ * Resolve a container parent in one call. Returns `null` (never throws) when
109
+ * there is no parent or the backend cannot answer, so a degraded lookup
110
+ * never fails a lifecycle edge.
161
111
  *
162
- * Exists so a child→parent lookup is a read, not a search. Without it the
163
- * only way to find a container was to list every candidate parent and read
164
- * each one's children — O(containers) requests to answer what the backend
165
- * knows directly.
166
- *
167
- * Returns `null` when the ticket has no parent, and `null` rather than
168
- * throwing when the backend cannot answer. Callers treat a null as "no
169
- * parent resolved *here*" and may fall back to a body-declared link; an
170
- * exception would turn a degraded lookup into a failed lifecycle edge.
171
- *
172
- * @param {number} _number Issue number whose parent to resolve.
173
- * @returns {Promise<object|null>} Mapped parent ticket, or null.
112
+ * @param {number} _number
113
+ * @returns {Promise<object|null>}
174
114
  */
175
115
  async getParentIssue(_number) {
176
116
  throw new Error('Not implemented: getParentIssue');
177
117
  }
178
118
 
179
119
  /**
180
- * Return the dependency graph edges for a ticket.
181
- * Parses `blocked by #NNN` patterns from the ticket body.
182
- *
183
- * @param {number} ticketId - GitHub Issue number.
120
+ * @param {number} ticketId
184
121
  * @returns {Promise<{
185
122
  * blocks: number[],
186
123
  * blockedBy: number[]
@@ -191,28 +128,22 @@ export class ITicketingProvider {
191
128
  }
192
129
 
193
130
  /**
194
- * Fetch all comments for a specific ticket.
195
- *
196
- * @param {number} ticketId - GitHub Issue number.
197
- * @returns {Promise<object[]>} Array of comment objects.
131
+ * @param {number} ticketId
132
+ * @returns {Promise<object[]>}
198
133
  */
199
134
  async getTicketComments(_ticketId) {
200
135
  throw new Error('Not implemented: getTicketComments');
201
136
  }
202
137
 
203
- // ---------------------------------------------------------------------------
204
- // Write Operations
205
- // ---------------------------------------------------------------------------
138
+ // Writes
206
139
 
207
140
  /**
208
- * Mutate labels, body (tasklist checkboxes), and assignees on a ticket.
209
- *
210
- * @param {number} ticketId - GitHub Issue number.
141
+ * @param {number} ticketId
211
142
  * @param {{
212
143
  * labels?: { add?: string[], remove?: string[] },
213
144
  * body?: string,
214
145
  * assignees?: string[]
215
- * }} mutations - The mutations to apply.
146
+ * }} mutations
216
147
  * @returns {Promise<void>}
217
148
  */
218
149
  async updateTicket(_ticketId, _mutations) {
@@ -220,13 +151,11 @@ export class ITicketingProvider {
220
151
  }
221
152
 
222
153
  /**
223
- * Append a structured comment to a ticket.
224
- *
225
- * @param {number} ticketId - GitHub Issue number.
154
+ * @param {number} ticketId
226
155
  * @param {{
227
156
  * body: string,
228
157
  * type: 'progress'|'friction'|'notification'
229
- * }} payload - The comment content and classification.
158
+ * }} payload
230
159
  * @returns {Promise<{ commentId: number }>}
231
160
  */
232
161
  async postComment(_ticketId, _payload) {
@@ -234,8 +163,7 @@ export class ITicketingProvider {
234
163
  }
235
164
 
236
165
  /**
237
- * Delete an issue comment by its numeric id.
238
- * Implementations SHOULD treat "not found" as a no-op.
166
+ * SHOULD treat "not found" as a no-op.
239
167
  *
240
168
  * @param {number} _commentId
241
169
  * @returns {Promise<void>}
@@ -244,13 +172,9 @@ export class ITicketingProvider {
244
172
  throw new Error('Not implemented: deleteComment');
245
173
  }
246
174
 
247
- // ---------------------------------------------------------------------------
248
- // Setup Operations (used by bootstrap)
249
- // ---------------------------------------------------------------------------
175
+ // Setup (bootstrap)
250
176
 
251
177
  /**
252
- * Idempotent label creation. Skips labels that already exist.
253
- *
254
178
  * @param {Array<{ name: string, color: string, description: string }>} labelDefs
255
179
  * @returns {Promise<{ created: string[], skipped: string[] }>}
256
180
  */
@@ -259,11 +183,8 @@ export class ITicketingProvider {
259
183
  }
260
184
 
261
185
  /**
262
- * List the repository's whole label vocabulary.
263
- *
264
- * Implementations MUST paginate rather than take a fixed page cap: a cap is
265
- * silent truncation, and a caller deciding what to delete from a truncated
266
- * view is the exact failure Story #5189 exists to stop reproducing.
186
+ * MUST paginate: a page cap silently truncates, and callers decide
187
+ * deletions from this list.
267
188
  *
268
189
  * @returns {Promise<Array<{ name: string, color: string|null, description: string|null }>>}
269
190
  */
@@ -272,11 +193,8 @@ export class ITicketingProvider {
272
193
  }
273
194
 
274
195
  /**
275
- * Delete one label by name.
276
- *
277
- * A label that is already gone MUST resolve as a successful no-op
278
- * (`{ deleted: false, reason: 'not-found' }`) rather than throwing, so a
279
- * re-run of any sweep built on this port is idempotent.
196
+ * An absent label MUST resolve `{ deleted: false, reason: 'not-found' }`,
197
+ * never throw, so sweeps are idempotent.
280
198
  *
281
199
  * @param {string} _name
282
200
  * @returns {Promise<{ deleted: boolean, reason: string|null }>}
@@ -286,8 +204,7 @@ export class ITicketingProvider {
286
204
  }
287
205
 
288
206
  /**
289
- * Idempotent custom field creation on the Project board.
290
- * Only applicable when `projectNumber` is configured.
207
+ * Idempotent; only applicable when `projectNumber` is configured.
291
208
  *
292
209
  * @param {Array<{
293
210
  * name: string,
@@ -301,21 +218,17 @@ export class ITicketingProvider {
301
218
  }
302
219
 
303
220
  /**
304
- * Execute a GraphQL query/mutation against the ticketing backend.
305
- * @param {string} _query - GraphQL query/mutation string.
221
+ * @param {string} _query
306
222
  * @param {object} [_variables={}]
307
223
  * @param {object} [_opts={}]
308
- * @returns {Promise<object>} The `data` portion of the response.
224
+ * @returns {Promise<object>} The response's `data`.
309
225
  */
310
226
  async graphql(_query, _variables = {}, _opts = {}) {
311
227
  throw new Error('Not implemented: graphql');
312
228
  }
313
229
 
314
230
  /**
315
- * Inspect the branch-protection state of a branch. Returns
316
- * `{ enabled: false }` when no protection rule exists (HTTP 404), and
317
- * `{ enabled: true, raw }` when one does. Implementations may return a
318
- * richer shape; the only contract consumers rely on is the boolean.
231
+ * `{ enabled: false }` on 404; consumers rely only on the boolean.
319
232
  *
320
233
  * @param {string} _branch
321
234
  * @returns {Promise<{ enabled: boolean, raw?: object }>}
@@ -325,15 +238,9 @@ export class ITicketingProvider {
325
238
  }
326
239
 
327
240
  /**
328
- * Create or additively-merge a branch-protection rule on `_branch`. The
329
- * `contexts` array names required status-check contexts; existing
330
- * contexts are preserved (additive merge). When no rule exists one is
331
- * created with sensible defaults and just the supplied contexts.
332
- *
333
- * Returns a summary `{ created, added, existing }` describing the diff
334
- * the bootstrap orchestrator surfaces to the operator. Implementations
335
- * MAY ignore other branch-protection knobs (PR review counts, signed
336
- * commits, etc.) so operator-tuned settings survive re-runs.
241
+ * Additively merge required status-check `contexts` (creating the rule if
242
+ * absent). Other protection knobs are left alone so operator tuning
243
+ * survives re-runs.
337
244
  *
338
245
  * @param {string} _branch
339
246
  * @param {{ contexts: string[], strict?: boolean }} _opts
@@ -344,9 +251,7 @@ export class ITicketingProvider {
344
251
  }
345
252
 
346
253
  /**
347
- * Read the repo's merge-method allowlist + auto-merge / delete-branch
348
- * flags. Returns a sparse object containing only the fields the upstream
349
- * API exposes (consumers should treat missing keys as "unknown").
254
+ * Sparse: a missing key means "unknown".
350
255
  *
351
256
  * @returns {Promise<Partial<{
352
257
  * allow_squash_merge: boolean,
@@ -361,8 +266,7 @@ export class ITicketingProvider {
361
266
  }
362
267
 
363
268
  /**
364
- * PATCH the repo with the supplied merge-method settings. Body is sparse —
365
- * only the supplied fields are sent / touched.
269
+ * Sparse PATCH: only supplied fields are touched.
366
270
  *
367
271
  * @param {Partial<{
368
272
  * allow_squash_merge: boolean,
@@ -1,52 +1,24 @@
1
1
  /**
2
- * Logger conventions (see `docs/patterns.md` → "Error Handling Convention"):
3
- *
4
- * - `debug`: verbose trace; only emitted when the logger level is `verbose`.
5
- * - `info`: normal progress.
6
- * - `warn`: recoverable issue the operator should notice.
7
- * - `error`: non-fatal failure; caller continues. Use when `throw` would
8
- * be too loud (e.g. best-effort cleanup paths).
9
- * - `fatal`: unrecoverable; exits the process. Use only at CLI
10
- * boundaries, never inside library code.
11
- *
12
- * Level is resolved **lazily on every emit** from `AGENT_LOG_LEVEL` (or a
13
- * `setLevel` override). Resolving per emit — rather than once at module
14
- * load — lets tests exercise every level branch in-process via `setLevel`
15
- * or a live `AGENT_LOG_LEVEL` flip, without spawning a child process per
16
- * level (Story #3329):
17
- *
18
- * - `silent` → only `fatal` emits.
19
- * - `info` → default. Emits `info` and above; suppresses `debug`.
20
- * - `verbose` → emits everything (including `debug`).
2
+ * `error` is non-fatal (the caller continues); `fatal` exits and belongs only
3
+ * at CLI boundaries. The level (`silent` = fatal only, `info` default,
4
+ * `verbose` adds debug) is resolved from `AGENT_LOG_LEVEL` on every emit, not
5
+ * at load, so tests can flip it in-process.
21
6
  */
22
7
  /**
23
- * Recognized log levels, lowest-noise first. Anything outside this set
24
- * resolves to `info`.
8
+ * Anything else resolves to `info`.
25
9
  *
26
10
  * @type {ReadonlySet<string>}
27
11
  */
28
12
  const VALID_LEVELS = Object.freeze(new Set(['silent', 'info', 'verbose']));
29
13
 
30
14
  /**
31
- * Process-wide level override. `null` means "no explicit override — read
32
- * `AGENT_LOG_LEVEL` from the environment on each resolve". `setLevel`
33
- * pins this so tests (and embedders) can exercise every level branch
34
- * in-process without spawning a child whose module-load reads a different
35
- * env var. `setLevel(null)` clears the pin and restores env-driven
36
- * resolution.
15
+ * `null` means read `AGENT_LOG_LEVEL` on each resolve.
37
16
  *
38
17
  * @type {string|null}
39
18
  */
40
19
  let levelOverride = null;
41
20
 
42
21
  /**
43
- * Resolve the active log level lazily. Honors an explicit `setLevel`
44
- * override first, otherwise reads `AGENT_LOG_LEVEL` from the environment
45
- * on every call. Resolving per emit (rather than once at module load)
46
- * means a test can flip `AGENT_LOG_LEVEL` — or call `setLevel` — and see
47
- * the level branches react in-process, without a child process per level
48
- * (Story #3329).
49
- *
50
22
  * @returns {'silent'|'info'|'verbose'}
51
23
  */
52
24
  export function resolveLevel() {
@@ -59,11 +31,8 @@ export function resolveLevel() {
59
31
  }
60
32
 
61
33
  /**
62
- * Pin the process-wide log level, bypassing `AGENT_LOG_LEVEL`. Pass a
63
- * recognized level (`silent` / `info` / `verbose`) to force it,
64
- * or `null` to clear the pin and restore env-driven resolution. An
65
- * unrecognized non-null value throws so callers cannot silently pin a
66
- * level that resolves to `info`.
34
+ * Pin the level (`null` clears it). An unrecognized value throws rather than
35
+ * silently pinning `info`.
67
36
  *
68
37
  * @param {('silent'|'info'|'verbose')|null} level
69
38
  * @returns {void}
@@ -89,24 +58,12 @@ function infoEnabled() {
89
58
  return resolveLevel() === 'info' || debugEnabled();
90
59
  }
91
60
 
92
- // Mutable sinks for `info` (defaults to stdout via console.log) and the
93
- // stdout branch of `createProgress` (defaults to console.log). `warn` already
94
- // uses console.warn which Node routes to stderr, but we expose a sink for it
95
- // too so a single `routeAllOutputToStderr()` call gives a uniform guarantee
96
- // to callers that "no Logger output lands on stdout" (Story #2278).
61
+ // Swappable so `routeAllOutputToStderr()` can guarantee nothing hits stdout.
97
62
  let infoSink = (msg) => console.log(msg);
98
63
  let warnSink = (msg) => console.warn(msg);
99
64
  let progressStdoutSink = (msg) => console.log(msg);
100
65
 
101
- /**
102
- * Flip every Logger output that can land on stdout (`info`, `warn`, and the
103
- * stdout branch of `createProgress`) to stderr for the lifetime of the
104
- * process. Idempotent. Use when stdout is reserved for a structured payload
105
- * — for example the JSON envelope emitted by
106
- * `plan-context.js`, where any interleaved
107
- * `[Orchestrator] ℹ️ …` log line corrupts the captured file
108
- * (Story #2278).
109
- */
66
+ /** For processes whose stdout is a structured payload. Idempotent. */
110
67
  export function routeAllOutputToStderr() {
111
68
  infoSink = (msg) => console.error(msg);
112
69
  warnSink = (msg) => console.error(msg);
@@ -114,11 +71,7 @@ export function routeAllOutputToStderr() {
114
71
  }
115
72
 
116
73
  export const Logger = {
117
- /**
118
- * The currently-resolved level. A getter (not a frozen snapshot) so it
119
- * reflects `setLevel` overrides and live `AGENT_LOG_LEVEL` changes —
120
- * reading `Logger.level` always returns what the next emit will use.
121
- */
74
+ /** A getter, so it always reports what the next emit will use. */
122
75
  get level() {
123
76
  return resolveLevel();
124
77
  },
@@ -155,16 +108,8 @@ export const Logger = {
155
108
  };
156
109
 
157
110
  /**
158
- * Frozen no-op logger shaped like the public `Logger` surface (minus `fatal`,
159
- * which must never be silenced — silencing process-exit is a footgun). Use
160
- * this as the default-argument value when a function accepts an optional
161
- * logger; consumers that don't pass one get a uniform shape without each
162
- * call site re-declaring its own inline literal.
163
- *
164
- * Deliberately omits `fatal` so that any code path tempted to call
165
- * `logger.fatal(...)` against the no-op fails loudly rather than silently
166
- * skipping a process-exit that would otherwise have surfaced an
167
- * unrecoverable error.
111
+ * Default for an optional logger. Omits `fatal` deliberately: a silenced
112
+ * process-exit would hide an unrecoverable error, so calling it throws.
168
113
  */
169
114
  export const NOOP_LOGGER = Object.freeze({
170
115
  silent: true,
@@ -174,14 +119,7 @@ export const NOOP_LOGGER = Object.freeze({
174
119
  error() {},
175
120
  });
176
121
 
177
- /**
178
- * Frozen logger that routes every level to **stderr**. Use this when a
179
- * caller's stdout is a structured payload (e.g. the authoring-context JSON
180
- * envelope from `plan-context.js`) and any
181
- * progress/telemetry log must not interleave with the payload. Mirrors the
182
- * `{ info, warn, error, debug }` shape that the orchestration helpers
183
- * accept via optional `logger` arguments.
184
- */
122
+ /** Every level to stderr, for callers whose stdout is a structured payload. */
185
123
  export const STDERR_LOGGER = Object.freeze({
186
124
  debug: (message) => console.error(message),
187
125
  info: (message) => console.error(message),
@@ -1,16 +1,7 @@
1
1
  /**
2
- * engine.js — assemble the `/audit-baselines` evidence envelope
3
- * (Story #4902).
4
- *
5
- * Strictly read-only and strictly offline: it reads committed baselines, the
6
- * resolved config, git history, the static import graph, and any friction
7
- * ledger it finds. It never writes under `baselines/`, never refreshes a
8
- * baseline, and never runs a test, coverage, or mutation suite — the whole
9
- * point is that a baseline review costs a file read, not a CI run.
10
- *
11
- * Findings are evidence, not a verdict: assembling the envelope is success,
12
- * however alarming its contents, so the CLI exits 0 whenever it got this far.
13
- * Judgment belongs to the lens that reads the envelope.
2
+ * Assembles the `/audit-baselines` evidence envelope. Read-only and offline:
3
+ * never writes baselines or runs a suite — a review costs a file read, not a
4
+ * CI run. Evidence, not a verdict: assembling it is success (exit 0).
14
5
  *
15
6
  * @module lib/audit-baselines/engine
16
7
  */
@@ -31,19 +22,16 @@ import {
31
22
  readFriction,
32
23
  } from './weights.js';
33
24
 
34
- /** Envelope `kind` discriminator; matches the shipped schema's const. */
25
+ /** Matches the shipped schema's const. */
35
26
  const ENVELOPE_KIND = 'audit-baselines-envelope';
36
27
 
37
- /** Envelope schema version — bumped on any breaking shape change. */
28
+ /** Bump on any breaking shape change. */
38
29
  const ENVELOPE_SCHEMA_VERSION = '1';
39
30
 
40
- /** Cap on emitted hotspot clusters, independent of the per-gate `topN`. */
41
31
  export const DEFAULT_HOTSPOT_LIMIT = 50;
42
32
 
43
33
  /**
44
- * Resolve the repository config without letting a broken `.agentrc.json`
45
- * abort the run — an unreadable config still leaves the baseline files
46
- * themselves readable at their default paths.
34
+ * A broken `.agentrc.json` must not abort: default baseline paths still read.
47
35
  *
48
36
  * @param {string} cwd
49
37
  * @returns {{ quality: object, configError: string | null }}
@@ -57,11 +45,8 @@ function resolveQualityBlock(cwd) {
57
45
  }
58
46
 
59
47
  /**
60
- * Absolute temp root the friction ledger is searched under, anchored to the
61
- * **analysed** repository rather than the process cwd. `resolvedTempRoot()`
62
- * anchors to whichever checkout the current process sits in, which is the
63
- * right answer for a writer and the wrong one here: an engine pointed at
64
- * another repo with `--cwd` must read that repo's ledger, not this one's.
48
+ * Anchored to the analysed repo (`--cwd`), not the process's checkout as
49
+ * `resolvedTempRoot()` would be.
65
50
  *
66
51
  * @param {string} cwd
67
52
  * @returns {string}
@@ -71,17 +56,13 @@ function tempRootFor(cwd) {
71
56
  try {
72
57
  relative = tempRootFrom(resolveConfig({ cwd }));
73
58
  } catch {
74
- // Unreadable config — the framework default root is still worth probing.
59
+ // Unreadable config: probe the default root.
75
60
  }
76
61
  if (path.isAbsolute(relative)) return relative;
77
62
  return path.join(mainCheckoutRoot(cwd) ?? cwd, relative);
78
63
  }
79
64
 
80
65
  /**
81
- * Run the engine and return the envelope object. Pure with respect to the
82
- * filesystem apart from the reads named in the module docstring — writing
83
- * the result is the caller's job.
84
- *
85
66
  * @param {{
86
67
  * cwd: string,
87
68
  * topN?: number,
@@ -138,11 +119,10 @@ export function runEngine({
138
119
  }
139
120
 
140
121
  /**
141
- * Condense an envelope into the pure-JSON stdout summary. Small enough to
142
- * read in a terminal, and never carrying a row set.
122
+ * Terminal-sized stdout summary; never carries a row set.
143
123
  *
144
124
  * @param {object} envelope
145
- * @param {string} outPath absolute path the full envelope was written to
125
+ * @param {string} outPath
146
126
  * @returns {object}
147
127
  */
148
128
  export function summarize(envelope, outPath) {
@@ -1,11 +1,5 @@
1
1
  /**
2
- * gate-surface.js — walk both halves of the baseline surface (Story #4902).
3
- *
4
- * The closed `delivery.quality.gates` kinds and the out-of-band ratchet
5
- * baselines are one surface, and an engine that walks only the first silently
6
- * drops the second. This module owns that walk and the file universe an
7
- * `ignoreGlobs` entry is checked against; [`surface-entry.js`](surface-entry.js)
8
- * turns each kind into its health report.
2
+ * Walks both halves of the baseline surface (gates and ratchets).
9
3
  *
10
4
  * @module lib/audit-baselines/gate-surface
11
5
  */
@@ -16,9 +10,7 @@ import { listFilesUnder, readJsonFile } from './read.js';
16
10
  import { surfaceEntryFor } from './surface-entry.js';
17
11
 
18
12
  /**
19
- * Every `targetDirs` entry declared by any gate, deduplicated. This is the
20
- * file universe an `ignoreGlobs` entry is checked against — a glob that
21
- * matches nothing inside the dirs its own gate scans is dead weight.
13
+ * The file universe `ignoreGlobs` are checked against.
22
14
  *
23
15
  * @param {object | null | undefined} quality
24
16
  * @returns {string[]}
@@ -34,15 +26,9 @@ function declaredTargetDirs(quality) {
34
26
  }
35
27
 
36
28
  /**
37
- * Walk both halves of the gate surface — the closed `delivery.quality.gates`
38
- * kinds and the out-of-band ratchet baselines — and report each instrument's
39
- * health.
40
- *
41
29
  * @param {{ cwd: string, quality: object, now?: Date, run?: Function }} args
42
- * `run` overrides the git spawn; `staleness.js` owns the real default.
43
30
  * @returns {{ entries: object[], baselines: Map<string, object|null> }}
44
- * `baselines` carries each parsed envelope forward so the hotspot, trend,
45
- * and headroom sections never re-read a 650KB file off disk.
31
+ * `baselines` is carried forward so later sections never re-read from disk.
46
32
  */
47
33
  export function buildGateSurface({ cwd, quality, now = new Date(), run }) {
48
34
  const files = declaredTargetDirs(quality).flatMap((dir) =>