mandrel 1.94.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 (393) hide show
  1. package/.agents/README.md +59 -73
  2. package/.agents/agents/story-worker.md +12 -13
  3. package/.agents/docs/SDLC.md +489 -1285
  4. package/.agents/docs/agentrc-reference.json +177 -67
  5. package/.agents/docs/configuration.md +104 -138
  6. package/.agents/docs/execution-reference.md +17 -20
  7. package/.agents/docs/quality-gates.md +13 -19
  8. package/.agents/docs/workflows.md +3 -3
  9. package/.agents/instructions.md +70 -81
  10. package/.agents/rules/ci-remediation.md +8 -12
  11. package/.agents/rules/git-conventions-reference.md +6 -7
  12. package/.agents/rules/git-conventions.md +16 -22
  13. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  14. package/.agents/schemas/agentrc.schema.json +54 -214
  15. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  16. package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
  17. package/.agents/schemas/risk-verdict.schema.json +0 -13
  18. package/.agents/scripts/analyze-execution.js +1 -1
  19. package/.agents/scripts/audit-to-stories.js +7 -7
  20. package/.agents/scripts/boot-sweep.js +1 -1
  21. package/.agents/scripts/check-lifecycle-lint.js +6 -9
  22. package/.agents/scripts/check-prepush-recovery.js +1 -1
  23. package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
  24. package/.agents/scripts/lib/Logger.js +6 -10
  25. package/.agents/scripts/lib/audit-suite/runner.js +2 -2
  26. package/.agents/scripts/lib/audit-suite/selector.js +5 -5
  27. package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
  28. package/.agents/scripts/lib/baselines/kernel.js +206 -18
  29. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
  30. package/.agents/scripts/lib/baselines/reader.js +1 -6
  31. package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
  32. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
  33. package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
  34. package/.agents/scripts/lib/checks/index.js +2 -1
  35. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
  36. package/.agents/scripts/lib/cli/standard-args.js +13 -22
  37. package/.agents/scripts/lib/cli-args.js +16 -7
  38. package/.agents/scripts/lib/close-validation/gates.js +2 -2
  39. package/.agents/scripts/lib/config/ci.js +6 -31
  40. package/.agents/scripts/lib/config/delivery-routing.js +45 -29
  41. package/.agents/scripts/lib/config/explain.js +55 -36
  42. package/.agents/scripts/lib/config/limits.js +17 -58
  43. package/.agents/scripts/lib/config/paths.js +0 -2
  44. package/.agents/scripts/lib/config/quality.js +1 -1
  45. package/.agents/scripts/lib/config/runners.js +17 -50
  46. package/.agents/scripts/lib/config/temp-paths.js +19 -14
  47. package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
  48. package/.agents/scripts/lib/config-resolver.js +2 -7
  49. package/.agents/scripts/lib/config-settings-schema-delivery.js +24 -148
  50. package/.agents/scripts/lib/config-settings-schema-quality.js +8 -14
  51. package/.agents/scripts/lib/config-settings-schema.js +52 -38
  52. package/.agents/scripts/lib/dependency-parser.js +3 -2
  53. package/.agents/scripts/lib/doc-tiers.js +2 -2
  54. package/.agents/scripts/lib/duplicate-search.js +211 -41
  55. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  56. package/.agents/scripts/lib/findings/promote-finding.js +5 -5
  57. package/.agents/scripts/lib/framework-version.js +2 -3
  58. package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
  59. package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
  60. package/.agents/scripts/lib/git-utils.js +32 -6
  61. package/.agents/scripts/lib/github/framework-repo.js +6 -0
  62. package/.agents/scripts/lib/label-constants.js +10 -23
  63. package/.agents/scripts/lib/label-taxonomy.js +9 -43
  64. package/.agents/scripts/lib/observability/active-story-env.js +1 -1
  65. package/.agents/scripts/lib/observability/hook-heartbeat.js +20 -52
  66. package/.agents/scripts/lib/observability/source-classifier.js +3 -3
  67. package/.agents/scripts/lib/onboard/init-tail.js +1 -3
  68. package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
  69. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +8 -5
  70. package/.agents/scripts/lib/orchestration/ceremony-routing.js +83 -20
  71. package/.agents/scripts/lib/orchestration/code-review.js +20 -268
  72. package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
  73. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
  74. package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
  75. package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
  76. package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
  77. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
  78. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
  79. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
  80. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
  81. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
  82. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
  83. package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
  84. package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
  85. package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
  86. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
  87. package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
  88. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
  89. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
  90. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
  91. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
  92. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
  93. package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
  94. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
  95. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +13 -13
  96. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
  97. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
  98. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
  99. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
  100. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
  101. package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
  102. package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
  103. package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
  104. package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
  105. package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
  106. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
  107. package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
  108. package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
  109. package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
  110. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
  111. package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
  112. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
  113. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
  114. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
  115. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
  116. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
  117. package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
  118. package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
  119. package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
  120. package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
  121. package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
  122. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
  123. package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
  124. package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
  125. package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
  126. package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
  127. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
  128. package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
  129. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
  130. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
  131. package/.agents/scripts/lib/orchestration/ticket-validator.js +2 -7
  132. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
  133. package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
  134. package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
  135. package/.agents/scripts/lib/planning-corpus.js +16 -11
  136. package/.agents/scripts/lib/preflight-runner.js +2 -2
  137. package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
  138. package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
  139. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
  140. package/.agents/scripts/lib/story-adjacency.js +11 -14
  141. package/.agents/scripts/lib/story-body/story-body.js +124 -70
  142. package/.agents/scripts/lib/story-plan.js +2 -4
  143. package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
  144. package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
  145. package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
  146. package/.agents/scripts/lib/validation-evidence.js +1 -1
  147. package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
  148. package/.agents/scripts/lib/workspace-provisioner.js +1 -1
  149. package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
  150. package/.agents/scripts/lint-issue-body.js +71 -40
  151. package/.agents/scripts/mandrel-update-preflight.js +1 -1
  152. package/.agents/scripts/notify.js +4 -3
  153. package/.agents/scripts/plan-context.js +64 -74
  154. package/.agents/scripts/plan-persist.js +121 -280
  155. package/.agents/scripts/plan-run-epilogue.js +97 -0
  156. package/.agents/scripts/providers/github/issues.js +17 -33
  157. package/.agents/scripts/providers/github/mappers.js +0 -12
  158. package/.agents/scripts/providers/github/tickets.js +2 -5
  159. package/.agents/scripts/resolve-plan-run.js +117 -0
  160. package/.agents/scripts/signals-view.js +24 -19
  161. package/.agents/scripts/single-story-close.js +11 -14
  162. package/.agents/scripts/single-story-confirm-merge.js +39 -23
  163. package/.agents/scripts/single-story-init.js +29 -20
  164. package/.agents/scripts/stories-wave-tick.js +6 -6
  165. package/.agents/scripts/story-plan.js +26 -47
  166. package/.agents/scripts/update-ticket-state.js +6 -15
  167. package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
  168. package/.agents/skills/core/idea-refinement/SKILL.md +6 -6
  169. package/.agents/skills/core/scope-triage/SKILL.md +28 -172
  170. package/.agents/skills/skills.index.json +3 -43
  171. package/.agents/starter-agentrc.json +0 -5
  172. package/.agents/templates/agent-protocol.md +9 -10
  173. package/.agents/workflows/audit-architecture.md +3 -3
  174. package/.agents/workflows/audit-clean-code.md +3 -3
  175. package/.agents/workflows/audit-dependencies.md +3 -3
  176. package/.agents/workflows/audit-devops.md +3 -3
  177. package/.agents/workflows/audit-documentation.md +5 -5
  178. package/.agents/workflows/audit-lighthouse.md +3 -3
  179. package/.agents/workflows/audit-navigability.md +3 -2
  180. package/.agents/workflows/audit-performance.md +3 -3
  181. package/.agents/workflows/audit-privacy.md +3 -3
  182. package/.agents/workflows/audit-quality.md +3 -3
  183. package/.agents/workflows/audit-security.md +3 -3
  184. package/.agents/workflows/audit-seo.md +3 -3
  185. package/.agents/workflows/audit-sre.md +3 -3
  186. package/.agents/workflows/audit-to-stories.md +20 -20
  187. package/.agents/workflows/audit-ux-ui.md +3 -3
  188. package/.agents/workflows/deliver.md +122 -174
  189. package/.agents/workflows/git-cleanup.md +3 -4
  190. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  191. package/.agents/workflows/helpers/acceptance-self-eval.md +16 -29
  192. package/.agents/workflows/helpers/code-review.md +70 -193
  193. package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
  194. package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
  195. package/.agents/workflows/helpers/diagnose.md +10 -10
  196. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  197. package/.agents/workflows/helpers/signals.md +16 -16
  198. package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
  199. package/.agents/workflows/mandrel-update.md +2 -1
  200. package/.agents/workflows/plan.md +112 -145
  201. package/.agents/workflows/qa-assist.md +24 -30
  202. package/.agents/workflows/qa-explore.md +29 -38
  203. package/.agents/workflows/qa-run.md +2 -2
  204. package/README.md +9 -8
  205. package/docs/CHANGELOG.md +30 -0
  206. package/lib/migrations/index.js +6 -5
  207. package/package.json +2 -2
  208. package/.agents/agents/retro.md +0 -42
  209. package/.agents/personas/architect.md +0 -113
  210. package/.agents/personas/devops-engineer.md +0 -38
  211. package/.agents/personas/engineer.md +0 -33
  212. package/.agents/personas/project-manager.md +0 -114
  213. package/.agents/personas/qa-engineer.md +0 -95
  214. package/.agents/personas/security-engineer.md +0 -111
  215. package/.agents/personas/technical-writer.md +0 -101
  216. package/.agents/schemas/dispatch-manifest.json +0 -232
  217. package/.agents/schemas/epic-spec.schema.json +0 -153
  218. package/.agents/schemas/lifecycle/slice.end.schema.json +0 -21
  219. package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
  220. package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
  221. package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
  222. package/.agents/scripts/bookkeeping-reconcile.js +0 -117
  223. package/.agents/scripts/dispatcher.js +0 -295
  224. package/.agents/scripts/epic-audit-prepare.js +0 -497
  225. package/.agents/scripts/epic-audit-recheck.js +0 -274
  226. package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
  227. package/.agents/scripts/epic-deliver-preflight.js +0 -462
  228. package/.agents/scripts/epic-deliver-prepare.js +0 -852
  229. package/.agents/scripts/epic-execute-record-wave.js +0 -449
  230. package/.agents/scripts/epic-plan-clarity.js +0 -211
  231. package/.agents/scripts/epic-plan-healthcheck.js +0 -581
  232. package/.agents/scripts/epic-reconcile.js +0 -625
  233. package/.agents/scripts/lib/baseline-snapshot.js +0 -979
  234. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
  235. package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
  236. package/.agents/scripts/lib/config/lifecycle.js +0 -40
  237. package/.agents/scripts/lib/config/preflight.js +0 -58
  238. package/.agents/scripts/lib/config/retro.js +0 -77
  239. package/.agents/scripts/lib/epic-merge-lock.js +0 -322
  240. package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
  241. package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
  242. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
  243. package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
  244. package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
  245. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
  246. package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
  247. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
  248. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
  249. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
  250. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
  251. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
  252. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
  253. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
  254. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
  255. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
  256. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
  257. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
  258. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
  259. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
  260. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
  261. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
  262. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
  263. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
  264. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
  265. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
  266. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
  267. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
  268. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
  269. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
  270. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
  271. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
  272. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
  273. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
  274. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
  275. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
  276. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
  277. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
  278. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
  279. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
  280. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
  281. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
  282. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
  283. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
  284. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
  285. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
  286. package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
  287. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
  288. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -465
  289. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
  290. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
  291. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
  292. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
  293. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
  294. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
  295. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
  296. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
  297. package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
  298. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
  299. package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
  300. package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
  301. package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
  302. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
  303. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
  304. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
  305. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
  306. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
  307. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
  308. package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
  309. package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
  310. package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
  311. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
  312. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
  313. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
  314. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
  315. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
  316. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
  317. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
  318. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
  319. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
  320. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
  321. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
  322. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
  323. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
  324. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
  325. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
  326. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
  327. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
  328. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
  329. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
  330. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
  331. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
  332. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
  333. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
  334. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
  335. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
  336. package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
  337. package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
  338. package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
  339. package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
  340. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
  341. package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
  342. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
  343. package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
  344. package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
  345. package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
  346. package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
  347. package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
  348. package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
  349. package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
  350. package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
  351. package/.agents/scripts/lib/push-epic-retry.js +0 -209
  352. package/.agents/scripts/lib/spec/index.js +0 -36
  353. package/.agents/scripts/lib/spec/loader.js +0 -425
  354. package/.agents/scripts/lib/spec/state.js +0 -208
  355. package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
  356. package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
  357. package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
  358. package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
  359. package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
  360. package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
  361. package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
  362. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
  363. package/.agents/scripts/lib/wave-runner/tick.js +0 -754
  364. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
  365. package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
  366. package/.agents/scripts/lifecycle-emit.js +0 -510
  367. package/.agents/scripts/retro-run.js +0 -218
  368. package/.agents/scripts/slice-phase.js +0 -361
  369. package/.agents/scripts/standalone-feedback-rollup.js +0 -188
  370. package/.agents/scripts/story-close.js +0 -294
  371. package/.agents/scripts/story-init.js +0 -599
  372. package/.agents/scripts/story-phase.js +0 -369
  373. package/.agents/scripts/wave-tick.js +0 -464
  374. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
  375. package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
  376. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
  377. package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
  378. package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
  379. package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
  380. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
  381. package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
  382. package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
  383. package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
  384. package/.agents/workflows/helpers/deliver-epic.md +0 -998
  385. package/.agents/workflows/helpers/deliver-stories.md +0 -450
  386. package/.agents/workflows/helpers/epic-audit.md +0 -189
  387. package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
  388. package/.agents/workflows/helpers/epic-testing.md +0 -125
  389. package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
  390. package/.agents/workflows/helpers/plan-epic.md +0 -353
  391. package/.agents/workflows/helpers/plan-story.md +0 -251
  392. package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
  393. /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
