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
@@ -1,427 +0,0 @@
1
- ---
2
- description: >-
3
- Helper — not a slash command. Execute one Epic-attached Story end-to-end on
4
- behalf of `/deliver`. Calls `story-init.js`, `cd`s into the worktree,
5
- runs the Story-implementation phase against the inline acceptance[] /
6
- verify[] arrays, writes a `story-run-progress` snapshot per transition, and
7
- finally calls `story-close.js` to merge into the Epic branch and reap the
8
- worktree.
9
- caller: epic-deliver.md
10
- ---
11
-
12
- # helpers/epic-deliver-story — Epic-attached Story worker
13
-
14
- > **Not a slash command.** This file lives in `helpers/` and is not projected
15
- > into the mandrel plugin command tree. It is invoked exclusively by the
16
- > [`/deliver`](deliver-epic.md) per-wave fan-out via an `Agent` tool
17
- > call (`subagent_type: general-purpose`). Run `/deliver <epicId>` from
18
- > the operator surface, not this helper directly.
19
-
20
- ## Overview
21
-
22
- `epic-deliver-story` is the **single-Story worker** for Epic-attached Stories.
23
- It sits below [`/deliver`](deliver-epic.md) (which fans out one Story
24
- sub-agent per slot, per wave) and runs one Story from init to close in one
25
- invocation.
26
-
27
- ```text
28
- /deliver <epicId>
29
- → for each wave N:
30
- Agent tool × concurrencyCap parallel calls (one assistant turn):
31
- helpers/epic-deliver-story <storyId>
32
- → story-init.js
33
- → single Story-implementation phase using inline
34
- acceptance[] / verify[] from the Story body
35
- → story-close.js
36
- ```
37
-
38
- The argument is always a **Story ID** (`type::story`). Epic IDs go through
39
- [`/deliver`](deliver-epic.md).
40
-
41
- **Standalone Stories** (no `Epic: #N` in body) use
42
- [`/deliver`](deliver-stories.md) instead — that workflow's helper
43
- branches from `main`, opens its PR directly to `main`, and skips the
44
- Epic-scoped machinery (cascade, dispatch manifest, dashboard regen). This
45
- helper requires a parent Epic and will refuse to initialize a Story that lacks
46
- the `Epic: #N` reference.
47
-
48
- > **Worktree isolation.** When `delivery.worktreeIsolation.enabled` is
49
- > `true`, Step 0 creates a worktree at `.worktrees/story-<id>/` and prints
50
- > its absolute path as `workCwd`. You **must** `cd` into that path before
51
- > Step 1. The main checkout's HEAD is never moved. See
52
- > [`worktree-lifecycle.md`](worktree-lifecycle.md) for node_modules
53
- > strategies, Windows notes, and escape hatches.
54
-
55
- ---
56
-
57
- ## Non-interactive execution contract
58
-
59
- `epic-deliver-story` runs as a sub-agent of `/deliver`'s per-wave fan-out
60
- (common case) or interactively for a single Story. Sub-agent runs share
61
- the parent's permissions but have **no input channel** mid-run.
62
-
63
- - **Never** ask clarifying questions as a sub-agent. Pick the narrowest
64
- reasonable interpretation that satisfies the Story's AC. If you cannot
65
- proceed, transition to `agent::blocked`, post a `friction` comment with
66
- the decision needed and the default assumption, and exit non-zero.
67
- - **Never** assume tool-permission prompts will be auto-approved. Treat a
68
- blocking prompt as a harness condition and transition to `agent::blocked`.
69
- - **Always** write `story-run-progress` snapshots at every phase
70
- transition so the parent aggregator never falls back to label
71
- re-derivation.
72
-
73
- ---
74
-
75
- ## Step 0 — Initialize (`story-init.js`)
76
-
77
- Run from the **main checkout** (the worktree does not exist yet):
78
-
79
- ```bash
80
- node .agents/scripts/story-init.js --story <storyId>
81
- ```
82
-
83
- **No spec-ticket threading (Story #4324).** The Tech Spec lives as managed
84
- sections of the Epic body — there is no separate Tech-Spec issue, no
85
- `--tech-spec` flag, and no per-Story hierarchy trace to a spec ticket.
86
- Your hydrated prompt already embeds the Epic body (with the
87
- `## Acceptance Table` section stripped), which carries the folded Tech
88
- Spec sections; do not fetch a Tech Spec issue.
89
-
90
- > **Execution mode (sub-agents must read).** This command typically takes
91
- > 3–6 minutes when the worktree's per-tree install runs. Invoke it
92
- > **synchronously** with the Bash tool's maximum timeout
93
- > (`Bash(timeout: 600000)`). Do **not** use `run_in_background` + `Monitor`
94
- > here: `Monitor`'s return is not equivalent to script exit, and a sub-agent
95
- > that exits during a `Monitor` wait kills `story-init.js` mid-batch — the
96
- > worktree is left half-initialized (no `story-init` comment, no Story-level
97
- > `agent::*` label flip) and the parent
98
- > wave aggregator records the Story as failed. The script is idempotent on
99
- > partial state, so the recovery is to re-run it synchronously, but
100
- > prevention is cheaper: just give Bash the 10-minute timeout and block.
101
-
102
- The script validates `type::story`, checks blockers, resolves the parent
103
- Epic id, seeds `story-<id>` from the
104
- Epic branch, and (when worktree isolation is on) runs `git worktree add`
105
- at `.worktrees/story-<id>/`. The Story flips to `agent::executing`. A
106
- `story-init` structured comment is upserted with the Story's inline
107
- `acceptance[]` and `verify[]` arrays from the body.
108
-
109
- Capture `workCwd`, `dependenciesInstalled` (tri-state), and
110
- `context.parentId`. Add `--dry-run` to check
111
- status without git or ticket changes.
112
-
113
- ### Step 0.5 — `cd` into the workCwd
114
-
115
- ```bash
116
- cd "<workCwd from Step 0 result>"
117
- ```
118
-
119
- All subsequent commands run from this directory. The `dependenciesInstalled`
120
- tri-state carries one of three values:
121
-
122
- | Value | Meaning | Action |
123
- | --------- | ---------------------------------------------------------------------------------- | --------------------------------------------------- |
124
- | `true` | Per-worktree install ran and succeeded. | Proceed. |
125
- | `false` | Install was attempted and failed. | The next CLI runs the install before proceeding. |
126
- | `skipped` | No per-worktree install (single-tree, reused worktree, `symlink`, `pnpm-store`). | Trust the strategy. |
127
-
128
- ### Step 0.6 — Initial `story-run-progress` snapshot
129
-
130
- Story #4017 inlined the former standalone prepare CLI into
131
- `story-init.js`: Step 0's init run already applied the install tri-state
132
- in-process (retrying the install command when
133
- `dependenciesInstalled === 'false'`, default `npm ci`) and rendered the
134
- initial snapshot (`phase: "init"`). There is no separate command to run.
135
-
136
- Step 0's init run already upserted the initial `story-run-progress`
137
- snapshot (`phase: "init"`) as a structured comment on the Story — that
138
- comment, refreshed by `story-phase.js` at each transition, is the
139
- authoritative Story-level rollup the parent `/deliver` aggregator reads.
140
- You do **not** relay `prepare.renderedBody` verbatim to chat. Instead,
141
- relay **one line per phase transition** (e.g. `Story #<id>: init →
142
- implementing`), and do the same after every transition in Step 1 / Step 3.
143
- The snapshot CLI carries the full body; the chat line is a terse progress
144
- delta, not a body dump.
145
-
146
- ---
147
-
148
- ## Step 1 — Story implementation
149
-
150
- Run a single Story-implementation phase against the inline `acceptance[]`
151
- / `verify[]` arrays on the Story body.
152
-
153
- 1. Flip the snapshot to the `implementing` phase. Pass `--epic <epicId>`
154
- and `--branch story-<storyId>` from the Step 0 envelope so the render
155
- skips the `readEpicIdFromStory` / `resolveStoryBranch` GitHub reads
156
- (pass these same flags to **every** `story-phase.js` call below):
157
-
158
- ```bash
159
- node .agents/scripts/story-phase.js \
160
- --story <storyId> --epic <epicId> --branch story-<storyId> \
161
- --phase implementing
162
- ```
163
-
164
- 2. Read the Story body's inline `acceptance[]` and `verify[]` arrays
165
- from the `story-init` structured comment (`context.acceptance`,
166
- `context.verify`). Treat the acceptance items as the contract and
167
- the verify items as the canonical at-keyboard checks.
168
-
169
- **Docs context — read the digest, not the full set.** Do **not**
170
- re-read every file in `project.docsContextFiles`. The parent prompt
171
- passes a `docsDigestPath` (the per-Epic docs digest at
172
- `temp/epic-<epicId>/docs-digest.md`, written by
173
- `epic-deliver-prepare.js`). Read that digest — a compact per-file
174
- outline (path, size, heading outline with line numbers, first
175
- paragraph under each `##`) — to decide which docs bear on this Story,
176
- then **pull the full file on demand** (jump to the section at the line
177
- number the digest names) only when relevant. When `docsDigestPath` is
178
- null (the project configured no `docsContextFiles`), there is no
179
- digest and no per-Story docs mandate — read a full doc only if the
180
- Story's own context points you at one. See
181
- [`.agents/instructions.md` § 3](../../instructions.md).
182
-
183
- **Write-time audit checklists — read the threaded `checklistPath`.**
184
- When the parent prompt passes a `checklistPath` (Story #4410 — the
185
- repo-relative path to this Story's footprint-matched **local**-lens
186
- authoring checklists at
187
- `temp/epic-<epicId>/checklists/story-<storyId>.md`), read it before you
188
- write and self-check your change against each listed concern as you
189
- author it. These are the local audit lenses whose `filePatterns` matched
190
- the Story's predicted footprint, distilled to a short checklist and
191
- capped at a hard token budget by `epic-deliver-prepare.js` (matched via
192
- `resolveLensTier(lens) === 'local'` + `matchesAnyFilePattern`, never
193
- `selectAudits` — no provider or git diff runs on that path). When
194
- `checklistPath` is null or absent, the Story's footprint matched no local
195
- lens and there is nothing extra to read.
196
-
197
- 3. Implement the work as one or more commits on `story-<storyId>`.
198
- Author commits directly with the project's editor / `git commit`,
199
- following
200
- [`.agents/rules/git-conventions.md`](../../rules/git-conventions.md):
201
- - Conventional Commit subject (`feat:`, `fix:`, …).
202
- - Reference the parent Story via `(refs #<storyId>)` in the subject
203
- or body.
204
- - The `commit-msg` Husky hook enforces commitlint locally.
205
-
206
- 4. After the final commit lands, run the **bounded acceptance self-eval
207
- loop** (Step 1a below) **before** flipping to `closing`. The
208
- `verify[]` commands are consumed inside that loop as **required
209
- evidence** — they are no longer optional advisory pre-flight.
210
-
211
- 5. Once the eval loop returns `proceed`, flip the snapshot to `closing`
212
- and proceed to Step 3 (Step 3 invokes close directly — it no longer
213
- re-renders the `closing` snapshot, so this is the single `closing`
214
- render):
215
-
216
- ```bash
217
- node .agents/scripts/story-phase.js \
218
- --story <storyId> --epic <epicId> --branch story-<storyId> \
219
- --phase closing
220
- ```
221
-
222
- 6. If blocked (including by the eval loop reaching its round cap with
223
- criteria still unmet — Step 1a), flip the snapshot to `blocked`,
224
- transition the Story to `agent::blocked`, post a `friction` comment,
225
- and exit non-zero:
226
-
227
- ```bash
228
- node .agents/scripts/story-phase.js \
229
- --story <storyId> --epic <epicId> --branch story-<storyId> \
230
- --phase blocked
231
- ```
232
-
233
- ### Step 1a — Bounded acceptance self-eval loop (**required, not optional**)
234
-
235
- After the implementation commits land and **before** the snapshot flips to
236
- `closing`, run the bounded acceptance self-eval loop. The per-round critic
237
- mechanic (fresh-context critic, `verify[]`-as-evidence, the verdict schema, and
238
- the proceed / redraft / block decision) is the single-homed include
239
- [`acceptance-self-eval.md`](acceptance-self-eval.md) — read it and follow it.
240
- The critic reads the Story's inline `acceptance[]` / `verify[]` arrays from the
241
- `story-init` comment (`context.acceptance` / `context.verify`).
242
-
243
- Epic-attached specifics for this path:
244
-
245
- - **Critic evidence-share** (Story #4250). When the critic runs a `verify[]`
246
- command that is byte-identical to a close gate (`lint` / `typecheck`), it
247
- records the pass into the Epic-keyed evidence keyspace via `--epic-id
248
- <epicId>` so `story-close.js` short-circuits the gate at unchanged HEAD.
249
- Run it in the **Story worktree** (`.worktrees/story-<storyId>`):
250
-
251
- ```bash
252
- node .agents/scripts/evidence-gate.js \
253
- --epic-id <epicId> --scope-id <storyId> --gate lint \
254
- --worktree .worktrees/story-<storyId> -- npm run lint
255
- ```
256
-
257
- - **Gate invocation** (pass `--epic <epicId>` so the per-criterion signal lands
258
- on the Epic-scoped stream):
259
-
260
- ```bash
261
- node .agents/scripts/acceptance-eval.js \
262
- --story <storyId> --epic <epicId> --verdict <verdict-path>
263
- ```
264
-
265
- - **On `decision: "proceed"`** → flip the snapshot to `closing` (item 5 above).
266
- - **On `decision: "block"`** → take the blocked path (item 6 above): post a
267
- `friction` comment naming the unmet criteria and their evidence, flip the
268
- snapshot to `blocked`, and exit non-zero. Never silently proceed to close.
269
-
270
- The resume guard is expressed at the Story level: re-entering a
271
- partially-implemented Story picks up from whatever commits are already
272
- on `story-<storyId>`; the agent inspects `git log` to decide what work
273
- remains.
274
-
275
- After each `story-phase.js` call, relay **one line naming the phase
276
- transition** (e.g. `Story #<id>: implementing → closing`) as the Story's
277
- progress update — not the envelope's `renderedBody` verbatim. The
278
- `story-phase.js` CLI has already upserted the full body into the
279
- `story-run-progress` snapshot; that comment is the authoritative rollup
280
- the parent `/deliver` aggregator reads. Skip chat relay entirely when
281
- running in a non-interactive sub-agent context where the parent will
282
- aggregate.
283
-
284
- > Rebase pauses on conflicts → follow
285
- > [`_merge-conflict-template.md`](_merge-conflict-template.md).
286
-
287
- ---
288
-
289
- ## Step 2 — Validate (deferred to close)
290
-
291
- `story-close.js` runs the canonical close-validation chain (typecheck,
292
- lint, test, format, maintainability, coverage, crap) before it merges —
293
- **do not** pre-run those gates here unless interactively iterating on a
294
- fix. (Interactively, `npm run typecheck && npm run lint && npm test` is
295
- fine as advisory pre-flight.)
296
-
297
- ---
298
-
299
- ## Step 3 — Close (`story-close.js`)
300
-
301
- Step 1 item 5 already flipped the snapshot to the `closing` phase, so this
302
- step does **not** re-render it (the duplicate render was removed). Invoke
303
- close directly. Pass the parent Epic id via `--epic <epicId>` from the
304
- Step 0 envelope so close skips re-parsing the Epic hierarchy off the
305
- Story body (which also closes the malformed-`Epic:`-line failure mode).
306
- Pass the main-checkout path via `--cwd` so the merge and branch deletion
307
- run against the main repo (branches checked out in a worktree cannot be
308
- deleted from themselves):
309
-
310
- ```bash
311
- node <main-repo>/.agents/scripts/story-close.js \
312
- --story <storyId> --epic <epicId> --cwd <main-repo>
313
- ```
314
-
315
- In single-tree mode, `--cwd` defaults to `PROJECT_ROOT`. The script merges
316
- into `epic/<epicId>` (`--no-ff`), pushes the Epic branch, deletes the
317
- Story branch, reaps the worktree via `WorktreeManager.reap`, closes the
318
- Story to `agent::done`, runs `cascadeCompletion()`, and regenerates the
319
- Epic dispatch manifest (`--skip-dashboard` to suppress). Output is JSON
320
- with `ticketsClosed[]`, `cascadedTo[]`, and reap status.
321
-
322
- > **Why not GitHub auto-close?** `Closes #N` only fires on default-branch
323
- > merges; close fires the state writer explicitly.
324
-
325
- After close, upsert a terminal snapshot:
326
-
327
- ```bash
328
- node .agents/scripts/story-phase.js \
329
- --story <storyId> --epic <epicId> --branch story-<storyId> \
330
- --phase done
331
- ```
332
-
333
- ---
334
-
335
- ## Step 4 — Return contract (sub-agent path)
336
-
337
- When run as a sub-agent, return one JSON object:
338
-
339
- ```json
340
- {
341
- "storyId": <number>,
342
- "status": "done" | "blocked" | "failed",
343
- "phase": "init|implementing|closing|blocked|done",
344
- "branchDeleted": <boolean>,
345
- "blockerCommentId": <string|null>,
346
- "detail": <string|undefined>,
347
- "renderedBody": <string|undefined>
348
- }
349
- ```
350
-
351
- `status === 'done'` requires the Story closed and
352
- `branchDeleted: true`.
353
-
354
- > **Handoff discipline — report state, not process.** Populate the return
355
- > object with essential terminal state only: the Story branch, the closing
356
- > commit SHA, what changed, and what was verified (this maps onto the
357
- > existing `storyId` / `branchDeleted` / `phase` / `detail` /
358
- > `renderedBody` fields — do **not** add new envelope fields). Do not
359
- > narrate the steps you took to get there, and do not prescribe how
360
- > `/deliver`'s aggregator should do its job downstream. The parent
361
- > reads structured state from this envelope and the `story-run-progress`
362
- > snapshot; prose process commentary only bloats the hydrated prompt
363
- > (`delivery.maxTokenBudget` elision).
364
-
365
- `branchDeleted` is sourced from the `branchDeleted` field of the
366
- `story-close.js` result envelope. It is **independent** of
367
- `worktreeReap.status` — every reap outcome the close reports (including
368
- the Windows-only `stale-registry-entry`, which queues a pending-cleanup
369
- entry for the next drain) is operationally complete. `status: 'done'` is
370
- appropriate when the Story is closed and `branchDeleted: true`,
371
- regardless of the reap status.
372
-
373
- `renderedBody` is the **most recent** `renderedBody` returned by
374
- `story-phase.js` (typically the `phase: 'done'` snapshot at close,
375
- or the `phase: 'blocked'` snapshot on a blocker). The parent
376
- `/deliver` may inline a digest of this in its wave-level Notable
377
- section. When run interactively (no parent), omit it — the authoritative
378
- body lives in the `story-run-progress` snapshot the phase CLI upserted,
379
- and the chat already carries the per-transition progress lines from
380
- Step 1 / Step 3.
381
-
382
- ---
383
-
384
- ## Idempotence
385
-
386
- `story-init.js` re-prints the same `workCwd` without recreating the
387
- worktree. `story-run-progress` is upserted in place. `story-close.js`
388
- short-circuits when the Story branch is already merged and deleted. Re-
389
- running this helper against an already-closed Story is safe.
390
-
391
- ---
392
-
393
- ## Constraints
394
-
395
- - **MUST merge into `epic/<epicId>`, never `main`.** The Story branch's
396
- only integration target is the parent Epic's integration branch. If
397
- `story-close.js` short-circuits, no-ops, or otherwise fails to merge,
398
- **do NOT** fall back to `gh pr create --base main`, **do NOT** invoke
399
- `/deliver` on the same Story, and **do NOT** open a PR by
400
- hand against `main`. Such a PR orphans the change on `main` and forces
401
- a manual `git merge origin/main` back into `epic/<id>` to recover (the
402
- Epic #2880 wave-5 / Story #2960 friction note). The framework refuses
403
- these PRs via the `pr-base-guard` helper wired into every
404
- `createPullRequest` surface; a raw shell `gh pr create` is the only
405
- way to bypass it, and you must not. Diagnose the no-op (was the
406
- branch already merged? is the ticket already closed? is the worktree
407
- on the wrong HEAD?) and re-run close, or transition the Story to
408
- `agent::blocked` with a `friction` comment so the operator can
409
- resolve it.
410
- - **Never** push the Story branch directly to `main`. `story-close.js` is
411
- the only writer that integrates upstream, and only into `epic/<epicId>`.
412
- - **Never** merge across Story branches; cross-Story dependencies are
413
- resolved by wave ordering via `blocked by`.
414
- - **Always** `cd` into the `workCwd` returned by Step 0 before editing, and
415
- prefix every path-based Edit/Write/Read with that absolute `workCwd` root —
416
- the Edit tools ignore the shell cwd. The worktree pins the branch to
417
- `story-<storyId>`, so there is no need to re-check `git branch` before each
418
- commit.
419
- - **Always** upsert a `story-run-progress` snapshot at every phase
420
- transition. The wave aggregator depends on this comment, not labels.
421
- - **Always** pass `--cwd <main-repo>` to `story-close.js` when invoking
422
- from inside a worktree.
423
- - **Label transitions**: drive every `agent::*` state change through
424
- `node .agents/scripts/update-ticket-state.js --ticket <id> --state <state>`.
425
- This CLI is the authoritative mechanism — there is no separate
426
- state-mutation MCP server to degrade from (see
427
- [`.agents/instructions.md` § 1.D](../../instructions.md)).
@@ -1,125 +0,0 @@
1
- ---
2
- description: QA Epic-testing workflow — ingest the agent-driven QA harness sweep as Epic evidence
3
- ---
4
-
5
- # Epic Testing (helper)
6
-
7
- > **Helper module.** Not a slash command. Invoked from the QA gate during
8
- > `/deliver` or directly by an operator when the Epic-testing ticket
9
- > needs refreshed evidence. For ad-hoc acceptance runs use `/qa-run` —
10
- > this helper owns the Epic-evidence ticket lifecycle on top of it.
11
-
12
- Gather and attach the acceptance-suite evidence that gates Epic closure. The
13
- evidence artifact is the **agent-driven QA harness sweep report** produced by
14
- `/qa-run` (scenario pass/fail/blocked totals plus structured
15
- findings), **not** a hand-ticked markdown checklist.
16
-
17
- > **When to run**: During the QA phase of an Epic, after all Story merges
18
- > have landed on the Epic branch and before `/deliver`. Also run ad-hoc
19
- > when a regression is suspected mid-Epic.
20
- >
21
- > **Persona**: `qa-engineer` · **Skills**:
22
- > `stack/qa/gherkin-authoring`, `stack/qa/playwright-bdd`
23
-
24
- ## Step 0 — Resolve Context
25
-
26
- 1. Identify the Epic-testing ticket for the current Epic (the QA evidence
27
- ticket produced by Epic planning).
28
- 2. Confirm the Epic branch is green: all child Story branches merged, CI
29
- passing.
30
- 3. Decide the tag slice to run:
31
- - Epic-wide regression gate → `@smoke and @risk-high` (or the project's
32
- equivalent release gate expression).
33
- - Targeted domain pass → `@domain-<area>`.
34
- - Full acceptance sweep → omit the tag expression.
35
-
36
- The canonical taxonomy lives in `.agents/rules/gherkin-standards.md`. Do
37
- not invent new tags here.
38
-
39
- ## Step 1 — Execute the QA Harness Sweep
40
-
41
- Invoke `/qa-run` with the chosen selector:
42
-
43
- ```text
44
- /qa-run "tag:@smoke and @risk-high"
45
- ```
46
-
47
- The `/qa-run` workflow (`.agents/workflows/qa-run.md`) owns the
48
- execution mechanics — `qa` contract resolution, scenario selection, browser
49
- navigation, and finding capture. This workflow consumes its output.
50
-
51
- If the consuming project runs the suite through its own CI invocation rather
52
- than the slash command, treat the CI run as equivalent provided it produces
53
- the same scenario totals and structured findings.
54
-
55
- ## Step 2 — Collect the Evidence Artifact
56
-
57
- The evidence package for the Epic-testing ticket is:
58
-
59
- - **Sweep summary** — selector applied, scenario totals (passed / failed /
60
- blocked), and the commit SHA the sweep ran against. Required.
61
- - **Structured findings** — the `F#` findings bundle the harness emits
62
- (console / network / visual problems by surface). Required.
63
- - **Accessibility snapshots / traces** — for every failed or blocked scenario.
64
- Required on failure.
65
- - **Drafted follow-up bundle** — the proposed follow-up tickets awaiting
66
- operator sign-off, when the sweep surfaced findings.
67
-
68
- Store the artifacts where your project's evidence convention dictates (CI
69
- artifact store, object storage, or attached to the ticket directly). Link —
70
- do not paste — large artifacts.
71
-
72
- ## Step 3 — Attach and Transition
73
-
74
- 1. Comment on the Epic-testing ticket with:
75
- - The sweep summary from Step 2.
76
- - Links (or attachments) to the structured findings, accessibility
77
- snapshots, and any traces.
78
- - The commit SHA the sweep executed against.
79
- 2. If every scenario passed (no `failed`, no `blocked`), transition the
80
- Epic-testing ticket to `agent::done`.
81
- 3. If any scenario failed or is blocked, leave the ticket in its current
82
- state and open a follow-up ticket per failure with:
83
- - Scenario name and `.feature` file path.
84
- - One-line symptom.
85
- - Link to the failing scenario's snapshot or trace.
86
-
87
- Do not close the Epic-testing ticket on a failed run. `/deliver`
88
- depends on green evidence.
89
-
90
- ## Deprecated — Markdown Checklist Flow
91
-
92
- Earlier revisions of this workflow asked the QA reviewer to tick items in a
93
- hand-maintained markdown checklist (`epic-<id>/test-plan.md`) and attach
94
- that file as evidence. **That flow is deprecated.** Reasons:
95
-
96
- - Hand-ticked checklists drift from the code and cannot be re-executed.
97
- - They do not capture scenario-level pass/fail state, traces, or the SHA the
98
- run targeted.
99
- - They are not machine-readable, so downstream aggregation and trend
100
- reporting are impossible.
101
-
102
- The QA harness sweep replaces the checklist as the single evidence artifact.
103
- Projects still maintaining a checklist should migrate by authoring the
104
- equivalent scenarios in Gherkin (see the `stack/qa/gherkin-authoring` skill)
105
- and deleting the checklist in the same change.
106
-
107
- ## Constraints
108
-
109
- - **Never** substitute a hand-authored checklist or prose summary for the
110
- harness sweep. The evidence must be the output of an actual run.
111
- - **Never** close the Epic-testing ticket while any scenario is `failed` or
112
- `blocked`.
113
- - **Always** record the commit SHA the sweep ran against, so the evidence is
114
- pinned to a verifiable tree state.
115
- - **Always** link a snapshot or trace for failed scenarios; a failure without
116
- evidence is not actionable.
117
-
118
- ## Cross-References
119
-
120
- - Execution mechanics: `.agents/workflows/qa-run.md`.
121
- - Scenario authoring rules: `.agents/rules/gherkin-standards.md`.
122
- - Runner / fixture / trace conventions:
123
- `.agents/skills/stack/qa/playwright-bdd/SKILL.md`.
124
- - Tier responsibilities (unit / contract / acceptance):
125
- `.agents/rules/testing-standards.md`.