mandrel 2.60.0 → 2.62.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 (662) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. 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,