mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -2,35 +2,11 @@
2
2
  /* node:coverage ignore file */
3
3
 
4
4
  /**
5
- * single-story-init.js — Initialize a Story for v2 `/mandrel-deliver`.
6
- *
7
- * Seeds `story-<id>` from `project.baseBranch` (default `main`), materialises
8
- * the per-Story worktree when isolation is enabled, upserts a `story-init`
9
- * structured comment, and flips the Story to `agent::executing`. There is no
10
- * Epic parent, epic branch, or dispatch-manifest gate.
11
- *
12
- * What this script does:
13
- * 1. Validate the Story (type::story, not closed).
14
- * 2. Acquire the assignee lease, then refuse a Story already labelled
15
- * `agent::executing` this run does not hold (unless `--steal`).
16
- * 3. Flip the Story to `agent::executing` — BEFORE provisioning, so the
17
- * claim is label-visible to concurrent operators' probes during the
18
- * multi-minute install window (Story #4620). A provisioning failure after
19
- * this reverts the label and releases the lease.
20
- * 4. Fetch origin.
21
- * 5. Create the Story branch from `project.baseBranch` (default
22
- * `main`) — local-only, no remote push at this stage.
23
- * 6. Materialise a worktree at `.worktrees/story-<id>/` when worktree
24
- * isolation is enabled; otherwise check out the branch in-place.
25
- * 7. Upsert a `story-init` structured comment carrying
26
- * `standalone: true`.
27
- *
28
- * What this script does NOT do:
29
- * - Child-Task transitions — a Story is atomic (one branch, one
30
- * commit-set, one PR to `main`).
31
- *
32
- * Usage: `node single-story-init.js --story <STORY_ID> [--dry-run]`
33
- * Exit codes: 0 ok, 1 error.
5
+ * single-story-init.js — initialize a Story for `/mandrel-deliver`: validate,
6
+ * take the lease, flip to `agent::executing` (before provisioning, so the
7
+ * claim is visible during the install window; a later failure rolls it back),
8
+ * seed `story-<id>` from the base branch locally, and materialise the
9
+ * worktree when isolation is on.
34
10
  *
35
11
  * @see .agents/workflows/helpers/deliver-story.md
36
12
  */
@@ -70,32 +46,20 @@ import { handleRemoteVerificationFailure } from './lib/orchestration/story-init-
70
46
  import {
71
47
  STATE_LABELS,
72
48
  transitionTicketState,
73
- upsertStructuredComment,
74
49
  } from './lib/orchestration/ticketing.js';
75
50
  import { createProvider } from './lib/provider-factory.js';
76
51
  import { buildProtectionCtx } from './lib/single-story-sweep/protection-ctx.js';
77
52
  import { resolveSweepLockPath } from './lib/single-story-sweep/sweep-lock.js';
78
- // `sweepMergedStoryBranches` is imported dynamically below — its transitive
79
- // graph reaches `picomatch` (via `git-cleanup.js`). Loading it statically
80
- // would crash module resolution before `assertDepsInstalled()` can emit a
81
- // friendly "run npm install" message.
53
+ // `sweepMergedStoryBranches` is imported dynamically: its graph reaches
54
+ // `picomatch`, which would crash before `assertDepsInstalled()` can report.
82
55
  import { WorktreeManager } from './lib/worktree-manager.js';
83
56
 
84
57
  export { handleRemoteVerificationFailure } from './lib/orchestration/story-init-remote.js';
85
- // `makeGhRunner` moved to the shared `single-story-sweep/protection-ctx.js`
86
- // module (Story #4373) so the three boot callers build an identical
87
- // protection ctx. Re-exported here to preserve its existing import path.
88
58
  export { makeGhRunner } from './lib/single-story-sweep/protection-ctx.js';
89
59
 
