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,37 +1,9 @@
1
1
  /**
2
- * lib/workers/maintainability-report-worker.js — CPU-pool worker entry for
3
- * the native ReviewProvider's per-file maintainability scoring. One file
4
- * in, the file's full maintainability *report* out (module score, per-method
5
- * scores, worstMethod). No project config, no git, no provider — just
6
- * typhonjs-escomplex (via maintainability-engine) and the in-memory TS
7
- * transpile shim.
8
- *
9
- * This is the report-shaped sibling of `maintainability-worker.js`, which
10
- * returns only the scalar MI score for the baseline gate. The native review
11
- * needs the richer report (per-method scores feed the critical/warning
12
- * tiering in `classifyReport`), so this worker calls
13
- * `calculateReportForFile` instead of `calculateForFile`.
14
- *
15
- * Message contract — see lib/cpu-pool.js:
16
- * IN : { item: string } — absolute file path to score
17
- * (reads head content from disk)
18
- * { item: { source, label } } — pre-sourced content to score
19
- * (Story #3696: the native review
20
- * sources head content via
21
- * `git show <headRef>:<path>` and
22
- * passes the string here so the
23
- * worker scores the head version,
24
- * not the on-disk base copy)
25
- * { exit: true } — drain & terminate
26
- * OUT : { ok: true, result: { filePath, report: object | null } }
27
- *
28
- * `report` is `null` only when the file genuinely cannot be read (ENOENT
29
- * or other I/O error) — the native classifier treats a null report the
30
- * same way the serial path treats a thrown `reportFn` (drop the file).
31
- * Parse failures inside escomplex still resolve to a `{ parseError: true }`
32
- * report to preserve parity with the in-process serial path
33
- * (`calculateReportForFile` returns a parse-error report rather than
34
- * throwing).
2
+ * CPU-pool worker for the native review: one file (a path, or
3
+ * `{ source, label }` holding head content from `git show`) in, its full
4
+ * maintainability report out. `report` is `null` only on an I/O error (the
5
+ * file is dropped); a parse failure yields a `parseError` report, matching
6
+ * the serial path.
35
7
  */
36
8
 
37
9
  import { parentPort } from 'node:worker_threads';
@@ -43,10 +15,7 @@ import { transpileIfNeeded } from '../transpile.js';
43
15
  import { serveWorkerMessages } from './serve-worker-messages.js';
44
16
 
45
17
  /**
46
- * Score a pre-sourced content string (Story #3696). Mirrors
47
- * `native.js#scoreSourceReport`: transpile the source by its `label`
48
- * extension, then report. A null transpile (unsupported / failed) resolves
49
- * to a parse-error report rather than throwing, matching the disk path.
18
+ * Report for pre-sourced content; a failed transpile is a parse-error report.
50
19
  *
51
20
  * @param {string} source
52
21
  * @param {string} label Path used only to pick the transpile mode.
@@ -67,9 +36,7 @@ function reportFromSource(source, label) {
67
36
  }
68
37
 
69
38
  /**
70
- * Pure handler for a single inbound worker message. Exported so unit
71
- * tests can drive each branch (exit, malformed item, success, error)
72
- * without spawning a real `Worker` thread.
39
+ * Pure handler for one worker message (testable without a `Worker`).
73
40
  *
74
41
  * @param {unknown} msg
75
42
  * @param {{ report?: (filePath: string) => object }} [deps]
@@ -106,11 +73,7 @@ export function handleMaintainabilityReportWorkerMessage(msg, deps = {}) {
106
73
  message: { ok: true, result: { filePath, report } },
107
74
  };
108
75
  } catch (err) {
109
- // I/O or other unexpected error (e.g. file deleted between diff and
110
- // scoring) — surface as a per-item null report so the run keeps
111
- // going. The native classifier maps a null report to a dropped file,
112
- // matching the serial path's `classifyChangedFile` try/catch that
113
- // returns `{ row: null }` on a thrown reportFn.
76
+ // A null report drops the file and keeps the run going.
114
77
  return {
115
78
  kind: 'reply',
116
79
  message: {
@@ -1,22 +1,8 @@
1
1
  /**
2
- * lib/workers/maintainability-worker.js — CPU-pool worker entry for
3
- * `calculateAll`. One file in, one score out. No project config, no git,
4
- * no provider — just typhonjs-escomplex (via maintainability-engine) and
5
- * the in-memory TS transpile shim.
6
- *
7
- * Message contract — see lib/cpu-pool.js:
8
- * IN : { item: string } — absolute file path to score
9
- * { exit: true } — drain & terminate
10
- * OUT : { ok: true, result: { filePath, score, unscorable?, reason? } }
11
- *
12
- * `score` is `null` only when the file genuinely cannot be read (ENOENT
13
- * or other I/O error).
14
- *
15
- * A file the kernel cannot analyse comes back as `unscorable: true` with the
16
- * kernel's own `reason`, rather than as a bare `0`. The `0` is still carried in
17
- * `score` for wire compatibility, but it is no longer the only signal — the
18
- * point of the flag is that the caller can *report* the file instead of
19
- * silently dropping it (see `maintainability-engine.js`'s `UNSCORABLE`).
2
+ * CPU-pool worker for `calculateAll`: one file path in, one MI score out.
3
+ * `score` is `null` only on an I/O error. An unanalysable file carries
4
+ * `unscorable: true` and the kernel's `reason` (with `score: 0` for wire
5
+ * compatibility) so the caller reports it instead of silently dropping it.
20
6
  */
