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,66 +1,10 @@
1
1
  /**
2
- * sync-from-base.js — Fetch and merge `origin/<baseBranch>` into the
3
- * current branch of a worktree, so a Story or Epic PR opens with the
4
- * latest base commits already integrated (Story #2580).
2
+ * sync-from-base.js — merge `origin/<baseBranch>` into a worktree's branch
3
+ * before the PR opens. Merge, not rebase (settled): a rebase force-pushes
4
+ * away review state and spends the capture stamp just the same.
5
5
  *
6
- * The race this addresses: when multiple `/single-story-deliver` sessions
7
- * run in parallel, each Story branch is forked from the same `main` SHA.
8
- * Whichever PR auto-merges first bumps `main`; the lagging PRs are then
9
- * "behind base" and (with branch-protection's `up-to-date branch` rule)
10
- * stall at the merge gate. Pulling the latest base commits into the
11
- * Story branch before push makes the initial CI run reflect a fresh
12
- * merge and reduces (does not eliminate) the residual race-with-merge
13
- * window. The merge queue is the proper fix for the residual race.
14
- *
15
- * Why merge, not rebase (Story #5267 — settled, do not re-open):
16
- *
17
- * 1. Mandrel states no rebase rule anywhere. `git-conventions.md`
18
- * mandates branch shapes and commit subjects and is silent on how a
19
- * branch takes on base commits, so there is no convention to honour
20
- * here — only a trade-off to pick.
21
- * 2. Story branches are pushed and reviewed across iterations of the
22
- * watch + fix loop. A rebase force-pushes, discarding in-flight
23
- * reviewer context and any review state pinned to the old SHAs.
24
- * 3. A rebase would NOT save the pre-push capture stamp people reach
25
- * for it to save. The stamp is keyed on the tree, and rebasing onto
26
- * a moved base changes the tree exactly as merging it does — both
27
- * invalidate the stamp, so the credit argument is a wash. The real
28
- * remedy is the `changedPaths` reporting below: say out loud when
29
- * the sync spent the stamp, rather than change how it is spent.
30
- *
31
- * The merge commit is squashed away when the PR lands, so the cosmetic
32
- * cost is zero.
33
- *
34
- * Outcomes (`{ synced, kind, ... }`):
35
- *
36
- * - `{ synced: true, kind: 'noop-already-current', changedPaths: [] }`
37
- * — `origin/<base>` is already an ancestor of HEAD; nothing to do.
38
- * - `{ synced: true, kind: 'fast-forward', changedPaths }` — merge
39
- * fast-forwarded.
40
- * - `{ synced: true, kind: 'merge-commit', changedPaths }` — non-trivial
41
- * merge succeeded; a merge commit landed on the active branch.
42
- *
43
- * `changedPaths` is the tracked paths the sync brought into the branch —
44
- * `git diff --name-only <pre-merge HEAD> HEAD` — and is what lets a caller
45
- * tell a sync that spent a pre-push capture stamp from one that did not.
46
- * It is `[]` for every non-mutating and every failing outcome.
47
- * - `{ synced: false, kind: 'fetch-failed', stderr }` — `git fetch`
48
- * could not retrieve `origin/<base>`. No mutation occurred.
49
- * - `{ synced: false, kind: 'conflict', conflictFiles }` — merge
50
- * conflicted and was aborted; caller must surface a recoverable
51
- * surface (structured comment + `agent::blocked`) and stop.
52
- * - `{ synced: false, kind: 'merge-failed', stderr }` — merge exited
53
- * non-zero for a reason other than a parseable conflict (rare; treat
54
- * as a hard blocker on the caller's side).
55
- * - `{ synced: false, kind: 'merge-driver-missing', stderr }` — the
56
- * worktree's `.gitattributes` routes `baselines/*.json` through the
57
- * `mandrel-baseline` merge driver and this clone has no
58
- * `merge.mandrel-baseline.driver` config, so git would text-merge
59
- * generated baselines. Nothing was fetched or merged (Story #5277).
60
- *
61
- * The helper does not mutate any ticket state, post comments, or write
62
- * to anything other than the worktree's git refs / index. Callers own
63
- * the recovery surface.
6
+ * Mutates only git refs/index. `changedPaths` tells the caller whether the
7
+ * sync spent a capture stamp; `[]` on every non-mutating or failing outcome.
64
8
  */