90
60
  /**
91
- * Fail fast with a clear, actionable message when project deps are missing.
92
- * Uses only Node builtins so it stays loadable when `node_modules/` is empty.
93
- *
94
- * Why: a wiped `node_modules/` previously surfaced as
95
- * `ERR_MODULE_NOT_FOUND: Cannot find package 'picomatch'` from deep inside
96
- * the sweep graph — opaque for operators. This guard probes a representative
97
- * runtime dep (declared in `.agents/runtime-deps.json`) and tells the operator
98
- * exactly what to run.
61
+ * Fail fast with an actionable message when deps are missing, instead of an
62
+ * opaque `ERR_MODULE_NOT_FOUND` from deep in the sweep graph. Builtins only.
99
63
  */
100
64
  function assertDepsInstalled(projectRoot) {
101
65
  const probe = path.join(projectRoot, 'node_modules', 'picomatch');
@@ -112,12 +76,8 @@ function assertDepsInstalled(projectRoot) {
112
76
  const progress = Logger.createProgress('single-story-init', { stderr: true });
113
77
 
114
78
  /**
115
- * Validate that the fetched ticket is a standalone Story this script can
116
- * deliver. Throws with the canonical operator-facing message otherwise.
117
- * Exported for testing.
118
- *
119
- * @param {{ labels: string[], state: string }} story Fetched ticket.
120
- * @param {number} storyId Story number (for error messages).
79
+ * @param {{ labels: string[], state: string }} story
80
+ * @param {number} storyId
121
81
  */
122
82
  export function assertDeliverableStory(story, storyId) {
123
83
  if (!story.labels.includes(TYPE_LABELS.STORY)) {
@@ -139,26 +99,14 @@ export function assertDeliverableStory(story, storyId) {
139
99
  }
140
100
 
141
101
  /**
142
- * Defense-in-depth refusal for a Story already labelled `agent::executing`
143
- * that this run does not already hold.
144
- *
145
- * The assignee lease is the primary cross-run guard, but the label and the
146
- * assignee can drift apart: a prior run that crashed *after* the early
147
- * `agent::executing` flip but *before* (or without) taking/holding the lease
148
- * leaves the Story labelled executing with no live foreign lease to trip the
149
- * lease preflight. Left unchecked, a fresh run would seed the branch and
150
- * worktree straight over that drift. Refuse unless the caller already holds the
151
- * lease (`reason === 'already-held'`, i.e. a legitimate idempotent re-init) or
152
- * passed `--steal`.
153
- *
154
- * Runs *after* the lease acquire (so it can read the acquire's reason) but
155
- * *before* any git mutation. On refusal it releases the lease this run just
156
- * took so the ticket is left exactly as found — a clean state for the operator
157
- * to inspect before re-running with `--steal`.
102
+ * Refuse a Story labelled `agent::executing` that this run does not hold:
103
+ * label and assignee can drift (a run that crashed after the flip), so the
104
+ * lease alone misses it. Runs after the acquire, before any git mutation, and
105
+ * releases the just-taken lease on refusal so the ticket is left as found.
158
106
  *
159
107
  * @param {object} args
160
- * @param {{ labels?: string[] }} args.story Fetched Story ticket.
161
- * @param {{ reason: string, previousOwner: string|null }} args.lease Acquire result.
108
+ * @param {{ labels?: string[] }} args.story
109
+ * @param {{ reason: string, previousOwner: string|null }} args.lease
162
110
  * @param {boolean} args.stealRequested
163
111
  * @param {number} args.storyId
164
112
  * @param {object} args.provider
@@ -177,7 +125,6 @@ export async function assertNotForeignExecuting({
177
125
  story.labels.includes(STATE_LABELS.EXECUTING);
178
126
  if (!labelled || stealRequested || lease.reason === 'already-held') return;
179
127
 
180
- // Back out the lease we just took so the refusal leaves the ticket unchanged.
181
128
  try {
182
129
  await releaseStoryLease({ provider, storyId, config });
183
130
  } catch (err) {
@@ -196,18 +143,11 @@ export async function assertNotForeignExecuting({
196
143
  }
197
144
 
198
145
  /**
199
- * Publish this run's claim as the `agent::executing` label **before** the
200
- * multi-minute worktree install, so a concurrent operator's probe sees the
201
- * claim during the install window instead of reading `agent::ready` and
202
- * dispatching the Story a second time.
203
- *
204
- * Best-effort: the assignee lease is the real guard, so a failed flip logs and
205
- * proceeds rather than aborting init. Routes through `transitionTicketState`
206
- * so the Projects v2 Status column follows the label (Story #2548).
146
+ * Best-effort: the lease is the real guard, so a failed flip only logs.
207
147
  *
208
148
  * @param {object} provider
209
149
  * @param {number} storyId
210
- * @param {object} story Prefetched snapshot (round-trip elimination).
150
+ * @param {object} story Prefetched snapshot.
211
151
  * @returns {Promise<void>}
212
152
  */
213
153
  async function flipStoryToExecuting(provider, storyId, story) {
@@ -225,15 +165,8 @@ async function flipStoryToExecuting(provider, storyId, story) {
225
165
  }
226
166
 
227
167
  /**
228
- * Roll any container Epic listing this Story up from its children.
229
- *
230
- * A container carries no `agent::*` label, so the Status sync that follows
231
- * the flip above cannot reach it — its column is derived from its children
232
- * instead. This is the edge where the first child of an Epic starts moving,
233
- * which is what puts the Epic on the board as In Progress with an owner.
234
- *
235
- * Best-effort by construction: the rollup never throws, and a container left
236
- * at a stale column must never cost the Story its init.
168
+ * Roll a container Epic's status up from its children (it carries no
169
+ * `agent::*` label of its own). Never throws.
237
170
  *
238
171
  * @param {object} provider
239
172
  * @param {number} storyId
@@ -253,11 +186,8 @@ async function rollUpContainerEpic(provider, storyId, config) {
253
186
  }
254
187
 
255
188
  /**
256
- * Undo this run's claim when provisioning fails after the early
257
- * `agent::executing` flip: revert the label to `agent::ready` and release the
258
- * lease, both best-effort. Without this a crashed init would strand the Story
259
- * as phantom-executing — claimed and labelled in-flight but with no live run —
260
- * which every other operator's probe would then withhold indefinitely.
189
+ * Best-effort revert of label and lease after a provisioning failure, so the
190
+ * Story is not stranded as phantom-executing (withheld by every probe).
261
191
  *
262
192
  * @param {object} provider
263
193
  * @param {number} storyId
@@ -288,22 +218,10 @@ async function rollbackClaimOnInitFailure(provider, storyId, config) {
288
218
  }
289
219
 
290
220
  /**
291
- * Decide how to seed the Story branch given local / remote presence. Pure and
292
- * exported for testing (Story #3483 AC3: an existing `story-<id>` branch must
293
- * be **reused**, never re-created — re-creating throws `branch already exists`).
294
- *
295
- * Delegates the (local, remote) decision to the shared `classifyBranchSeed`
296
- * classifier (Story #3513) so this path and the Epic-attached
297
- * `branch-initializer.js#planStoryBranchSeed` share one decision tree. The
298
- * shared classifier returns `'local'` for the local-present case; this path
299
- * names that outcome `'reuse'`.
221
+ * An existing local ref must be reused, never re-created (`git branch` throws).
300
222
  *
301
223
  * @param {{ localHas: boolean, remoteHas: boolean }} presence
302
224
  * @returns {'reuse'|'fetch'|'create'}
303
- * - `reuse` — a local ref already exists; the caller must not run
304
- * `git branch` (which would throw on the existing ref).
305
- * - `fetch` — only the remote ref exists; materialise the local ref.
306
- * - `create` — neither exists; branch from baseBranch.
307
225
  */
308
226
  export function decideStoryBranchSeed({ localHas, remoteHas }) {
309
227
  const action = classifyBranchSeed({ localHas, remoteHas });
@@ -311,22 +229,10 @@ export function decideStoryBranchSeed({ localHas, remoteHas }) {
311
229
  }
312
230
 
313
231
  /**
314
- * Reap previously-merged `story-*` branches before starting a new one, so
315
- * stale local + origin refs do not accumulate across runs. The sweep
316
- * excludes the current run's `storyBranch` and never blocks init: any
317
- * sweep failure is logged but does not throw.
318
- *
319
- * Story #2011 hardens this surface in two ways:
320
- * - Per-candidate protection: branches with unpushed work, dirty
321
- * worktrees, or still-open Story tickets are skipped (and listed
322
- * in `sweep.protected` for the operator).
323
- * - Cross-session lock: a single lockfile under `tempRoot` prevents
324
- * two concurrent `/single-story-deliver` invocations from racing.
325
- * Story #5112 made that lockfile shared with `boot-sweep.js` — the
326
- * other entry point into the same merged-branch reap — by routing
327
- * both through `resolveSweepLockPath`.
328
- *
329
- * Exported for testing.
232
+ * Reap merged `story-*` branches (excluding the current one). Never blocks
233
+ * init. Protected candidates (unpushed work, dirty worktree, open Story) are
234
+ * skipped; the lockfile is shared with `boot-sweep.js` via
235
+ * `resolveSweepLockPath` so concurrent reaps cannot race.
330
236
  */
331
237
  export async function reapMergedStoryBranches({
332
238
  cwd,
@@ -384,13 +290,8 @@ export async function reapMergedStoryBranches({
384
290
  }
385
291
 
386
292
  /**
387
- * Fetch remote refs, reap merged story branches, and fast-forward the local
388
- * base branch so new story branches seed from origin's tip. Exported for
389
- * testing (owns the fast-forward cascade).
390
- *
391
- * Routes the `origin` fetch through `cachedGitFetch` so concurrent Story
392
- * waves share a per-process fetch-coalescing window. Pass `fetchFn` to
393
- * inject a stub in tests without touching real git.
293
+ * Fetch, reap, and fast-forward the local base branch so new Story branches
294
+ * seed from origin's tip.
394
295
  *
395
296
  * @param {object} opts
396
297
  * @param {string} opts.cwd
@@ -401,9 +302,7 @@ export async function reapMergedStoryBranches({
401
302
  * @param {Function|undefined} opts.injectedSweep
402
303
  * @param {Function} opts.progress
403
304
  * @param {import('./lib/git/cached-fetch.js').FetchCache} [opts.fetchCache]
404
- * Override the module-level cache — used by tests that need a fresh, isolated
405
- * cache. Production callers omit this so all Stories in a wave share the
406
- * module singleton.
305
+ * Test override; production shares the module singleton.
407
306
  */
408
307
  export async function materializeBaseBranch({
409
308
  cwd,
@@ -436,8 +335,6 @@ export async function materializeBaseBranch({
436
335
  injectedSweep,
437
336
  });
438
337
 
439
- // Ensure baseBranch exists locally so we can branch from it. If only
440
- // remote-tracking is present, materialize the local ref.
441
338
  if (!branchExistsLocally(baseBranch, cwd)) {
442
339
  const r = gitSpawn(cwd, 'fetch', 'origin', `${baseBranch}:${baseBranch}`);
443
340
  if (r.status !== 0) {
@@ -448,11 +345,7 @@ export async function materializeBaseBranch({
448
345
  return;
449
346
  }
450
347
 
451
- // `git fetch origin` updates remote-tracking refs only; local `main` stays
452
- // at the pre-merge tip until fast-forwarded. Use the same helper as
453
- // `/git-cleanup --fast-forward-main` (checkout base + `merge --ff-only`) so
454
- // new `story-*` branches seed from origin's tip when the main checkout is
455
- // clean (Story #2744).
348
+ // `git fetch` leaves local base at the old tip until fast-forwarded.
456
349
  const ffPlan = planFastForward({ cwd, baseBranch });
457
350
  const ff = executeFastForward({
458
351
  cwd,
@@ -482,15 +375,8 @@ export async function materializeBaseBranch({
482
375
  }
483
376
 
484
377
  /**
485
- * Seed the Story branch from the base branch. Three cases, idempotent in all:
486
- * - already local → reuse (do NOT re-create an existing ref)
487
- * - remote only → fetch
488
- * - neither → create from baseBranch
489
- *
490
- * `cachedGitFetch(cwd, 'origin')` is assumed to have run before this call
491
- * (via `materializeBaseBranch`), so remote-tracking refs are authoritative.
492
- * Uses a local tracking-ref check rather than a network `ls-remote` round-trip.
493
- * Exported for testing (owns the seedAction switch + throws).
378
+ * Idempotent seed. Assumes `materializeBaseBranch` already fetched, so
379
+ * tracking refs are authoritative (no `ls-remote`).
494
380
  *
495
381
  * @param {object} opts
496
382
  * @param {string} opts.cwd
@@ -499,11 +385,7 @@ export async function materializeBaseBranch({
499
385
  * @param {Function} opts.progress
500
386
  */
501
387
  export function seedStoryBranch({ cwd, storyBranch, baseBranch, progress }) {
502
- // Standalone path: no concurrent creator to race, so create failures are
503
- // fatal (`swallowCreateRace: false`) and a failed fetch throws. The
504
- // seed-action switch shell is single-homed in `seedStoryBranchRef`
505
- // (Story #4255); this caller only supplies its `baseRef`, its git seams
506
- // bound to `cwd`, and its own log/error vocabulary.
388
+ // No concurrent creator to race here, so create failures are fatal.
507
389
  seedStoryBranchRef({
508
390
  storyBranch,
509
391
  baseRef: baseBranch,
@@ -524,9 +406,7 @@ export function seedStoryBranch({ cwd, storyBranch, baseBranch, progress }) {
524
406
  }
525
407
 
526
408
  /**
527
- * Provision a worktree (or check out the branch in single-tree mode).
528
- * Returns the resolved `workCwd`, `worktreeCreated`, and `installStatus`.
529
- * Exported for testing (owns the worktree/single-tree routing).
409
+ * Provision a worktree, or check out the branch in single-tree mode.
530
410
  *
531
411
  * @param {object} opts
532
412
  * @param {object} opts.runtime
@@ -568,16 +448,12 @@ export async function provisionWorktree({
568
448
  `${ensured.created ? '✨ Created' : '♻️ Reusing'} worktree: ${ensured.path}`,
569
449
  );
570
450
  } else {
571
- // Single-tree mode: check out the branch on the main checkout.
572
451
  gitSync(cwd, 'checkout', storyBranch);
573
452
  }
574
453
 
575
454
  return { workCwd, worktreeCreated, installStatus };
576
455
  }
577
456
 
578
- /**
579
- * Initialize a standalone Story. Exported for testing.
580
- */
581
457
  export async function runSingleStoryInit({
582
458
  storyId: storyIdParam,
583
459
  dryRun: dryRunParam,
@@ -585,15 +461,9 @@ export async function runSingleStoryInit({
585
461
  injectedProvider,
586
462
  injectedConfig,
587
463
  injectedSweep,
588
- // Story #3483: lets tests drive the lease preflight deterministically.
589
- // `injectedAcquireLease` swaps the guard. `steal` forcibly transfers a
590
- // foreign claim — the lease fails closed (audit #3513), so a foreign
591
- // assignee blocks unless stolen.
592
464
  injectedAcquireLease,
593
465
  steal = false,
594
466
  injectedVerifyRemote,
595
- // Story #4620: swap the git-touching provisioning steps so the
596
- // early-flip-then-rollback ordering is unit-testable without a real worktree.
597
467
  injectedMaterialize = materializeBaseBranch,
598
468
  injectedSeedBranch = seedStoryBranch,
599
469
  injectedProvisionWorktree = provisionWorktree,
@@ -608,10 +478,8 @@ export async function runSingleStoryInit({
608
478
  : parseSprintArgs();
609
479
  const { storyId, dryRun } = parsed;
610
480
  const cwd = path.resolve(cwdParam ?? parsed.cwd ?? PROJECT_ROOT);
611
- // `--steal` is not part of the shared parseSprintArgs surface; read it from
612
- // argv on the CLI path (the explicit `steal` param wins for programmatic /
613
- // test callers). The standalone lease fails closed on a foreign assignee
614
- // (audit #3513), so `--steal` is the operator's forcible-transfer override.
481
+ // `--steal` is outside parseSprintArgs; the lease fails closed on a foreign
482
+ // assignee, so this is the operator's forcible-transfer override.
615
483
  const stealRequested =
616
484
  steal || (storyIdParam === undefined && process.argv.includes('--steal'));
617
485
 
@@ -636,12 +504,9 @@ export async function runSingleStoryInit({
636
504
  );
637
505
  progress('INIT', `Initializing standalone Story #${storyId}...`);
638
506
 
639
- // Issue #4483 — deterministic remote evidence at the v2 `/mandrel-deliver` entry
640
- // seam (`single-story-init.js`). The
641
- // probe is read-only, so it runs under --dry-run too. The CLI records
642
- // the fact; the workflow owns the `agent::blocked` transition on
643
- // `remoteVerified: false` — inline delivery to local `main` is never a
644
- // sanctioned fallback.
507
+ // Read-only, so it runs under --dry-run too. The workflow owns the
508
+ // `agent::blocked` transition on `remoteVerified: false`; inline delivery to
509
+ // local `main` is never a fallback.
645
510
  const remote = (injectedVerifyRemote ?? verifyRemote)({ cwd });
646
511
  progress(
647
512
  'REMOTE',
@@ -664,12 +529,7 @@ export async function runSingleStoryInit({
664
529
  `Standalone Story: "${story.title}" → branch ${storyBranch} from ${baseBranch}.`,
665
530
  );
666
531
 
667
- // Story #3483 — lease preflight. Take an exclusive claim on the Story
668
- // ticket before any git mutation so two concurrent standalone runs cannot
669
- // both drive the same Story. The guard fails closed (audit #3513): a
670
- // foreign assignee aborts init (naming the current owner) unless --steal
671
- // forcibly transfers it. Unclaimed / self-held claims proceed. Skipped
672
- // under --dry-run (no assignee mutation).
532
+ // Lease before any git mutation so two runs cannot drive one Story.
673
533
  let workCwd = cwd;
674
534
  let worktreeCreated = false;
675
535
  let installStatus = { status: 'skipped', reason: 'dry-run' };
@@ -687,9 +547,6 @@ export async function runSingleStoryInit({
687
547
  `🔒 Story #${storyId} lease ${lease.reason} (owner=@${lease.owner}).`,
688
548
  );
689
549
 
690
- // Defense in depth: refuse a Story already labelled agent::executing that
691
- // this run does not hold (label/assignee drift the lease alone misses).
692
- // Runs before any git mutation; releases the just-taken lease on refusal.
693
550
  await assertNotForeignExecuting({
694
551
  story,
695
552
  lease,
@@ -699,20 +556,12 @@ export async function runSingleStoryInit({
699
556
  config,
700
557
  });
701
558
 
702
- // Publish the claim as agent::executing BEFORE the multi-minute worktree
703
- // install (not after), so a concurrent operator's probe sees it during the
704
- // install window instead of reading agent::ready and double-dispatching.
559
+ // Before the install, so a concurrent probe cannot double-dispatch.
705
560
  await flipStoryToExecuting(provider, storyId, story);
706
561
 
707
- // Story #5205 — the child is now in flight, so any container Epic listing
708
- // it is too. Fired here rather than after provisioning so the board shows
709
- // In Progress for the whole install window, and after the flip so the
710
- // rollup reads the state it derives from.
562
+ // After the flip (the rollup reads it), before the install window.
711
563
  await rollUpContainerEpic(provider, storyId, config);
712
564
 
713
- // Any failure from here on leaves a claimed, executing-labelled Story with
714
- // no live run behind it — revert the label and release the lease so the
715
- // Story is not stranded as phantom-executing.
716
565
  try {
717
566
  await injectedMaterialize({
718
567
  cwd,
@@ -752,10 +601,7 @@ export async function runSingleStoryInit({
752
601
  standalone: true,
753
602
  storyBranch,
754
603
  baseBranch,
755
- // The write half of the run-scoped config pin. `baseBranch` above is the
756
- // legacy field close still reads as a fallback; this block is the
757
- // registry-driven form a second run-scoped key joins without a second
758
- // mechanism (`lib/orchestration/run-scoped-config.js`).
604
+ // Write half of the run-scoped config pin; `baseBranch` is close's fallback.
759
605
  runScopedConfig: pinRunScopedConfig(config),
760
606
  storyTitle: story.title,
761
607
  worktreeEnabled: runtime.worktreeEnabled,
@@ -765,36 +611,12 @@ export async function runSingleStoryInit({
765
611
  dependenciesInstalled,
766
612
  installFailed: installStatus.status === 'failed',
767
613
  dryRun,
768
- // Issue #4483 — verified remote evidence for the orchestrating agent.
769
614
  remoteVerified: remote.remoteVerified,
770
615
  remoteProbe: { remoteUrl: remote.remoteUrl, detail: remote.detail },
771
616
  };
772
617
 
773
- // Upsert the `story-init` structured comment (no-op under --dry-run). The
774
- // `agent::executing` flip already happened above, before provisioning, so the
775
- // claim is label-visible during the install window (see `flipStoryToExecuting`).
776
- if (!dryRun) {
777
- try {
778
- await upsertStructuredComment(
779
- provider,
780
- storyId,
781
- 'story-init',
782
- renderSingleStoryInitComment(result),
783
- );
784
- progress(
785
- 'COMMENT',
786
- `📝 Upserted story-init structured comment on #${storyId}.`,
787
- );
788
- } catch (err) {
789
- Logger.error(
790
- `[single-story-init] ⚠️ Failed to upsert story-init structured comment: ${err?.message ?? err}`,
791
- );
792
- }
793
- }
794
-
795
- // Story #4685 — route the full result to a temp log and emit a single-line
796
- // summary carrying the fields the orchestrating agent acts on (workCwd,
797
- // remoteVerified). The `## Spec` names this the hot-path stdout to quiet.
618
+ // The envelope (stdout + disk) is the only record; no ticket comment. Full
619
+ // result goes to a temp log, stdout gets the fields the caller acts on.
798
620
  emitTerseResult({
799
621
  label: 'STORY INIT RESULT',
800
622
  result,
@@ -820,40 +642,6 @@ export async function runSingleStoryInit({
820
642
  return { success: true, result };
821
643
  }
822
644
 
823
- export function renderSingleStoryInitComment(result) {
824
- const payload = {
825
- storyId: result.storyId,
826
- epicId: null,
827
- standalone: true,
828
- storyBranch: result.storyBranch,
829
- baseBranch: result.baseBranch,
830
- runScopedConfig: result.runScopedConfig,
831
- worktreeEnabled: result.worktreeEnabled,
832
- workCwd: result.workCwd,
833
- worktreeCreated: result.worktreeCreated,
834
- dependenciesInstalled: result.dependenciesInstalled,
835
- installStatus: result.installStatus,
836
- remoteVerified: result.remoteVerified,
837
- remoteProbe: result.remoteProbe,
838
- };
839
- return [
840
- '## Story init (standalone)',
841
- '',
842
- `- **standalone:** \`true\``,
843
- `- **storyBranch:** \`${result.storyBranch}\``,
844
- `- **baseBranch:** \`${result.baseBranch}\``,
845
- `- **workCwd:** \`${result.workCwd}\``,
846
- `- **worktreeEnabled:** \`${result.worktreeEnabled}\``,
847
- `- **remoteVerified:** \`${result.remoteVerified}\``,
848
- `- **dependenciesInstalled:** \`${result.dependenciesInstalled}\``,
849
- '',
850
- '```json',
851
- JSON.stringify(payload, null, 2),
852
- '```',
853
- '',
854
- ].join('\n');
855
- }
856
-
857
645
  runAsCli(import.meta.url, runSingleStoryInit, {
858
646
  source: 'single-story-init',
859
647
  usage: {