mandrel 2.60.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 (661) 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/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,29 +1,9 @@
1
1
  /* node:coverage ignore file -- node_modules placement strategies (symlink/copy/install); pure filesystem I/O, integration-shaped */
2
2
 
3
3
  /**
4
- * worktree/node-modules-strategy.js
5
- *
6
- * Strategies for populating `node_modules` inside a freshly created worktree:
7
- *
8
- * - `per-worktree` — run the project's package-manager install inside the
9
- * worktree (lock-file aware).
10
- * - `clone` — copy-on-write (reflink/clonefile) clone of the donor's
11
- * `node_modules` into the worktree (`cp -c` on darwin,
12
- * `cp --reflink=auto` on linux). Effectively free in time
13
- * and disk on APFS / reflink-capable filesystems. Falls
14
- * back to `per-worktree` cleanly on any failure
15
- * (unsupported filesystem, cross-volume clone, Windows).
16
- * When the worktree's lockfile byte-matches the donor's
17
- * and the donor's install markers are present, the
18
- * per-tree install is skipped.
19
- * - `symlink` — symlink (or junction on Windows) the worktree's
20
- * `node_modules` to a donor worktree's copy. Refuses on
21
- * Windows unless `allowSymlinkOnWindows=true`.
22
- * - `pnpm-store` — run `pnpm install --frozen-lockfile` against the
23
- * shared content-addressable store.
24
- *
25
- * The context passed to each helper carries the minimum state the strategy
26
- * needs: config, platform, logger, and repoRoot (for `symlink` / `clone`).
4
+ * Strategies for populating a new worktree's `node_modules`: `per-worktree`
5
+ * (PM install), `clone` (copy-on-write clone of the donor, falling back to
6
+ * install), `symlink` (to a donor; opt-in on Windows) and `pnpm-store`.
27
7
  */
28
8
 
29
9
  import { spawnSync } from 'node:child_process';
@@ -39,12 +19,10 @@ function sleepSync(ms) {
39
19
  }
40
20
 
41
21
  /**
42
- * Resolve the copy-on-write clone donor directory. Defaults to the repo root
43
- * (the main checkout, which is primed by the host's own install) unless the
44
- * operator pinned a `primeFromPath`.
22
+ * Clone donor: `primeFromPath` when pinned, else the (host-installed) repo root.
45
23
  *
46
24
  * @param {{ config: object, repoRoot: string }} ctx
47
- * @returns {string} Absolute donor path.
25
+ * @returns {string}
48
26
  */
