mandrel 1.57.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 (843) hide show
  1. package/.agents/README.md +954 -0
  2. package/.agents/docs/SDLC.md +1420 -0
  3. package/.agents/docs/agentrc-reference.json +278 -0
  4. package/.agents/docs/configuration.md +1040 -0
  5. package/.agents/docs/workflows.md +59 -0
  6. package/.agents/instructions.md +384 -0
  7. package/.agents/personas/architect.md +107 -0
  8. package/.agents/personas/devops-engineer.md +36 -0
  9. package/.agents/personas/engineer-mobile.md +119 -0
  10. package/.agents/personas/engineer-web.md +110 -0
  11. package/.agents/personas/engineer.md +90 -0
  12. package/.agents/personas/product.md +88 -0
  13. package/.agents/personas/project-manager.md +110 -0
  14. package/.agents/personas/qa-engineer.md +91 -0
  15. package/.agents/personas/refactorer.md +110 -0
  16. package/.agents/personas/security-engineer.md +112 -0
  17. package/.agents/personas/sre.md +86 -0
  18. package/.agents/personas/technical-writer.md +100 -0
  19. package/.agents/personas/ux-designer.md +95 -0
  20. package/.agents/rules/api-conventions.md +75 -0
  21. package/.agents/rules/changelog-style.md +238 -0
  22. package/.agents/rules/gherkin-standards.md +146 -0
  23. package/.agents/rules/git-conventions.md +146 -0
  24. package/.agents/rules/orchestration-error-handling.md +35 -0
  25. package/.agents/rules/security-baseline.md +92 -0
  26. package/.agents/rules/shell-conventions.md +70 -0
  27. package/.agents/rules/test-seams.md +59 -0
  28. package/.agents/rules/testing-standards.md +177 -0
  29. package/.agents/runtime-deps.json +18 -0
  30. package/.agents/schemas/acceptance-eval-verdict.schema.json +93 -0
  31. package/.agents/schemas/agentrc.schema.json +1583 -0
  32. package/.agents/schemas/audit-results.schema.json +69 -0
  33. package/.agents/schemas/audit-rules.json +134 -0
  34. package/.agents/schemas/audit-rules.schema.json +69 -0
  35. package/.agents/schemas/baselines/baseline-envelope.schema.json +44 -0
  36. package/.agents/schemas/baselines/bundle-size.schema.json +47 -0
  37. package/.agents/schemas/baselines/coverage.schema.json +50 -0
  38. package/.agents/schemas/baselines/crap.schema.json +52 -0
  39. package/.agents/schemas/baselines/duplication.schema.json +62 -0
  40. package/.agents/schemas/baselines/lighthouse.schema.json +59 -0
  41. package/.agents/schemas/baselines/lint.schema.json +47 -0
  42. package/.agents/schemas/baselines/maintainability.schema.json +71 -0
  43. package/.agents/schemas/baselines/mutation.schema.json +52 -0
  44. package/.agents/schemas/crap-baseline.schema.json +57 -0
  45. package/.agents/schemas/crap-report.schema.json +102 -0
  46. package/.agents/schemas/dispatch-manifest.json +232 -0
  47. package/.agents/schemas/epic-perf-report.schema.json +89 -0
  48. package/.agents/schemas/epic-spec.schema.json +183 -0
  49. package/.agents/schemas/friction-event.schema.json +56 -0
  50. package/.agents/schemas/lifecycle/README.md +18 -0
  51. package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +13 -0
  52. package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +13 -0
  53. package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +13 -0
  54. package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +12 -0
  55. package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +13 -0
  56. package/.agents/schemas/lifecycle/checkpoint.written.schema.json +13 -0
  57. package/.agents/schemas/lifecycle/close-validate.end.schema.json +18 -0
  58. package/.agents/schemas/lifecycle/close-validate.start.schema.json +13 -0
  59. package/.agents/schemas/lifecycle/code-review.end.schema.json +30 -0
  60. package/.agents/schemas/lifecycle/code-review.start.schema.json +12 -0
  61. package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +14 -0
  62. package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +13 -0
  63. package/.agents/schemas/lifecycle/epic.blocked.schema.json +13 -0
  64. package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +12 -0
  65. package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +12 -0
  66. package/.agents/schemas/lifecycle/epic.close.end.schema.json +12 -0
  67. package/.agents/schemas/lifecycle/epic.complete.schema.json +13 -0
  68. package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +13 -0
  69. package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +12 -0
  70. package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +13 -0
  71. package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +14 -0
  72. package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +17 -0
  73. package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +15 -0
  74. package/.agents/schemas/lifecycle/epic.plan.end.schema.json +18 -0
  75. package/.agents/schemas/lifecycle/epic.plan.start.schema.json +12 -0
  76. package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +16 -0
  77. package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +12 -0
  78. package/.agents/schemas/lifecycle/epic.watch.end.schema.json +28 -0
  79. package/.agents/schemas/lifecycle/epic.watch.start.schema.json +16 -0
  80. package/.agents/schemas/lifecycle/intervention.recorded.schema.json +15 -0
  81. package/.agents/schemas/lifecycle/ledger-record.schema.json +59 -0
  82. package/.agents/schemas/lifecycle/notification.emitted.schema.json +18 -0
  83. package/.agents/schemas/lifecycle/pr.created.schema.json +14 -0
  84. package/.agents/schemas/lifecycle/retro.end.schema.json +16 -0
  85. package/.agents/schemas/lifecycle/retro.start.schema.json +12 -0
  86. package/.agents/schemas/lifecycle/story.blocked.schema.json +13 -0
  87. package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +17 -0
  88. package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +15 -0
  89. package/.agents/schemas/lifecycle/story.heartbeat.schema.json +20 -0
  90. package/.agents/schemas/lifecycle/story.merged.schema.json +13 -0
  91. package/.agents/schemas/mi-report.schema.json +58 -0
  92. package/.agents/schemas/model-attribution.schema.json +49 -0
  93. package/.agents/schemas/qa-finding.schema.json +133 -0
  94. package/.agents/schemas/qa-ledger.schema.json +89 -0
  95. package/.agents/schemas/risk-verdict.schema.json +53 -0
  96. package/.agents/schemas/signal-event.schema.json +58 -0
  97. package/.agents/schemas/skill.schema.json +31 -0
  98. package/.agents/schemas/skills-index.schema.json +81 -0
  99. package/.agents/schemas/story-perf-summary.schema.json +73 -0
  100. package/.agents/schemas/validation-evidence.schema.json +78 -0
  101. package/.agents/scripts/README.md +93 -0
  102. package/.agents/scripts/acceptance-eval.js +284 -0
  103. package/.agents/scripts/acceptance-spec-reconciler.js +556 -0
  104. package/.agents/scripts/agents-bootstrap-github.js +634 -0
  105. package/.agents/scripts/analyze-execution.js +369 -0
  106. package/.agents/scripts/assert-branch.js +83 -0
  107. package/.agents/scripts/audit-labels-bootstrap.js +253 -0
  108. package/.agents/scripts/audit-to-stories.js +257 -0
  109. package/.agents/scripts/bootstrap.js +1378 -0
  110. package/.agents/scripts/check-baselines.js +81 -0
  111. package/.agents/scripts/check-dead-exports.js +311 -0
  112. package/.agents/scripts/check-doc-links.js +401 -0
  113. package/.agents/scripts/check-gherkin-placeholders.js +663 -0
  114. package/.agents/scripts/check-lifecycle-doc-drift.js +402 -0
  115. package/.agents/scripts/check-lifecycle-lint.js +379 -0
  116. package/.agents/scripts/check-prepush-recovery.js +90 -0
  117. package/.agents/scripts/check-windows-git-perf.js +138 -0
  118. package/.agents/scripts/cleanup-repo-test-temp.js +67 -0
  119. package/.agents/scripts/coverage-capture.js +112 -0
  120. package/.agents/scripts/detect-merges.js +111 -0
  121. package/.agents/scripts/diagnose-friction.js +257 -0
  122. package/.agents/scripts/diagnose.js +240 -0
  123. package/.agents/scripts/dispatcher.js +295 -0
  124. package/.agents/scripts/drain-pending-cleanup.js +147 -0
  125. package/.agents/scripts/epic-audit-prepare.js +419 -0
  126. package/.agents/scripts/epic-audit-recheck.js +241 -0
  127. package/.agents/scripts/epic-deliver-note-intervention.js +192 -0
  128. package/.agents/scripts/epic-deliver-preflight.js +407 -0
  129. package/.agents/scripts/epic-deliver-prepare.js +383 -0
  130. package/.agents/scripts/epic-execute-record-wave.js +463 -0
  131. package/.agents/scripts/epic-plan-clarity.js +201 -0
  132. package/.agents/scripts/epic-plan-decompose.js +79 -0
  133. package/.agents/scripts/epic-plan-healthcheck.js +363 -0
  134. package/.agents/scripts/epic-plan-spec-validate.js +111 -0
  135. package/.agents/scripts/epic-plan-spec.js +198 -0
  136. package/.agents/scripts/epic-reconcile.js +637 -0
  137. package/.agents/scripts/evidence-gate.js +235 -0
  138. package/.agents/scripts/generate-config-docs.js +516 -0
  139. package/.agents/scripts/generate-lifecycle-docs.js +224 -0
  140. package/.agents/scripts/generate-skills-index.js +252 -0
  141. package/.agents/scripts/generate-workflows-doc.js +168 -0
  142. package/.agents/scripts/git-cleanup.js +124 -0
  143. package/.agents/scripts/git-pr-quality-gate.js +203 -0
  144. package/.agents/scripts/git-rebase-and-resolve.js +234 -0
  145. package/.agents/scripts/hierarchy-gate.js +176 -0
  146. package/.agents/scripts/hydrate-context.js +179 -0
  147. package/.agents/scripts/install-matrix-assert.js +282 -0
  148. package/.agents/scripts/lib/Graph.js +326 -0
  149. package/.agents/scripts/lib/ITicketingProvider.js +349 -0
  150. package/.agents/scripts/lib/Logger.js +194 -0
  151. package/.agents/scripts/lib/audit-suite/cli.js +64 -0
  152. package/.agents/scripts/lib/audit-suite/findings.js +164 -0
  153. package/.agents/scripts/lib/audit-suite/frontmatter-lint.js +32 -0
  154. package/.agents/scripts/lib/audit-suite/frontmatter.js +110 -0
  155. package/.agents/scripts/lib/audit-suite/index.js +22 -0
  156. package/.agents/scripts/lib/audit-suite/runner.js +233 -0
  157. package/.agents/scripts/lib/audit-suite/selector.js +235 -0
  158. package/.agents/scripts/lib/audit-suite/substitutions.js +124 -0
  159. package/.agents/scripts/lib/audit-suite/workflow-loader.js +49 -0
  160. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +130 -0
  161. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +114 -0
  162. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +93 -0
  163. package/.agents/scripts/lib/audit-to-stories/group-findings.js +265 -0
  164. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +246 -0
  165. package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +160 -0
  166. package/.agents/scripts/lib/auto-refresh-baselines.js +308 -0
  167. package/.agents/scripts/lib/baseline-loader.js +0 -0
  168. package/.agents/scripts/lib/baseline-schema-registry.js +69 -0
  169. package/.agents/scripts/lib/baseline-snapshot.js +716 -0
  170. package/.agents/scripts/lib/baselines/component-matcher.js +21 -0
  171. package/.agents/scripts/lib/baselines/components.js +126 -0
  172. package/.agents/scripts/lib/baselines/diff-scope-cli.js +203 -0
  173. package/.agents/scripts/lib/baselines/duplication-scanner.js +220 -0
  174. package/.agents/scripts/lib/baselines/env-overrides.js +129 -0
  175. package/.agents/scripts/lib/baselines/envelope.js +368 -0
  176. package/.agents/scripts/lib/baselines/exit-codes.js +89 -0
  177. package/.agents/scripts/lib/baselines/git-base.js +0 -0
  178. package/.agents/scripts/lib/baselines/kernel.js +111 -0
  179. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +220 -0
  180. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +157 -0
  181. package/.agents/scripts/lib/baselines/kinds/coverage.js +194 -0
  182. package/.agents/scripts/lib/baselines/kinds/crap.js +555 -0
  183. package/.agents/scripts/lib/baselines/kinds/duplication.js +197 -0
  184. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +185 -0
  185. package/.agents/scripts/lib/baselines/kinds/lint.js +172 -0
  186. package/.agents/scripts/lib/baselines/kinds/maintainability.js +340 -0
  187. package/.agents/scripts/lib/baselines/kinds/mutation.js +153 -0
  188. package/.agents/scripts/lib/baselines/path-canon.js +279 -0
  189. package/.agents/scripts/lib/baselines/preview-gates.js +298 -0
  190. package/.agents/scripts/lib/baselines/reader.js +321 -0
  191. package/.agents/scripts/lib/baselines/refresh-service.js +733 -0
  192. package/.agents/scripts/lib/baselines/scope.js +291 -0
  193. package/.agents/scripts/lib/baselines/writer.js +312 -0
  194. package/.agents/scripts/lib/bdd-runner-detect.js +417 -0
  195. package/.agents/scripts/lib/bdd-scenario-scanner.js +310 -0
  196. package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +202 -0
  197. package/.agents/scripts/lib/bootstrap/branch-protection.js +222 -0
  198. package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +171 -0
  199. package/.agents/scripts/lib/bootstrap/commit-push.js +146 -0
  200. package/.agents/scripts/lib/bootstrap/gh-list.js +153 -0
  201. package/.agents/scripts/lib/bootstrap/gh-preflight.js +306 -0
  202. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +89 -0
  203. package/.agents/scripts/lib/bootstrap/install-ledger.js +174 -0
  204. package/.agents/scripts/lib/bootstrap/manifest.js +272 -0
  205. package/.agents/scripts/lib/bootstrap/merge-methods.js +108 -0
  206. package/.agents/scripts/lib/bootstrap/preflight.js +195 -0
  207. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +801 -0
  208. package/.agents/scripts/lib/bootstrap/prompt.js +480 -0
  209. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +370 -0
  210. package/.agents/scripts/lib/bootstrap/summary.js +75 -0
  211. package/.agents/scripts/lib/bootstrap/workflow-audit.js +256 -0
  212. package/.agents/scripts/lib/branch-name-guard.js +98 -0
  213. package/.agents/scripts/lib/c8-cli-path.js +21 -0
  214. package/.agents/scripts/lib/changed-files.js +184 -0
  215. package/.agents/scripts/lib/checks/baseline-drift-main-checkout.js +104 -0
  216. package/.agents/scripts/lib/checks/core-bare-clean.js +48 -0
  217. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +54 -0
  218. package/.agents/scripts/lib/checks/index.js +288 -0
  219. package/.agents/scripts/lib/checks/push-hook-parity.js +106 -0
  220. package/.agents/scripts/lib/checks/stale-origin-epic.js +49 -0
  221. package/.agents/scripts/lib/checks/state.js +558 -0
  222. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +186 -0
  223. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +182 -0
  224. package/.agents/scripts/lib/checks/windows-coverage-noise-floor.js +92 -0
  225. package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +81 -0
  226. package/.agents/scripts/lib/checks/worktree-residue-biome.js +55 -0
  227. package/.agents/scripts/lib/cli/parse-numeric.js +60 -0
  228. package/.agents/scripts/lib/cli/standard-args.js +351 -0
  229. package/.agents/scripts/lib/cli-args.js +286 -0
  230. package/.agents/scripts/lib/cli-utils.js +69 -0
  231. package/.agents/scripts/lib/close-validation/projections/head-sha.js +44 -0
  232. package/.agents/scripts/lib/close-validation/projections/inputs.js +86 -0
  233. package/.agents/scripts/lib/close-validation/projections/maintainability.js +286 -0
  234. package/.agents/scripts/lib/close-validation.js +897 -0
  235. package/.agents/scripts/lib/codebase-snapshot.js +513 -0
  236. package/.agents/scripts/lib/command-header.js +33 -0
  237. package/.agents/scripts/lib/config/acceptance-eval.js +95 -0
  238. package/.agents/scripts/lib/config/baselines.js +60 -0
  239. package/.agents/scripts/lib/config/ci.js +30 -0
  240. package/.agents/scripts/lib/config/commands.js +36 -0
  241. package/.agents/scripts/lib/config/defaults.js +119 -0
  242. package/.agents/scripts/lib/config/explain.js +348 -0
  243. package/.agents/scripts/lib/config/gates/bundle-size.schema.js +23 -0
  244. package/.agents/scripts/lib/config/gates/coverage.schema.js +18 -0
  245. package/.agents/scripts/lib/config/gates/crap.schema.js +33 -0
  246. package/.agents/scripts/lib/config/gates/duplication.schema.js +26 -0
  247. package/.agents/scripts/lib/config/gates/index.js +36 -0
  248. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +23 -0
  249. package/.agents/scripts/lib/config/gates/lint.schema.js +9 -0
  250. package/.agents/scripts/lib/config/gates/maintainability.schema.js +20 -0
  251. package/.agents/scripts/lib/config/gates/mutation.schema.js +12 -0
  252. package/.agents/scripts/lib/config/gates/shared.js +117 -0
  253. package/.agents/scripts/lib/config/github.js +122 -0
  254. package/.agents/scripts/lib/config/lifecycle.js +40 -0
  255. package/.agents/scripts/lib/config/limits.js +211 -0
  256. package/.agents/scripts/lib/config/paths.js +73 -0
  257. package/.agents/scripts/lib/config/preflight.js +58 -0
  258. package/.agents/scripts/lib/config/quality.js +665 -0
  259. package/.agents/scripts/lib/config/retro.js +77 -0
  260. package/.agents/scripts/lib/config/runners.js +105 -0
  261. package/.agents/scripts/lib/config/runtime.js +167 -0
  262. package/.agents/scripts/lib/config/shared.js +46 -0
  263. package/.agents/scripts/lib/config/sync-agentrc.js +243 -0
  264. package/.agents/scripts/lib/config/temp-paths.js +373 -0
  265. package/.agents/scripts/lib/config/validate-orchestration.js +81 -0
  266. package/.agents/scripts/lib/config/worktree-isolation.js +80 -0
  267. package/.agents/scripts/lib/config-resolver.js +298 -0
  268. package/.agents/scripts/lib/config-schema-shared.js +32 -0
  269. package/.agents/scripts/lib/config-schema.js +20 -0
  270. package/.agents/scripts/lib/config-settings-schema-delivery.js +332 -0
  271. package/.agents/scripts/lib/config-settings-schema-quality.js +165 -0
  272. package/.agents/scripts/lib/config-settings-schema.js +420 -0
  273. package/.agents/scripts/lib/coverage-baseline.js +352 -0
  274. package/.agents/scripts/lib/coverage-capture.js +195 -0
  275. package/.agents/scripts/lib/coverage-utils.js +239 -0
  276. package/.agents/scripts/lib/cpu-pool.js +223 -0
  277. package/.agents/scripts/lib/crap-engine.js +119 -0
  278. package/.agents/scripts/lib/crap-utils.js +479 -0
  279. package/.agents/scripts/lib/degraded-mode.js +69 -0
  280. package/.agents/scripts/lib/dependency-parser.js +129 -0
  281. package/.agents/scripts/lib/duplicate-search.js +189 -0
  282. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +70 -0
  283. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +197 -0
  284. package/.agents/scripts/lib/dynamic-workflow/capability.js +396 -0
  285. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +80 -0
  286. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +72 -0
  287. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +90 -0
  288. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +43 -0
  289. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +83 -0
  290. package/.agents/scripts/lib/env-loader.js +52 -0
  291. package/.agents/scripts/lib/epic-merge-lock.js +239 -0
  292. package/.agents/scripts/lib/epic-plan-clarity.js +142 -0
  293. package/.agents/scripts/lib/epic-plan-ideation.js +228 -0
  294. package/.agents/scripts/lib/error-redactor.js +125 -0
  295. package/.agents/scripts/lib/errors/index.js +67 -0
  296. package/.agents/scripts/lib/feedback-loop/audit-results-graduator.js +230 -0
  297. package/.agents/scripts/lib/feedback-loop/code-review-graduator.js +207 -0
  298. package/.agents/scripts/lib/feedback-loop/graduator-core.js +421 -0
  299. package/.agents/scripts/lib/feedback-loop/memory-freshness.js +480 -0
  300. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +229 -0
  301. package/.agents/scripts/lib/findings/classify-finding.js +195 -0
  302. package/.agents/scripts/lib/findings/promote-finding.js +353 -0
  303. package/.agents/scripts/lib/findings/route-finding.js +283 -0
  304. package/.agents/scripts/lib/findings/semantic-issue-search.js +179 -0
  305. package/.agents/scripts/lib/findings/severity.js +102 -0
  306. package/.agents/scripts/lib/gates/baseline-store.js +106 -0
  307. package/.agents/scripts/lib/gates/friction.js +43 -0
  308. package/.agents/scripts/lib/gh-exec.js +553 -0
  309. package/.agents/scripts/lib/git/cached-fetch.js +0 -0
  310. package/.agents/scripts/lib/git/sync-from-base.js +162 -0
  311. package/.agents/scripts/lib/git-branch-cleanup.js +213 -0
  312. package/.agents/scripts/lib/git-branch-lifecycle.js +353 -0
  313. package/.agents/scripts/lib/git-merge-orchestrator.js +261 -0
  314. package/.agents/scripts/lib/git-utils.js +363 -0
  315. package/.agents/scripts/lib/github-url.js +29 -0
  316. package/.agents/scripts/lib/install-cmd-parser.js +51 -0
  317. package/.agents/scripts/lib/issue-link-parser.js +74 -0
  318. package/.agents/scripts/lib/json-utils.js +60 -0
  319. package/.agents/scripts/lib/label-constants.js +169 -0
  320. package/.agents/scripts/lib/label-taxonomy.js +200 -0
  321. package/.agents/scripts/lib/maintainability-engine.js +164 -0
  322. package/.agents/scripts/lib/maintainability-utils.js +343 -0
  323. package/.agents/scripts/lib/mandrel-catalog.js +170 -0
  324. package/.agents/scripts/lib/mutation/baseline-snapshot.js +238 -0
  325. package/.agents/scripts/lib/mutation/config-detector.js +119 -0
  326. package/.agents/scripts/lib/mutation/stryker-runner.js +306 -0
  327. package/.agents/scripts/lib/mutation/survivor-report.js +160 -0
  328. package/.agents/scripts/lib/notifications/notifier.js +75 -0
  329. package/.agents/scripts/lib/observability/active-story-env.js +182 -0
  330. package/.agents/scripts/lib/observability/baseline-refresh-rate.js +221 -0
  331. package/.agents/scripts/lib/observability/perf-aggregator.js +887 -0
  332. package/.agents/scripts/lib/observability/perf-report-readers.js +319 -0
  333. package/.agents/scripts/lib/observability/perf-report-render.js +182 -0
  334. package/.agents/scripts/lib/observability/signals-writer.js +296 -0
  335. package/.agents/scripts/lib/observability/source-classifier.js +103 -0
  336. package/.agents/scripts/lib/observability/tool-trace-hook.js +417 -0
  337. package/.agents/scripts/lib/onboard/detect-stack.js +300 -0
  338. package/.agents/scripts/lib/onboard/scaffold-docs.js +128 -0
  339. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +173 -0
  340. package/.agents/scripts/lib/orchestration/cascade-grouping.js +275 -0
  341. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +131 -0
  342. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +80 -0
  343. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +132 -0
  344. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +142 -0
  345. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +149 -0
  346. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +158 -0
  347. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +56 -0
  348. package/.agents/scripts/lib/orchestration/code-review.js +652 -0
  349. package/.agents/scripts/lib/orchestration/column-sync.js +286 -0
  350. package/.agents/scripts/lib/orchestration/context-envelope.js +280 -0
  351. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +581 -0
  352. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +88 -0
  353. package/.agents/scripts/lib/orchestration/detectors-phase.js +188 -0
  354. package/.agents/scripts/lib/orchestration/dispatch-engine.js +144 -0
  355. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +206 -0
  356. package/.agents/scripts/lib/orchestration/doc-reader.js +94 -0
  357. package/.agents/scripts/lib/orchestration/epic-cleanup.js +473 -0
  358. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +310 -0
  359. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/cli.js +167 -0
  360. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +151 -0
  361. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +74 -0
  362. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +78 -0
  363. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +72 -0
  364. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +155 -0
  365. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +321 -0
  366. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +75 -0
  367. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +86 -0
  368. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +235 -0
  369. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/authoring-context.js +197 -0
  370. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/cli-args.js +48 -0
  371. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +94 -0
  372. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +414 -0
  373. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +55 -0
  374. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +105 -0
  375. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +235 -0
  376. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +120 -0
  377. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +118 -0
  378. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +295 -0
  379. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +186 -0
  380. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +50 -0
  381. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +146 -0
  382. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +110 -0
  383. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +392 -0
  384. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +217 -0
  385. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +235 -0
  386. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +69 -0
  387. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +32 -0
  388. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +291 -0
  389. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +175 -0
  390. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +37 -0
  391. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +127 -0
  392. package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +400 -0
  393. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +285 -0
  394. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +66 -0
  395. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +797 -0
  396. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +619 -0
  397. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +335 -0
  398. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +230 -0
  399. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +363 -0
  400. package/.agents/scripts/lib/orchestration/error-journal.js +139 -0
  401. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +31 -0
  402. package/.agents/scripts/lib/orchestration/file-assumptions.js +506 -0
  403. package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +116 -0
  404. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +241 -0
  405. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +489 -0
  406. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +88 -0
  407. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +219 -0
  408. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +309 -0
  409. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +99 -0
  410. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +123 -0
  411. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +57 -0
  412. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +114 -0
  413. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +426 -0
  414. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +84 -0
  415. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +365 -0
  416. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +72 -0
  417. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +69 -0
  418. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +214 -0
  419. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +137 -0
  420. package/.agents/scripts/lib/orchestration/label-transitions.js +43 -0
  421. package/.agents/scripts/lib/orchestration/lifecycle/bus.js +309 -0
  422. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +147 -0
  423. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +155 -0
  424. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +226 -0
  425. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +69 -0
  426. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +378 -0
  427. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +248 -0
  428. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +527 -0
  429. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +259 -0
  430. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +278 -0
  431. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +355 -0
  432. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +647 -0
  433. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +331 -0
  434. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +140 -0
  435. package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +421 -0
  436. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +168 -0
  437. package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +668 -0
  438. package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +322 -0
  439. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +114 -0
  440. package/.agents/scripts/lib/orchestration/manifest-builder.js +216 -0
  441. package/.agents/scripts/lib/orchestration/model-attribution.js +390 -0
  442. package/.agents/scripts/lib/orchestration/parked-follow-ons.js +147 -0
  443. package/.agents/scripts/lib/orchestration/phase-runner.js +87 -0
  444. package/.agents/scripts/lib/orchestration/plan-review-routing.js +63 -0
  445. package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +86 -0
  446. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +212 -0
  447. package/.agents/scripts/lib/orchestration/planning-context-budget.js +213 -0
  448. package/.agents/scripts/lib/orchestration/planning-risk.js +155 -0
  449. package/.agents/scripts/lib/orchestration/planning-state-manager.js +318 -0
  450. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +56 -0
  451. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +33 -0
  452. package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +78 -0
  453. package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +68 -0
  454. package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +118 -0
  455. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +396 -0
  456. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +205 -0
  457. package/.agents/scripts/lib/orchestration/pr-base-guard.js +47 -0
  458. package/.agents/scripts/lib/orchestration/preflight-cache.js +164 -0
  459. package/.agents/scripts/lib/orchestration/reassert-status-column.js +202 -0
  460. package/.agents/scripts/lib/orchestration/reconciler.js +137 -0
  461. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +152 -0
  462. package/.agents/scripts/lib/orchestration/recut.js +56 -0
  463. package/.agents/scripts/lib/orchestration/resolves-token.js +127 -0
  464. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +94 -0
  465. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +448 -0
  466. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +335 -0
  467. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +133 -0
  468. package/.agents/scripts/lib/orchestration/retro-heuristics.js +57 -0
  469. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +275 -0
  470. package/.agents/scripts/lib/orchestration/retro-proposals.js +395 -0
  471. package/.agents/scripts/lib/orchestration/retro-runner.js +171 -0
  472. package/.agents/scripts/lib/orchestration/review-depth.js +93 -0
  473. package/.agents/scripts/lib/orchestration/review-providers/codex.js +363 -0
  474. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +205 -0
  475. package/.agents/scripts/lib/orchestration/review-providers/native.js +805 -0
  476. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +73 -0
  477. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +396 -0
  478. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +373 -0
  479. package/.agents/scripts/lib/orchestration/review-providers/types.js +89 -0
  480. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +107 -0
  481. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +159 -0
  482. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +194 -0
  483. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +81 -0
  484. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +190 -0
  485. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +70 -0
  486. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +106 -0
  487. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +42 -0
  488. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +73 -0
  489. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +225 -0
  490. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +315 -0
  491. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +149 -0
  492. package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +110 -0
  493. package/.agents/scripts/lib/orchestration/spec-freshness.js +320 -0
  494. package/.agents/scripts/lib/orchestration/spec-renderer.js +456 -0
  495. package/.agents/scripts/lib/orchestration/spec-section-validator.js +80 -0
  496. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +797 -0
  497. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +163 -0
  498. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +152 -0
  499. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +387 -0
  500. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +266 -0
  501. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +48 -0
  502. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +67 -0
  503. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +161 -0
  504. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +117 -0
  505. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +86 -0
  506. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +147 -0
  507. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +142 -0
  508. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +62 -0
  509. package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +221 -0
  510. package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +123 -0
  511. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +216 -0
  512. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +636 -0
  513. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +198 -0
  514. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +105 -0
  515. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +222 -0
  516. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +220 -0
  517. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +291 -0
  518. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +234 -0
  519. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +110 -0
  520. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +86 -0
  521. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +112 -0
  522. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +157 -0
  523. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +434 -0
  524. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +290 -0
  525. package/.agents/scripts/lib/orchestration/story-close-recovery.js +643 -0
  526. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +67 -0
  527. package/.agents/scripts/lib/orchestration/task-body-validator.js +391 -0
  528. package/.agents/scripts/lib/orchestration/ticket-lease.js +358 -0
  529. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +783 -0
  530. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +367 -0
  531. package/.agents/scripts/lib/orchestration/ticket-validator.js +691 -0
  532. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +723 -0
  533. package/.agents/scripts/lib/orchestration/ticketing/reads.js +474 -0
  534. package/.agents/scripts/lib/orchestration/ticketing/state.js +559 -0
  535. package/.agents/scripts/lib/orchestration/ticketing.js +55 -0
  536. package/.agents/scripts/lib/orchestration/wave-marker.js +28 -0
  537. package/.agents/scripts/lib/orchestration/wave-record-io.js +277 -0
  538. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +189 -0
  539. package/.agents/scripts/lib/orchestration/wave-record-projection.js +423 -0
  540. package/.agents/scripts/lib/path-security.js +25 -0
  541. package/.agents/scripts/lib/plan-phase-cleanup.js +125 -0
  542. package/.agents/scripts/lib/preflight-runner.js +196 -0
  543. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +95 -0
  544. package/.agents/scripts/lib/presentation/manifest-builder.js +245 -0
  545. package/.agents/scripts/lib/presentation/manifest-formatter.js +243 -0
  546. package/.agents/scripts/lib/presentation/manifest-helpers.js +213 -0
  547. package/.agents/scripts/lib/presentation/manifest-persistence.js +262 -0
  548. package/.agents/scripts/lib/presentation/manifest-procedures.js +55 -0
  549. package/.agents/scripts/lib/presentation/manifest-render-waves.js +252 -0
  550. package/.agents/scripts/lib/presentation/manifest-renderer.js +188 -0
  551. package/.agents/scripts/lib/presentation/manifest-story-views.js +119 -0
  552. package/.agents/scripts/lib/provider-factory.js +80 -0
  553. package/.agents/scripts/lib/push-epic-retry.js +209 -0
  554. package/.agents/scripts/lib/qa/console-allowlist.js +151 -0
  555. package/.agents/scripts/lib/qa/coverage-report.js +181 -0
  556. package/.agents/scripts/lib/qa/coverage-verdict.js +296 -0
  557. package/.agents/scripts/lib/qa/propose-missing-test.js +95 -0
  558. package/.agents/scripts/lib/qa/qa-context-hydrator.js +296 -0
  559. package/.agents/scripts/lib/qa/qa-session.js +197 -0
  560. package/.agents/scripts/lib/qa/redact-evidence.js +245 -0
  561. package/.agents/scripts/lib/qa/resolve-qa-contract.js +190 -0
  562. package/.agents/scripts/lib/qa/resolve-selection.js +373 -0
  563. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +100 -0
  564. package/.agents/scripts/lib/runtime-deps/manifest.js +96 -0
  565. package/.agents/scripts/lib/runtime-deps/preflight.js +78 -0
  566. package/.agents/scripts/lib/runtime-deps/scan-imports.js +202 -0
  567. package/.agents/scripts/lib/signals/detectors/common.js +36 -0
  568. package/.agents/scripts/lib/signals/detectors/hotspot.js +298 -0
  569. package/.agents/scripts/lib/signals/detectors/index.js +14 -0
  570. package/.agents/scripts/lib/signals/detectors/retry.js +289 -0
  571. package/.agents/scripts/lib/signals/detectors/rework.js +204 -0
  572. package/.agents/scripts/lib/signals/index.js +39 -0
  573. package/.agents/scripts/lib/signals/read.js +268 -0
  574. package/.agents/scripts/lib/signals/schema.js +225 -0
  575. package/.agents/scripts/lib/signals/span-tree.js +290 -0
  576. package/.agents/scripts/lib/signals/write.js +19 -0
  577. package/.agents/scripts/lib/single-story/confirm-merge.js +201 -0
  578. package/.agents/scripts/lib/single-story/story-merged-notify.js +126 -0
  579. package/.agents/scripts/lib/single-story-sweep/protection.js +274 -0
  580. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +169 -0
  581. package/.agents/scripts/lib/single-story-sweep.js +329 -0
  582. package/.agents/scripts/lib/skills/parse-skill.js +202 -0
  583. package/.agents/scripts/lib/skills/walk-skill-files.js +56 -0
  584. package/.agents/scripts/lib/spec/index.js +36 -0
  585. package/.agents/scripts/lib/spec/loader.js +425 -0
  586. package/.agents/scripts/lib/spec/state.js +217 -0
  587. package/.agents/scripts/lib/story-body/story-body.js +743 -0
  588. package/.agents/scripts/lib/story-init/blocker-validator.js +68 -0
  589. package/.agents/scripts/lib/story-init/branch-initializer.js +422 -0
  590. package/.agents/scripts/lib/story-init/context-resolver.js +92 -0
  591. package/.agents/scripts/lib/story-init/donor-precheck.js +207 -0
  592. package/.agents/scripts/lib/story-init/hierarchy-tracer.js +36 -0
  593. package/.agents/scripts/lib/story-init/state-transitioner.js +80 -0
  594. package/.agents/scripts/lib/story-init/task-graph-builder.js +114 -0
  595. package/.agents/scripts/lib/story-init/transition-summary.js +34 -0
  596. package/.agents/scripts/lib/story-lifecycle.js +186 -0
  597. package/.agents/scripts/lib/story-plan.js +246 -0
  598. package/.agents/scripts/lib/task-utils.js +26 -0
  599. package/.agents/scripts/lib/templates/decomposer-prompts.js +168 -0
  600. package/.agents/scripts/lib/test-env.js +30 -0
  601. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +52 -0
  602. package/.agents/scripts/lib/test-isolate/list-files.js +90 -0
  603. package/.agents/scripts/lib/test-isolate/parse-tap.js +75 -0
  604. package/.agents/scripts/lib/test-isolate/runner.js +483 -0
  605. package/.agents/scripts/lib/test-profile/parse-tap.js +136 -0
  606. package/.agents/scripts/lib/test-profile/render-report.js +45 -0
  607. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +35 -0
  608. package/.agents/scripts/lib/test-tiers.js +94 -0
  609. package/.agents/scripts/lib/util/concurrent-map.js +59 -0
  610. package/.agents/scripts/lib/util/phase-timer-state.js +72 -0
  611. package/.agents/scripts/lib/util/phase-timer.js +163 -0
  612. package/.agents/scripts/lib/util/poll-loop.js +86 -0
  613. package/.agents/scripts/lib/util/with-timeout.js +32 -0
  614. package/.agents/scripts/lib/validation-evidence.js +323 -0
  615. package/.agents/scripts/lib/wave-runner/tick.js +665 -0
  616. package/.agents/scripts/lib/wave-runner/wave-checkpoint.js +91 -0
  617. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +19 -0
  618. package/.agents/scripts/lib/workers/crap-worker.js +197 -0
  619. package/.agents/scripts/lib/workers/maintainability-report-worker.js +137 -0
  620. package/.agents/scripts/lib/workers/maintainability-worker.js +79 -0
  621. package/.agents/scripts/lib/workspace-provisioner.js +189 -0
  622. package/.agents/scripts/lib/worktree/bootstrapper.js +48 -0
  623. package/.agents/scripts/lib/worktree/inspector.js +140 -0
  624. package/.agents/scripts/lib/worktree/lifecycle/creation.js +118 -0
  625. package/.agents/scripts/lib/worktree/lifecycle/drift-detection.js +62 -0
  626. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +276 -0
  627. package/.agents/scripts/lib/worktree/lifecycle/gc.js +49 -0
  628. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +178 -0
  629. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +264 -0
  630. package/.agents/scripts/lib/worktree/lifecycle/precheck.js +100 -0
  631. package/.agents/scripts/lib/worktree/lifecycle/reap.js +588 -0
  632. package/.agents/scripts/lib/worktree/lifecycle/registry-sync.js +124 -0
  633. package/.agents/scripts/lib/worktree/lifecycle/shared.js +26 -0
  634. package/.agents/scripts/lib/worktree/lifecycle-manager.js +40 -0
  635. package/.agents/scripts/lib/worktree/node-modules-strategy.js +349 -0
  636. package/.agents/scripts/lib/worktree-manager.js +243 -0
  637. package/.agents/scripts/lifecycle-diff.js +206 -0
  638. package/.agents/scripts/lifecycle-emit-story-dispatch.js +194 -0
  639. package/.agents/scripts/lifecycle-emit.js +479 -0
  640. package/.agents/scripts/lint-baseline.js +507 -0
  641. package/.agents/scripts/lint-label-vocabulary.js +237 -0
  642. package/.agents/scripts/loc-delta.js +205 -0
  643. package/.agents/scripts/notify.js +307 -0
  644. package/.agents/scripts/package.json +3 -0
  645. package/.agents/scripts/post-structured-comment.js +127 -0
  646. package/.agents/scripts/pr-watch-with-update.js +152 -0
  647. package/.agents/scripts/providers/github/auth.js +65 -0
  648. package/.agents/scripts/providers/github/board-add.js +63 -0
  649. package/.agents/scripts/providers/github/branch-protection.js +186 -0
  650. package/.agents/scripts/providers/github/cache.js +72 -0
  651. package/.agents/scripts/providers/github/comments.js +131 -0
  652. package/.agents/scripts/providers/github/compose.js +111 -0
  653. package/.agents/scripts/providers/github/errors.js +242 -0
  654. package/.agents/scripts/providers/github/issues.js +242 -0
  655. package/.agents/scripts/providers/github/labels.js +179 -0
  656. package/.agents/scripts/providers/github/mappers.js +126 -0
  657. package/.agents/scripts/providers/github/merge-methods.js +82 -0
  658. package/.agents/scripts/providers/github/project-board.js +47 -0
  659. package/.agents/scripts/providers/github/projects-v2-graphql.js +472 -0
  660. package/.agents/scripts/providers/github/prs.js +103 -0
  661. package/.agents/scripts/providers/github/request-helpers.js +110 -0
  662. package/.agents/scripts/providers/github/sub-issues.js +369 -0
  663. package/.agents/scripts/providers/github/tickets.js +381 -0
  664. package/.agents/scripts/providers/github/transient-retry.js +62 -0
  665. package/.agents/scripts/providers/github.js +157 -0
  666. package/.agents/scripts/quality-preview.js +327 -0
  667. package/.agents/scripts/quality-watch.js +223 -0
  668. package/.agents/scripts/render-manifest.js +143 -0
  669. package/.agents/scripts/resync-status-column.js +176 -0
  670. package/.agents/scripts/retro-run.js +167 -0
  671. package/.agents/scripts/run-audit-suite.js +97 -0
  672. package/.agents/scripts/run-coverage.js +103 -0
  673. package/.agents/scripts/run-lint.js +94 -0
  674. package/.agents/scripts/run-test-profile.js +126 -0
  675. package/.agents/scripts/run-tests.js +185 -0
  676. package/.agents/scripts/run-verify.js +56 -0
  677. package/.agents/scripts/select-audits.js +155 -0
  678. package/.agents/scripts/signals-view.js +294 -0
  679. package/.agents/scripts/single-story-close.js +83 -0
  680. package/.agents/scripts/single-story-confirm-merge.js +183 -0
  681. package/.agents/scripts/single-story-init.js +692 -0
  682. package/.agents/scripts/stories-wave-tick.js +415 -0
  683. package/.agents/scripts/story-close.js +246 -0
  684. package/.agents/scripts/story-deliver-prepare.js +267 -0
  685. package/.agents/scripts/story-init.js +516 -0
  686. package/.agents/scripts/story-phase.js +327 -0
  687. package/.agents/scripts/story-plan.js +284 -0
  688. package/.agents/scripts/sync-agentrc.js +71 -0
  689. package/.agents/scripts/sync-branch-from-base.js +138 -0
  690. package/.agents/scripts/sync-claude-commands.js +151 -0
  691. package/.agents/scripts/test-isolate.js +222 -0
  692. package/.agents/scripts/test-wrapper.js +108 -0
  693. package/.agents/scripts/update-coverage-baseline.js +129 -0
  694. package/.agents/scripts/update-crap-baseline.js +177 -0
  695. package/.agents/scripts/update-duplication-baseline.js +134 -0
  696. package/.agents/scripts/update-maintainability-baseline.js +183 -0
  697. package/.agents/scripts/update-mutation-baseline.js +189 -0
  698. package/.agents/scripts/update-ticket-state.js +107 -0
  699. package/.agents/scripts/validate-docs-freshness.js +259 -0
  700. package/.agents/scripts/validate-skills.js +278 -0
  701. package/.agents/scripts/wave-tick.js +335 -0
  702. package/.agents/skills/core/analyze-execution/SKILL.md +98 -0
  703. package/.agents/skills/core/api-and-interface-design/SKILL.md +327 -0
  704. package/.agents/skills/core/baseline-refresh/SKILL.md +181 -0
  705. package/.agents/skills/core/browser-testing-with-devtools/SKILL.md +352 -0
  706. package/.agents/skills/core/ci-cd-and-automation/SKILL.md +274 -0
  707. package/.agents/skills/core/ci-cd-and-automation/examples.md +211 -0
  708. package/.agents/skills/core/code-review-and-quality/SKILL.md +421 -0
  709. package/.agents/skills/core/code-simplification/SKILL.md +389 -0
  710. package/.agents/skills/core/context-engineering/SKILL.md +309 -0
  711. package/.agents/skills/core/context-engineering/examples.md +58 -0
  712. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +338 -0
  713. package/.agents/skills/core/deprecation-and-migration/SKILL.md +250 -0
  714. package/.agents/skills/core/diagnose-friction/SKILL.md +79 -0
  715. package/.agents/skills/core/documentation-and-adrs/SKILL.md +323 -0
  716. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +145 -0
  717. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +425 -0
  718. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +393 -0
  719. package/.agents/skills/core/frontend-ui-engineering/SKILL.md +357 -0
  720. package/.agents/skills/core/git-workflow-and-versioning/SKILL.md +352 -0
  721. package/.agents/skills/core/hydrate-context/SKILL.md +118 -0
  722. package/.agents/skills/core/idea-refinement/SKILL.md +317 -0
  723. package/.agents/skills/core/idea-refinement/examples.md +437 -0
  724. package/.agents/skills/core/idea-refinement/frameworks.md +135 -0
  725. package/.agents/skills/core/idea-refinement/refinement-criteria.md +155 -0
  726. package/.agents/skills/core/idea-refinement/scripts/idea-refine.sh +15 -0
  727. package/.agents/skills/core/incremental-implementation/SKILL.md +271 -0
  728. package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +213 -0
  729. package/.agents/skills/core/knowledge-transfer/SKILL.md +175 -0
  730. package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +117 -0
  731. package/.agents/skills/core/performance-optimization/SKILL.md +314 -0
  732. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +277 -0
  733. package/.agents/skills/core/property-based-testing/SKILL.md +148 -0
  734. package/.agents/skills/core/qa-coverage-mapping/SKILL.md +105 -0
  735. package/.agents/skills/core/refactoring-discipline/SKILL.md +111 -0
  736. package/.agents/skills/core/scope-triage/SKILL.md +127 -0
  737. package/.agents/skills/core/security-and-hardening/SKILL.md +400 -0
  738. package/.agents/skills/core/shipping-and-launch/SKILL.md +328 -0
  739. package/.agents/skills/core/spec-driven-development/SKILL.md +252 -0
  740. package/.agents/skills/core/test-driven-development/SKILL.md +475 -0
  741. package/.agents/skills/core/using-agent-skills/SKILL.md +232 -0
  742. package/.agents/skills/skills.index.json +596 -0
  743. package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +31 -0
  744. package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +51 -0
  745. package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +48 -0
  746. package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +31 -0
  747. package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +33 -0
  748. package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +31 -0
  749. package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +51 -0
  750. package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +54 -0
  751. package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +29 -0
  752. package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +30 -0
  753. package/.agents/skills/stack/backend/stripe-integration/SKILL.md +57 -0
  754. package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +9 -0
  755. package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +48 -0
  756. package/.agents/skills/stack/frontend/astro/SKILL.md +62 -0
  757. package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +30 -0
  758. package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +29 -0
  759. package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +50 -0
  760. package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +58 -0
  761. package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +34 -0
  762. package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +51 -0
  763. package/.agents/skills/stack/qa/gherkin-authoring/SKILL.md +257 -0
  764. package/.agents/skills/stack/qa/gherkin-authoring/examples/invoice-issue.feature +41 -0
  765. package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +199 -0
  766. package/.agents/skills/stack/qa/playwright/SKILL.md +50 -0
  767. package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +188 -0
  768. package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +142 -0
  769. package/.agents/skills/stack/qa/qa-harness/SKILL.md +220 -0
  770. package/.agents/skills/stack/qa/vitest/SKILL.md +51 -0
  771. package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +68 -0
  772. package/.agents/starter-agentrc.json +22 -0
  773. package/.agents/templates/agent-protocol.md +72 -0
  774. package/.agents/templates/docs/architecture.md +30 -0
  775. package/.agents/templates/docs/decisions.md +24 -0
  776. package/.agents/templates/epic-from-idea.md +21 -0
  777. package/.agents/templates/single-story-body.md +17 -0
  778. package/.agents/workflows/agents-update.md +415 -0
  779. package/.agents/workflows/audit-architecture.md +312 -0
  780. package/.agents/workflows/audit-clean-code.md +179 -0
  781. package/.agents/workflows/audit-dependencies.md +91 -0
  782. package/.agents/workflows/audit-devops.md +110 -0
  783. package/.agents/workflows/audit-lighthouse.md +260 -0
  784. package/.agents/workflows/audit-performance.md +161 -0
  785. package/.agents/workflows/audit-privacy.md +104 -0
  786. package/.agents/workflows/audit-quality.md +191 -0
  787. package/.agents/workflows/audit-security.md +156 -0
  788. package/.agents/workflows/audit-seo.md +118 -0
  789. package/.agents/workflows/audit-sre.md +139 -0
  790. package/.agents/workflows/audit-to-stories.md +257 -0
  791. package/.agents/workflows/audit-ux-ui.md +102 -0
  792. package/.agents/workflows/epic-deliver.md +864 -0
  793. package/.agents/workflows/epic-plan.md +998 -0
  794. package/.agents/workflows/explain.md +118 -0
  795. package/.agents/workflows/git-cleanup.md +250 -0
  796. package/.agents/workflows/git-commit-all.md +15 -0
  797. package/.agents/workflows/git-merge-pr.md +377 -0
  798. package/.agents/workflows/git-pr-all.md +278 -0
  799. package/.agents/workflows/git-push.md +60 -0
  800. package/.agents/workflows/helpers/_merge-conflict-template.md +54 -0
  801. package/.agents/workflows/helpers/acceptance-self-eval.md +74 -0
  802. package/.agents/workflows/helpers/agents-sync-config.md +129 -0
  803. package/.agents/workflows/helpers/code-quality-guardrails.md +101 -0
  804. package/.agents/workflows/helpers/code-review.md +370 -0
  805. package/.agents/workflows/helpers/diagnose.md +117 -0
  806. package/.agents/workflows/helpers/epic-audit.md +295 -0
  807. package/.agents/workflows/helpers/epic-deliver-story.md +370 -0
  808. package/.agents/workflows/helpers/epic-plan-decompose.md +199 -0
  809. package/.agents/workflows/helpers/epic-plan-spec.md +184 -0
  810. package/.agents/workflows/helpers/epic-testing.md +125 -0
  811. package/.agents/workflows/helpers/parallel-tooling.md +88 -0
  812. package/.agents/workflows/helpers/signals.md +112 -0
  813. package/.agents/workflows/helpers/single-story-deliver.md +636 -0
  814. package/.agents/workflows/helpers/worktree-lifecycle.md +317 -0
  815. package/.agents/workflows/onboard.md +207 -0
  816. package/.agents/workflows/qa-assist.md +293 -0
  817. package/.agents/workflows/qa-explore.md +350 -0
  818. package/.agents/workflows/qa-run-harness.md +288 -0
  819. package/.agents/workflows/story-deliver.md +327 -0
  820. package/.agents/workflows/story-plan.md +233 -0
  821. package/LICENSE +21 -0
  822. package/README.md +193 -0
  823. package/bin/mandrel.js +56 -0
  824. package/bin/postinstall.js +195 -0
  825. package/lib/cli/__tests__/migrate.test.js +268 -0
  826. package/lib/cli/__tests__/sync-local-zone.test.js +247 -0
  827. package/lib/cli/__tests__/sync.test.js +372 -0
  828. package/lib/cli/__tests__/update-major.test.js +217 -0
  829. package/lib/cli/__tests__/update.test.js +696 -0
  830. package/lib/cli/__tests__/version-check.test.js +398 -0
  831. package/lib/cli/doctor.js +124 -0
  832. package/lib/cli/explain.js +107 -0
  833. package/lib/cli/migrate.js +260 -0
  834. package/lib/cli/registry.js +830 -0
  835. package/lib/cli/sync-commands.js +50 -0
  836. package/lib/cli/sync.js +200 -0
  837. package/lib/cli/uninstall.js +795 -0
  838. package/lib/cli/update.js +854 -0
  839. package/lib/cli/version-check.js +206 -0
  840. package/lib/migrations/README.md +69 -0
  841. package/lib/migrations/__tests__/index.test.js +216 -0
  842. package/lib/migrations/index.js +164 -0
  843. package/package.json +105 -0