21
7
 
22
8
  import { parentPort } from 'node:worker_threads';
@@ -24,9 +10,7 @@ import { scoreFile } from '../maintainability-engine.js';
24
10
  import { serveWorkerMessages } from './serve-worker-messages.js';
25
11
 
26
12
  /**
27
- * Pure handler for a single inbound worker message. Exported so unit
28
- * tests can drive each branch (exit, malformed item, success, error)
29
- * without spawning a real `Worker` thread.
13
+ * Pure handler for one worker message (testable without a `Worker`).
30
14
  *
31
15
  * @param {unknown} msg
32
16
  * @param {{ score?: (filePath: string) => { score: number, unscorable: boolean, reason: string|null } }} [deps]
@@ -1,22 +1,6 @@
1
1
  /**
2
- * lib/workers/serve-worker-messages.js — the shared CPU-pool worker skeleton.
3
- *
4
- * Every worker under `lib/workers/` is a pure message handler plus the same
5
- * eight-line `parentPort` wiring: subscribe, run the handler, close on an
6
- * `exit` verdict, post the reply otherwise. That wiring was copied into all
7
- * four workers; it lives here once instead (Story #4926).
8
- *
9
- * The handler contract is unchanged — see `lib/cpu-pool.js`:
10
- * IN : `{ item: … }` — one unit of work
11
- * `{ exit: true }` — drain & terminate
12
- * OUT : `{ kind: 'exit' }` | `{ kind: 'reply', message: object }`
13
- */
14
-
15
- /**
16
- * Wire a pure worker message handler onto a `worker_threads` port.
17
- *
18
- * A falsy `port` is a no-op, so a worker module imported directly by a unit
19
- * test (where `parentPort` is `null`) installs no listener and stays pure.
2
+ * Wire a pure worker message handler onto a `worker_threads` port. A falsy
3
+ * port (module imported by a test) is a no-op.
20
4
  *
21
5
  * @param {import('node:worker_threads').MessagePort|null|undefined} port
22
6
  * @param {(msg: unknown) => {kind: 'exit'} | {kind: 'reply', message: object}} handle
@@ -1,61 +1,17 @@
1
1
  /**
2
- * Workflow read-tier closure resolver (Story #4752).
3
- *
4
- * `.agents/workflows/**` is the largest body of instruction Mandrel ships, and
5
- * until this module it sat in none of the five doc read-tiers `doc-tiers.js`
6
- * resolves — measured only by a per-file spine ceiling that is satisfied by
7
- * moving prose into a linked helper. Workflows are a **graph**, not a flat set,
8
- * so this module resolves each entry point's transitive markdown-link closure
9
- * into two numbers:
10
- *
11
- * - **mandatory closure** — the entry point plus the transitive closure of
12
- * its `mandatoryReads:` frontmatter edges. This is what a session is
13
- * *forced* to read, and it is what `check-context-budget.js` ratchets.
14
- * - **reachable closure** — the entry point plus every workflow markdown file
15
- * transitively linked from it. Recorded as a drift signal, never gated.
16
- *
17
- * **The marker is source-side and per-edge.** A workflow declares the reads it
18
- * requires in its own frontmatter (`mandatoryReads: [path, …]`, flow or block
19
- * style, resolved relative to the declaring file). Tier is not intrinsic to a
20
- * helper — the same file is mandatory from one workflow and on-demand from
21
- * another — so it cannot live in the target. The key is optional: an absent
22
- * key means zero mandatory edges and is never an error. Every reachable link
23
- * not named in `mandatoryReads` is classified on-demand.
24
- *
25
- * **Entry points** are the workflows a session can be invoked on: every
26
- * top-level `.agents/workflows/*.md`, plus any `helpers/*.md` whose H1 declares
27
- * a slash command named after the file itself (`helpers/deliver-story.md` →
28
- * `# /deliver-story …`) — a command-shaped helper is invoked directly, so it
29
- * owns a closure of its own. Plain helpers and appendices are reachable, never
30
- * entry points; counting every file as an entry point would collapse the
31
- * mandatory/on-demand distinction into "all workflow bytes".
32
- *
33
- * **Failure modes are loud** — a ratchet that silently shrinks its own closure
34
- * is worse than none:
35
- * - a `mandatoryReads` entry that does not resolve to a workflow markdown
36
- * file throws, naming the declaring workflow and the offending path;
37
- * - a cycle among `mandatoryReads` edges throws, naming the cycle.
38
- * The **reachable** walk is deliberately cycle-*tolerant* rather than fatal:
39
- * bidirectional prose cross-references are normal and correct authoring (a
40
- * spine points at its digest, the digest points back at the spine), so that
41
- * walk terminates via a visited set and counts each file exactly once — it
42
- * neither loops nor truncates. Only the gated mandatory graph, where a loop is
43
- * a genuine authoring error, fails closed.
44
- *
45
- * The walk is confined to `.agents/workflows/**`: links out to
46
- * `.agents/rules/**` or `.agents/skills/**` are neither followed nor recorded,
47
- * because those are already tiered as flat sets by `doc-tiers.js` and
48
- * following them would double-count them.
49
- *
50
- * Security (security-baseline § Data Leakage & Logging): every value returned
51
- * or thrown is a repo-relative path or a byte count — never file contents.
2
+ * Workflow read-tier closures per entry point: **mandatory** (transitive
3
+ * `mandatoryReads:` frontmatter edges — ratcheted by `check-context-budget.js`)
4
+ * and **reachable** (transitive links — recorded, never gated). Tier is
5
+ * per-edge, so it lives in the declaring file. An unresolvable or cyclic
6
+ * mandatory edge throws: a ratchet that silently shrinks is worse than none.
7
+ * Confined to `.agents/workflows/**` (`doc-tiers.js` tiers the rest). Outputs
8
+ * are paths and byte counts, never contents.
52
9
  */