@@ -11,7 +11,7 @@
11
11
  * emits the set of Stories safe to dispatch **on this beat** — a Story
12
12
  * becomes dispatchable the instant its own dependencies are done, under the
13
13
  * same global concurrency cap and the same file-overlap co-dispatch guard
14
- * the Epic path uses. There is no wave barrier: this no longer batches
14
+ * `lib/wave-runner/ready-set.js` applies everywhere. There is no wave barrier: this no longer batches
15
15
  * Stories into fully-draining waves; it selects continuously.
16
16
  *
17
17
  * The previous static wave-batch plan (group N must fully drain before
@@ -50,9 +50,9 @@
50
50
  * `/deliver` uses — `resolveConfig` + `getRunners` reading
51
51
  * `delivery.deliverRunner.concurrencyCap` (default 3) — so a
52
52
  * `.agentrc.local.json` override is honored. A `--concurrency <n>` CLI flag
53
- * overrides the config-resolved value for that run only. This puts both the
54
- * standalone (`/deliver`) and Epic (`/deliver`) delivery paths on one
55
- * deterministic config source **and** one scheduling kernel.
53
+ * overrides the config-resolved value for that run only. This shares one
54
+ * deterministic config source (`delivery.deliverRunner.concurrencyCap`) and
55
+ * one scheduling kernel with every `/deliver` multi-Story invocation.
56
56
  *
57
57
  * On cycle detection, exits with code 2 and sets cycleError in the envelope.
58
58
  */
@@ -74,7 +74,7 @@ Continuous ready-set planner for standalone Story delivery. Consumes a
74
74
  dependency graph of Story IDs plus the live run progress and emits the set
75
75
  of Stories safe to dispatch on this beat — a Story is dispatchable the
76
76
  instant its own dependencies are done — plus the resolved per-beat
77
- concurrency cap and the same file-overlap guard the Epic path uses.
77
+ concurrency cap and the same file-overlap guard as selectReadySet.
78
78
 
79
79
  Input DAG format (JSON array):
80
80
  [{ "id": 101, "dependsOn": [] }, { "id": 102, "dependsOn": [101] }]
@@ -257,7 +257,7 @@ export function parseConcurrencyOverride(raw) {
257
257
  /**
258
258
  * Resolve the per-beat concurrency cap.
259
259
  *
260
- * Mirrors the `/deliver` seam (`epic-deliver-prepare.js`): resolve the
260
+ * Mirrors the `/deliver` multi-Story seam (`helpers/deliver-story.md`): resolve the
261
261
  * project config (which deep-merges `.agentrc.local.json` over `.agentrc.json`)
262
262
  * then read `delivery.deliverRunner.concurrencyCap` via `getRunners` (default
263
263
  * 3). An explicit `override` (the `--concurrency <n>` CLI flag) wins over
@@ -2,33 +2,17 @@
2
2
  /* node:coverage ignore file */
3
3
 
4
4
  /**
5
- * story-plan.js — Local `/plan` wrapper.
5
+ * story-plan.js — QA helper for promote round-trips and `--emit-context`
6
+ * envelope emission.
6
7
  *
7
- * Standalone counterpart to `/plan` for Stories that do **not**
8
- * attach to an Epic. The script is deliberately a thin CLI around the
9
- * pure helpers in `lib/story-plan.js`:
8
+ * Canonical operator planning is `plan-context.js` + `plan-persist.js` (see
9
+ * `.agents/workflows/plan.md`). Use this CLI only for QA promote
10
+ * round-trips (`--body` / `--dry-run`) or test harnesses that need the
11
+ * standalone envelope shape.
10
12
  *
11
- * 1. `--emit-context` mode — given a `--idea`/`--from-notes` seed,
12
- * build the context envelope (seed, refine heuristic, persona,
13
- * body template, duplicate candidates, tech-stack summary, and a
14
- * corpus-aware `corpusContext` — the docs digest plus relevant
15
- * existing-Epic Tech Spec excerpts, Story #4432) and print it as
16
- * JSON on stdout. Logs route to stderr so the envelope is
17
- * byte-clean for `JSON.parse`.
18
- * 2. Persist mode — given a `--body <file>` authored by the host
19
- * LLM after operator confirmation, validate the shape and persist
20
- * via `provider.createIssue` (which also adds the new Story to
21
- * the configured Projects V2 board — Story #3822) with
22
- * `type::story` + the chosen persona label, falling back to
23
- * `gh issue create` when the provider lacks a createIssue
24
- * analogue. Prints `Next: /single-story-deliver <id>`.
25
- * 3. `--dry-run` — same as persist but exits without touching
26
- * GitHub. Echoes the rendered body and the `gh` argv it would
27
- * have run.
28
- *
29
- * Mirrors the `/plan` pattern: deterministic Node I/O wrappers
30
- * with HITL gating handled by the host LLM in chat. No external LLM
31
- * APIs are called from this script.
13
+ * Operator planning:
14
+ * node .agents/scripts/plan-context.js --seed "…" | --seed-file <path> | --tickets <ids>
15
+ * node .agents/scripts/plan-persist.js --stories --risk-verdict
32
16
  */
33
17
 
34
18
  import { readFile } from 'node:fs/promises';
@@ -53,10 +37,10 @@ import {
53
37
 
54
38
  const HELP = `\
55
39
  Usage:
56
- story-plan.js --emit-context (--idea "<seed>" | --from-notes <file>) \\
57
- [--persona <name>] [--refine | --no-refine] [--pretty]
40
+ story-plan.js --emit-context (--seed "<seed>" | --seed-file <file>) \\
41
+ [--refine | --no-refine] [--pretty]
58
42
 
59
- story-plan.js --body <file> [--persona <name>] [--dry-run]
43
+ story-plan.js --body <file> [--dry-run]
60
44
 
61
45
  story-plan.js --help
62
46
 
@@ -66,12 +50,11 @@ Modes:
66
50
  draft body using the envelope and the body template.
67
51
  --body <file> Persist a pre-authored body. Validates shape (required
68
52
  sections, no Epic: ref, AC checklist non-empty) and
69
- calls \`gh issue create\` with type::story + persona.
53
+ calls \`gh issue create\` with type::story.
70
54
  --dry-run With --body: print the body and the gh argv that would
71
55
  be invoked, then exit 0. No GitHub mutations.
72
56
 
73
57
  Options:
74
- --persona <name> Persona label (default: engineer).
75
58
  --refine Force the idea-refinement hint on regardless of seed
76
59
  length. Default heuristic: refine when seed < 200
77
60
  chars.
@@ -80,17 +63,17 @@ Options:
80
63
  `;
81
64
 
82
65
  /**
83
- * Resolve the seed string from --idea or --from-notes. One of the two
66
+ * Resolve the seed string from --seed or --seed-file. One of the two
84
67
  * must be present in --emit-context mode.
85
68
  */
86
- async function resolveSeed({ idea, fromNotes }) {
87
- if (idea && fromNotes) {
88
- throw new Error('Pass either --idea or --from-notes, not both.');
69
+ async function resolveSeed({ seed, seedFile }) {
70
+ if (seed && seedFile) {
71
+ throw new Error('Pass either --seed or --seed-file, not both.');
89
72
  }
90
- if (idea) return idea;
91
- if (fromNotes) return (await readFile(fromNotes, 'utf8')).trim();
73
+ if (seed) return seed;
74
+ if (seedFile) return (await readFile(seedFile, 'utf8')).trim();
92
75
  throw new Error(
93
- '--emit-context requires --idea "<seed>" or --from-notes <file>.',
76
+ '--emit-context requires --seed "<seed>" or --seed-file <file>.',
94
77
  );
95
78
  }
96
79
 
@@ -147,12 +130,11 @@ async function runEmitContext({
147
130
  write = (s) => process.stdout.write(s),
148
131
  }) {
149
132
  const seed = await resolveSeed({
150
- idea: values.idea,
151
- fromNotes: values['from-notes'],
133
+ seed: values.seed,
134
+ seedFile: values['seed-file'],
152
135
  });
153
136
  const override = values.refine ? 'on' : values['no-refine'] ? 'off' : null;
154
137
  const refine = shouldRefine({ seed, override });
155
- const persona = values.persona ?? 'engineer';
156
138
 
157
139
  // Corpus lookup uses the raw (un-defaulted) docsContextFiles list, same
158
140
  // as the `/deliver` per-Epic digest builder: `config.project` fills in
@@ -186,7 +168,6 @@ async function runEmitContext({
186
168
  const envelope = buildContextEnvelope({
187
169
  seed,
188
170
  refine,
189
- persona,
190
171
  bodyTemplate,
191
172
  duplicateCandidates,
192
173
  techStack,
@@ -221,8 +202,7 @@ async function runPersist({
221
202
  }
222
203
 
223
204
  const title = extractTitle(body);
224
- const persona = values.persona ?? 'engineer';
225
- const labels = [TYPE_LABELS.STORY, `persona::${persona}`];
205
+ const labels = [TYPE_LABELS.STORY];
226
206
  const argv = renderGhArgv({ title, bodyPath, labels });
227
207
 
228
208
  if (dryRun) {
@@ -264,7 +244,7 @@ async function runPersist({
264
244
  }
265
245
 
266
246
  write(`${JSON.stringify({ issueNumber, title, labels }, null, 2)}\n`);
267
- Logger.info(`Next: /single-story-deliver ${issueNumber}`);
247
+ Logger.info(`Next: /deliver ${issueNumber}`);
268
248
  }
269
249
 
270
250
  /* node:coverage ignore next */
@@ -272,10 +252,9 @@ async function main() {
272
252
  const { values } = parseArgs({
273
253
  options: {
274
254
  'emit-context': { type: 'boolean', default: false },
275
- idea: { type: 'string' },
276
- 'from-notes': { type: 'string' },
255
+ seed: { type: 'string' },
256
+ 'seed-file': { type: 'string' },
277
257
  body: { type: 'string' },
278
- persona: { type: 'string' },
279
258
  refine: { type: 'boolean', default: false },
280
259
  'no-refine': { type: 'boolean', default: false },
281
260
  pretty: { type: 'boolean', default: false },
@@ -1,13 +1,8 @@
1
1
  /**
2
- * .agents/scripts/update-ticket-state.js — CLI Re-export Shim
3
- *
4
- * Thin backward-compatibility shim. The core logic has been moved to
5
- * `lib/orchestration/ticketing.js` as part of the SDK refactor.
6
- *
7
- * This file preserves backward compatibility for CLI usage and existing
8
- * testing patterns.
9
- *
10
- * Successor to the retired mandrel MCP tools. See ADR 20260424-702a in docs/decisions.md for the migration table.
2
+ * .agents/scripts/update-ticket-state.js — CLI entrypoint for ticket
3
+ * label transitions. Core logic lives in `lib/orchestration/ticketing.js`;
4
+ * this file is the operator-facing command surface (not a compatibility
5
+ * layer).
11
6
  */
12
7
 
13
8
  import { parseArgs } from 'node:util';
@@ -33,7 +28,6 @@ if (
33
28
  const { values } = parseArgs({
34
29
  args: process.argv.slice(2),
35
30
  options: {
36
- task: { type: 'string' },
37
31
  ticket: { type: 'string' },
38
32
  state: { type: 'string' },
39
33
  'remove-label': { type: 'string' },
@@ -43,17 +37,14 @@ if (
43
37
  strict: false,
44
38
  });
45
39
 
46
- // `--ticket` is the v5.9.0 alias for `--task` (labels can apply to any
47
- // ticket type, not just Tasks). Both continue to work.
48
- const idSource = values.ticket ?? values.task;
49
- const ticketId = Number.parseInt(idSource, 10);
40
+ const ticketId = Number.parseInt(values.ticket, 10);
50
41
  const state = values.state;
51
42
  const removeLabel = values['remove-label'];
52
43
 
53
44
  if (Number.isNaN(ticketId) || (!state && !removeLabel)) {
54
45
  throw new Error(
55
46
  'Usage: node update-ticket-state.js ' +
56
- '(--ticket|--task) <id> ' +
47
+ '--ticket <id> ' +
57
48
  '[--state <state> | --remove-label <label>]',
58
49
  );
59
50
  }
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: analyze-execution
3
3
  description: >-
4
- Aggregate per-Story or per-Epic execution signals into a structured
4
+ Aggregate per-Story or per-plan-run execution signals into a structured
5
5
  perf-summary or perf-report and upsert it onto the corresponding GitHub
6
- ticket. Use after a Story closes (Story mode) or as part of
7
- `/deliver` Phase 6 (Epic mode). Reads NDJSON via
6
+ ticket. Use after a Story closes (Story mode) or during run closeout
7
+ (plan-run mode). Reads NDJSON via
8
8
  `lib/signals/read` and writes a single structured comment.
9
9
  allowed_tools:
10
10
  - Read
@@ -16,42 +16,42 @@ allowed_tools:
16
16
  ## Policy Capsule
17
17
 
18
18
  - Invoke via the wrapping CLI `node .agents/scripts/analyze-execution.js`; do not duplicate the read/write logic from this Skill body.
19
- - Resolve mode strictly by flags: `--story <sid> --epic <eid>` → Story mode; `--epic <eid>` alone → Epic mode.
20
- - Read NDJSON signals only through `lib/signals/read` (the async-iterator entry point). Never open `<tempRoot>/epic-<eid>/story-<sid>/signals.ndjson` directly — the reader owns the warn-once malformed-JSON policy.
19
+ - Resolve mode strictly by flags: Story + run id → Story mode; run id alone → plan-run mode. The current CLI still spells the run-id flag as `--epic <id>`; treat that value as the run id and do not add a second executor path here.
20
+ - Read NDJSON signals only through `lib/signals/read` (the async-iterator entry point). Never open `<tempRoot>/run-<id>/stories/story-<sid>/signals.ndjson` directly — the reader owns the warn-once malformed-JSON policy.
21
21
  - Emit a single structured GitHub comment per ticket (`<!-- structured:story-perf-summary -->` or `<!-- structured:epic-perf-report -->`); rely on `upsertStructuredComment` for idempotence — never post duplicates.
22
- - Never rename or alter the structured-marker IDs; the retro composer and Epic dashboard grep them verbatim.
22
+ - Never rename or alter the structured-marker IDs; the retro composer and run dashboard grep them verbatim.
23
23
  - Validate the structured payload against `docs/data-dictionary.md §StoryPerfSummary` or `§EpicPerfReport` before posting. Schema violations exit non-zero.
24
- - Soft-fail (exit 0 with a warning) when NDJSON is missing for a Story or an Epic has no children — observability output MUST NOT block the close pipeline.
24
+ - Soft-fail (exit 0 with a warning) when NDJSON is missing for a Story or a plan-run has no children — observability output MUST NOT block the close pipeline.
25
25
  - Do not write to disk. Persistence is GitHub; the Skill is read-NDJSON + post-comment only.
26
26
 
27
27
  ## Role
28
28
 
29
29
  Observability writer. Composes the structured `story-perf-summary` /
30
30
  `epic-perf-report` comment bodies the retro composer downstream renders
31
- into the Epic dashboard.
31
+ into the run dashboard.
32
32
 
33
33
  ## When to use
34
34
 
35
- - **Story mode** — after `story-close.js` finishes, the post-merge
35
+ - **Story mode** — after `single-story-close.js` finishes, the close
36
36
  pipeline dispatches this Skill (or the wrapping script) to roll up the
37
37
  Story's NDJSON signals into a single `<!-- structured:story-perf-summary -->`
38
38
  marker comment on the Story ticket.
39
- - **Epic mode** — during `/deliver` Phase 6.0 (or the retro
40
- composer), the Skill fans out across every Story under the Epic,
39
+ - **Plan-run mode** — during run closeout (or the retro
40
+ composer), the Skill fans out across every Story under the plan-run,
41
41
  reads each Story's structured perf summary, and posts a single
42
- `<!-- structured:epic-perf-report -->` marker on the Epic ticket.
42
+ `<!-- structured:epic-perf-report -->` marker on the run ticket.
43
43
 
44
44
  ## Inputs
45
45
 
46
46
  The Skill reads (never writes) the NDJSON signal stream at:
47
47
 
48
48
  ```text
49
- <tempRoot>/epic-<eid>/story-<sid>/signals.ndjson
49
+ <tempRoot>/run-<id>/stories/story-<sid>/signals.ndjson
50
50
  ```
51
51
 
52
52
  Use the `lib/signals/read` async-iterator entry point — never open the
53
53
  file directly. Story mode also reads `phase-timings.json` written by
54
- `post-merge-close.js`.
54
+ the close pipeline.
55
55
 
56
56
  ## Outputs
57
57
 
@@ -64,8 +64,8 @@ the new one.
64
64
 
65
65
  ### Step 1 — Resolve mode
66
66
 
67
- If both `--story <sid>` and `--epic <eid>` are supplied → Story mode.
68
- If only `--epic <eid>` is supplied → Epic mode. The script
67
+ If both Story id and run id are supplied → Story mode.
68
+ If only run id is supplied → plan-run mode. The script
69
69
  `analyze-execution.js` is the dispatcher today; this Skill documents the
70
70
  contract the dispatcher implements.
71
71
 
@@ -77,6 +77,9 @@ node .agents/scripts/analyze-execution.js --story <sid> --epic <eid>
77
77
  node .agents/scripts/analyze-execution.js --epic <eid>
78
78
  ```
79
79
 
80
+ `--epic <eid>` is the legacy spelling of the run-id flag in the current
81
+ CLI; treat `<eid>` as the run id for path/layout purposes.
82
+
80
83
  ### Step 3 — Validate the structured payload before posting
81
84
 
82
85
  The payload must conform to `docs/data-dictionary.md §StoryPerfSummary`
@@ -92,7 +95,7 @@ the contract so we never silently emit malformed comments.
92
95
  - Do **not** rename the structured-marker IDs
93
96
  (`<!-- structured:story-perf-summary -->`,
94
97
  `<!-- structured:epic-perf-report -->`); the retro composer and the
95
- Epic dashboard both grep for them verbatim.
98
+ run dashboard both grep for them verbatim.
96
99
  - Soft-failure mode is intentional: missing NDJSON for a Story or no
97
- children for an Epic returns exit 0 with a warning so close pipelines
100
+ children for a plan-run returns exit 0 with a warning so close pipelines
98
101
  never block on observability output.
@@ -35,12 +35,12 @@ structured divergent and convergent thinking.
35
35
 
36
36
  ## Activation
37
37
 
38
- Called from `/plan` Phase 1 (ideation entry, when no `<epic#>` is
39
- supplied or `--idea "<seed>"` is passed) and Phase 6 (Epic Clarity Gate,
40
- when an existing Epic body fails the section-presence rubric). In Phase 6
41
- the skill is seeded from the **current Epic body** — not a blank seed —
42
- with the rubric gap list (`missingOrPlaceholder`) as the convergence
43
- target.
38
+ Called from [`/plan`](../../../workflows/plan.md) during ideation when the
39
+ operator supplies `--seed "<text>"` (or runs ideation with no seed and
40
+ the host collects one interactively). The skill sharpens freeform intent
41
+ into canonical planning sections that `/plan` then folds into a Story.
42
+ There is no separate Epic Clarity Gate path in v2 — N=1 Story authoring
43
+ with a folded `## Spec` is the lean default.
44
44
 
45
45
  ## Usage
46
46
 
@@ -1,189 +1,45 @@
1
1
  ---
2
2
  name: scope-triage
3
3
  description:
4
- Judge whether a piece of planned work is epic-sized or story-sized before the
5
- planning ceremony is paid for. Emits one of three verdicts
6
- `epic` | `story` | `borderline` over any planning artifact (a one-pager, an
7
- Epic body, or a Story draft). Use from `/plan` Phase 1.5 and any other
8
- planning gate that needs the canonical story-vs-epic rubric.
4
+ Optional split-advisory for `/plan`. Under v2 there is no epic|story routing
5
+ verdict `/plan` always authors Stories. Use this skill only when judging
6
+ whether a draft should stay one Story or legitimately split (near-zero
7
+ overlap or an architectural seam).
9
8
  ---
10
9
 
11
- # scope-triage
10
+ # scope-triage (split advisory)
12
11
 
13
12
  ## Policy Capsule
14
13
 
15
- - Produce exactly one verdict — `epic` | `story` | `borderline` for the
16
- artifact under judgment. Never auto-route on the verdict; the verdict is
17
- **advisory**, and the operator always decides what to do with it.
18
- - Anchor every sizing judgment to the existing sizing SSOT **by reference**:
19
- `DELIVERABLE_GRANULARITY_GUIDANCE` and `DEFAULT_TASK_SIZING` in
14
+ - There is **no** `epic | story | borderline` routing verdict in v2. `/plan`
15
+ is a single path that emits **one Story by default**.
16
+ - This skill is an optional **split advisory**: should the author keep one
17
+ Story, or does the seed clear the default-single split policy?
18
+ - Anchor sizing judgment to `DEFAULT_MODEL_CAPACITY` and
19
+ `DELIVERABLE_GRANULARITY_GUIDANCE` in
20
20
  [`ticket-validator-sizing.js`](../../../scripts/lib/orchestration/ticket-validator-sizing.js).
21
- **Do not restate the numeric thresholds** — read them from that module so the
22
- rubric cannot drift from the validator that enforces them.
23
- - The verdict is **host-LLM judgment**, not a deterministic score. There is no
24
- `--flag`, no scorer, no schema, and no label transition behind this skill —
25
- it is read-on-demand library content, evaluated with judgment per
26
- [`.agents/instructions.md` § 1.B](../../../instructions.md).
27
- - Lead with **cohesion**, the same primary heuristic the sizing SSOT leads
28
- with: one Story is *one coherent change with one reason to exist*. The file /
29
- acceptance ceilings are the backstop, not the first cut.
30
- - Bias toward `epic` only when the work genuinely spans multiple independent
31
- capabilities, crosses subsystems, or carries a real dependency graph. Being
32
- wrong in the `epic` direction is cheap — the Phase 8.3 consolidation pass and
33
- the sizing validator catch an over-planned Story later. Being wrong in the
34
- `story` direction is expensive — a story-sized scope pushed through the full
35
- Epic ceremony pays a sectioned-Epic-body (Tech Spec + Acceptance Table) +
36
- Story backlog +
37
- `epic/<id>` integration-branch tax for a degenerate one-Story output.
38
- - Keep the rubric prose **artifact-agnostic**. The thing under judgment may be a
39
- sharpened one-pager, an existing Epic body, or a draft Story — the rubric
40
- reads the same against all three so every consumer reuses it verbatim.
21
+ Do not restate numeric thresholds.
22
+ - Lead with **cohesion**: one Story is one coherent change with one reason
23
+ to exist. Coupled work stays one Story and uses `## Slicing` for
24
+ intra-session checkpoints.
41
25
 
42
- ## Verdicts
26
+ ## Split policy (when N>1 is allowed)
43
27
 
44
- The skill emits exactly one of three verdicts.
28
+ Split into sibling Stories **only** when:
45
29
 
46
- ### `story`
30
+ 1. **Near-zero overlap** — genuinely independent capabilities that happen to
31
+ share a seed idea, or
32
+ 2. **Architectural seam** — different deployables, or a migration vs the
33
+ feature that consumes it.
47
34
 
48
- The work is a single shippable capability. Signals:
35
+ Otherwise keep one Story. Persist refuses coupled splits via
36
+ `assertAcceptancePartition` (identical AC text across Stories).
49
37
 
50
- - **One capability, one reason to exist.** The artifact describes one coherent
51
- change a reviewer would accept as a single PR — the
52
- `DELIVERABLE_GRANULARITY_GUIDANCE.definition` notion of a Story.
53
- - **Acceptance fits one Story.** The acceptance-criteria list reads as the
54
- binding contract of one coherent capability rather than spanning many
55
- independent outcomes. Acceptance mass is advisory-only (the
56
- `softAcceptanceCount` nudge in `DEFAULT_TASK_SIZING` — there is no hard
57
- ceiling), so the question is cohesion, not count.
58
- - **Footprint fits Story sizing.** The plausible file footprint fits the Story
59
- width described by `DEFAULT_TASK_SIZING` (the `softFiles` / `hardFiles`
60
- knobs); a legitimately broad-but-cohesive change would declare `wide` rather
61
- than being two Stories.
62
- - **No novel architecture, no high-risk trigger.** The work introduces no novel
63
- architectural decision and matches none of the `planning.riskHeuristics` in
64
- `.agentrc.json` (destructive/irreversible changes, shared auth/security,
65
- CI/CD gate changes, monorepo-wide rewrites, destructive migrations).
66
- - **Decomposition would degenerate.** Running it through `/plan` would
67
- plausibly yield exactly **one Feature with one Story** — the shape the Phase
68
- 8.3 consolidation skill flags only after all the spec authoring is already
69
- sunk cost.
38
+ ## Advisory output
70
39
 
71
- ### `epic`
40
+ Emit one of:
72
41
 
73
- The work is genuinely Epic-sized. Signals (any one is sufficient):
42
+ - `keep-single` default; fold complexity into `## Spec` / `## Slicing`
43
+ - `split` — list the proposed Stories and the seam/overlap rationale
74
44
 
75
- - **Multiple independent capabilities.** The artifact bundles two or more
76
- capabilities that each stand alone as a unit of work.
77
- - **Cross-subsystem blast radius.** The change reaches across subsystems that
78
- do not share one cohesive reason to exist.
79
- - **A real dependency graph.** The work has internal ordering — slices that
80
- must land before others — rather than one atomic change.
81
-
82
- ### `borderline`
83
-
84
- The work is genuinely on the line — it could reasonably be one ambitious Story
85
- or a small Epic, and neither call is clearly right. **Present the choice rather
86
- than deciding for the operator.** Do not force a verdict to avoid the third
87
- option; a borderline scope surfaced as borderline is the correct output.
88
-
89
- ## Change-Request Triage Rubric
90
-
91
- A **change request** — "fix this", "tweak that", "extend the existing X" —
92
- is the common case this rubric routes cheaply: a delta against a surface the
93
- project already shipped, not a from-scratch capability. Route it to `story`
94
- by default when all three delta signals hold; treat any one signal's absence
95
- as a prompt to re-check, not an automatic `epic` bump.
96
-
97
- ### Delta signals
98
-
99
- - **Delta to an already-delivered surface.** The request references a
100
- concrete existing capability (a module, workflow, script, or shipped
101
- feature) rather than proposing a new one. "Fix the flaky retry in
102
- `evidence-gate.js`" is a delta; "add a retry framework" is not.
103
- - **Existing corpus covers the touched area.** The project's docs digest
104
- and/or an already-closed or in-flight Epic's Tech Spec section already
105
- describe the surface being changed — the standalone-Story path can draft
106
- against that inherited context (`corpusContext` in the `/plan --idea`
107
- envelope) instead of re-deriving architecture from a blank slate. When no
108
- corpus hit exists for the touched area, that is a signal the request may
109
- be reaching into genuinely new territory — re-check the `epic` signals
110
- below before defaulting to `story`.
111
- - **Footprint fits Story sizing.** The plausible file footprint and
112
- acceptance-criteria count still fit the Story width in
113
- `DEFAULT_TASK_SIZING` (per the `story` verdict signals above) — a change
114
- request that fans out across independent subsystems is sized like an Epic
115
- regardless of how small the originating request sounded.
116
-
117
- ### Story-verdict rationale template
118
-
119
- Use this template to record the verdict — it names which delta signal
120
- carried the call, so a reviewer can sanity-check the routing decision without
121
- re-deriving it:
122
-
123
- ```text
124
- Verdict: story
125
- Delta: <the existing surface this change targets>
126
- Corpus hit: <docs digest section / Epic # and Tech Spec excerpt that covers
127
- this area, or "none — re-checked epic signals, still story-sized">
128
- Footprint: <rough file/AC count vs DEFAULT_TASK_SIZING>
129
- ```
130
-
131
- ### Worked example
132
-
133
- > Request: "The `/plan` standalone-Story path always drafts from a blank
134
- > slate even when a change request is a small delta against something we
135
- > already shipped — thread the existing docs digest and matching Epic
136
- > Tech Spec sections into the draft context."
137
- >
138
- > ```text
139
- > Verdict: story
140
- > Delta: story-plan.js's --emit-context envelope and the plan-story.md
141
- > Phase 2 drafting instructions — both already exist and ship today.
142
- > Corpus hit: Epic #4429's own Tech Spec section (this rubric's parent
143
- > Epic) already describes the docs-digest reuse pattern from
144
- > orchestration/docs-digest.js.
145
- > Footprint: one new lib module (planning-corpus.js), one envelope field,
146
- > one helper-doc instruction — comfortably inside DEFAULT_TASK_SIZING's
147
- > softFiles/softAcceptanceCount band.
148
- > ```
149
-
150
- ## Handoff & no-re-triage rule
151
-
152
- A workflow entered via a scope-triage **handoff** MUST NOT re-triage. A handoff
153
- *is* a triage decision already made — re-running this gate on the receiving side
154
- would re-litigate a settled call and risk a ping-pong between two planning
155
- workflows. Handoff invocations identify themselves as such (e.g. `/plan`
156
- entered via a `/plan` scope-triage escalation, or `/plan` entered
157
- via an `/plan` Phase 1.5 handoff), and the receiving workflow skips its own
158
- scope-triage gate when it detects the handoff marker.
159
-
160
- ## When to use
161
-
162
- - **`/plan` Phase 1.5** (ideation path only) — judge the sharpened
163
- one-pager Phase 1 produced before the Epic ceremony is paid for. The verdict
164
- folds into the existing Phase 1 HITL stop; on a `story` / `borderline`
165
- verdict the operator may hand off to
166
- [`/plan --from-notes`](../../../workflows/helpers/plan-story.md).
167
- - Any other planning gate that needs the canonical story-vs-epic rubric. Keep
168
- the rubric here as the SSOT; consumers reference this file rather than
169
- forking the prose.
170
-
171
- ## Output
172
-
173
- A single verdict (`epic` | `story` | `borderline`) plus a one-paragraph
174
- rationale grounded in the signals above. The rationale names the deciding
175
- signal (cohesion, capability count, blast radius, dependency graph, or sizing
176
- fit) so the operator can sanity-check the call before acting on it.
177
-
178
- ## Anti-patterns to avoid
179
-
180
- - **Restating the sizing numbers.** Reference `DEFAULT_TASK_SIZING` /
181
- `DELIVERABLE_GRANULARITY_GUIDANCE`; never copy the thresholds into this file
182
- (they would drift from the validator).
183
- - **Auto-routing on the verdict.** The verdict is advisory; the operator
184
- decides. Never silently fork a workflow on a `story` verdict.
185
- - **Forcing a binary call.** When the work is genuinely on the line, emit
186
- `borderline` and present the choice. Do not collapse it to `epic` or `story`
187
- to look decisive.
188
- - **Re-triaging after a handoff.** A handoff is a settled decision. Skip the
189
- gate when the invocation identifies itself as a scope-triage handoff.
45
+ Never auto-route. The operator (or `--yes` default = `keep-single`) decides.