49
27
  function resolveCloneDonor(ctx) {
50
28
  const primeFromPath = ctx.config?.primeFromPath;
@@ -54,11 +32,10 @@ function resolveCloneDonor(ctx) {
54
32
  }
55
33
 
56
34
  /**
57
- * Apply the configured `nodeModulesStrategy` after a fresh worktree is added.
58
- * Called only during creation.
35
+ * Apply `nodeModulesStrategy` to a freshly created worktree.
59
36
  *
60
37
  * @param {{ config: object, platform: NodeJS.Platform, logger: object, repoRoot: string }} ctx
61
- * @param {string} wtPath Absolute worktree path.
38
+ * @param {string} wtPath
62
39
  */
63
40
  export function applyNodeModulesStrategy(ctx, wtPath) {
64
41
  const strategy = ctx.config.nodeModulesStrategy ?? 'per-worktree';
@@ -99,10 +76,8 @@ export function applyNodeModulesStrategy(ctx, wtPath) {
99
76
 
100
77
  const target = path.join(wtPath, 'node_modules');
101
78
  try {
102
- // On Windows, `junction` works without Administrator privileges
103
- // (unlike `dir`/`file` symlinks) and is adequate for same-volume
104
- // node_modules priming. Key off the real host OS — `ctx.platform` is a
105
- // test-injection hook and does not change what the filesystem accepts.
79
+ // A junction needs no admin rights on Windows. Keyed off the real host
80
+ // OS: `ctx.platform` is a test hook the filesystem ignores.
106
81
  const linkType = process.platform === 'win32' ? 'junction' : 'dir';
107
82
  fs.symlinkSync(primeNodeModules, target, linkType);
108
83
  } catch (err) {
@@ -125,28 +100,19 @@ export function applyNodeModulesStrategy(ctx, wtPath) {
125
100
  }
126
101
 
127
102
  /**
128
- * Copy-on-write clone the donor's `node_modules` into the worktree. On a
129
- * reflink-capable filesystem (APFS on darwin, btrfs/XFS/etc. on linux) the
130
- * clone is effectively free in both time and disk; the subsequent
131
- * lockfile-match probe in `installDependencies` then skips the per-tree
132
- * install entirely.
133
- *
134
- * Non-fatal by design: any failure (unsupported filesystem, cross-volume
135
- * clone, Windows, missing donor) falls back to `per-worktree` cleanly — the
136
- * worktree is simply left without a cloned `node_modules`, and the regular
137
- * per-tree install runs. Failure NEVER throws; the clone is a fast-path
138
- * optimization, not a correctness requirement.
103
+ * Copy-on-write clone the donor's `node_modules` into the worktree. A fast
104
+ * path only: every failure returns `cloned: false` (never throws) and the
105
+ * regular install runs instead.
139
106
  *
140
107
  * @param {{ config: object, platform: NodeJS.Platform, logger: object, repoRoot: string }} ctx
141
- * @param {string} wtPath Absolute worktree path.
142
- * @param {{ spawnFn?: typeof spawnSync, fsLike?: typeof fs }} [io] Injectable for tests.
108
+ * @param {string} wtPath
109
+ * @param {{ spawnFn?: typeof spawnSync, fsLike?: typeof fs }} [io]
143
110
  * @returns {{ cloned: boolean, reason?: string }}
144
111
  */
145
112
  export function cloneNodeModules(ctx, wtPath, io = {}) {
146
113
  const spawnFn = io.spawnFn ?? spawnSync;
147
114
  const fsLike = io.fsLike ?? fs;
148
- // Key off the real host OS, not the test-injection `ctx.platform`, for the
149
- // capability decision: Windows has no `cp -c`/`--reflink` equivalent here.
115
+ // Real host OS, not `ctx.platform`: Windows has no clone `cp` here.
150
116
  if (process.platform === 'win32') {
151
117
  ctx.logger.info(
152
118
  'worktree.node_modules strategy=clone fallback=per-worktree reason=windows-unsupported',
@@ -165,19 +131,15 @@ export function cloneNodeModules(ctx, wtPath, io = {}) {
165
131
 
166
132
  const target = path.join(wtPath, 'node_modules');
167
133
  if (fsLike.existsSync(target)) {
168
- // A worktree that already carries node_modules must not be clobbered by a
169
- // clone-on-top (cp would nest into the existing dir). Treat as already
170
- // populated and let the install-skip probe decide freshness.
134
+ // cp would nest into an existing dir; let the install-skip probe decide.
171
135
  ctx.logger.info(
172
136
  `worktree.node_modules strategy=clone skip reason=target-exists target=${target}`,
173
137
  );
174
138
  return { cloned: false, reason: 'target-exists' };
175
139
  }
176
140
 
177
- // darwin: `cp -c` requests a clonefile (APFS). linux: `cp --reflink=auto`
178
- // requests a reflink, silently degrading to a full copy on non-reflink
179
- // filesystems — which we deliberately reject below so a slow full-tree copy
180
- // never masquerades as a free clone.
141
+ // `--reflink=always` (not `auto`) so a slow full copy never masquerades as
142
+ // a free clone.
181
143
  const cloneArgs =
182
144
  process.platform === 'darwin'
183
145
  ? ['-c', '-R', donorNodeModules, target]
@@ -189,8 +151,7 @@ export function cloneNodeModules(ctx, wtPath, io = {}) {
189
151
  timeout: 120_000,
190
152
  });
191
153
  if (result.status !== 0) {
192
- // Clean up a partial copy so the per-worktree fallback install starts from
193
- // a known-empty target.
154
+ // Remove a partial copy so the fallback install starts empty.
194
155
  try {
195
156
  fsLike.rmSync(target, { recursive: true, force: true });
196
157
  } catch {
@@ -210,17 +171,11 @@ export function cloneNodeModules(ctx, wtPath, io = {}) {
210
171
  }
211
172
 
212
173
  /**
213
- * Pure: pick the package-manager command + args for a given strategy and
214
- * worktree path. Returns `null` when the strategy is `symlink` (handled
215
- * elsewhere) or the worktree has no `package.json`.
216
- *
217
- * `clone` shares `per-worktree`'s PM-detection: when the install is *not*
218
- * skipped (lockfile mismatch), the worktree still installs with the project's
219
- * detected package manager.
174
+ * Install command for a strategy, or `null` for `symlink` / no `package.json`.
220
175
  *
221
- * @param {string} strategy One of `per-worktree | clone | pnpm-store | symlink`.
222
- * @param {string} wtPath Absolute worktree path.
223
- * @param {{ existsSync: (p: string) => boolean }} [fsLike] Injectable for tests.
176
+ * @param {string} strategy
177
+ * @param {string} wtPath
178
+ * @param {{ existsSync: (p: string) => boolean }} [fsLike]
224
179
  * @returns {{ cmd: string, args: string[] } | null}
225
180
  */
226
181
  export function selectInstallCommand(strategy, wtPath, fsLike = fs) {
@@ -230,8 +185,6 @@ export function selectInstallCommand(strategy, wtPath, fsLike = fs) {
230
185
  if (strategy === 'pnpm-store') {
231
186
  return { cmd: 'pnpm', args: ['install', '--frozen-lockfile'] };
232
187
  }
233
- // Shared lockfile probe (Story #4048 B3 — one implementation per concept).
234
- // `per-worktree` and `clone` both fall through to PM detection here.
235
188
  const pm = detectPackageManager(wtPath, (p) => fsLike.existsSync(p)) ?? 'npm';
236
189
  if (pm === 'pnpm') {
237
190
  return { cmd: 'pnpm', args: ['install', '--frozen-lockfile'] };
@@ -242,13 +195,7 @@ export function selectInstallCommand(strategy, wtPath, fsLike = fs) {
242
195
  return { cmd: 'npm', args: ['ci'] };
243
196
  }
244
197
 
245
- /**
246
- * Per-package-manager "install completed" marker files written into
247
- * `node_modules/` by the install command itself. Their presence (and
248
- * freshness relative to the lockfile) is the cheapest reliable signal that a
249
- * prior install ran to completion — a failed/interrupted install leaves
250
- * `node_modules` partially populated without (or with a stale) marker.
251
- */
198
+ /** Markers a PM writes only once an install completes. */
252
199
  const INSTALL_MARKERS = [
253
200
  '.package-lock.json', // npm ci / npm install
254
201
  '.modules.yaml', // pnpm
@@ -259,14 +206,10 @@ const INSTALL_MARKERS = [
259
206
  const LOCKFILES = ['package-lock.json', 'pnpm-lock.yaml', 'yarn.lock'];
260
207
 
261
208
  /**
262
- * Pure: locate the first present lockfile in `dir` and return its byte-exact
263
- * SHA-256 hash, or `null` when no lockfile exists / cannot be read.
264
- *
265
- * The hash is the load-bearing freshness key for the install-skip decision —
266
- * never an mtime, which clone (clonefile/reflink) does not preserve reliably
267
- * and which is trivially perturbed by a no-op `git checkout`.
209
+ * SHA-256 of the first lockfile in `dir`, or `null`. The freshness key is a
210
+ * content hash, never mtime, which clones and checkouts do not preserve.
268
211
  *
269
- * @param {string} dir Absolute directory containing the lockfile.
212
+ * @param {string} dir
270
213
  * @param {{ existsSync: Function, readFileSync: Function }} [fsLike]
271
214
  * @returns {string | null}
272
215
  */
@@ -284,23 +227,12 @@ export function lockfileHash(dir, fsLike = fs) {
284
227
  }
285
228
 
286
229
  /**
287
- * Pure: the single shared "is the per-tree install skippable?" predicate
288
- * (generalized from `probeReusedInstall`). The install is safe to skip iff:
289
- *
290
- * 1. the worktree carries a completed-install marker
291
- * (`node_modules/<INSTALL_MARKERS>`), AND
292
- * 2. the worktree's lockfile byte-exactly matches the donor's lockfile.
293
- *
294
- * The lockfile match is keyed on a byte-exact SHA-256 hash, NEVER mtime: a
295
- * reflink/clonefile clone does not preserve mtime relationships, so an mtime
296
- * comparison would either mis-skip a real change or force a redundant install
297
- * on every clone. When the donor is omitted (reuse path, no clone donor), the
298
- * worktree's own lockfile is hashed against itself — i.e. the lockfile-match
299
- * leg is vacuously satisfied and only the marker presence gates the skip.
230
+ * The install is skippable iff a completed-install marker exists and the
231
+ * worktree lockfile hash matches the donor's (vacuous with no donor).
300
232
  *
301
233
  * @param {object} opts
302
- * @param {string} opts.wtPath Absolute worktree path.
303
- * @param {string} [opts.donorPath] Absolute donor path (the clone source).
234
+ * @param {string} opts.wtPath
235
+ * @param {string} [opts.donorPath]
304
236
  * @param {{ existsSync: Function, readFileSync: Function }} [opts.fsLike]
305
237
  * @returns {{ skippable: boolean, reason: string }}
306
238
  */
@@ -317,8 +249,6 @@ export function isInstallSkippable({ wtPath, donorPath, fsLike = fs }) {
317
249
  }
318
250
  const wtHash = lockfileHash(wtPath, fsLike);
319
251
  if (wtHash === null) {
320
- // No lockfile in the worktree — nothing to pin freshness against. The
321
- // marker alone is the signal (matches a lockfile-less project).
322
252
  return { skippable: true, reason: 'marker-present-no-lockfile' };
323
253
  }
324
254
  if (donorPath) {
@@ -331,31 +261,15 @@ export function isInstallSkippable({ wtPath, donorPath, fsLike = fs }) {
331
261
  }
332
262
 
333
263
  /**
334
- * Pure: probe whether a **reused** worktree already carries a completed,
335
- * up-to-date install. Worktree reuse must not blindly report
336
- * `skipped/worktree-reused` — when the prior run's install *failed*, that
337
- * status defeats the install retry exactly when it matters
338
- * (`deriveInstallAction('skipped')` treats it as "nothing to do").
264
+ * Whether a reused worktree has a completed install. Reports `failed` rather
265
+ * than a blind `skipped` so a prior failed install is retried.
339
266
  *
340
- * Returns the same shape as `installDependencies`:
341
- * - `{ status: 'skipped', reason: 'worktree-reused' }` — a completed
342
- * install was detected (or the strategy never installs per-tree);
343
- * safe to skip.
344
- * - `{ status: 'failed', reason }` — missing/incomplete install detected;
345
- * callers should retry the install.
346
- *
347
- * Thin wrapper over the shared `isInstallSkippable` predicate (Story #4249 —
348
- * one freshness predicate, keyed on a byte-exact lockfile hash, never mtime).
349
- * The reuse path has no separate donor, so freshness reduces to marker
350
- * presence (the worktree's own lockfile is its own baseline).
351
- *
352
- * @param {string} strategy One of `per-worktree | clone | pnpm-store | symlink`.
353
- * @param {string} wtPath Absolute worktree path.
354
- * @param {{ existsSync: Function, readFileSync: Function }} [fsLike] Injectable for tests.
267
+ * @param {string} strategy
268
+ * @param {string} wtPath
269
+ * @param {{ existsSync: Function, readFileSync: Function }} [fsLike]
355
270
  * @returns {{ status: 'skipped' | 'failed', reason: string }}
356
271
  */
357
272
  export function probeReusedInstall(strategy, wtPath, fsLike = fs) {
358
- // `symlink` re-points node_modules at a donor — no per-tree install to probe.
359
273
  if (strategy === 'symlink') {
360
274
  return { status: 'skipped', reason: 'worktree-reused' };
361
275
  }
@@ -375,16 +289,7 @@ export function probeReusedInstall(strategy, wtPath, fsLike = fs) {
375
289
  };
376
290
  }
377
291
 
378
- /**
379
- * Pure: retry policy keyed off the chosen command. pnpm gets 3× + 5min.
380
- *
381
- * Story #4249: npm/yarn now get a real `maxAttempts` of 2 (was 1). The
382
- * formerly hardcoded `npm ci` retry inside `runStoryInitPrepare` was deleted
383
- * in the same change; this in-`ensure` retry budget is what compensates so
384
- * npm install reliability does not regress — a transient first-attempt
385
- * failure now retries here, with the correct (PM-detected) command, instead
386
- * of an unconditional `npm ci` re-run after init.
387
- */
292
+ /** Retry policy per command; this is the only install retry. */
388
293
  export function installRetryPolicy(cmd) {
389
294
  const isPnpm = cmd === 'pnpm';
390
295
  return {
@@ -404,20 +309,9 @@ export function describeAttemptFailure(result, timeoutMs) {
404
309
  const PNPM_STORE_PRIME_SENTINEL = path.join('temp', '.pnpm-store-primed');
405
310
 
406
311
  /**
407
- * Pure: one-time per-machine pnpm content-addressable-store prime.
408
- *
409
- * The `pnpm-store` strategy relies on a hydrated shared store. On a cold
410
- * machine the first `pnpm install --frozen-lockfile` inside a worktree races
411
- * other workers, and the per-tree retries can all hit the same un-populated
412
- * store and exhaust without any single attempt succeeding. Priming the store
413
- * once at `repoRoot` (where the lockfile lives) before any worktree install
414
- * eliminates that class of transient failure.
415
- *
416
- * The sentinel is a zero-byte file under `<repoRoot>/temp/`. The directory
417
- * lives outside Git (the project's standard scratch root) so the sentinel
418
- * persists across worktrees on the same machine but never ships to commits.
419
- *
420
- * No-op for strategies other than `pnpm-store`.
312
+ * Prime the shared pnpm store once per machine (sentinel under `temp/`): on a
313
+ * cold store, concurrent worktree installs can exhaust their retries racing
314
+ * each other.
421
315
  *
422
316
  * @returns {{ primed: 'primed' | 'cached' | 'failed' | 'skipped', reason?: string }}
423
317
  */
@@ -469,8 +363,7 @@ function primePnpmStore({
469
363
  }
470
364
 
471
365
  /**
472
- * Run the package-manager install with the configured retry policy. Pure
473
- * w.r.t. `spawnFn` + `sleepFn` — the CLI wires real ones; tests inject stubs.
366
+ * Run the install under the retry policy.
474
367
  *
475
368
  * @returns {{ ok: boolean, attempts: number, lastResult: object }}
476
369
  */
@@ -517,24 +410,11 @@ export function runInstallWithRetry({
517
410
  }
518
411
 
519
412
  /**
520
- * Run the appropriate package-manager install inside a freshly created
521
- * worktree. Non-fatal: logs a warning on failure so the agent can retry.
522
- *
523
- * Return shape:
524
- * - `{ status: 'installed' }` — per-worktree install succeeded.
525
- * - `{ status: 'failed', reason }` — per-worktree install attempted and
526
- * failed (or finished 0 but produced
527
- * no `node_modules/`).
528
- * - `{ status: 'skipped', reason }` — strategy intentionally skips a
529
- * per-worktree install. Covers
530
- * `symlink` (donor `node_modules` is
531
- * re-pointed), `pnpm-store` (relies
532
- * on the shared content-addressable
533
- * store), and the no-`package.json`
534
- * case.
413
+ * Failure verdict for an install run (non-zero exit, or exit 0 without
414
+ * `node_modules`), or `null` on success.
535
415
  *
536
416
  * @param {{ config: object, platform: NodeJS.Platform, logger: object }} ctx
537
- * @param {string} wtPath Absolute worktree path.
417
+ * @param {string} wtPath
538
418
  * @returns {{ status: 'installed' | 'failed' | 'skipped', reason?: string }}
539
419
  */
540
420
  function verifyInstallOutcome(ctx, wtPath, selection, run, policy) {
@@ -564,7 +444,6 @@ function verifyInstallOutcome(ctx, wtPath, selection, run, policy) {
564
444
 
565
445
  export function installDependencies(ctx, wtPath) {
566
446
  const strategy = ctx.config.nodeModulesStrategy ?? 'per-worktree';
567
- // `symlink` re-points node_modules at a donor — no install command runs.
568
447
  if (strategy === 'symlink') {
569
448
  return { status: 'skipped', reason: 'symlink-strategy' };
570
449
  }
@@ -572,13 +451,6 @@ export function installDependencies(ctx, wtPath) {
572
451
  if (selection === null) {
573
452
  return { status: 'skipped', reason: 'no-package-json' };
574
453
  }
575
- // `clone` reflink-clones the donor's node_modules in `applyNodeModulesStrategy`.
576
- // When the cloned tree carries a completed-install marker AND the worktree's
577
- // lockfile byte-matches the donor's, the per-tree install is pure waste —
578
- // skip it. The freshness predicate is the single shared `isInstallSkippable`
579
- // (byte-exact lockfile hash, never mtime). On a lockfile mismatch (donor
580
- // drifted, or no clone happened) this returns false and the install below
581
- // runs normally.
582
454
  if (strategy === 'clone') {
583
455
  const donor = resolveCloneDonor(ctx);
584
456
  const probe = isInstallSkippable({ wtPath, donorPath: donor });
@@ -592,10 +464,7 @@ export function installDependencies(ctx, wtPath) {
592
464
  `worktree.install strategy=clone install reason=${probe.reason} path=${wtPath}`,
593
465
  );
594
466
  }
595
- // Prime the pnpm content-addressable store once per machine before the
596
- // worktree's own install runs. No-op for non-pnpm-store strategies. Prime
597
- // failures are surfaced as warnings but do not short-circuit the install —
598
- // the retry ladder below still gets its full budget of attempts.
467
+ // A failed prime only warns; the install keeps its full retry budget.
599
468
  if (strategy === 'pnpm-store' && ctx.repoRoot) {
600
469
  primePnpmStore({
601
470
  strategy,
@@ -618,10 +487,7 @@ export function installDependencies(ctx, wtPath) {
618
487
  });
619
488
  const verdict = verifyInstallOutcome(ctx, wtPath, selection, run, policy);
620
489
  if (verdict) return verdict;
621
- // `pnpm-store` runs `pnpm install --frozen-lockfile`, but the resulting
622
- // node_modules is backed by a shared content-addressable store rather
623
- // than a self-contained tree. Report `skipped` so the workflow treats
624
- // dependency state as N/A and trusts the strategy.
490
+ // Store-backed, not self-contained: report `skipped` (dependency state N/A).
625
491
  if (strategy === 'pnpm-store') {
626
492
  return { status: 'skipped', reason: 'pnpm-store-strategy' };
627
493
  }
@@ -1,20 +1,8 @@
1
1
  /**
2
- * WorktreeManager — single authority over per-story git worktrees.
3
- *
4
- * This file is a thin facade over `lib/worktree/*`:
5
- * - `lib/worktree/lifecycle-manager.js` — ensure / reap / list / gc / prune.
6
- * - `lib/worktree/node-modules-strategy.js` — per-worktree / symlink / pnpm-store.
7
- * - `lib/worktree/bootstrapper.js` — bootstrap-file copy.
8
- * - `lib/worktree/inspector.js` — pure path + porcelain parsing helpers.
9
- *
10
- * External callers import `WorktreeManager` and `parseWorktreePorcelain` from
11
- * this module path; those exports are preserved verbatim so no other file in
12
- * the repo needs to change.
13
- *
14
- * No other script may call `git worktree` directly. All git calls flow
15
- * through the injected `ctx.git` (defaults to `./git-utils.js`). Paths are
16
- * resolved and asserted to live inside `repoRoot`, and callers cannot request
17
- * force removal; bounded internal fallbacks live in the lifecycle module.
2
+ * WorktreeManager — the single authority over per-story git worktrees, a
3
+ * facade over `lib/worktree/*`. No other script may call `git worktree`.
4
+ * Paths are asserted inside `repoRoot` and callers cannot request force
5
+ * removal.
18
6
  */
19
7
 
20
8
  import path from 'node:path';
@@ -46,16 +34,13 @@ export { parseWorktreePorcelain };
46
34
  export class WorktreeManager {
47
35
  /**
48
36
  * @param {object} opts
49
- * @param {string} opts.repoRoot Absolute path to the main repo.
37
+ * @param {string} opts.repoRoot
50
38
  * @param {object} [opts.config] Resolved `orchestration.worktreeIsolation` config.
51
- * @param {object} [opts.logger] Logger with info/warn/error (defaults to console-style).
52
- * @param {object} [opts.git] Injected `{ gitSync, gitSpawn }` (defaults to git-utils).
53
- * @param {NodeJS.Platform} [opts.platform] Defaults to `process.platform`.
39
+ * @param {object} [opts.logger]
40
+ * @param {object} [opts.git] Injected `{ gitSync, gitSpawn }`.
41
+ * @param {NodeJS.Platform} [opts.platform]
54
42
  * @param {(phase: 'worktree-create'|'bootstrap'|'install') => void} [opts.onPhase]
55
- * Optional phase-boundary callback fired from `ensure()` just before each
56
- * internal phase (git worktree add, bootstrap-file copy, dependency
57
- * install), so a caller can attribute wall-clock to the sub-phases of
58
- * worktree provisioning.
43
+ * Fired before each `ensure()` phase, for wall-clock attribution.
59
44
  */
60
45
  constructor({
61
46
  repoRoot,
@@ -101,9 +86,7 @@ export class WorktreeManager {
101
86
  }
102
87
 
103
88
  /**
104
- * Build the context bag shared by every lifecycle helper. Regenerated on
105
- * each call so mutating `this.config` between calls is respected, but the
106
- * cache slot is a stable object so all helpers see the same list.
89
+ * Rebuilt per call so config mutations are seen; the cache slot is stable.
107
90
  */
108
91
  _ctx() {
109
92
  return {
@@ -120,9 +103,7 @@ export class WorktreeManager {
120
103
  maybeWarnWindowsPath(
121
104
  {
122
105
  platform: this.platform,
123
- // Hardcoded post-reshape (Epic #1720 Story #1739). The value
124
- // tracks Windows MAX_PATH minus headroom for the worktree's own
125
- // path overhead — not a domain knob operators tune.
106
+ // Windows MAX_PATH minus headroom; not an operator knob.
126
107
  threshold: 240,
127
108
  logger: this.logger,
128
109
  },
@@ -177,23 +158,20 @@ export class WorktreeManager {
177
158
  };
178
159
  }
179
160
 
180
- /** Absolute path for a given storyId. */
181
161
  pathFor(storyId) {
182
162
  return pathFor(this._ctx(), storyId);
183
163
  }
184
164
 
185
165
  /**
186
- * True when this manager was constructed with `config.enabled === false`.
187
- * The mutating lifecycle methods (`ensure`, `reap`, `gc`, `sweepStaleLocks`)
188
- * short-circuit to no-op shapes in that case so the off-branch never
189
- * touches fs or git regardless of caller-side gating drift.
166
+ * When disabled, mutating methods return no-op shapes and never touch fs or
167
+ * git, whatever the caller's gating.
190
168
  */
191
169
  _isDisabled() {
192
170
  return this.config?.enabled === false;
193
171
  }
194
172
 
195
173
  /**
196
- * Idempotently ensure a worktree exists at `.worktrees/story-<id>/` on `branch`.
174
+ * Idempotent.
197
175
  *
198
176
  * @param {number|string} storyId
199
177
  * @param {string} branch
@@ -210,22 +188,19 @@ export class WorktreeManager {
210
188
  return ensure(this._ctx(), storyId, branch);
211
189
  }
212
190
 
213
- /** Enumerate all worktrees known to git. */
214
191
  list() {
215
192
  return list(this._ctx());
216
193
  }
217
194
 
218
- /** Check whether a worktree is safe to remove. */
219
195
  isSafeToRemove(wtPath, opts) {
220
196
  return isSafeToRemove(this._ctx(), wtPath, opts);
221
197
  }
222
198
 
223
- /** Prune stale git worktree registrations for directories that no longer exist. */
224
199
  prune() {
225
200
  return prune(this._ctx());
226
201
  }
227
202
 
228
- /** Remove the worktree for a given storyId. Rejects caller-requested force. */
203
+ /** Rejects caller-requested force. */
229
204
  reap(storyId, opts) {
230
205
  if (this._isDisabled()) {
231
206
  return {