53
10
 
54
11
  import nodeFs from 'node:fs';
55
12
  import path from 'node:path';
56
13
 
57
14
  /**
58
- * Repo-relative root of the workflow tree. The closure never escapes it.
59
15
  * @type {string}
60
16
  */
61
17
  const WORKFLOWS_ROOT = '.agents/workflows';
@@ -63,10 +19,8 @@ const WORKFLOWS_ROOT = '.agents/workflows';
63
19
  /** Path-segment count of a top-level workflow (`.agents/workflows/x.md`). */
64
20
  const TOP_LEVEL_DEPTH = 3;
65
21
 
66
- // All RegExp instances are built via the constructor (rather than literal
67
- // `/.../`) so the maintainability engine's AST walker (typhonjs-escomplex) can
68
- // score this file — it crashes on `RegExpLiteral` nodes. Same workaround as
69
- // lib/audit-suite/frontmatter.js.
22
+ // RegExp constructors, not literals: typhonjs-escomplex (the MI engine)
23
+ // crashes on `RegExpLiteral` nodes.
70
24
  // biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
71
25
  const FRONTMATTER_RE = new RegExp(String.raw`^---\r?\n([\s\S]*?)\r?\n---`);
72
26
  const NEWLINE_RE = new RegExp(String.raw`\r?\n`);