65
9
 
66
10
  import {
@@ -74,15 +18,8 @@ import {
74
18
  } from '../git-utils.js';
75
19
 
76
20
  /**
77
- * Refuse the sync when the baseline merge driver is declared but unregistered
78
- * (Story #5277). `probeBaselineMergeDriver` owns the two-part question and why
79
- * each half matters; this is where the answer becomes a refusal.
80
- *
81
- * Base-sync is the one place the failure is catchable before it happens: it is
82
- * the merge that runs unattended, immediately before the push, on exactly the
83
- * files a concurrent sibling Story most often also refreshed. Refusing costs
84
- * one operator command; proceeding costs a silently wrong baseline on `main`
85
- * that nothing downstream re-derives.
21
+ * Refuse when the declared baseline merge driver is unregistered: git would
22
+ * text-merge generated baselines and silently land a wrong one on `main`.
86
23
  *
87
24
  * @param {string} cwd
88
25
  * @param {typeof defaultGitSpawn} gitSpawn
@@ -109,8 +46,6 @@ function refuseWithoutMergeDriver(cwd, gitSpawn) {
109
46
  }
110
47
 
111
48
  /**
112
- * Resolve the current HEAD SHA, or `null` when git cannot answer.
113
- *
114
49
  * @param {typeof defaultGitSpawn} gitSpawn
115
50
  * @param {string} cwd
116
51
  * @returns {string|null}
@@ -123,14 +58,7 @@ function readHead(gitSpawn, cwd) {
123
58
  }
124
59
 
125
60
  /**
126
- * The tracked paths that differ between `fromSha` and the current HEAD.
127
- *
128
- * Returns `[]` when the pre-merge SHA could not be read or the diff itself
129
- * failed. That is deliberately the quiet answer: the only consumer is the
130
- * caller's "your capture stamp may be dead" warning, and manufacturing that
131
- * warning out of a failed probe would cry wolf on every sync in a repo where
132
- * `rev-parse` is broken — a condition the merge one line earlier would
133
- * already have failed on.
61
+ * A failed probe answers `[]` so the stamp warning never cries wolf.
134
62
  *
135
63
  * @param {typeof defaultGitSpawn} gitSpawn
136
64
  * @param {string} cwd
@@ -149,24 +77,14 @@ function diffPaths(gitSpawn, cwd, fromSha) {
149
77
  }
150
78
 
151
79
  /**
152
- * Sync the active branch in `cwd` against `origin/<baseBranch>`. See
153
- * the module docstring for the full outcome envelope.
80
+ * A conflict is aborted before returning; the caller surfaces it.
154
81
  *
155
82
  * @param {object} opts
156
- * @param {string} opts.cwd Absolute path to the worktree (or main
157
- * checkout) on which the merge should run. The caller is responsible
158
- * for ensuring the desired branch is checked out — this helper does
159
- * not switch branches.
160
- * @param {string} opts.baseBranch Name of the base branch on `origin`
161
- * (e.g. `'main'` or `'epic/123'`). The helper fetches and merges
162
- * `origin/<baseBranch>`.
163
- * @param {(tag: string, msg: string) => void} [opts.log] Progress sink.
164
- * Receives `(tag, message)` for each non-trivial step. Defaults to a
165
- * no-op so the helper is silent when called from a test.
83
+ * @param {string} opts.cwd Branch must already be checked out.
84
+ * @param {string} opts.baseBranch
85
+ * @param {(tag: string, msg: string) => void} [opts.log]
166
86
  * @param {typeof defaultGitFetchWithRetry} [opts.gitFetchWithRetry]
167
- * Override for unit tests.
168
- * @param {typeof defaultGitSpawn} [opts.gitSpawn] Override for unit
169
- * tests.
87
+ * @param {typeof defaultGitSpawn} [opts.gitSpawn]
170
88
  *
171
89
  * @returns {Promise<
172
90
  * | { synced: true, kind: 'noop-already-current', changedPaths: string[] }
@@ -209,10 +127,6 @@ export async function syncBranchFromBase({
209
127
  };
210
128
  }
211
129
 
212
- // Probe whether the merge would be a no-op (origin already an ancestor
213
- // of HEAD) or a fast-forward (HEAD an ancestor of origin). The two
214
- // probes are cheap and let us avoid invoking `git merge` when nothing
215
- // needs to change.
216
130
  const originAlreadyMerged = gitSpawn(
217
131
  cwd,
218
132
  'merge-base',
@@ -225,9 +139,7 @@ export async function syncBranchFromBase({
225
139
  return { synced: true, kind: 'noop-already-current', changedPaths: [] };
226
140
  }
227
141
 
228
- // Pin the pre-merge HEAD so a successful sync can name what it brought
229
- // in. Read BEFORE the merge, because afterwards the only handle on the
230
- // old tree is this SHA.
142
+ // Must be read before the merge.
231
143
  const preMergeHead = readHead(gitSpawn, cwd);
232
144
 
233
145
  const headBehindOrigin = gitSpawn(
@@ -254,8 +166,6 @@ export async function syncBranchFromBase({
254
166
  };
255
167
  }
256
168
 
257
- // Non-zero merge exit — collect the conflicting file list before
258
- // aborting so the caller can present a recoverable surface.
259
169
  const unmerged = gitSpawn(cwd, 'diff', '--name-only', '--diff-filter=U');
260
170
  const conflictFiles = (unmerged.stdout ?? '')
261
171
  .toString()
@@ -263,9 +173,7 @@ export async function syncBranchFromBase({
263
173
  .map((s) => s.trim())
264
174
  .filter((s) => s.length > 0);
265
175
 
266
- // Always abort, even when the conflict list is empty — leaving the
267
- // worktree in a half-merged state would block the operator's recovery
268
- // loop on the next iteration.
176
+ // Always abort: a half-merged worktree blocks the next recovery.
269
177
  gitSpawn(cwd, 'merge', '--abort');
270
178
 
271
179
  if (conflictFiles.length > 0) {
@@ -1,20 +1,8 @@
1
1
  /**
2
- * git-branch-cleanup.js — Shared branch deletion helpers (local + remote).
3
- *
4
- * Consolidates the "delete this branch from local and/or origin" pattern
5
- * used by `single-story-close.js` and other branch-reaping flows. Originally
6
- * carved out when more than one caller re-implemented the same idempotency
7
- * rules with subtle drift.
8
- *
9
- * All helpers:
10
- * - Take an explicit `cwd` (worktree-isolation friendly).
11
- * - Validate branch names via the canonical `assertBranchSafe` guard
12
- * in protected mode (rejects `main`, `master`, `HEAD`, and `refs/*`
13
- * before any destructive `git` invocation).
14
- * - Treat "branch not found" / "remote ref does not exist" as success
15
- * (idempotent), distinguishing it via `reason: 'not-found'`.
16
- * - Return `{ deleted: bool, reason: string, stderr?: string }` and
17
- * never throw on git's normal failure modes (caller inspects the result).
2
+ * git-branch-cleanup.js — local/remote branch deletion. Names pass the
3
+ * protected `assertBranchSafe` guard (no `main`/`master`/`HEAD`/`refs/*`)
4
+ * before any destructive call; "not found" counts as deleted (idempotent);
5
+ * git's normal failures are returned, never thrown.
18
6
  */
19
7
 
20
8
  import { assertBranchSafe, isSafeBranchName } from './branch-name-guard.js';
@@ -24,15 +12,9 @@ const NOT_FOUND_LOCAL = /not found|no such branch|did not match any/i;
24
12
  const NOT_FOUND_REMOTE = /remote ref does not exist|does not exist/i;
25
13
 
26
14
  /**
27
- * Delete a local branch.
28
- *
29
- * @param {string} name - Branch name.
30
- * @param {{ force?: boolean, cwd?: string }} [opts]
31
- * - `force`: use `branch -D` (default true). When false, uses `branch -d`,
32
- * which refuses to delete unmerged branches.
33
- * - `cwd`: working directory (defaults to `process.cwd()`).
15
+ * @param {string} name
16
+ * @param {{ force?: boolean, cwd?: string }} [opts] `force` (default) = `-D`.
34
17
  * @returns {{ deleted: boolean, reason: string, stderr?: string }}
35
- * `reason` is one of: `'deleted'`, `'not-found'`, `'unmerged'`, `'error'`.
36
18
  */
37
19
  export function deleteBranchLocal(name, opts = {}) {
38
20
  assertBranchSafe(name, { protected: true });
@@ -55,22 +37,14 @@ export function deleteBranchLocal(name, opts = {}) {
55
37
  }
56
38
 
57
39
  /**
58
- * Delete a branch on the remote.
59
- *
60
- * @param {string} name - Branch name (no `refs/heads/` prefix).
40
+ * @param {string} name
61
41
  * @param {{ remote?: string, cwd?: string, noVerify?: boolean }} [opts]
62
- * - `noVerify`: pass `--no-verify` so a heavy `pre-push` hook does not
63
- * block a delete-only push (the hook would still fire even though no
64
- * commits are being uploaded). Default `false`.
42
+ * `noVerify` skips a heavy `pre-push` hook on a delete-only push.
65
43
  * @returns {{ deleted: boolean, reason: string, stderr?: string }}
66
- * `reason` is one of: `'deleted'`, `'not-found'`, `'error'`.
67
44
  */
68
45
  export function deleteBranchRemote(name, opts = {}) {
69
46
  assertBranchSafe(name, { protected: true });
70
47
  const remote = opts.remote ?? 'origin';
71
- // Remote name (e.g. "origin") is a non-branch identifier; reuse the
72
- // shared character-set predicate but raise a remote-scoped error so
73
- // the failure message stays accurate.
74
48
  if (!isSafeBranchName(remote)) {
75
49
  throw new Error(`[git-branch-cleanup] Unsafe remote name: "${remote}".`);
76
50
  }
@@ -91,8 +65,7 @@ export function deleteBranchRemote(name, opts = {}) {
91
65
  }
92
66
 
93
67
  /**
94
- * Delete a branch in both locations. Always attempts both — a local
95
- * failure does not skip the remote attempt.
68
+ * Always attempts both sides — a local failure does not skip the remote.
96
69
  *
97
70
  * @param {string} name
98
71
  * @param {{ force?: boolean, remote?: string, cwd?: string, noVerify?: boolean }} [opts]
@@ -102,9 +75,6 @@ export function deleteBranchRemote(name, opts = {}) {
102
75
  * local: ReturnType<typeof deleteBranchLocal>,
103
76
  * remote: ReturnType<typeof deleteBranchRemote>,
104
77
  * }}
105
- * Top-level `deleted` is true iff both sides succeeded (including
106
- * idempotent not-found). `reason` is `'deleted'`, `'partial'`, or
107
- * `'error'`.
108
78
  */
109
79
  export function deleteBranchEverywhere(name, opts = {}) {
110
80
  const local = deleteBranchLocal(name, opts);
@@ -118,26 +88,13 @@ export function deleteBranchEverywhere(name, opts = {}) {
118
88
  }
119
89
 
120
90
  /**
121
- * Delete N branches in a single batched git call (push --delete X Y Z, or
122
- * branch -D X Y Z), falling back to per-ref delete via
123
- * `deleteBranchLocal` / `deleteBranchRemote` if the batched call fails.
124
- * The fallback is what makes idempotency contract-correct: a batched call
125
- * fails as a unit if even one ref does not exist, but the per-ref retry
126
- * resolves each ref's outcome independently — `not-found` is reported as
127
- * deleted, real failures are surfaced.
91
+ * Delete N branches in one git call, falling back to per-ref deletes when it
92
+ * fails — a batch fails as a unit on one missing ref, so the fallback is what
93
+ * keeps not-found idempotent.
128
94
  *
129
- * @param {string[]} names - Branch names. Empty / falsy entries are
130
- * filtered out before any git work.
95
+ * @param {string[]} names - Branch names; falsy entries are dropped.
131
96
  * @param {{ scope: 'local'|'remote', cwd?: string, force?: boolean, remote?: string, noVerify?: boolean }} opts
132
- * - `scope`: required. `'local'` runs `git branch -D|-d`; `'remote'`
133
- * runs `git push <remote> --delete`.
134
- * - `force`, `remote`, `noVerify`: forwarded to the per-ref helper on
135
- * the fallback path; `force` and `noVerify` are also honoured on the
136
- * batched call.
137
97
  * @returns {{ deleted: string[], failed: Array<{ name: string, reason: string, stderr?: string }> }}
138
- * `deleted` lists names that were successfully deleted (or were
139
- * already gone). `failed` lists names whose per-ref retry returned a
140
- * non-deleted result, with the lib's `reason` propagated.
141
98
  */
142
99
  function assertBatchedScope(scope) {
143
100
  if (scope !== 'local' && scope !== 'remote') {
@@ -183,8 +140,7 @@ export function deleteBranchesBatched(names, opts = {}) {
183
140
 
184
141
  const scope = opts.scope;
185
142
  assertBatchedScope(scope);
186
- // Validate every name before any destructive call so a single bad
187
- // entry can never leak into a batched git invocation.
143
+ // Validate all names first so a bad entry never reaches a batched call.
188
144
  for (const n of list) assertBranchSafe(n, { protected: true });
189
145
 
190
146
  const cwd = opts.cwd ?? process.cwd();
@@ -197,8 +153,5 @@ export function deleteBranchesBatched(names, opts = {}) {
197
153
  return { deleted: [...list], failed: [] };
198
154
  }
199
155
 
200
- // Per-ref fallback. Each call independently classifies its outcome —
201
- // already-gone refs are reported as `not-found` (counted as deleted),
202
- // real failures surface in `failed[]`.
203
156
  return perRefFallback(list, scope, opts);
204
157
  }
@@ -1,26 +1,14 @@
1
1
  /**
2
- * git-branch-lifecycle.js — Shared git branch state machine helpers.
3
- *
4
- * Consolidates the "does this branch exist locally / remotely?" and
5
- * "ensure this branch exists and is checked out" logic that
6
- * `single-story-init.js` centralizes (formerly duplicated across the deleted
7
- * `story-init.js` and `dispatch-engine.js` entry seams).
8
- *
9
- * All helpers take an explicit `cwd`. Callers with worktree isolation
10
- * enabled pass the worktree path; single-tree callers pass `PROJECT_ROOT`.
11
- *
12
- * No helper here reads config, spawns its own logger, or knows about
13
- * GitHub. They are pure git-subprocess wrappers with validation on the
14
- * branch names they forward to git.
2
+ * git-branch-lifecycle.js — branch existence and seed/checkout helpers;
3
+ * names are validated before they reach git.
15
4
  */
16
5
 
17
6
  import { assertBranchSafe } from './branch-name-guard.js';
18
7
  import { gitPullWithRetry, gitSpawn, gitSync } from './git-utils.js';
19
8
 
20
9
  /**
21
- * Return the current branch name, or null if in detached HEAD state.
22
10
  * @param {string} cwd
23
- * @returns {string|null}
11
+ * @returns {string|null} null in detached HEAD state
24
12
  */
25
13
  export function currentBranch(cwd) {
26
14
  const result = gitSpawn(cwd, 'branch', '--show-current');
@@ -29,8 +17,6 @@ export function currentBranch(cwd) {
29
17
  }
30
18
 
31
19
  /**
32
- * Return true iff the given branch exists as a local ref in `cwd`'s repo.
33
- *
34
20
  * @param {string} branch
35
21
  * @param {string} cwd
36
22
  * @returns {boolean}
@@ -44,10 +30,7 @@ export function branchExistsLocally(branch, cwd) {
44
30
  }
45
31
 
46
32
  /**
47
- * Return true iff the given branch exists on the `origin` remote.
48
- *
49
- * Issues a network `ls-remote` call. Prefer `branchExistsViaTrackingRef`
50
- * after a `git fetch` has already populated the remote-tracking refs.
33
+ * Network call; prefer `branchExistsViaTrackingRef` after a fetch.
51
34
  *
52
35
  * @param {string} branch
53
36
  * @param {string} cwd
@@ -60,14 +43,7 @@ export function branchExistsRemotely(branch, cwd) {
60
43
  }
61
44
 
62
45
  /**
63
- * Return true iff the given branch exists on `origin` according to the
64
- * local remote-tracking ref (`refs/remotes/origin/<branch>`).
65
- *
66
- * This is a purely-local check (no network) that is authoritative whenever
67
- * a `git fetch origin` has already been run — e.g. inside `bootstrapWorktree`
68
- * and `bootstrapBranch` which always call `cachedGitFetch` first. Use this
69
- * instead of `branchExistsRemotely` in those paths to avoid a redundant
70
- * network round-trip.
46
+ * Local-only; authoritative once `git fetch origin` has run.
71
47
  *
72
48
  * @param {string} branch
73
49
  * @param {string} cwd
@@ -87,25 +63,10 @@ export function branchExistsViaTrackingRef(branch, cwd) {
87
63
  }
88
64
 
89
65
  /**
90
- * Pure: classify how a `story-<id>` branch should be seeded from the (local,
91
- * remote) ref-presence matrix. This is the single source of truth for
92
- * `single-story-init.js#decideStoryBranchSeed` (v2 `/mandrel-deliver` path).
93
- *
94
- * The init path previously re-implemented the same `local → no-op, remote →
95
- * fetch, else create` decision tree; it now delegates here so the branching
96
- * logic lives in exactly one place. The caller keeps its own keyword for
97
- * the "local ref already exists" outcome (`reuse` vs `none`) — synonyms for
98
- * "do not re-create / do not re-seed" preserved for its existing public/test
99
- * contract — so this classifier returns the neutral `'local'` keyword and
100
- * the caller maps it onto its own vocabulary.
66
+ * On `local`, do not `git branch` (it throws on an existing ref) or fetch.
101
67
  *
102
68
  * @param {{ localHas: boolean, remoteHas: boolean }} presence
103
69
  * @returns {'local'|'fetch'|'create'}
104
- * - `local` — a local ref already exists; the caller must not run
105
- * `git branch` (which throws on the existing ref) and must not
106
- * fetch.
107
- * - `fetch` — only the remote ref exists; materialise the local ref.
108
- * - `create` — neither exists; branch from the base/Epic branch.
109
70
  */
110
71
  export function classifyBranchSeed({ localHas, remoteHas }) {
111
72
  if (localHas) return 'local';
@@ -114,39 +75,13 @@ export function classifyBranchSeed({ localHas, remoteHas }) {
114
75
  }
115
76
 
116
77
  /**
117
- * Single-home for the story-branch seed-action *switch shell* that
118
- * `single-story-init.js#seedStoryBranch` owns (Story #4255). The deleted
119
- * Epic `story-init/branch-initializer.js` path had duplicated the same
120
- * shell before v2 cutover.
121
- *
122
- * The two callers differ in exactly two behavioural axes, both of which are
123
- * parameters here — no other conditional branching is introduced:
124
- * - **`baseRef`** — the ref to branch from on `create` (`main` for v2
125
- * `/mandrel-deliver`; pre-v2 Epic close used the Epic branch).
126
- * - **`swallowCreateRace`** — when `true`, a `git branch` that exits
127
- * non-zero with an "already exists" stderr is treated as reuse rather
128
- * than a fatal error (pre-v2 concurrent wave dispatch). When `false`, any create failure
129
- * throws (the v2 standalone path has no concurrent creator to race).
130
- *
131
- * The asymmetric surrounding wrappers (merged-sweep, fast-forward,
132
- * donor-prime, workspace-verify) are deliberately NOT folded in — they stay
133
- * in their respective callers.
134
- *
135
- * Caller-specific log lines and error text are passed in as the `messages`
136
- * data bag so behaviour stays byte-identical to the pre-extraction switches.
137
- * The git seams (`spawn`, `existsLocally`, `existsRemotely`) are injectable so
138
- * each caller can bind its own cwd (and tests can substitute stubs through the
139
- * parameter rather than by module mocking). Per
140
- * `.agents/rules/test-seams.md` rule 1 each seam **defaults to the real
141
- * implementation** bound to `cwd`, so a caller that only knows its checkout
142
- * passes `cwd` and nothing else; `single-story-init.js` keeps passing its own
143
- * pre-bound seams and is unaffected.
78
+ * Git seams default to the real implementation bound to `cwd`.
144
79
  *
145
80
  * @param {object} opts
146
81
  * @param {string} opts.storyBranch
147
- * @param {string} opts.baseRef Ref to branch from on `create`.
148
- * @param {string} [opts.cwd] Checkout the default seams bind to.
149
- * @param {boolean} [opts.swallowCreateRace=false]
82
+ * @param {string} opts.baseRef
83
+ * @param {string} [opts.cwd]
84
+ * @param {boolean} [opts.swallowCreateRace=false] "already exists" = reuse.
150
85
  * @param {(args: string[]) => { status: number, stdout?: string, stderr?: string }} [opts.spawn]
151
86
  * @param {(branch: string) => boolean} [opts.existsLocally]
152
87
  * @param {(branch: string) => boolean} [opts.existsRemotely]
@@ -155,11 +90,10 @@ export function classifyBranchSeed({ localHas, remoteHas }) {
155
90
  * @param {(b: string) => string} opts.messages.reuse
156
91
  * @param {(b: string) => string} opts.messages.fetch
157
92
  * @param {(b: string, ref: string) => string} opts.messages.create
158
- * @param {(b: string) => string} [opts.messages.createRace] Used when `swallowCreateRace`.
93
+ * @param {(b: string) => string} [opts.messages.createRace]
159
94
  * @param {(b: string, ref: string, stderr: string) => string} opts.messages.createError
160
95
  * @param {(b: string, stderr: string) => string} [opts.messages.fetchError]
161
- * When provided, a non-zero `fetch` exit throws with this message; when
162
- * omitted, the fetch exit status is not inspected.
96
+ * When absent, the fetch exit status is not inspected.
163
97
  */
164
98
  export function seedStoryBranchRef({
165
99
  storyBranch,
@@ -193,7 +127,6 @@ export function seedStoryBranchRef({
193
127
  return;
194
128
  }
195
129
 
196
- // action === 'create'
197
130
  progress('GIT', messages.create(storyBranch, baseRef));
198
131
  const r = spawn(['branch', storyBranch, baseRef]);
199
132
  if (r.status !== 0) {
@@ -207,9 +140,8 @@ export function seedStoryBranchRef({
207
140
  }
208
141
 
209
142
  /**
210
- * Check out a Story branch, creating it from `epicBranch` if neither local
211
- * nor remote exists. Non-destructive: if the branch already exists, this
212
- * plain-`checkout`s it rather than `-B`-resetting.
143
+ * Check out a Story branch, creating it from `epicBranch` when absent.
144
+ * Non-destructive: an existing branch is plain-checked-out, never `-B`-reset.
213
145
  *
214
146
  * @param {string} storyBranch
215
147
  * @param {string} epicBranch
@@ -225,7 +157,6 @@ export async function checkoutStoryBranch(
225
157
  assertBranchSafe(storyBranch, epicBranch);
226
158
  const progress = opts.progress ?? (() => {});
227
159
 
228
- // Short-circuit: already on the story branch — just sync.
229
160
  if (currentBranch(cwd) === storyBranch) {
230
161
  const remote = branchExistsRemotely(storyBranch, cwd);
231
162
  if (remote) {
@@ -261,10 +192,8 @@ export async function checkoutStoryBranch(
261
192
  }
262
193
 
263
194
  /**
264
- * Ensure an arbitrary branch exists locally, creating from `baseBranch` if
265
- * missing. Used by the dispatcher's task-dispatch path where the expected
266
- * side-effect is "branch ref exists"; the caller does not want HEAD to
267
- * move. After creation, HEAD is restored to `baseBranch`.
195
+ * Ensure a branch ref exists, creating it from `baseBranch`; HEAD is left on
196
+ * `baseBranch`.
268
197
  *
269
198
  * @param {string} branchName
270
199
  * @param {string} baseBranch