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,27 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * sync-agentrc.js — default-aware `.agentrc.json` reconciliation (Story #1995).
5
- *
6
- * Replaces the manual procedure formerly described in
7
- * `.agents/workflows/helpers/mandrel-sync-config.md`. Invoked by
8
- * `/mandrel-update` Step 3 after the package upgrade re-materializes `.agents/`.
9
- *
10
- * Contract:
11
- * - Validates the project config against the framework schema. On
12
- * failure, prints diagnostics and exits 1.
13
- * - Never auto-fills optional keys from `.agents/docs/agentrc-reference.json`.
14
- * The runtime layers framework defaults at read time, so an absent
15
- * key resolves to the framework default without being written.
16
- * - For every project leaf whose value equals the framework default,
17
- * prints an informational `[REDUNDANT]` advisory. The project file
18
- * is never modified.
19
- *
20
- * Exit codes:
21
- * 0 — Config is valid (advisories may still appear).
22
- * 1 — Config is missing, malformed, or fails schema validation.
23
- *
24
- * The flag contract lives in `USAGE` below — `--help` is the one home for it.
4
+ * Validate `.agentrc.json` and flag leaves that restate a framework default.
5
+ * Never writes the file: defaults are layered at read time, so absent keys
6
+ * need no filling. Flags and exit codes live in `USAGE`.
25
7
  */
26
8
 
27
9
  import { fileURLToPath } from 'node:url';
@@ -1,34 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Projects .agents/agents/ (and .agents/local/agents/ when present) into a flat
5
- * `.claude/agents/` tree so Claude Code exposes each role definition as a
6
- * role-scoped sub-agent (`subagent_type: <name>`). Exact sibling of
7
- * `sync-claude-commands.js` — same header, same local-shadow policy, same
8
- * orphan-reap, same prune-exempt handling for the consumer-authored
9
- * `.agents/local/agents/` source. Two source directories are enumerated in
10
- * order:
11
- *
12
- * 1. PAYLOAD_SRC — `.agents/agents/` (the installed Mandrel payload)
13
- * 2. LOCAL_SRC — `.agents/local/agents/` (consumer-authored, prune-exempt)
14
- *
15
- * The payload directory wins on basename collision: if both sources supply
16
- * `foo.md`, the payload copy is projected and the local copy is ignored with a
17
- * `shadowed` warning. Because both sources are unioned into `sourceSet`, local
18
- * agent defs are also protected from the orphan-reap — they survive
19
- * `npm install`, `mandrel sync`, and `mandrel update` with no manual re-sync.
20
- *
21
- * Only top-level `.md` files project (`.claude/agents/<name>.md`). Unlike the
22
- * commands sync there is no `loops/` namespace and no plugin tree to reap — the
23
- * agent surface is flat.
24
- *
25
- * A `.claude/agents/<name>.md` runs on its **own** system prompt — it does NOT
26
- * inherit the `CLAUDE.md` @-import closure — so a spawn routed to a role agent
27
- * stops re-paying the always-loaded context (issue #4478). The role defs
28
- * @-import `security-baseline.md` so the inviolable security MUSTs stay
29
- * single-sourced.
30
- *
31
- * Usage: node .agents/scripts/sync-claude-agents.js
4
+ * Project `.agents/agents/` and `.agents/local/agents/` into a flat
5
+ * `.claude/agents/` tree — the sibling of `sync-claude-commands.js`, with the
6
+ * same payload-wins shadowing and orphan-reap. A role agent runs on its own
7
+ * system prompt (no `CLAUDE.md` closure), which is the point of routing to it.
32
8
  */
33
9
 
34
10
  // cli-opt-out: top-level-await script with no main() function — runAsCli wraps an async main, which doesn't apply here.
@@ -38,21 +14,10 @@ import path from 'node:path';
38
14
  import { applyHeader } from './lib/command-header.js';
39
15
  import { Logger } from './lib/Logger.js';
40
16
 
41
- // Resolve the project root from the invocation cwd — the consumer project where
42
- // `.agents/` is materialized and where Claude Code loads `.claude/agents/`.
43
- // It MUST NOT use `__dirname/../..`: in an npm-installed consumer this script
44
- // runs from `node_modules/mandrel/.agents/scripts/`, so that climb lands on the
45
- // package dir and the defs would be written *inside node_modules* rather than
46
- // the consumer. Every real invocation runs with cwd at the project root
47
- // (`npm run sync:agents`, the prepare hook). Tests drive fixture trees via the
48
- // SYNC_CLAUDE_AGENTS_SRC/DEST overrides below.
17
+ // cwd, never `__dirname/../..`, which lands inside node_modules when installed.
49
18
  const PROJECT_ROOT = process.cwd();
50
19
 
51
- // Env-var overrides exist so the sync logic can be exercised against a fixture
52
- // agents tree in isolation. When unset, behaviour is unchanged — the script
53
- // defaults to the real agents / .claude/agents directories. SYNC_CLAUDE_AGENTS_SRC
54
- // overrides the PAYLOAD source only; LOCAL_SRC is always derived from the project
55
- // root so fixture tests can isolate the payload source.
20
+ // Test overrides; SYNC_CLAUDE_AGENTS_SRC replaces the payload source only.
56
21
  const PAYLOAD_SRC =
57
22
  process.env.SYNC_CLAUDE_AGENTS_SRC ??
58
23
  path.join(PROJECT_ROOT, '.agents', 'agents');
@@ -69,8 +34,6 @@ export const LOCAL_HEADER =
69
34
  '<!-- AUTO-GENERATED from .agents/local/ — do not edit. Source of truth: .agents/local/agents/ -->\n<!-- Re-run: npm run sync:agents -->\n\n';
70
35
 
71
36
  /**
72
- * Return true when the given directory path exists and is accessible.
73
- *
74
37
  * @param {string} dir
75
38
  * @returns {boolean}
76
39
  */
@@ -84,11 +47,9 @@ function dirExists(dir) {
84
47
 
85
48
  fs.mkdirSync(DEST_DIR, { recursive: true });
86
49
 
87
- // Top-level .md files project flat. Subdirectories are skipped.
88
50
  const isTopLevelAgent = (entry) => entry.isFile() && entry.name.endsWith('.md');
89
51
 
90
- // Enumerate sources: payload first, then local (if it exists). Payload wins on
91
- // basename collision — a consumer must not silently shadow a core role def.
52
+ // Payload first, so it wins a collision.
92
53
  const SRC_DIRS = [PAYLOAD_SRC, LOCAL_SRC].filter(dirExists);
93
54
 
94
55
  /** @type {Array<{dir: string, name: string}>} */
@@ -99,7 +60,6 @@ const entries = SRC_DIRS.flatMap((dir) =>
99
60
  .map((e) => ({ dir, name: e.name })),
100
61
  );
101
62
 
102
- // Collision policy: payload wins, warn on a shadowed local file.
103
63
  const byName = new Map();
104
64
  for (const e of entries) {
105
65
  if (byName.has(e.name)) {
@@ -109,13 +69,10 @@ for (const e of entries) {
109
69
  byName.set(e.name, e);
110
70
  }
111
71
 
112
- // sourceSet drives the orphan-reap: any existing agent def not in this set is
113
- // removed.
72
+ // Any existing agent def not in this set is reaped.
114
73
  const sourceSet = new Set(byName.keys());
115
74
 
116
75
  /**
117
- * List the `.md` agent defs currently on disk in the destination.
118
- *
119
76
  * @returns {string[]}
120
77
  */
121
78
  function listExistingAgents() {
@@ -133,9 +90,7 @@ for (const name of listExistingAgents()) {
133
90
  }
134
91
  }
135
92
 
136
- // Copy each role def, injecting the auto-generated header after any leading
137
- // frontmatter (so the `---` block stays on line 1 and Claude Code parses the
138
- // agent's name/description). Use a distinct header comment for local-origin files.
93
+ // The header goes after any frontmatter, so `---` stays on line 1.
139
94
  let synced = 0;
140
95
  const resolvedEntries = Array.from(byName.values());
141
96
  await Promise.all(
@@ -146,7 +101,6 @@ await Promise.all(
146
101
  const dest = path.join(DEST_DIR, name);
147
102
  const target = applyHeader(content, header);
148
103
 
149
- // Skip write if content is already identical (avoid noisy git diffs).
150
104
  try {
151
105
  const existingContent = await fs.promises.readFile(dest, 'utf8');
152
106
  if (existingContent === target) return;
@@ -1,46 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Projects .agents/workflows/ (and .agents/local/workflows/ when present) into
5
- * a flat `.claude/commands/` tree so Claude Code exposes each workflow as a
6
- * bare `/<name>` slash command. Two source directories are enumerated in order:
7
- *
8
- * 1. PAYLOAD_SRC — `.agents/workflows/` (the installed Mandrel payload)
9
- * 2. LOCAL_SRC — `.agents/local/workflows/` (consumer-authored, prune-exempt)
10
- *
11
- * The payload directory wins on basename collision: if both sources supply
12
- * `foo.md`, the payload copy is projected and the local copy is ignored with a
13
- * `shadowed` warning. Because both sources are unioned into `sourceSet`, local
14
- * commands are also protected from the orphan-reap — they survive
15
- * `npm install`, `mandrel sync`, and `mandrel update` with no manual re-sync.
16
- *
17
- * Flat projection (reverts the #3576 plugin cutover): the plugin command tree
18
- * (`.claude/plugins/mandrel/`) and the repo-local marketplace
19
- * (`.claude/.claude-plugin/marketplace.json`) are NOT written, because the
20
- * plugin system is unavailable in some Claude Code environments (`/plugin` not
21
- * present), which left the namespaced `/mandrel:<name>` commands unreachable.
22
- * Flat `.claude/commands/*.md` is the surface that loads across every
23
- * environment (CLI, IDE, GUI, web, SDK). On a machine that previously synced
24
- * the plugin tree, this script reaps it on the next run (see reapPluginTree).
25
- *
26
- * Top-level .md files project flat (`/<name>`). The
27
- * `.agents/workflows/helpers/` subdirectory holds path-included modules
28
- * (e.g. epic-code-review, epic-retro) that parent workflows read by
29
- * relative path — they are intentionally **not** exposed as commands, so
30
- * helpers/ is skipped.
31
- *
32
- * The `.agents/workflows/loops/` subdirectory is the **one** exception to
33
- * the skip-subdirectories rule (Story #4289, Epic #4284). Each loop unit
34
- * there projects to `.claude/commands/loops/<name>.md`, preserving the
35
- * subpath so Claude Code namespaces it as `/loops:<name>` (matching Claude
36
- * Code's subdirectory-command namespacing). Hosts that flatten
37
- * subdirectory commands surface the same file as the flat fallback
38
- * `/loops-<name>` (i.e. `loops-<name>` in the command tree) — the
39
- * projection writes the namespaced path; the flat form is the documented
40
- * host-side fallback, not a second on-disk copy. No subdirectory other
41
- * than `loops/` is recursed.
42
- *
43
- * Usage: node .agents/scripts/sync-claude-commands.js
4
+ * Project `.agents/workflows/` and `.agents/local/workflows/` into a flat
5
+ * `.claude/commands/` tree (one `/<name>` per top-level workflow). The payload
6
+ * wins a name collision; both sources feed the orphan-reap set, so local
7
+ * commands survive re-syncs. Flat commands, not a plugin tree, because the
8
+ * plugin system is unavailable in some Claude Code hosts. `helpers/` is not
9
+ * projected; `loops/` is the one recursed subdirectory (`/loops:<name>`).
44
10
  */
45
11
 
46
12
  // cli-opt-out: top-level-await script with no main() function — runAsCli wraps an async main, which doesn't apply here.
@@ -50,27 +16,11 @@ import path from 'node:path';
50
16
  import { applyHeader, isCommandExcluded } from './lib/command-header.js';
51
17
  import { Logger } from './lib/Logger.js';
52
18
 
53
- // Resolve the project root from the invocation cwd — the consumer project where
54
- // `.agents/` is materialized and where Claude Code loads `.claude/commands/`.
55
- // It MUST NOT use `__dirname/../..`: in an npm-installed consumer this script
56
- // runs from `node_modules/mandrel/.agents/scripts/`, so that climb
57
- // lands on the package dir and the commands would be written *inside
58
- // node_modules* rather than the consumer — leaving `/<name>` commands
59
- // unloadable and the `commands-in-sync` doctor check (which resolves the same
60
- // consumer root via cwd — Story #3588) reporting "N not synced". Every real
61
- // invocation runs with cwd at the project root: `npm run sync:commands`, the
62
- // UserPromptSubmit hook, and `mandrel sync-commands` (which inherits the
63
- // caller's cwd). Tests drive fixture trees via the SYNC_CLAUDE_COMMANDS_SRC/DEST
64
- // overrides below.
19
+ // The root is cwd, never `__dirname/../..`: installed under node_modules that
20
+ // climb lands on the package dir and would write commands inside it.
65
21
  const PROJECT_ROOT = process.cwd();
66
22
 
67
- // Env-var overrides exist so the sync logic can be exercised against a
68
- // fixture workflow tree in isolation (regression test for the Epic #1185
69
- // frontmatter pass-through contract). When unset, behaviour is unchanged
70
- // — the script defaults to the real workflows / commands directories.
71
- // SYNC_CLAUDE_COMMANDS_SRC overrides the PAYLOAD source only; the LOCAL_SRC
72
- // is always derived from the project root so fixture tests can isolate the
73
- // payload source while still allowing LOCAL_SRC to be present if needed.
23
+ // Test overrides; SYNC_CLAUDE_COMMANDS_SRC replaces the payload source only.
74
24
  const PAYLOAD_SRC =
75
25
  process.env.SYNC_CLAUDE_COMMANDS_SRC ??
76
26
  path.join(PROJECT_ROOT, '.agents', 'workflows');
@@ -87,8 +37,6 @@ export const LOCAL_HEADER =
87
37
  '<!-- AUTO-GENERATED from .agents/local/ — do not edit. Source of truth: .agents/local/workflows/ -->\n<!-- Re-run: npm run sync:commands -->\n\n';
88
38
 
89
39
  /**
90
- * Return true when the given directory path exists and is accessible.
91
- *
92
40
  * @param {string} dir
93
41
  * @returns {boolean}
94
42
  */
@@ -101,14 +49,8 @@ function dirExists(dir) {
101
49
  }
102
50
 
103
51
  /**
104
- * Reap the generated plugin projection (the #3576 surface) so the namespaced
105
- * `/mandrel:<name>` commands and the repo-local marketplace stop shadowing the
106
- * flat `/<name>` commands. This is the cutover-back step on existing machines:
107
- * the plugin tree is no longer written, but a developer who synced under #3576
108
- * still has it on disk. Removing `.claude/plugins/mandrel/` and the marketplace
109
- * listing is idempotent and never blocks the flat sync.
110
- *
111
- * Skipped when SYNC_CLAUDE_COMMANDS_DEST is set (fixture runs own their tree).
52
+ * Remove any on-disk plugin projection and marketplace listing, which would
53
+ * shadow the flat commands. Idempotent; skipped for fixture runs.
112
54
  *
113
55
  * @returns {void}
114
56
  */
@@ -128,7 +70,6 @@ function reapPluginTree() {
128
70
  Logger.warn(` skip reap ${target}: ${err.message}`);
129
71
  }
130
72
  }
131
- // Remove the now-empty .claude-plugin/ dir (ignore if absent or non-empty).
132
73
  try {
133
74
  fs.rmdirSync(path.join(PROJECT_ROOT, '.claude', '.claude-plugin'));
134
75
  } catch {
@@ -139,22 +80,14 @@ function reapPluginTree() {
139
80
  reapPluginTree();
140
81
  fs.mkdirSync(DEST_DIR, { recursive: true });
141
82
 
142
- // The only namespaced subdirectory we recurse. Every other subdirectory
143
- // (notably helpers/) is skipped — those hold path-included modules, not
144
- // slash commands. Loop units under workflows/loops/ project into
145
- // .claude/commands/loops/ so Claude Code namespaces them as /loops:<name>
146
- // (Story #4289).
83
+ // The only recursed subdirectory; helpers/ holds path-included modules.
147
84
  const LOOPS_NS = 'loops';
148
85
 
149
- // Top-level .md files project flat. Subdirectories are skipped here and the
150
- // only one re-introduced is loops/ (handled by enumerateLoopUnits below).
151
86
  const isTopLevelWorkflow = (entry) =>
152
87
  entry.isFile() && entry.name.endsWith('.md');
153
88
 
154
89
  /**
155
- * `README.md` (any case) under `loops/` is namespace documentation, not a
156
- * loop unit — it carries no `loop:` frontmatter and must not project as a
157
- * `/loops:README` command. Exclude it from the loop-unit enumeration.
90
+ * `loops/README.md` is documentation, not a command.
158
91
  *
159
92
  * @param {import('node:fs').Dirent} entry
160
93
  * @returns {boolean}
@@ -163,13 +96,9 @@ const isLoopUnit = (entry) =>
163
96
  isTopLevelWorkflow(entry) && entry.name.toLowerCase() !== 'readme.md';
164
97
 
165
98
  /**
166
- * Enumerate the loop units under a source dir's `loops/` subdirectory.
167
- * Returns entries keyed by the namespaced relative path
168
- * (`loops/<name>.md`) so they never collide with a flat top-level command
169
- * of the same basename and so the reap can track them distinctly. The
170
- * directory's `README.md` is skipped — it is documentation, not a command.
99
+ * Keyed by `loops/<name>.md` so a unit never collides with a flat command.
171
100
  *
172
- * @param {string} dir — a workflows source root (payload or local).
101
+ * @param {string} dir A workflows source root.
173
102
  * @returns {Array<{dir: string, name: string, rel: string}>}
174
103
  */
175
104
  function enumerateLoopUnits(dir) {
@@ -185,10 +114,7 @@ function enumerateLoopUnits(dir) {
185
114
  }));
186
115
  }
187
116
 
188
- // Enumerate sources: payload first, then local (if it exists). Payload wins
189
- // on relative-path collision — a consumer must not silently shadow a core
190
- // command. Each entry carries its destination-relative path (`rel`): a bare
191
- // basename for flat top-level commands, `loops/<name>.md` for loop units.
117
+ // Payload first, so it wins a collision.
192
118
  const SRC_DIRS = [PAYLOAD_SRC, LOCAL_SRC].filter(dirExists);
193
119
 
194
120
  /** @type {Array<{dir: string, name: string, rel: string}>} */
@@ -200,12 +126,7 @@ const entries = SRC_DIRS.flatMap((dir) => [
200
126
  ...enumerateLoopUnits(dir),
201
127
  ]);
202
128
 
203
- // Collision policy: payload wins, warn on a shadowed local file. Keyed by the
204
- // destination-relative path so a flat `foo.md` and a `loops/foo.md` are
205
- // distinct entries. A workflow whose frontmatter carries `command: false`
206
- // (#4482 — dual-use audit lens files with a host-native standalone
207
- // equivalent) is excluded from projection entirely: it never enters
208
- // `sourceSet`, so any previously projected copy is reaped below.
129
+ // A `command: false` workflow never enters `sourceSet`, so a stale copy is reaped.
209
130
  const byRel = new Map();
210
131
  for (const e of entries) {
211
132
  if (byRel.has(e.rel)) {
@@ -219,15 +140,10 @@ for (const e of entries) {
219
140
  byRel.set(e.rel, e);
220
141
  }
221
142
 
222
- // sourceSet drives the orphan-reap: any existing command not in this set is
223
- // removed. Keyed by destination-relative path so loop units are reaped from
224
- // the loops/ namespace and flat commands from the root.
143
+ // Any existing command not in this set is reaped.
225
144
  const sourceSet = new Set(byRel.keys());
226
145
 
227
146
  /**
228
- * List the destination-relative paths of every projected command currently
229
- * on disk: flat `*.md` at the root plus `loops/*.md` in the namespace.
230
- *
231
147
  * @returns {string[]}
232
148
  */
233
149
  function listExistingCommands() {
@@ -252,11 +168,7 @@ for (const rel of listExistingCommands()) {
252
168
  }
253
169
  }
254
170
 
255
- // Copy each workflow, injecting the auto-generated header after any leading
256
- // frontmatter (so the `---` block stays on line 1 and Claude Code parses the
257
- // command description). Use a distinct header comment for local-origin files.
258
- // Parallelised so the ~30-file sync doesn't serialise on per-file fs latency
259
- // (noticeable on Windows where each syscall pays a larger fixed cost).
171
+ // The header goes after any frontmatter, so `---` stays on line 1.
260
172
  let synced = 0;
261
173
  const resolvedEntries = Array.from(byRel.values());
262
174
  await Promise.all(
@@ -267,11 +179,9 @@ await Promise.all(
267
179
  const dest = path.join(DEST_DIR, rel);
268
180
  const target = applyHeader(content, header);
269
181
 
270
- // Ensure the namespace subdirectory exists before writing a loop unit.
271
182
  await fs.promises.mkdir(path.dirname(dest), { recursive: true });
272
183
 
273
- // Skip write if content is already identical (avoid noisy git diffs).
274
- // Use try/catch over existsSync+readFile so we only pay one syscall.
184
+ // Skip identical content to avoid noisy git diffs.
275
185
  try {
276
186
  const existingContent = await fs.promises.readFile(dest, 'utf8');
277
187
  if (existingContent === target) return;
@@ -2,35 +2,9 @@
2
2
  /* node:coverage ignore file */
3
3
 
4
4
  /**
5
- * test-wrapper.js — npm-test preflight gate.
6
- *
7
- * Story #1289 wires the self-healing checks registry in front of
8
- * `npm test` so the suite refuses to start in a known-bad state (e.g.
9
- * core.bare flipped on the main checkout, missing `.env` / `.mcp.json`
10
- * bootstrap files, etc.). The wrapper runs
11
- * `runChecks({ scope: 'npm-test', autoFix: true })` against the assembled
12
- * state probe; on any surviving blocker it prints a `id · summary ·
13
- * fixCommand` table and exits with code 2 (the project-wide "preflight
14
- * refused" reservation).
15
- *
16
- * On a clean preflight npm continues to `.agents/scripts/run-tests.js`, which
17
- * execs the underlying Node test runner and cleans test-reserved temp
18
- * artefacts afterward. This wrapper itself adds no top-level npm dependencies.
19
- *
20
- * Wiring: `package.json` points `pretest` at this script. The `test`
21
- * script remains the node --test invocation so `npm test` still picks up
22
- * `pretest` automatically per npm lifecycle rules. A failed pretest aborts
23
- * the lifecycle without invoking the test runner — exit code 2 propagates
24
- * out through npm.
25
- *
26
- * Bypass: set `SKIP_PREFLIGHT=1` to skip the gate entirely (used by the
27
- * `coverage` script which manages its own preflight separately, and by
28
- * any debugging session that needs the suite to run despite a known
29
- * blocker the operator is iterating on).
30
- *
31
- * Usage:
32
- * node .agents/scripts/test-wrapper.js # full preflight + test
33
- * SKIP_PREFLIGHT=1 node .agents/scripts/test-wrapper.js # skip gate
5
+ * `pretest` preflight: runs the self-healing checks (scope `npm-test`) so the
6
+ * suite refuses to start in a known-bad state; a surviving blocker exits 2,
7
+ * which aborts the npm lifecycle. `SKIP_PREFLIGHT=1` bypasses it.
34
8
  */
35
9
 
36
10
  import { runAsCli } from './lib/cli-utils.js';
@@ -40,7 +14,6 @@ import {
40
14
  runPreflight,
41
15
  } from './lib/preflight-runner.js';
42
16
 
43
- /** Default Logger adapter — same shape preflight-runner uses. */
44
17
  const DEFAULT_LOGGER = {
45
18
  info: (msg) => Logger.info(msg),
46
19
  warn: (msg) => Logger.warn(msg),
@@ -48,17 +21,11 @@ const DEFAULT_LOGGER = {
48
21
  };
49
22
 
50
23
  /**
51
- * Run the npm-test preflight gate. Exported so unit tests can drive it
52
- * directly with an inline registry, without actually spawning the test
53
- * runner. Returns `{ status: 'ok' | 'blocked' }` plus the findings/fixed
54
- * arrays from the runner.
55
- *
56
24
  * @param {object} [opts]
57
25
  * @param {string} [opts.cwd=process.cwd()]
58
- * @param {object} [opts.probes] Test-only probe injection.
59
- * @param {object} [opts.registry] Test-only inline registry — bypasses
60
- * `loadRegistry()`.
61
- * @param {string} [opts.dir] Test-only fixture directory.
26
+ * @param {object} [opts.probes] Test-only.
27
+ * @param {object} [opts.registry] Test-only.
28
+ * @param {string} [opts.dir] Test-only.
62
29
  * @param {{ info?: Function, warn?: Function, error?: Function }} [opts.logger]
63
30
  * @returns {Promise<{ status: 'ok' | 'blocked', findings: Array, fixed: Array }>}
64
31
  */
@@ -89,7 +56,6 @@ export async function runTestWrapperPreflight({
89
56
  runAsCli(
90
57
  import.meta.url,
91
58
  async () => {
92
- // Operator bypass for iterative debugging — see the file header.
93
59
  if (process.env.SKIP_PREFLIGHT === '1') {
94
60
  Logger.warn(
95
61
  '[npm-test] SKIP_PREFLIGHT=1 — bypassing preflight checks (debugging mode).',
@@ -98,9 +64,6 @@ runAsCli(
98
64
  }
99
65
  const result = await runTestWrapperPreflight();
100
66
  if (result.status === 'blocked') {
101
- // The wrapper never spawns the test runner on a blocked preflight.
102
- // Exit code 2 propagates out through `npm run pretest` and short-
103
- // circuits the `npm test` lifecycle before the test command runs.
104
67
  process.exit(PREFLIGHT_REFUSED_EXIT_CODE);
105
68
  }
106
69
  },
@@ -1,20 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Refresh `baselines/coverage.json` from the most recent
4
- * `coverage/coverage-final.json`. Run this when you intentionally add,
5
- * remove, or change scope of `.agents/scripts/**` files and the
6
- * resulting per-file coverage shifts are expected.
7
- *
8
- * Story #3658 (Epic #2173): this CLI is now a thin wrapper around
9
- * `refreshBaseline({ kind: 'coverage' })` from
10
- * `.agents/scripts/lib/baselines/refresh-service.js`. All scoring, scope
11
- * resolution, envelope assembly, and persistence flows through the unified
12
- * service.
13
- *
14
- * The script does NOT run the test suite itself — invoke
15
- * `npm run test:coverage` first (or rely on its prior run-on-disk
16
- * artifact). This keeps the refresh idempotent and lets operators
17
- * inspect coverage output before locking it in.
3
+ * Refresh the coverage baseline from the `coverage-final.json` on disk via
4
+ * `refreshBaseline({ kind: 'coverage' })`. Never runs the suite, so the
5
+ * refresh is idempotent and the output can be inspected first.
18
6
  */
19
7
 
20
8
  import { createRequire } from 'node:module';
@@ -34,12 +22,7 @@ import {
34
22
  } from './lib/coverage-baseline.js';
35
23
  import { Logger } from './lib/Logger.js';
36
24
 
37
- /**
38
- * Usage block for `--help`. This CLI *writes* on invocation, so the help
39
- * branch must short-circuit before `main` runs rather than inside it —
40
- * `runAsCli` answers help first, which makes "a usage probe never mutates a
41
- * baseline" structural instead of a check `main` has to remember.
42
- */
25
+ /** `runAsCli` answers `--help` before `main`, so a usage probe never writes. */
43
26
  const USAGE = {
44
27
  invocation:
45
28
  'node .agents/scripts/update-coverage-baseline.js [--full-scope | --diff-scope <ref>]',
@@ -84,7 +67,7 @@ function main() {
84
67
  const refreshOpts = {
85
68
  kind: 'coverage',
86
69
  writePath: absBaselinePath,
87
- epsilon: getBaselineEpsilon('coverage', null),
70
+ epsilon: getBaselineEpsilon('coverage'),
88
71
  scorer: buildCoverageUpdaterScorer(cwd, {
89
72
  readCoverage: readCoverageFinal,
90
73
  loadScope: loadC8Scope,
@@ -1,6 +1,4 @@
1
- // Fail-fast if the framework's runtime deps are not installed — must be the
2
- // first import so the check runs before any third-party-importing sibling
3
- // module is evaluated (Story #3432).
1
+ // Must be the first import: fails fast before any third-party import loads.
4
2
  import './lib/runtime-deps/ensure-installed.js';
5
3
  import {
6
4
  buildCrapUpdaterScorer,
@@ -24,34 +22,13 @@ import {
24
22
  import { Logger } from './lib/Logger.js';
25
23
 
26
24
  /**
27
- * CLI: scan → score → save the CRAP baseline.
28
- *
29
- * Story #3658 (Epic #2173): this CLI is now a thin wrapper around
30
- * `refreshBaseline({ kind: 'crap' })` from
31
- * `.agents/scripts/lib/baselines/refresh-service.js`. All scoring, scope
32
- * resolution, envelope assembly, and persistence flows through the unified
33
- * service.
34
- *
35
- * Writes the canonical CRAP baseline at the path resolved from
36
- * `delivery.quality.baselines.crap.path` (default `baselines/crap.json`),
37
- * or the path supplied via `--baseline <path>`. Output is a deterministic,
38
- * kernel-stamped envelope. Files without coverage entries are skipped (not
39
- * scored as 0%) when `requireCoverage: true` — their count and names are
40
- * logged so the operator can tell the difference between "unscorable" and
41
- * "safe zero".
42
- *
43
- * Exits non-zero only when the scanner itself crashes. An empty result (no
44
- * coverage at all, no scored methods) still writes an envelope with `rows: []`
45
- * so downstream `check-crap` can tell "intentional empty baseline" apart from
46
- * "no baseline yet".
25
+ * Refresh the CRAP baseline via `refreshBaseline({ kind: 'crap' })`. Under
26
+ * `requireCoverage` an uncovered file is skipped and logged, never scored as
27
+ * 0%. An empty result still writes `rows: []`, so an intentional empty
28
+ * baseline differs from a missing one.
47
29
  */
48
30
 
49
- /**
50
- * Usage block for `--help` (Story #4872). This CLI *writes* on invocation, so
51
- * the help branch must short-circuit before `main` runs rather than inside it —
52
- * `runAsCli` answers help first, which makes "a usage probe never mutates a
53
- * baseline" structural instead of a check `main` has to remember.
54
- */
31
+ /** `runAsCli` answers `--help` before `main`, so a usage probe never writes. */
55
32
  const USAGE = {
56
33
  invocation:
57
34
  'node .agents/scripts/update-crap-baseline.js [--baseline <path>] [--coverage <path>] [--full-scope | --diff-scope <ref>]',
@@ -96,7 +73,7 @@ async function main() {
96
73
  const refreshOpts = {
97
74
  kind: 'crap',
98
75
  writePath: options.absBaselinePath,
99
- epsilon: getBaselineEpsilon('crap', config),
76
+ epsilon: getBaselineEpsilon('crap'),
100
77
  scorer: buildCrapUpdaterScorer(options, { loadCoverage }),
101
78
  };
102
79
  // No flag -> scopeFiles=null + fullScope=false -> the service derives the