mandrel 1.93.0 → 2.0.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 (463) hide show
  1. package/.agents/README.md +59 -73
  2. package/.agents/agents/acceptance-critic.md +129 -0
  3. package/.agents/agents/story-worker.md +161 -0
  4. package/.agents/docs/SDLC.md +489 -1285
  5. package/.agents/docs/agentrc-reference.json +177 -67
  6. package/.agents/docs/configuration.md +108 -136
  7. package/.agents/docs/execution-reference.md +44 -22
  8. package/.agents/docs/quality-gates.md +13 -19
  9. package/.agents/docs/workflows.md +3 -3
  10. package/.agents/instructions.md +107 -108
  11. package/.agents/rules/ci-remediation.md +8 -12
  12. package/.agents/rules/git-conventions-reference.md +224 -0
  13. package/.agents/rules/git-conventions.md +42 -223
  14. package/.agents/rules/security-baseline.md +5 -0
  15. package/.agents/rules/testing-standards.md +106 -13
  16. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  17. package/.agents/schemas/agentrc.schema.json +71 -201
  18. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  19. package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
  20. package/.agents/schemas/risk-verdict.schema.json +0 -13
  21. package/.agents/scripts/acceptance-eval.js +62 -18
  22. package/.agents/scripts/agents-bootstrap-github.js +1 -1
  23. package/.agents/scripts/analyze-execution.js +1 -1
  24. package/.agents/scripts/audit-to-stories.js +7 -7
  25. package/.agents/scripts/boot-sweep.js +1 -1
  26. package/.agents/scripts/check-context-budget.js +62 -5
  27. package/.agents/scripts/check-lifecycle-lint.js +6 -9
  28. package/.agents/scripts/check-prepush-recovery.js +1 -1
  29. package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
  30. package/.agents/scripts/diagnose-friction.js +0 -6
  31. package/.agents/scripts/lib/Logger.js +6 -10
  32. package/.agents/scripts/lib/audit-suite/runner.js +2 -2
  33. package/.agents/scripts/lib/audit-suite/selector.js +5 -5
  34. package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
  35. package/.agents/scripts/lib/baselines/kernel.js +206 -18
  36. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
  37. package/.agents/scripts/lib/baselines/reader.js +1 -6
  38. package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
  39. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
  40. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +56 -18
  41. package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
  42. package/.agents/scripts/lib/checks/index.js +2 -1
  43. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
  44. package/.agents/scripts/lib/cli/standard-args.js +13 -22
  45. package/.agents/scripts/lib/cli-args.js +16 -7
  46. package/.agents/scripts/lib/close-validation/gates.js +160 -22
  47. package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
  48. package/.agents/scripts/lib/config/ci.js +6 -31
  49. package/.agents/scripts/lib/config/delivery-routing.js +103 -0
  50. package/.agents/scripts/lib/config/explain.js +57 -36
  51. package/.agents/scripts/lib/config/limits.js +17 -58
  52. package/.agents/scripts/lib/config/paths.js +0 -2
  53. package/.agents/scripts/lib/config/quality.js +1 -1
  54. package/.agents/scripts/lib/config/runners.js +17 -50
  55. package/.agents/scripts/lib/config/temp-paths.js +19 -14
  56. package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
  57. package/.agents/scripts/lib/config-resolver.js +3 -8
  58. package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
  59. package/.agents/scripts/lib/config-settings-schema-quality.js +17 -14
  60. package/.agents/scripts/lib/config-settings-schema.js +52 -38
  61. package/.agents/scripts/lib/dependency-parser.js +3 -2
  62. package/.agents/scripts/lib/doc-tiers.js +39 -4
  63. package/.agents/scripts/lib/duplicate-search.js +211 -41
  64. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  65. package/.agents/scripts/lib/findings/promote-finding.js +5 -5
  66. package/.agents/scripts/lib/framework-version.js +2 -3
  67. package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
  68. package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
  69. package/.agents/scripts/lib/git-utils.js +32 -6
  70. package/.agents/scripts/lib/github/framework-repo.js +6 -0
  71. package/.agents/scripts/lib/label-constants.js +10 -23
  72. package/.agents/scripts/lib/label-taxonomy.js +9 -43
  73. package/.agents/scripts/lib/observability/active-story-env.js +112 -3
  74. package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
  75. package/.agents/scripts/lib/observability/source-classifier.js +3 -3
  76. package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
  77. package/.agents/scripts/lib/onboard/init-tail.js +1 -3
  78. package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
  79. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
  80. package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
  81. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
  82. package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
  83. package/.agents/scripts/lib/orchestration/code-review.js +20 -268
  84. package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
  85. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
  86. package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
  87. package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
  88. package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
  89. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
  90. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
  91. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
  92. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
  93. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
  94. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
  95. package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
  96. package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
  97. package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
  98. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +3 -2
  99. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
  100. package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
  101. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
  102. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
  103. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
  104. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
  105. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
  106. package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
  107. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
  108. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +14 -14
  109. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
  110. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
  111. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
  112. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
  113. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
  114. package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
  115. package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
  116. package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
  117. package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
  118. package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
  119. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
  120. package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
  121. package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
  122. package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
  123. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
  124. package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
  125. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
  126. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +1 -0
  127. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
  128. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
  129. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
  130. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
  131. package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
  132. package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
  133. package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
  134. package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
  135. package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
  136. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
  137. package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
  138. package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
  139. package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
  140. package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
  141. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
  142. package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
  143. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
  144. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
  145. package/.agents/scripts/lib/orchestration/ticket-validator.js +3 -8
  146. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
  147. package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
  148. package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
  149. package/.agents/scripts/lib/planning-corpus.js +16 -11
  150. package/.agents/scripts/lib/preflight-runner.js +2 -2
  151. package/.agents/scripts/lib/provider-factory.js +1 -1
  152. package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
  153. package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
  154. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
  155. package/.agents/scripts/lib/story-adjacency.js +11 -14
  156. package/.agents/scripts/lib/story-body/story-body.js +124 -70
  157. package/.agents/scripts/lib/story-plan.js +2 -4
  158. package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
  159. package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
  160. package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
  161. package/.agents/scripts/lib/validation-evidence.js +1 -1
  162. package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
  163. package/.agents/scripts/lib/workspace-provisioner.js +1 -1
  164. package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
  165. package/.agents/scripts/lint-issue-body.js +71 -40
  166. package/.agents/scripts/mandrel-update-preflight.js +1 -1
  167. package/.agents/scripts/notify.js +4 -3
  168. package/.agents/scripts/plan-context.js +64 -74
  169. package/.agents/scripts/plan-persist.js +121 -280
  170. package/.agents/scripts/plan-run-epilogue.js +97 -0
  171. package/.agents/scripts/post-structured-comment.js +38 -0
  172. package/.agents/scripts/providers/github/issues.js +17 -33
  173. package/.agents/scripts/providers/github/mappers.js +0 -12
  174. package/.agents/scripts/providers/github/tickets.js +2 -5
  175. package/.agents/scripts/resolve-plan-run.js +117 -0
  176. package/.agents/scripts/signals-view.js +24 -19
  177. package/.agents/scripts/single-story-close.js +11 -14
  178. package/.agents/scripts/single-story-confirm-merge.js +39 -23
  179. package/.agents/scripts/single-story-init.js +29 -20
  180. package/.agents/scripts/stories-wave-tick.js +6 -6
  181. package/.agents/scripts/story-plan.js +26 -47
  182. package/.agents/scripts/sync-claude-agents.js +165 -0
  183. package/.agents/scripts/update-ticket-state.js +37 -15
  184. package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
  185. package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
  186. package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
  187. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
  188. package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
  189. package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
  190. package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
  191. package/.agents/skills/core/scope-triage/SKILL.md +28 -172
  192. package/.agents/skills/skills.index.json +8 -418
  193. package/.agents/starter-agentrc.json +0 -5
  194. package/.agents/templates/agent-protocol.md +9 -10
  195. package/.agents/workflows/audit-architecture.md +3 -3
  196. package/.agents/workflows/audit-clean-code.md +3 -3
  197. package/.agents/workflows/audit-dependencies.md +3 -3
  198. package/.agents/workflows/audit-devops.md +3 -3
  199. package/.agents/workflows/audit-documentation.md +5 -5
  200. package/.agents/workflows/audit-lighthouse.md +3 -3
  201. package/.agents/workflows/audit-navigability.md +3 -2
  202. package/.agents/workflows/audit-performance.md +3 -3
  203. package/.agents/workflows/audit-privacy.md +3 -3
  204. package/.agents/workflows/audit-quality.md +3 -3
  205. package/.agents/workflows/audit-security.md +3 -3
  206. package/.agents/workflows/audit-seo.md +3 -3
  207. package/.agents/workflows/audit-sre.md +3 -3
  208. package/.agents/workflows/audit-to-stories.md +20 -20
  209. package/.agents/workflows/audit-ux-ui.md +3 -3
  210. package/.agents/workflows/deliver.md +122 -131
  211. package/.agents/workflows/git-cleanup.md +3 -4
  212. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  213. package/.agents/workflows/helpers/acceptance-self-eval.md +52 -40
  214. package/.agents/workflows/helpers/code-review.md +70 -193
  215. package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
  216. package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
  217. package/.agents/workflows/helpers/diagnose.md +10 -10
  218. package/.agents/workflows/helpers/mandrel-sync-config.md +1 -1
  219. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  220. package/.agents/workflows/helpers/signals.md +16 -16
  221. package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
  222. package/.agents/workflows/mandrel-update.md +3 -2
  223. package/.agents/workflows/plan.md +112 -145
  224. package/.agents/workflows/qa-assist.md +24 -30
  225. package/.agents/workflows/qa-explore.md +29 -38
  226. package/.agents/workflows/qa-run.md +2 -2
  227. package/README.md +9 -8
  228. package/docs/CHANGELOG.md +46 -0
  229. package/lib/cli/registry.js +95 -0
  230. package/lib/migrations/index.js +6 -5
  231. package/package.json +5 -3
  232. package/.agents/personas/architect.md +0 -113
  233. package/.agents/personas/devops-engineer.md +0 -38
  234. package/.agents/personas/engineer-mobile.md +0 -120
  235. package/.agents/personas/engineer-web.md +0 -111
  236. package/.agents/personas/engineer.md +0 -119
  237. package/.agents/personas/product.md +0 -94
  238. package/.agents/personas/project-manager.md +0 -114
  239. package/.agents/personas/qa-engineer.md +0 -95
  240. package/.agents/personas/refactorer.md +0 -113
  241. package/.agents/personas/security-engineer.md +0 -112
  242. package/.agents/personas/sre.md +0 -86
  243. package/.agents/personas/technical-writer.md +0 -101
  244. package/.agents/personas/ux-designer.md +0 -95
  245. package/.agents/schemas/dispatch-manifest.json +0 -232
  246. package/.agents/schemas/epic-spec.schema.json +0 -153
  247. package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
  248. package/.agents/scripts/dispatcher.js +0 -295
  249. package/.agents/scripts/epic-audit-prepare.js +0 -497
  250. package/.agents/scripts/epic-audit-recheck.js +0 -274
  251. package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
  252. package/.agents/scripts/epic-deliver-preflight.js +0 -462
  253. package/.agents/scripts/epic-deliver-prepare.js +0 -590
  254. package/.agents/scripts/epic-execute-record-wave.js +0 -449
  255. package/.agents/scripts/epic-plan-clarity.js +0 -211
  256. package/.agents/scripts/epic-plan-decompose.js +0 -54
  257. package/.agents/scripts/epic-plan-healthcheck.js +0 -581
  258. package/.agents/scripts/epic-plan-spec.js +0 -64
  259. package/.agents/scripts/epic-reconcile.js +0 -625
  260. package/.agents/scripts/lib/baseline-snapshot.js +0 -979
  261. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
  262. package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
  263. package/.agents/scripts/lib/config/lifecycle.js +0 -40
  264. package/.agents/scripts/lib/config/preflight.js +0 -58
  265. package/.agents/scripts/lib/config/retro.js +0 -77
  266. package/.agents/scripts/lib/epic-merge-lock.js +0 -322
  267. package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
  268. package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
  269. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -660
  270. package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
  271. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
  272. package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
  273. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
  274. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
  275. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
  276. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
  277. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
  278. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
  279. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
  280. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
  281. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
  282. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
  283. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
  284. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
  285. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
  286. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
  287. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
  288. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -388
  289. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
  290. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
  291. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
  292. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
  293. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
  294. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
  295. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
  296. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
  297. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
  298. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
  299. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
  300. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
  301. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
  302. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
  303. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
  304. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
  305. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
  306. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
  307. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
  308. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
  309. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
  310. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
  311. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
  313. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
  314. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
  315. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
  316. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
  317. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -278
  318. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
  319. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
  320. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
  321. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
  322. package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
  323. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
  324. package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
  325. package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
  326. package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
  327. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
  328. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
  329. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
  330. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
  331. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
  332. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
  333. package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
  334. package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
  335. package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +0 -109
  336. package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
  337. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
  338. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
  339. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
  340. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
  341. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
  342. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
  343. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
  344. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
  345. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
  346. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
  347. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
  348. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
  349. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
  350. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
  351. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
  352. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
  353. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
  354. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
  355. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
  356. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
  357. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
  358. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
  359. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
  360. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
  361. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -301
  362. package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
  363. package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
  364. package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
  365. package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
  366. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
  367. package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
  368. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
  369. package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
  370. package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
  371. package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
  372. package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
  373. package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
  374. package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
  375. package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
  376. package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
  377. package/.agents/scripts/lib/push-epic-retry.js +0 -209
  378. package/.agents/scripts/lib/spec/index.js +0 -36
  379. package/.agents/scripts/lib/spec/loader.js +0 -425
  380. package/.agents/scripts/lib/spec/state.js +0 -208
  381. package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
  382. package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
  383. package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
  384. package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
  385. package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
  386. package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
  387. package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
  388. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
  389. package/.agents/scripts/lib/wave-runner/tick.js +0 -754
  390. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
  391. package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
  392. package/.agents/scripts/lifecycle-emit.js +0 -510
  393. package/.agents/scripts/plan-critics.js +0 -199
  394. package/.agents/scripts/retro-run.js +0 -218
  395. package/.agents/scripts/standalone-feedback-rollup.js +0 -188
  396. package/.agents/scripts/story-close.js +0 -294
  397. package/.agents/scripts/story-init.js +0 -599
  398. package/.agents/scripts/story-phase.js +0 -369
  399. package/.agents/scripts/wave-tick.js +0 -335
  400. package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
  401. package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
  402. package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
  403. package/.agents/skills/core/code-simplification/SKILL.md +0 -389
  404. package/.agents/skills/core/context-engineering/SKILL.md +0 -309
  405. package/.agents/skills/core/context-engineering/examples.md +0 -58
  406. package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
  407. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
  408. package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
  409. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
  410. package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
  411. package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
  412. package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
  413. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -413
  414. package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
  415. package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
  416. package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
  417. package/.agents/skills/core/idea-refinement/examples.md +0 -437
  418. package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
  419. package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
  420. package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
  421. package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
  422. package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
  423. package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
  424. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
  425. package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
  426. package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
  427. package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
  428. package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
  429. package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
  430. package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
  431. package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
  432. package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
  433. package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
  434. package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
  435. package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
  436. package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
  437. package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
  438. package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
  439. package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
  440. package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
  441. package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
  442. package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
  443. package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
  444. package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
  445. package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
  446. package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
  447. package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
  448. package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
  449. package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
  450. package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
  451. package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
  452. package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
  453. package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
  454. package/.agents/workflows/helpers/deliver-epic.md +0 -955
  455. package/.agents/workflows/helpers/deliver-stories.md +0 -440
  456. package/.agents/workflows/helpers/epic-audit.md +0 -189
  457. package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
  458. package/.agents/workflows/helpers/epic-testing.md +0 -125
  459. package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
  460. package/.agents/workflows/helpers/plan-epic.md +0 -351
  461. package/.agents/workflows/helpers/plan-story.md +0 -251
  462. package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
  463. /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