@@ -77,7 +31,6 @@ const COMMAND_H1_RE = new RegExp(String.raw`^#\s+/([A-Za-z0-9._-]+)`, 'm');
77
31
  // biome-ignore-end lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
78
32
 
79
33
  /**
80
- * Default fs surface — the same injectable subset `doc-tiers.js` uses.
81
34
  * @typedef {{
82
35
  * readdirSync: (p: string, o?: object) => any[],
83
36
  * readFileSync: (p: string, enc: string) => string,
@@ -86,13 +39,10 @@ const COMMAND_H1_RE = new RegExp(String.raw`^#\s+/([A-Za-z0-9._-]+)`, 'm');
86
39
  */
87
40
 
88
41
  /**
89
- * A loaded workflow document.
90
42
  * @typedef {{ rel: string, bytes: number, source: string }} WorkflowDoc
91
43
  */
92
44
 
93
45
  /**
94
- * Strip surrounding quotes and whitespace from a scalar YAML value.
95
- *
96
46
  * @param {string} value
97
47
  * @returns {string}
98
48
  */
@@ -106,8 +56,6 @@ function unquote(value) {
106
56
  }
107
57
 
108
58
  /**
109
- * Convert a path to posix separators.
110
- *
111
59
  * @param {string} p
112
60
  * @returns {string}
113
61
  */
@@ -116,8 +64,6 @@ function toPosix(p) {
116
64
  }
117
65
 
118
66
  /**
119
- * Return the raw frontmatter block of a markdown source (`''` when absent).
120
- *
121
67
  * @param {string} source
122
68
  * @returns {string}
123
69
  */
@@ -127,8 +73,7 @@ function frontmatterBlock(source) {
127
73
  }
128
74
 
129
75
  /**
130
- * Collect a YAML block-sequence (`- item`) starting at `start`. Blank lines are
131
- * skipped; the first non-item, non-blank line ends the sequence.
76
+ * YAML block sequence from `start`; blank lines skipped, first other line ends it.
132
77
  *
133
78
  * @param {string[]} lines
134
79
  * @param {number} start
@@ -149,8 +94,6 @@ function blockSequence(lines, start) {
149
94
  }
150
95
 
151
96
  /**
152
- * Split a YAML flow sequence (`[a.md, b.md]`) into its scalar items.
153
- *
154
97
  * @param {string} inline
155
98
  * @returns {string[]}
156
99
  */
@@ -163,9 +106,7 @@ function flowSequence(inline) {
163
106
  }
164
107
 
