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,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 {