@@ -11,14 +11,9 @@ import {
11
11
  } from './ticket-validator-conflicts.js';
12
12
  import {
13
13
  computeSizingFindings,
14
- DEFAULT_TASK_SIZING,
15
14
  renderHardFindingError,
16
15
  } from './ticket-validator-sizing.js';
17
16
 
18
- // Re-exported for callers that want the constants without reaching into the
19
- // sizing helper module directly.
20
- export { DEFAULT_TASK_SIZING };
21
-
22
17
  /**
23
18
  * Regex matching code-asset paths the freshness gate cares about. The three
24
19
  * roots — `.agents/scripts`, `lib`, and `tests` — cover the executable surface
@@ -272,7 +267,7 @@ export function validateAcFreshness({
272
267
  * Epic #2501 introduced this guard after the legacy `baseline-refresh`
273
268
  * leading-token prescription created a wave of commit-msg hook failures
274
269
  * across story-deliver sub-agents. See
275
- * `.agents/skills/core/baseline-refresh/SKILL.md` for the canonical refresh
270
+ * `.agents/skills/core/gates-and-baselines/SKILL.md` for the canonical refresh
276
271
  * shape (Conventional-Commits subject + `baseline-refresh: true` body
277
272
  * trailer).
278
273
  */
@@ -399,7 +394,7 @@ function renderMissLine({ slug, path }) {
399
394
  * @param {string} [opts.baseBranchRef] - When set, runs `validateAcFreshness` against this ref.
400
395
  * @param {Function} [opts.gitRunner] - Optional git probe override.
401
396
  * @param {string} [opts.cwd] - Repo cwd (forwarded to the freshness gate).
402
- * @param {object} [opts.taskSizing] - Override the three-layer sizing thresholds. Defaults to `DEFAULT_TASK_SIZING`.
397
+ * @param {object} [opts.modelCapacity] - Programmatic override of `DEFAULT_MODEL_CAPACITY` (tests only not read from `.agentrc.json`).
403
398
  * @param {object} [opts.conflictPolicy] - Severity controls for cross-Story conflict findings.
404
399
  * @param {boolean} [opts.conflictPolicy.failOnSharedEditors=false] - Upgrade `shared-editor` findings to `hard`.
405
400
  * @param {boolean} [opts.conflictPolicy.requireExplicitCrossStoryDeps=false] - Upgrade `implicit-cross-story-dep` findings to `hard`.
@@ -614,7 +609,7 @@ export function validateAndNormalizeTickets(tickets, opts = {}) {
614
609
 
615
610
  const sizingFindings = computeSizingFindings({
616
611
  stories,
617
- sizing: opts.taskSizing,
612
+ capacity: opts.modelCapacity,
618
613
  });
619
614
  // Cross-Story path-conflict pass observes the story-level depends_on
620
615
  // graph. Findings are appended to the same `findings` array consumed by
@@ -20,7 +20,6 @@
20
20
  */
21
21
 
22
22
  import { Logger } from '../../Logger.js';
23
- import { TYPE_LABELS } from '../../label-constants.js';
24
23
  import { ALL_STATES, STATE_LABELS } from './reads.js';
25
24
  import {
26
25
  postStructuredComment,
@@ -290,30 +289,6 @@ async function processCascadeParentLocked(
290
289
  );
291
290
  if (!allDone) return { cascadedTo, failed };
292
291
 
293
- // EXCLUSION: Epics do not auto-close via cascade. Epics close via
294
- // formal /deliver (its own machinery handles branch merges,
295
- // PR-driven `Closes #N` auto-close, and a recovery transition in
296
- // `epic-deliver-finalize.js`).
297
- //
298
- // Legacy planning tickets (pre-#4324 `context::*` artifacts on
299
- // historical Epics) DO close via cascade (Story #1951): leaving
300
- // them open as native sub-issues of the Epic blocks GitHub from
301
- // honoring the Epic's `Closes #N` footer. New Epics carry their
302
- // planning content on the Epic body itself, so this branch is
303
- // purely a legacy-hygiene path.
304
- //
305
- // Reuse the parentSnapshot from the idempotency check above — it is
306
- // a fresh read (cache was invalidated before the getTicket call) and
307
- // the parent's type label is invariant within a single cascade lock
308
- // hold, so a second getTicket is wasteful and redundant.
309
- const isEpic = parentSnapshot.labels.includes(TYPE_LABELS.EPIC);
310
- if (isEpic) {
311
- logger.warn(
312
- `[Ticketing] Cascade reached Epic #${parentId}. Skipping auto-close (Epics close via the operator's PR merge).`,
313
- );
314
- return { cascadedTo, failed };
315
- }
316
-
317
292
  // Retry the parent transition on transient `gh` failures (rate limit,
318
293
  // 5xx, transport timeouts). Permanent failures fall through to the
319
294
  // outer catch on the first attempt so the operator sees the real
@@ -12,7 +12,8 @@
12
12
  */
13
13
 
14
14
  import { AGENT_LABELS } from '../../label-constants.js';
15
- import { WAVE_MARKER_RE } from '../wave-marker.js';
15
+
16
+ const WAVE_MARKER_RE = /^wave-([0-9]{1,3})-(start|end)$/;
16
17
 
17
18
  /**
18
19
  * Canonical agent-state label triad used by every state mutator. Kept on
@@ -23,7 +24,7 @@ export const STATE_LABELS = {
23
24
  READY: AGENT_LABELS.READY,
24
25
  EXECUTING: AGENT_LABELS.EXECUTING,
25
26
  // Story #2144 — intermediate state held by a Story between successful
26
- // close-preflight and a confirmed merge into `epic/<id>`. Included in
27
+ // close-preflight and a confirmed Story PR merge into `main`. Included in
27
28
  // the state enum so `transitionTicketState` can apply the label via
28
29
  // the canonical one-state-at-a-time path (which removes every other
29
30
  // `agent::*` label in the same call) and so the read-side `ALL_STATES`
@@ -72,13 +73,17 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
72
73
  'verification-results',
73
74
  'retro',
74
75
  'retro-partial',
76
+ // v2 Story closeout — actionable follow-ups from friction signals
77
+ 'follow-ups',
78
+ // v2 plan-run epilogue artifacts (posted on the primary Story)
79
+ 'plan-run-audit-roster',
80
+ 'plan-run-sibling-coherence',
75
81
  'epic-run-state',
76
82
  'epic-run-progress',
77
83
  'epic-plan-state',
78
84
  'parked-follow-ons',
79
- 'dispatch-manifest',
80
- // Story #566 per-phase wall-clock summary posted by story-close
81
- // and consumed by the epic-runner progress reporter to surface median /
85
+ // Story #566 — per-phase wall-clock summary posted by single-story-close.js
86
+ // and consumed by analyze-execution / perf tooling to surface median /
82
87
  // p95 phase timings across completed stories.
83
88
  'phase-timings',
84
89
  // Story #831 — story-init upserts a `story-init` comment that
@@ -88,7 +93,7 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
88
93
  'story-init',
89
94
  // Story #908 — /deliver upserts a `story-run-progress` snapshot
90
95
  // on each Story per Task transition. The /deliver aggregator and
91
- // the epic-runner progress reporter both read this comment to derive
96
+ // `analyze-execution.js` both read this comment to derive
92
97
  // Story-level state without re-fetching ticket labels.
93
98
  'story-run-progress',
94
99
  // Story #1123 — analyze-execution.js upserts perf summaries at close
@@ -98,9 +103,8 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
98
103
  // surface (Epic #1030).
99
104
  'story-perf-summary',
100
105
  'epic-perf-report',
101
- // Story #2128 — Phase 6 Epic Clarity Gate. `epic-plan-clarity.js` upserts
102
- // a `clarity-gate-update` comment on the Epic when the operator approves
103
- // a sharpened body rewrite, recording the persistence event for audit.
106
+ // Story #2128 — Phase 6 Epic Clarity Gate (CLI retired). Historical
107
+ // `clarity-gate-update` comments may still exist on older tickets.
104
108
  'clarity-gate-update',
105
109
  // Story #2635 — Tech Spec freshness check. `plan-persist.js`
106
110
  // upserts a `spec-freshness` comment on the Epic listing any
@@ -126,24 +130,24 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
126
130
  // ticket. Re-invocations upsert the same marker rather than appending
127
131
  // duplicates.
128
132
  'epic-handoff',
129
- // Story #2899 (Epic #2880, F13) — `epic-deliver-preflight.js` upserts a
130
- // `delivery-preflight` comment on the Epic at the start of
131
- // /deliver Phase 1, surfacing estimated story count, install cost,
133
+ // Story #2899 (Epic #2880, F13) — the deleted `epic-deliver-preflight.js`
134
+ // upserted a `delivery-preflight` comment on the Epic at the start of
135
+ // pre-v2 Epic `/deliver` Phase 1, surfacing estimated story count, install cost,
132
136
  // wave count, GitHub API request volume, Claude quota burn, and any
133
137
  // threshold breaches against `delivery.preflight.max*`. One entry per
134
138
  // Epic; re-runs replace prior content.
135
139
  'delivery-preflight',
136
- // Story #3062 (Epic #3051) — `wave-tick.js` upserts a
140
+ // Story #3062 (Epic #3051) — the deleted `wave-tick.js` upserted a
137
141
  // `recurring-failure-class` comment on the Epic when the cross-Story
138
142
  // detector finds two or more Stories that hit the same `failedGate` in
139
143
  // `close-validate.end`. One entry per Epic; re-ticks with the same
140
144
  // findings upsert in place (`upsertStructuredComment` diffs by body).
141
145
  'recurring-failure-class',
142
- // Story #3061 (Epic #3051) — the /deliver §2e Idle Watchdog
143
- // subsection instructs the parent host LLM to upsert a `wave-stall`
144
- // comment on the Epic whenever an in-flight Story has been silent for
145
- // longer than the configured cadence. `wave-tick.js --check-idle`
146
- // emits the matching envelope; registering the kind here is what makes
146
+ // Story #3061 (Epic #3051) — the pre-v2 `/deliver` idle-watchdog prose
147
+ // instructed the parent host LLM to upsert a `wave-stall` comment on the
148
+ // Epic whenever an in-flight Story had been silent for longer than the
149
+ // configured cadence. The deleted `wave-tick.js --check-idle` CLI emitted
150
+ // the matching envelope; registering the kind here keeps historical
147
151
  // the documented remediation actually executable
148
152
  // (assertValidStructuredCommentType would otherwise throw).
149
153
  'wave-stall',
@@ -171,15 +175,14 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
171
175
  // `graduator="audit-results|code-review"` attr so the two graduators
172
176
  // upsert independent comments; re-runs upsert in place.
173
177
  'cross-repo-deferred',
174
- // Epic #4474 (PR3) — `plan-persist.js` upserts a single `plan-summary`
175
- // comment on the Epic at terminal persist success, carrying the risk /
176
- // routing / freshness / healthcheck receipts and the dry-run wave table
177
- // as closing text. Replaces the retired plan-time `dispatch-manifest`
178
- // comment (whose claimed consumer did not exist — the live manifest is
179
- // written at deliver time by `wave-record-io.js`) and the Phase 12
180
- // notify round-trip. One entry per Epic; a --force/--resume re-persist
181
- // upserts in place.
178
+ // Epic #4474 (PR3) / v2 Stage 3 — `plan-persist.js` upserts a single
179
+ // `plan-summary` comment on the primary Story at terminal persist
180
+ // success, carrying risk / routing receipts and the depends_on order
181
+ // table. One entry per plan; a re-persist upserts in place.
182
182
  'plan-summary',
183
+ // v2 Stage 3 — flat Story persist checkpoint on every created Story
184
+ // (replaces epic-plan-state for new plans). plan-summary stays primary-only.
185
+ 'story-plan-state',
183
186
  ]);
184
187
 
185
188
  export const WAVE_TYPE_PATTERN = WAVE_MARKER_RE;
@@ -145,11 +145,11 @@ async function loadTicketSnapshot(provider, opts, ticketId) {
145
145
  /**
146
146
  * Mirror the post-flip label set onto the GitHub Projects v2 Status
147
147
  * column. Story #2548 — wiring this here makes every caller of
148
- * `transitionTicketState` (story-init, story-close, story-phase,
149
- * the LabelTransitioner lifecycle listener, the update-ticket-state CLI,
150
- * batch transitions) update the board automatically. Prior to #2548 the
151
- * sync was only wired from the epic-runner against the Epic ticket, so
152
- * Stories and Tasks never had their `agent::executing` /
148
+ * `transitionTicketState` (`single-story-init.js`, `single-story-close.js`,
149
+ * `story-phase.js`, the LabelTransitioner lifecycle listener, the
150
+ * update-ticket-state CLI, batch transitions) update the board automatically.
151
+ * Prior to #2548 the sync was only wired from the deleted epic-runner against
152
+ * the Epic ticket, so Stories and Tasks never had their `agent::executing` /
153
153
  * `agent::blocked` flips reflected on the board.
154
154
  *
155
155
  * Best-effort: a project-board misconfig, missing scope, or transient
@@ -2,7 +2,7 @@
2
2
  * planning-corpus.js — corpus-aware context for the standalone-Story
3
3
  * planning path (Story #4432).
4
4
  *
5
- * `/plan --idea` previously drafted a standalone Story from a blank
5
+ * `/plan --seed` previously drafted a standalone Story from a blank
6
6
  * slate: the seed, the body template, and a title-only duplicate scan.
7
7
  * For a change request that is really a small delta against an
8
8
  * already-delivered surface, that blank slate throws away context the
@@ -22,11 +22,10 @@
22
22
  * with the seed, so the draft can build on prior art instead of
23
23
  * re-deriving it.
24
24
  *
25
- * The Epic list surface (`provider.getEpics`) maps every issue through
26
- * `issueToEpicListItem`, which deliberately omits `body` (a list-scale
27
- * payload trim). Body content therefore requires an **explicit**,
28
- * bounded per-candidate fetch via `provider.getEpic(id)` never a
29
- * silent assumption that the list response carries prose to score
25
+ * The historical Epic list surface (`provider.getEpics`) returns a
26
+ * list-scale payload with no `body`. Body content therefore requires an
27
+ * **explicit**, bounded per-candidate fetch via `provider.getEpic(id)`
28
+ * never a silent assumption that the list response carries prose to score
30
29
  * against.
31
30
  *
32
31
  * Relevance scoring reuses the same `tokenize` / `overlapScore` Jaccard
@@ -36,9 +35,12 @@
36
35
  */
37
36
 
38
37
  import { overlapScore, tokenize } from './duplicate-search.js';
39
- import { extractEpicSection, hasEpicSection } from './epic-body-sections.js';
40
38
  import { Logger } from './Logger.js';
41
39
  import { buildDocsDigest } from './orchestration/docs-digest.js';
40
+ import {
41
+ extractTicketSection,
42
+ hasTicketSection,
43
+ } from './ticket-body-sections.js';
42
44
 
43
45
  /** Top-K Epics kept after the cheap title-only ranking pass. */
44
46
  const DEFAULT_CORPUS_MAX_CANDIDATES = 5;
@@ -71,8 +73,8 @@ const CORPUS_EPICS_PAGE_CAP = 5;
71
73
 
72
74
  /**
73
75
  * Rank open Epics by title-overlap with the seed. This is the cheap
74
- * first pass over the list surface (title only — `issueToEpicListItem`
75
- * has no `body`), used solely to pick the bounded top-K candidates
76
+ * first pass over the list surface (title only — no `body`), used solely
77
+ * to pick the bounded top-K candidates
76
78
  * worth an explicit body fetch. It is not the final relevance signal;
77
79
  * `extractRelevantSections` re-scores against actual section content.
78
80
  *
@@ -179,8 +181,11 @@ export async function fetchCandidateBodies({
179
181
  * @returns {{ kind:'techSpec'|'lede', content:string }}
180
182
  */
181
183
  function extractScoreableExcerpt(body) {
182
- if (hasEpicSection(body, 'techSpec')) {
183
- return { kind: 'techSpec', content: extractEpicSection(body, 'techSpec') };
184
+ if (hasTicketSection(body, 'techSpec')) {
185
+ return {
186
+ kind: 'techSpec',
187
+ content: extractTicketSection(body, 'techSpec'),
188
+ };
184
189
  }
185
190
  const lede = (body ?? '').split(/^##\s+/m)[0].trim();
186
191
  return { kind: 'lede', content: lede };
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * This module is the single implementation of the "run the registry, fail
5
5
  * fast on blockers, log auto-fixes" pattern. The consumer entry points
6
- * (story-close.js, epic-deliver-preflight.js, the npm test wrapper, and
6
+ * (`single-story-close.js`, `mandrel-update-preflight.js`, the npm test wrapper, and
7
7
  * the bootstrap scripts) call `runPreflight({ scope })` instead of
8
8
  * re-implementing the same assemble+run+format+exit-2 dance.
9
9
  *
@@ -13,7 +13,7 @@
13
13
  * auto-fixes. The wrapper prints a human-readable blocker table
14
14
  * (`id · summary · fixCommand`) before returning. Code 2 is the
15
15
  * project-wide "preflight refused" reservation — see
16
- * .agents/workflows/helpers/deliver-epic.md for the rationale.
16
+ * `.agents/workflows/helpers/deliver-story.md` for the rationale.
17
17
  *
18
18
  * Auto-fixes are logged via `logFixes` before the blocker check so the
19
19
  * operator sees the "we corrected X" line even when a separate blocker
@@ -4,7 +4,7 @@
4
4
  * Accepts the canonical resolved config object (the wrapper returned by
5
5
  * `resolveConfig()` with `config.github` populated). The legacy
6
6
  * `orchestration`-shaped argument is no longer supported as part of the
7
- * Epic #2880 hard cutover; see `.agents/rules/git-conventions.md#contract-cutovers-—-no-shim-layer`.
7
+ * Epic #2880 hard cutover; see `.agents/rules/git-conventions-reference.md#contract-cutovers-—-no-shim-layer`.
8
8
  *
9
9
  * @see docs/v5-implementation-plan.md Sprint 1B
10
10
  */
@@ -9,8 +9,8 @@
9
9
  // `.agents/rules/testing-standards.md` (unit / contract / acceptance) are
10
10
  // PRESENT, and which are ABSENT — and why.
11
11
  //
12
- // A scenario that is skipped does not exercise anything — a `@skip` /
13
- // `@pending` Gherkin tag (or a runner equivalent such as `it.skip` / `xit` /
12
+ // A scenario that is skipped does not exercise anything — a `@skip`
13
+ // Gherkin tag (or a runner equivalent such as `it.skip` / `xit` /
14
14
  // `describe.skip`, or a `skipped: true` descriptor field) means the test is
15
15
  // inert at run time. This module therefore treats a skipped test as ABSENT
16
16
  // for its tier: it never bumps a tier into `present`, because a tier whose
@@ -49,10 +49,10 @@ export const TIERS = Object.freeze(['unit', 'contract', 'acceptance']);
49
49
  const PRESENT = 'present';
50
50
  const ABSENT = 'absent';
51
51
 
52
- /** True when `value` contains a `@skip` or `@pending` Gherkin-style tag. */
52
+ /** True when `value` contains a `@skip` Gherkin-style tag. */
53
53
  function hasSkipTag(value) {
54
54
  if (typeof value !== 'string') return false;
55
- return /(^|[\s,])@(skip|pending)\b/i.test(value);
55
+ return /(^|[\s,])@skip\b/i.test(value);
56
56
  }
57
57
 
58
58
  /** True when `value` contains a runner-level skip/pending marker. */
@@ -67,7 +67,7 @@ function hasRunnerSkipMarker(value) {
67
67
  /**
68
68
  * True when a test descriptor is marked skipped/pending and therefore must
69
69
  * NOT count toward its tier. Recognizes:
70
- * - a `@skip` / `@pending` tag in a `tags` array or whitespace/comma string,
70
+ * - a `@skip` tag in a `tags` array or whitespace/comma string,
71
71
  * - the same tags embedded in a path or descriptor `name`,
72
72
  * - explicit boolean flags (`skipped`, `pending`),
73
73
  * - runner skip markers in a path/name (`it.skip`, `xit`, `xdescribe`,
@@ -0,0 +1,36 @@
1
+ /**
2
+ * confirm-merge-follow-ups.js — post-land follow-up capture seam for
3
+ * `single-story-confirm-merge.js` (keeps the CLI entry under the MI ceiling).
4
+ */
5
+
6
+ import { captureFollowUpsAfterConfirm } from '../orchestration/story-follow-ups.js';
7
+
8
+ /**
9
+ * @param {object} args
10
+ * @param {object} args.confirmation
11
+ * @param {number} args.storyId
12
+ * @param {number|null} args.prNumber
13
+ * @param {object} args.provider
14
+ * @param {object} [args.config]
15
+ * @param {string} args.cwd
16
+ * @param {(tag: string, msg: string) => void} [args.progress]
17
+ * @returns {Promise<object>}
18
+ */
19
+ export async function withConfirmFollowUps({
20
+ confirmation,
21
+ storyId,
22
+ prNumber,
23
+ provider,
24
+ config,
25
+ cwd,
26
+ progress,
27
+ }) {
28
+ const followUps = await captureFollowUpsAfterConfirm(confirmation, {
29
+ storyId,
30
+ provider,
31
+ config,
32
+ cwd,
33
+ progress,
34
+ });
35
+ return { standalone: true, prNumber, ...confirmation, followUps };
36
+ }
@@ -4,7 +4,7 @@
4
4
  * Shared builder for the `evaluateProtection` context the boot-sweep
5
5
  * engine ([`sweepMergedBranches`](../single-story-sweep.js)) threads into
6
6
  * every candidate protection check. Single-homed here so the three boot
7
- * callers — `single-story-init.js`, `epic-deliver-prepare.js`, and the
7
+ * callers — `single-story-init.js` and the
8
8
  * `boot-sweep.js` CLI — build an identical ctx instead of each re-wiring
9
9
  * the git/gh/ticket ports.
10
10
  *
@@ -1,27 +1,24 @@
1
1
  /**
2
2
  * lib/story-adjacency.js — the single story-level adjacency builder.
3
3
  *
4
- * Both Epic-path wave-computation wrappers bottom out in the shared
4
+ * Both pre-v2 Epic wave wrappers and the v2 `/deliver` ready-set path bottom out in the shared
5
5
  * `lib/Graph.js` kernel (`detectCycle` / `assignLayers` / `computeWaves`),
6
6
  * but each historically re-implemented the step that turns a list of Story
7
7
  * records into the `Map<storyId, number[]>` adjacency the kernel consumes.
8
- * This module is now the one home for that step; the consumers are:
8
+ * This module is now the one home for that step; the live consumer is:
9
9
  *
10
- * - `lib/orchestration/epic-runner/phases/build-wave-dag.js`
11
- * (`buildStoryDag` → `computeWaves`)
12
- * - `lib/orchestration/dispatch-pipeline.js`
13
- * (`buildStoryDispatchGraph` → `computeStoryWaves`)
14
10
  * - `lib/wave-runner/ready-set.js` (`selectReadySet`, the path-agnostic
15
- * continuous scheduler the standalone `stories-wave-tick.js` adapter
16
- * and the Epic path both dispatch through)
11
+ * continuous scheduler the `stories-wave-tick.js` adapter dispatches through)
17
12
  * - `stories-wave-tick.js` (for cycle detection, before delegating
18
13
  * selection to `selectReadySet`)
19
14
  *
20
- * Dependency source order (must stay aligned with manifest-builder.js so
21
- * the dispatch manifest and runtime wave scheduling never disagree):
15
+ * (Pre-v2: `epic-runner/phases/build-wave-dag.js` and `dispatch-pipeline.js`
16
+ * also called here; both entry seams were deleted.)
17
+ *
18
+ * Dependency source order (must stay aligned with `manifest-builder.js` and
19
+ * `helpers/deliver-story.md` so planning and runtime scheduling never disagree):
22
20
  * 1. Canonical: `blocked by #NNN` / `depends on #NNN` parsed from the
23
- * Story body via `parseBlockedBy` (the same parser the dispatcher
24
- * uses).
21
+ * Story body via `parseBlockedBy` (the same parser planning uses).
25
22
  * 2. Fallback: an explicit `dependencies` (ticket shape) or
26
23
  * `dependsOn` (operator-DAG shape) array on the Story record.
27
24
  *
@@ -46,9 +43,9 @@ import { parseBlockedBy } from './dependency-parser.js';
46
43
  * DAG nodes).
47
44
  * @param {object} [opts]
48
45
  * @param {boolean} [opts.dropForeign=true] When true (the default,
49
- * matching the Epic-scoped wrappers), edges pointing at ids outside
46
+ * matching pre-v2 Epic-scoped wrappers), edges pointing at ids outside
50
47
  * the supplied story set are dropped so the DAG stays closed over the
51
- * scheduled set. The standalone path (`stories-wave-tick.js` and the
48
+ * scheduled set. The v2 `/deliver` path (`stories-wave-tick.js` and the
52
49
  * `selectReadySet` core) passes `false` to preserve the operator-DAG
53
50
  * contract, where a dependency on an id absent from the input is treated
54
51
  * as not-yet-done and withholds the dependent until it completes.