@@ -0,0 +1,199 @@
1
+ ---
2
+ description: >-
3
+ Phase 8 of sprint planning — decompose an Epic's PRD and Tech Spec into a
4
+ Feature/Story hierarchy, persist the backlog, and flip the Epic to
5
+ `agent::ready`. Host-LLM authored; no external API calls.
6
+ ---
7
+
8
+ # Sprint Plan — Decompose Phase (helper)
9
+
10
+ > **Helper module.** Not a slash command. Invoked by `/epic-plan` (Phase 8).
11
+ > To run the decompose phase interactively, use `/epic-plan [Epic_ID]` — it
12
+ > delegates here after the spec phase.
13
+
14
+ ## Role
15
+
16
+ Director / Architect
17
+
18
+ ## Context
19
+
20
+ This helper is the **decompose phase** of the split planning pipeline. It
21
+ reads the PRD and Tech Spec previously produced by the spec phase helper
22
+ ([`epic-plan-spec.md`](epic-plan-spec.md)), generates the Feature /
23
+ Story ticket hierarchy, persists it to GitHub, and flips the Epic to
24
+ `agent::ready` (parking) so a human can run `/epic-deliver` when
25
+ execution should begin.
26
+
27
+ The ticket array is authored **directly by you, the host LLM**.
28
+ `epic-plan-decompose.js` is a deterministic wrapper that (a) emits the
29
+ authoring context you need and (b) validates, persists, and transitions the
30
+ Epic lifecycle state.
31
+
32
+ The ticket array contains `type::feature` and `type::story` tickets
33
+ only — no `type::task` children. Acceptance criteria and verification
34
+ steps are inlined on each Story body via the `acceptance[]` and
35
+ `verify[]` fields. The decomposer system prompt lives in the
36
+ [`epic-plan-decompose-author`](../../skills/core/epic-plan-decompose-author/SKILL.md)
37
+ skill.
38
+
39
+ ## Constraint
40
+
41
+ - **Do not** run this skill until the spec phase is complete. The Epic must
42
+ have linked `context::prd` and `context::tech-spec` issues; the script will
43
+ refuse to proceed otherwise.
44
+ - **Do not** reassign Story parents across Features after the
45
+ decomposition writes — the `epic-plan-state` checkpoint records the
46
+ structure as committed. Use `--force` to rebuild from scratch.
47
+ - **Every** temp file must include the Epic ID in its name. Multiple Epics
48
+ may be decomposed concurrently; bare names will collide.
49
+ - **Do not** flip the Epic past `agent::ready` from this helper. Execution
50
+ begins when an operator runs `/epic-deliver [Epic_ID]`.
51
+
52
+ ## Prerequisites
53
+
54
+ 1. **Epic is on `agent::review-spec`** — i.e. the spec phase has already run
55
+ and the PRD / Tech Spec exist.
56
+ 2. **API keys** — `GITHUB_TOKEN` set in `.env`.
57
+
58
+ ## Step 1 — Gather decomposition context
59
+
60
+ ```bash
61
+ node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] --emit-context \
62
+ > temp/epic-[Epic_ID]/decomposer-context.json
63
+ ```
64
+
65
+ The emitted JSON contains the PRD body, Tech Spec body, risk heuristics, the
66
+ decomposer system prompt, and the `maxTickets` **reviewability budget**
67
+ (Story #2798 — not a hard cap; over-budget plans require an explicit
68
+ `--allow-over-budget` override at persist time).
69
+
70
+ ## Step 2 — Author the ticket array
71
+
72
+ Read `temp/epic-[Epic_ID]/decomposer-context.json`. Produce a JSON array of
73
+ Feature / Story objects that conforms to the schema in the system prompt
74
+ and write it to `temp/epic-[Epic_ID]/tickets.json`.
75
+
76
+ When the Tech Spec carries a `## Delivery Slicing` section, author toward the
77
+ Architect's proposed shippable-Story clusters rather than mapping PRD
78
+ capabilities 1:1; degrade gracefully (current behaviour) when it is absent.
79
+
80
+ ## Step 2.5 — Phase 8.3: Holistic Consolidation (HITL diff gate)
81
+
82
+ The decompose phase runs in the sequence **emit-context → author →
83
+ consolidate → validate+persist**. Step 2 is the *author* half; this step is
84
+ the *consolidate* half, a separate critic pass run **before** the
85
+ deterministic validator and **before** the GitHub write.
86
+
87
+ Activate the
88
+ [`epic-plan-consolidate`](../../skills/core/epic-plan-consolidate/SKILL.md)
89
+ skill with `[Epic_ID]` as input. It reads the draft
90
+ `temp/epic-[Epic_ID]/tickets.json` plus the PRD / Tech Spec from
91
+ `decomposer-context.json`, reconciles the draft against the Tech Spec
92
+ `## Delivery Slicing` target (degrading gracefully when absent), and emits:
93
+
94
+ - a **consolidated** `temp/epic-[Epic_ID]/tickets.json` (overwriting the draft),
95
+ - a human-readable `temp/epic-[Epic_ID]/consolidation-report.md` (rationale +
96
+ before/after diff).
97
+
98
+ The pass is constrained to scope-preserving operations only — **merge Stories,
99
+ collapse single-Story Features into siblings, re-parent, rewire `depends_on`**.
100
+ It MUST NOT add scope or invent tickets. It resolves single-Story Features by
101
+ **collapsing** them (rec #2), never by splitting a lone Story into two; the
102
+ `assertNoSingleStoryFeature` validator stays as the post-consolidation
103
+ backstop.
104
+
105
+ > **HITL diff gate.** Show the operator
106
+ > `temp/epic-[Epic_ID]/consolidation-report.md` (the before/after diff +
107
+ > rationale) **before** running the persist call in Step 3. Consolidation is
108
+ > never auto-applied without operator review — the operator approves the
109
+ > consolidated plan (or rejects it and the draft is persisted instead). Only
110
+ > after approval proceed to Step 3.
111
+
112
+ This sub-step does **not** renumber the top-level lifecycle phases (9–12); it
113
+ is a sub-step of Phase 8.
114
+
115
+ ## Step 3 — Persist and transition
116
+
117
+ ```bash
118
+ # Normal decomposition
119
+ node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] \
120
+ --tickets temp/epic-[Epic_ID]/tickets.json
121
+
122
+ # Re-decompose (closes existing child Features/Stories first)
123
+ node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] \
124
+ --tickets temp/epic-[Epic_ID]/tickets.json --force
125
+
126
+ # Persist an over-budget plan (Story #2798 — only after the operator
127
+ # has confirmed the over_budget_rationale on the Epic)
128
+ node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] \
129
+ --tickets temp/epic-[Epic_ID]/tickets.json --allow-over-budget
130
+ ```
131
+
132
+ On success the script:
133
+
134
+ - Creates the Feature / Story hierarchy under the Epic.
135
+ - Updates the `epic-plan-state` structured comment with the ticket count
136
+ and decompose timestamp.
137
+ - Flips the Epic to `agent::ready`.
138
+
139
+ ## Step 4 — Cross-validation
140
+
141
+ Delegate the structural invariants (hierarchy completeness, dependency DAG
142
+ acyclicity, missing complexity labels) to `epic-plan-healthcheck.js`. It is
143
+ the single source of truth for post-decompose validation — the Phase 10 run
144
+ inside `/epic-plan` calls the same script, so local and remote flows agree.
145
+
146
+ ```bash
147
+ node .agents/scripts/epic-plan-healthcheck.js --epic [Epic_ID] --paranoid
148
+ ```
149
+
150
+ `--paranoid` is the flag that runs the richer hierarchy and dependency
151
+ checks; pair it with `--epic [Epic_ID]` so the script can fetch the
152
+ ticket tree. `--dry-run` exists as well but only emits the planned
153
+ checks without performing any I/O — it is not a substitute for
154
+ `--paranoid` when you need the hierarchy invariants validated.
155
+
156
+ The script exits 0 regardless of findings (non-blocking), but lists any
157
+ `ERR`-level findings that must be addressed before execution:
158
+
159
+ - Missing `type::feature` / `type::story` tickets.
160
+ - Stories without `complexity::` labels.
161
+ - Dependency cycles across Stories.
162
+
163
+ For the semantic checks the healthcheck cannot automate, do these by eye:
164
+
165
+ - **Scope-overlap check**: Stories whose scope is "docs / runbook / README"
166
+ downstream of a "config + runbook" Story in the same Epic should carry a
167
+ scope-verification note pointing at
168
+ `git diff main -- <path>` against the upstream Story branch.
169
+ - **Risk flagging**: Confirm `risk::high` Stories match the heuristics in
170
+ the decomposer context.
171
+
172
+ Fix any gaps by creating additional issues or updating existing ones.
173
+
174
+ ## Step 5 — Cleanup
175
+
176
+ The wrapper script deletes the phase-scoped temp files automatically when
177
+ Step 3 succeeds — no operator action required. The cleanup contract lives in
178
+ [`lib/plan-phase-cleanup.js`](../../scripts/lib/plan-phase-cleanup.js), which
179
+ is the single source of truth for which temp paths this phase owns.
180
+
181
+ ## Handoff
182
+
183
+ - Surface the backlog summary and the Wave 0 candidates to the operator:
184
+
185
+ > "Decomposition complete. Epic #[ID] is on `agent::ready` with NN ticket(s)
186
+ > across MM Stories. Run `/epic-deliver [Epic_ID]` to begin execution."
187
+
188
+ ## Troubleshooting
189
+
190
+ - "Epic #N is missing a linked PRD or Tech Spec" — run `/epic-plan [Epic_ID]`
191
+ first (it will run the spec phase if the PRD / Tech Spec are missing).
192
+ - Validator rejects the tickets file — the most common causes are a
193
+ Story whose `parent_slug` does not point at a Feature, a missing
194
+ `acceptance[]` / `verify[]` array on a Story body, or a Story
195
+ `depends_on` slug that does not resolve to another Story in the same
196
+ Epic.
197
+ - If `--force` is required but the script refuses, confirm the Epic has the
198
+ linked artifacts first — `--force` only re-decomposes; it does not bypass
199
+ the spec-phase prerequisite.
@@ -0,0 +1,184 @@
1
+ ---
2
+ description: >-
3
+ Phase 7 of sprint planning — generate the PRD and Tech Spec for an Epic,
4
+ persist them as linked GitHub issues, and flip the Epic to
5
+ `agent::review-spec`. Host-LLM authored; no external API calls.
6
+ ---
7
+
8
+ # Sprint Plan — Spec Phase (helper)
9
+
10
+ > **Helper module.** Not a slash command. Invoked by `/epic-plan` (Phase 7).
11
+ > To run the spec phase interactively, use `/epic-plan [Epic_ID]` — it
12
+ > delegates here.
13
+
14
+ ## Role
15
+
16
+ Director / Architect
17
+
18
+ ## Context
19
+
20
+ This helper is the **spec phase** of the split planning pipeline. It produces
21
+ **three** planning artifacts for an Epic — a Product Requirements Document, a
22
+ Technical Specification, and an Acceptance Spec — persists them as
23
+ `context::prd`, `context::tech-spec`, and `context::acceptance-spec` issues
24
+ under the Epic, and flips the Epic to `agent::review-spec` (parking) so a human
25
+ reviewer can read the artifacts on GitHub before decomposition.
26
+
27
+ > **Single prose home.** The canonical, full-detail spec-phase contract
28
+ > (idempotent context tickets, the three-ticket rationale, the
29
+ > `acceptance::n-a` waiver, the Epic-lease preflight) lives in
30
+ > [`epic-plan.md` § Phase 7](../epic-plan.md). This helper carries only the
31
+ > operational step list; when the two disagree, `epic-plan.md` wins.
32
+
33
+ The PRD and Tech Spec are authored **directly by you, the host LLM**.
34
+ `epic-plan-spec.js` is a deterministic wrapper that (a) emits the authoring
35
+ context you need and (b) persists the artifacts and transitions the Epic
36
+ lifecycle state.
37
+
38
+ The complementary Phase 8 helper is
39
+ [`epic-plan-decompose.md`](epic-plan-decompose.md). The `/epic-plan`
40
+ wrapper chains both helpers with a confirmation gate in between.
41
+
42
+ ## Constraint
43
+
44
+ - **Do not** create or modify tickets outside the `context::prd` /
45
+ `context::tech-spec` / `context::acceptance-spec` contract —
46
+ decomposition belongs to
47
+ [`epic-plan-decompose.md`](epic-plan-decompose.md).
48
+ - **Do not** flip the Epic to `agent::ready` from this skill. The terminal
49
+ label for the spec phase is `agent::review-spec`.
50
+ - **Every** temp file must include the Epic ID in its name. Multiple Epics may
51
+ be planned concurrently; bare names like `temp/prd.md` will collide.
52
+ - **Stop and hand back to the operator** after Step 4 when
53
+ `planningRisk.requiresReview` is true or the operator passed
54
+ `--force-review` — do not chain into decomposition. Low-risk Epics
55
+ auto-proceed to Phase 8 after the persist stdout confirms
56
+ `reviewRouting.decision === 'auto-proceed'`.
57
+
58
+ ## Prerequisites
59
+
60
+ 1. **GitHub Epic** — an open issue with the `type::epic` label. The Epic's
61
+ body should contain enough narrative context to seed the PRD.
62
+ 2. **API keys** — `GITHUB_TOKEN` set in `.env`.
63
+
64
+ ## Step 1 — Gather authoring context
65
+
66
+ Run the spec-phase CLI in context-emission mode to collect the Epic body, the
67
+ scraped project docs, and the recommended system prompts.
68
+
69
+ ```bash
70
+ node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] --emit-context \
71
+ > temp/epic-[Epic_ID]/planner-context.json
72
+ ```
73
+
74
+ ## Step 2 — Author the PRD
75
+
76
+ Read `temp/epic-[Epic_ID]/planner-context.json`. Using `systemPrompts.prd`
77
+ combined with the Epic title/body, write the PRD markdown to
78
+ `temp/epic-[Epic_ID]/prd.md`. Use the four-section structure (Context & Goals,
79
+ User Stories, Acceptance Criteria, Out of Scope) and start the document with
80
+ `## Overview` (no `<h1>`).
81
+
82
+ ## Step 3 — Author the Tech Spec
83
+
84
+ Using `systemPrompts.techSpec`, the PRD you just wrote, and `docsContext`,
85
+ write the Tech Spec to `temp/epic-[Epic_ID]/techspec.md`. Start with
86
+ `## Technical Overview` (no `<h1>`).
87
+
88
+ ## Step 3.5 — Author the risk verdict
89
+
90
+ Judge the change described by the PRD and Tech Spec you just wrote and
91
+ write `temp/epic-[Epic_ID]/risk-verdict.json` conforming to
92
+ [`risk-verdict.schema.json`](../../schemas/risk-verdict.schema.json):
93
+ `{ axes: [{ axis, level, rationale }], summary }`. The authoritative
94
+ authoring rules (axis vocabulary, judgment-not-keywords, derivation
95
+ preview) live in the
96
+ [`epic-plan-spec-author` Skill, Step 4](../../skills/core/epic-plan-spec-author/SKILL.md).
97
+
98
+ ## Step 3.6 — Author the Acceptance Spec
99
+
100
+ Using `systemPrompts.acceptanceSpec`, the PRD, and the Tech Spec, write the
101
+ Acceptance Spec to `temp/epic-[Epic_ID]/acceptance-spec.md`. It captures the
102
+ stable-ID acceptance criteria table
103
+ (`| AC ID | Outcome | Feature File | Scenario | Disposition |`) that drives
104
+ close-time reconciliation in `/epic-deliver` Phase 6.
105
+
106
+ **Skip this step only** when the Epic carries the `acceptance::n-a` waiver
107
+ label (refactor-only or docs-only Epics); in that case omit `--acceptance-spec`
108
+ from Step 4.
109
+
110
+ ## Step 4 — Persist and transition
111
+
112
+ ```bash
113
+ # Normal flow (three context tickets)
114
+ node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] \
115
+ --prd temp/epic-[Epic_ID]/prd.md \
116
+ --techspec temp/epic-[Epic_ID]/techspec.md \
117
+ --risk-verdict temp/epic-[Epic_ID]/risk-verdict.json \
118
+ --acceptance-spec temp/epic-[Epic_ID]/acceptance-spec.md
119
+
120
+ # Re-plan (--force overwrites the three context tickets in place)
121
+ node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] \
122
+ --prd temp/epic-[Epic_ID]/prd.md \
123
+ --techspec temp/epic-[Epic_ID]/techspec.md \
124
+ --risk-verdict temp/epic-[Epic_ID]/risk-verdict.json \
125
+ --acceptance-spec temp/epic-[Epic_ID]/acceptance-spec.md --force
126
+
127
+ # Waived (acceptance::n-a label on Epic — no Acceptance Spec authored)
128
+ node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] \
129
+ --prd temp/epic-[Epic_ID]/prd.md \
130
+ --techspec temp/epic-[Epic_ID]/techspec.md \
131
+ --risk-verdict temp/epic-[Epic_ID]/risk-verdict.json
132
+ ```
133
+
134
+ On success the script:
135
+
136
+ - Validates the risk verdict against `risk-verdict.schema.json` (a
137
+ malformed verdict fails closed before any GitHub mutation) and derives
138
+ the `planningRisk` envelope from it.
139
+ - Creates `[PRD]`, `[Tech Spec]`, and `[Acceptance Spec]` child issues
140
+ (`context::prd` / `context::tech-spec` / `context::acceptance-spec`
141
+ labels). The Acceptance Spec is skipped when `--acceptance-spec` is
142
+ omitted under the `acceptance::n-a` waiver.
143
+ - Appends a `## Planning Artifacts` section to the Epic body.
144
+ - Upserts the `risk-verdict` structured comment recording the verdict and
145
+ the derived envelope.
146
+ - Upserts the `epic-plan-state` structured comment with the current phase,
147
+ PRD / Tech Spec / Acceptance Spec IDs, the `riskVerdict` field, and
148
+ timestamps.
149
+ - Flips the Epic to `agent::review-spec`.
150
+
151
+ ## Step 5 — Cleanup
152
+
153
+ The wrapper script deletes the phase-scoped temp files automatically when
154
+ Step 4 succeeds — no operator action required. The cleanup contract lives in
155
+ [`lib/plan-phase-cleanup.js`](../../scripts/lib/plan-phase-cleanup.js), which
156
+ is the single source of truth for which temp paths this phase owns. If you
157
+ need to inspect the temp artefacts after the fact, re-run
158
+ `epic-plan-spec.js --emit-context` to regenerate the planner context.
159
+
160
+ ## Handoff
161
+
162
+ Branch on the shared planning risk decision surfaced in the persist stdout
163
+ JSON (`planningRisk`, `reviewRouting`):
164
+
165
+ - **High risk or `--force-review` — STOP.** Surface the PRD and Tech Spec
166
+ URLs to the operator:
167
+
168
+ > "Spec phase complete for Epic #[ID]. Review PRD (#XX) and Tech Spec (#YY)
169
+ > on GitHub. When you're ready, re-run `/epic-plan [Epic_ID]` — the wrapper
170
+ > will pick up where it left off and run the decompose phase."
171
+
172
+ - **Low risk — auto-proceed.** Relay `reviewRouting.operatorMessage` and
173
+ continue directly to Phase 8 decomposition without waiting for verbal
174
+ approval in this session.
175
+
176
+ ## Troubleshooting
177
+
178
+ - If `--emit-context` fails with "Epic not found", confirm the ID matches the
179
+ GitHub issue number and the token has `issues:read`.
180
+ - If the persist call fails after creating the PRD but before the Tech Spec,
181
+ re-run with `--force` (the script reuses the existing PRD when appropriate).
182
+ - If the Epic does not flip to `agent::review-spec` after the script claims
183
+ success, the label write likely races with a concurrent mutation — re-run the
184
+ persist step; it's idempotent against the existing PRD/Tech Spec.
@@ -0,0 +1,125 @@
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
+ > `/epic-deliver` or directly by an operator when the Epic-testing ticket
9
+ > needs refreshed evidence. For ad-hoc acceptance runs use `/qa-run-harness` —
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-harness` (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 `/epic-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-harness` with the chosen selector:
42
+
43
+ ```text
44
+ /qa-run-harness "tag:@smoke and @risk-high"
45
+ ```
46
+
47
+ The `/qa-run-harness` workflow (`.agents/workflows/qa-run-harness.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. `/epic-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-harness.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`.
@@ -0,0 +1,88 @@
1
+ # Parallel Tooling — Inline Helper
2
+
3
+ Procedural module read **inline** by workflows that perform context-gathering,
4
+ long-running shell work, or independent unit fan-out. This is **not** a slash
5
+ command — it is not projected into the flat `.claude/commands/` tree, so there
6
+ is no `/parallel-tooling`. Callers reference this file at the top of their first
7
+ scan / read instruction so the parallelism conventions land before the work
8
+ does.
9
+
10
+ The three rules below are the canonical dispatch shape for this codebase.
11
+ Apply them in order: a workflow that observes Rule 1 but ignores Rule 3
12
+ serialises its fan-out unnecessarily; a workflow that reaches for Rule 3
13
+ before exhausting Rule 1 spawns sub-agents to do work the host could have
14
+ batched in a single turn.
15
+
16
+ ## Rule 1 — Batch independent reads in a single turn
17
+
18
+ When the next N tool calls do **not** depend on each other's results, issue
19
+ them in one assistant turn rather than serially. The host runtime executes
20
+ the batch in parallel; serial calls cost N round-trips for no gain.
21
+
22
+ - **Tool primitives:** `Read`, `Grep`, `Glob`, MCP `list_*` / `get_*` calls.
23
+ - **When:** reading the PRD, Tech Spec, and Story body up front; grepping
24
+ for multiple unrelated patterns; globbing several directory trees;
25
+ fetching independent GitHub tickets.
26
+ - **Anti-pattern:** sequential `Read` → wait → `Read` → wait → `Grep` chains
27
+ when none of the later calls reference earlier output.
28
+ - **Bounded fan-out:** keep the batch ≤ 10 calls per turn. Larger batches
29
+ blow the context budget and obscure the failure surface if one call errors.
30
+
31
+ ## Rule 2 — `run_in_background` + `Monitor` for long shells
32
+
33
+ Shell commands that exceed roughly 30 seconds (test suites, installs,
34
+ multi-file lints, `git fetch --all`, container builds) **must** use the
35
+ `Bash` tool's `run_in_background: true` flag and stream events via the
36
+ `Monitor` tool. A synchronous `Bash` call holds the assistant turn open for
37
+ the full duration and blocks every other parallel opportunity.
38
+
39
+ - **Tool primitives:** `Bash(run_in_background: true)` + `Monitor`.
40
+ - **When:** `npm test`, `npm ci`, full-repo `eslint`/`biome` runs, long
41
+ fetches, anything you would have prefixed with `nohup` in a terminal.
42
+ - **Anti-pattern:** synchronous `Bash` with a 600 000 ms timeout used as a
43
+ blocker — that pattern is reserved for scripts whose exit is the
44
+ signal-to-proceed (e.g., `story-init.js`'s per-tree install, which the
45
+ parent skill calls out explicitly).
46
+ - **Don't poll with `sleep`:** `Monitor` returns on each stdout line. Loop
47
+ on `until <condition>; do sleep 2; done` only when no event stream is
48
+ available — never as a substitute for the event channel.
49
+
50
+ ## Rule 3 — N parallel `Agent` calls in one turn for N independent units
51
+
52
+ When a workflow fans out across N independent units of work — N Stories in
53
+ a wave, N audit dimensions, N decomposition slices — dispatch all N
54
+ sub-agents in a **single assistant turn** by issuing N `Agent` tool calls
55
+ together. The host executes the calls concurrently; one turn per unit is
56
+ the same shape as Rule 1 but at the sub-agent layer.
57
+
58
+ - **Tool primitives:** `Agent` (one call per independent unit, all in one
59
+ turn).
60
+ - **When:** wave-level Story fan-out from `/epic-deliver`, per-dimension
61
+ audit dispatch, any "for each X in Xs run /Y X" loop where the Xs do not
62
+ share write paths.
63
+ - **Anti-pattern:** serial `Agent` calls (`Agent` → wait → `Agent` → wait)
64
+ for units that have no dependency edge between them. The wave aggregator
65
+ is designed for the parallel shape — the serial shape is strictly slower
66
+ and offers no isolation benefit.
67
+ - **Concurrency cap:** respect `delivery.deliverRunner.concurrencyCap` (or the
68
+ caller's wave-slot budget) — beyond that cap you starve other waves, not
69
+ speed up your own. When N exceeds the cap, slice into batches of `cap`
70
+ and dispatch each batch in its own turn.
71
+
72
+ ## When the rules conflict
73
+
74
+ If a unit of work is both long (Rule 2) and independent (Rule 1 or 3),
75
+ prefer the higher-numbered rule — the parallelism gain compounds the
76
+ background-shell gain. Concretely: dispatch the `Agent` calls in one turn
77
+ (Rule 3), and **inside** each sub-agent let it apply Rule 2 to its own
78
+ long-running shells. The host does not need to micromanage the child's
79
+ shell strategy.
80
+
81
+ ## Constraints
82
+
83
+ - **Never** chain serial calls when the host can batch them — the rules
84
+ above are about correctness of dispatch shape, not optimisation.
85
+ - **Never** use `run_in_background` for short commands (< 5 s). The
86
+ notification overhead exceeds the wall-clock savings.
87
+ - **Always** keep dependent calls sequential — Rule 1 is "batch
88
+ independent reads," not "batch everything."