165
108
  /**
166
- * Parse the optional `mandatoryReads:` frontmatter list from a workflow source.
167
- * Supports the flow (`[a.md, b.md]`), block (`- a.md` lines), and single-scalar
168
- * forms. An absent key resolves to `[]` — zero mandatory edges, never an error.
109
+ * `mandatoryReads:` in flow, block, or scalar form; absent key → `[]`.
169
110
  *
170
111
  * @param {string} source
171
112
  * @returns {string[]} raw specifiers, relative to the declaring file
@@ -181,7 +122,7 @@ function parseMandatoryReads(source) {
181
122
  }
182
123
 
183
124
  /**
184
- * Harvest every markdown link target in a source, anchors stripped.
125
+ * Markdown link targets, anchors stripped.
185
126
  *
186
127
  * @param {string} source
187
128
  * @returns {string[]}
@@ -196,9 +137,8 @@ function parseLinkTargets(source) {
196
137
  }
197
138
 
198
139
  /**
199
- * Resolve a link/`mandatoryReads` specifier declared in `fromRel` to a known
200
- * workflow doc, or `null` when it is external, non-markdown, or outside the
201
- * workflow tree.
140
+ * Resolve a specifier to a known workflow doc, or `null` when external,
141
+ * non-markdown, or outside the workflow tree.
202
142
  *
203
143
  * @param {string} fromRel repo-relative posix path of the declaring file
204
144
  * @param {string} spec
@@ -213,11 +153,6 @@ function resolveSpec(fromRel, spec, docs) {
213
153
  }
214
154
 
215
155
  /**
216
- * Resolve a workflow's declared mandatory edges. Throws when an entry does not
217
- * resolve to a workflow markdown file — a mandatory read pointing at nothing is
218
- * a silent hole in the ratchet, so it fails loudly, naming both the declaring
219
- * workflow and the offending path.
220
- *
221
156
  * @param {WorkflowDoc} doc
222
157
  * @param {Map<string, WorkflowDoc>} docs
223
158
  * @returns {string[]}
@@ -237,9 +172,7 @@ function mandatoryEdges(doc, docs) {
237
172
  }
238
173
 
239
174
  /**
240
- * Depth-first walk of the mandatory-edge graph. Cycle-fatal: a `mandatoryReads`
241
- * loop is an authoring error, so it throws naming the cycle rather than looping
242
- * or silently truncating the closure.
175
+ * Cycle-fatal DFS of the mandatory-edge graph.
243
176
  *
244
177
  * @param {string} rel
245
178
  * @param {Map<string, WorkflowDoc>} docs
@@ -264,10 +197,7 @@ function walkMandatory(rel, docs, stack, seen) {
264
197
  }
265
198
 
266
199
  /**
267
- * Breadth-first walk of the markdown-link graph. Cycle-tolerant by design:
268
- * bidirectional cross-references between a spine and its helper are correct
269
- * authoring, so the visited set makes the walk terminate with each file counted
270
- * exactly once.
200
+ * Cycle-tolerant BFS of the link graph; each file counted once.
271
201
  *
272
202
  * @param {string} rel
273
203
  * @param {Map<string, WorkflowDoc>} docs
@@ -289,8 +219,7 @@ function walkReachable(rel, docs) {
289
219
  }
290
220
 
291
221
  /**
292
- * Recursively collect repo-relative posix paths of every `.md` file under an
293
- * absolute directory. An unreadable directory yields nothing (silent skip).
222
+ * Recursive `.md` listing; an unreadable directory yields nothing.
294
223
  *
295
224
  * @param {FsLike} fs
296
225
  * @param {string} dirAbs
@@ -315,8 +244,6 @@ function listMarkdown(fs, dirAbs, root, out) {
315
244
  }
316
245
 
317
246
  /**
318
- * Load every workflow markdown file into a `rel -> { rel, bytes, source }` map.
319
- *
320
247
  * @param {string} root absolute repo root
321
248
  * @param {FsLike} fs
322
249
  * @returns {Map<string, WorkflowDoc>}
@@ -333,19 +260,15 @@ function loadDocs(root, fs) {
333
260
  source: fs.readFileSync(abs, 'utf8'),
334
261
  });
335
262
  } catch {
336
- // Unreadable file — skipped silently, like the sibling tier resolvers.
263
+ // Unreadable file — skipped.
337
264
  }
338
265
  }
339
266
  return docs;
340
267
  }
341
268
 
342
269
  /**
343
- * True when a workflow is invocable in its own right: a top-level workflow, or
344
- * a helper whose H1 declares a slash command **named after the file itself**
345
- * (`helpers/deliver-story.md` → `# /deliver-story …`). The self-naming test is
346
- * what separates an invocable helper from an appendix that merely titles itself
347
- * after the command it documents (`helpers/deliver-reference.md` →
348
- * `# /mandrel-deliver — reference appendix`), which is read on demand, never invoked.
270
+ * Top-level workflow, or a helper whose H1 slash command matches its own
271
+ * filename — an appendix titled after the command it documents is not.
349
272
  *
350
273
  * @param {WorkflowDoc} doc
351
274
  * @returns {boolean}
@@ -357,8 +280,6 @@ function isEntryPoint(doc) {
357
280
  }
358
281
 
359
282
  /**
360
- * Materialize a path set as sorted `{ path, bytes }` entries.
361
- *
362
283
  * @param {Iterable<string>} rels
363
284
  * @param {Map<string, WorkflowDoc>} docs
364
285
  * @returns {Array<{ path: string, bytes: number }>}
@@ -370,8 +291,6 @@ function toEntries(rels, docs) {
370
291
  }
371
292
 
372
293
  /**
373
- * Sum the on-disk bytes of a path set.
374
- *
375
294
  * @param {Iterable<string>} rels
376
295
  * @param {Map<string, WorkflowDoc>} docs
377
296
  * @returns {number}
@@ -383,10 +302,8 @@ function sumBytes(rels, docs) {
383
302
  }
384
303
 
385
304
  /**
386
- * Resolve the workflow tier: every entry point's transitive markdown-link
387
- * closure, partitioned into the gated mandatory set and the recorded on-demand
388
- * remainder. Returns empty collections when `.agents/workflows` is absent — an
389
- * entry point resolving empty is skipped silently.
305
+ * Resolve every entry point's closures, partitioned into mandatory and
306
+ * on-demand; empty collections when `.agents/workflows` is absent.
390
307
  *
391
308
  * @param {string} root absolute repo root
392
309
  * @param {{ fs?: FsLike }} [opts]
@@ -1,40 +1,16 @@
1
1
  /**
2
- * workspace-provisioner.js
3
- *
4
- * Central authority for populating a fresh worktree (or remote-runner checkout)
5
- * with gitignored workspace files — by default `.env`, `.mcp.json`, and the
6
- * operator's local-override files (`.agentrc.local.json`,
7
- * `.agents/instructions.local.md`) — plus any other files declared in
8
- * `.agentrc.json orchestration.workspaceFiles`. The local-override files are
9
- * provisioned so a worktree-isolated agent honors the §1.E local-override
10
- * contract (e.g. `github.operatorHandle`) rather than silently falling back to
11
- * the committed `.agentrc.json` placeholders. Every caller that needs these
12
- * files in a non-main checkout should go through this module; ad-hoc copy
13
- * logic elsewhere in the codebase is a bug.
14
- *
15
- * Public API:
16
- * - `provision({ sourceRoot, targetWorktree, files?, logger? })` — copies
17
- * each listed file from source to target, skipping any that already exist
18
- * at the target. Returns `{ copied, skipped, missing }`.
19
- * - `verify({ worktree, files?, sourceRoot? })` — throws when a required
20
- * file is missing. When `sourceRoot` is passed, the error carries a
21
- * copy-ready remediation command the operator can run verbatim.
22
- * - `resolveWorkspaceFiles(orchestrationConfig)` — resolves the list honoring
23
- * the new `orchestration.workspaceFiles` key, the legacy
24
- * `orchestration.worktreeIsolation.bootstrapFiles`, and the default.
25
- * - `DEFAULT_WORKSPACE_FILES` — `['.env', '.mcp.json', '.agentrc.local.json',
26
- * '.agents/instructions.local.md']`.
2
+ * The single authority for copying gitignored workspace files (`.env`,
3
+ * `.mcp.json`, local overrides) into a non-main checkout, so a worktree agent
4
+ * honours local overrides instead of committed placeholders. Ad-hoc copy
5
+ * logic elsewhere is a bug.
27
6
  */
28
7
 
29
8
  import fs from 'node:fs';
30
9
  import path from 'node:path';
31
10
  import { NOOP_LOGGER } from './Logger.js';
32
11
 
33
- // Keep in sync with `WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles` in
34
- // `./config/worktree-isolation.js`. The local-override files are listed even
35
- // though they are frequently absent — `provision()` skips missing sources and
36
- // `verify()` callers filter to files present at the source first, so a missing
37
- // override never fails a worktree create.
12
+ // Keep in sync with `WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles`. Often-absent
13
+ // overrides are safe: missing sources are skipped, never fatal.
38
14
  export const DEFAULT_WORKSPACE_FILES = [
39
15
  '.env',
40
16
  '.mcp.json',
@@ -43,10 +19,8 @@ export const DEFAULT_WORKSPACE_FILES = [
43
19
  ];
44
20
 
45
21
  /**
46
- * Resolve the list of workspace files to provision.
47
- *
48
- * Precedence: explicit `orchestration.workspaceFiles` → legacy
49
- * `orchestration.worktreeIsolation.bootstrapFiles` → `DEFAULT_WORKSPACE_FILES`.
22
+ * `workspaceFiles` → legacy `worktreeIsolation.bootstrapFiles` (still
23
+ * schema-accepted) → defaults.
50
24
  *
51
25
  * @param {object} [orchestrationConfig]
52
26
  * @returns {string[]}
@@ -54,18 +28,12 @@ export const DEFAULT_WORKSPACE_FILES = [
54
28
  export function resolveWorkspaceFiles(orchestrationConfig) {
55
29
  const cfg = orchestrationConfig ?? {};
56
30
  if (Array.isArray(cfg.workspaceFiles)) return cfg.workspaceFiles.slice();
57
- // Legacy `worktreeIsolation.bootstrapFiles` fallback — surviving callers:
58
- // tests/lib/workspace-provisioner.test.js, tests/lib/worktree/bootstrapper.test.js,
59
- // and consumer projects' `.agentrc.json` (config-schema still accepts it).
60
31
  const legacy = cfg.worktreeIsolation?.bootstrapFiles;
61
32
  if (Array.isArray(legacy)) return legacy.slice();
62
33
  return DEFAULT_WORKSPACE_FILES.slice();
63
34
  }
64
35
 
65
36
  /**
66
- * Validate a workspace-file name — must be relative, no `..`, no NULs, no
67
- * absolute paths.
68
- *
69
37
  * @param {string} name
70
38
  * @returns {string|null} null on success, reason string on failure.
71
39
  */
@@ -79,15 +47,13 @@ function invalidNameReason(name) {
79
47
  }
80
48
 
81
49
  /**
82
- * Copy configured workspace files from `sourceRoot` into `targetWorktree`.
83
- * Existing target files are preserved (never overwritten). Missing sources are
84
- * silently skipped and reported in the `missing` array.
50
+ * Never overwrites a target file; missing sources are reported, not fatal.
85
51
  *
86
52
  * @param {object} opts
87
- * @param {string} opts.sourceRoot Absolute path to the main repo.
88
- * @param {string} opts.targetWorktree Absolute path to the target worktree.
89
- * @param {string[]} [opts.files] File list; defaults to DEFAULT_WORKSPACE_FILES.
90
- * @param {object} [opts.logger] `{ info, warn, error }`.
53
+ * @param {string} opts.sourceRoot
54
+ * @param {string} opts.targetWorktree
55
+ * @param {string[]} [opts.files]
56
+ * @param {object} [opts.logger]
91
57
  * @returns {{ copied: string[], skipped: string[], missing: string[] }}
92
58
  */
93
59
  export function provision({
@@ -143,17 +109,13 @@ export function provision({
143
109
  }
144
110
 
145
111
  /**
146
- * Throw if any required workspace file is missing from `worktree`. Used as a
147
- * runtime guard (called right after every worktree create in
148
- * `single-story-init.js`) and as a test oracle.
149
- *
150
- * When `sourceRoot` is supplied, the thrown error carries the missing target
151
- * path and an exact `cp`/`copy` command the operator can paste to remediate.
112
+ * Throw if a required file is missing; with `sourceRoot`, the error carries a
113
+ * paste-ready copy command.
152
114
  *
153
115
  * @param {object} opts
154
116
  * @param {string} opts.worktree
155
117
  * @param {string[]} [opts.files]
156
- * @param {string} [opts.sourceRoot] Main repo path; enables remediation hint.
118
+ * @param {string} [opts.sourceRoot]
157
119
  */
158
120
  export function verify({
159
121
  worktree,