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
@@ -33,7 +33,6 @@ export const WORKTREE_ISOLATION_DEFAULTS = Object.freeze({
33
33
  primeFromPath: null,
34
34
  allowSymlinkOnWindows: false,
35
35
  reapOnSuccess: true,
36
- reapOnCancel: true,
37
36
  // Gitignored workspace files copied into each new worktree. Includes the
38
37
  // operator's local-override files (`.agentrc.local.json`,
39
38
  // `.agents/instructions.local.md`) so a worktree-isolated agent honors the
@@ -84,10 +83,6 @@ export function getWorktreeIsolation(config) {
84
83
  typeof wi.reapOnSuccess === 'boolean'
85
84
  ? wi.reapOnSuccess
86
85
  : WORKTREE_ISOLATION_DEFAULTS.reapOnSuccess,
87
- reapOnCancel:
88
- typeof wi.reapOnCancel === 'boolean'
89
- ? wi.reapOnCancel
90
- : WORKTREE_ISOLATION_DEFAULTS.reapOnCancel,
91
86
  bootstrapFiles: Array.isArray(wi.bootstrapFiles)
92
87
  ? wi.bootstrapFiles
93
88
  : [...WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles],
@@ -19,7 +19,7 @@
19
19
  * deleted from the resolver wrapper. Every internal call site reads the
20
20
  * canonical `project` / `github` / `planning` / `delivery` blocks
21
21
  * directly; consumers upgrade in lockstep with the framework bump
22
- * (see `.agents/rules/git-conventions.md#contract-cutovers-—-no-shim-layer`).
22
+ * (see `.agents/rules/git-conventions-reference.md#contract-cutovers-—-no-shim-layer`).
23
23
  */
24
24
 
25
25
  import fs from 'node:fs';
@@ -27,7 +27,6 @@ import path from 'node:path';
27
27
  import { getCiDelivery } from './config/ci.js';
28
28
  import { getCommands } from './config/commands.js';
29
29
  import { getGitHub } from './config/github.js';
30
- import { getLifecycle } from './config/lifecycle.js';
31
30
  import { resolvePaths } from './config/paths.js';
32
31
  import { validateOrchestrationConfig } from './config/validate-orchestration.js';
33
32
  import { getWorktreeIsolation } from './config/worktree-isolation.js';
@@ -43,10 +42,8 @@ export { NOTIFICATIONS_DEFAULTS } from './config/github.js';
43
42
  export {
44
43
  getLimits,
45
44
  LIMITS_DEFAULTS,
46
- resolvePreflightCeilings,
47
45
  } from './config/limits.js';
48
46
  export { getPaths } from './config/paths.js';
49
- export { getPreflight, PREFLIGHT_DEFAULTS } from './config/preflight.js';
50
47
  export {
51
48
  CODING_GUARDRAILS_DEFAULTS,
52
49
  getQuality,
@@ -107,10 +104,8 @@ function applyDeliveryDefaults(rawDelivery) {
107
104
  delivery.worktreeIsolation = getWorktreeIsolation({
108
105
  worktreeIsolation: delivery.worktreeIsolation,
109
106
  });
110
- delivery.lifecycle = getLifecycle({ lifecycle: delivery.lifecycle });
111
- // Story #2899 (Epic #2880) `delivery.ci` always carries
112
- // `skipForStoryPushes: true` by default so Story-branch commit
113
- // tooling applies the `[skip ci]` trailer without operator opt-in.
107
+ // `delivery.ci` always carries autoMerge (and passes watch through) so
108
+ // CI-aware delivery knobs resolve without operator opt-in.
114
109
  delivery.ci = getCiDelivery({ ci: delivery.ci });
115
110
  return delivery;
116
111
  }
@@ -64,40 +64,14 @@ const DELIVER_RUNNER_SCHEMA = {
64
64
  type: 'object',
65
65
  properties: {
66
66
  concurrencyCap: { type: 'integer', minimum: 1 },
67
- progressReportIntervalSec: { type: 'integer', minimum: 0 },
68
67
  verifyConcurrencyCap: { type: 'integer', minimum: 1 },
69
68
  },
70
69
  additionalProperties: false,
71
70
  };
72
71
 
73
72
  /**
74
- * `delivery.retro.perfThresholds` (Story #3042, Task #3043) — operator-tunable
75
- * gates for the retro perf-signals classifier. Defaults are documented inline
76
- * here and mirrored in `lib/orchestration/retro-perf-heuristics.js
77
- * (DEFAULT_RETRO_PERF_THRESHOLDS)` and the static schema mirror.
78
- *
79
- * `utilisation` / `bootstrapShare` are unit-interval ratios; values outside
80
- * [0, 1] fall back to defaults at the resolver. `capBindingRunLength` is a
81
- * positive integer count of consecutive cap-binding waves.
73
+ * `delivery.worktreeIsolation` — per-Story git worktree provisioning.
82
74
  */
83
- const RETRO_PERF_THRESHOLDS_SCHEMA = {
84
- type: 'object',
85
- properties: {
86
- utilisation: { type: 'number', minimum: 0, maximum: 1 },
87
- bootstrapShare: { type: 'number', minimum: 0, maximum: 1 },
88
- capBindingRunLength: { type: 'integer', minimum: 1 },
89
- },
90
- additionalProperties: false,
91
- };
92
-
93
- const RETRO_SCHEMA = {
94
- type: 'object',
95
- properties: {
96
- perfThresholds: RETRO_PERF_THRESHOLDS_SCHEMA,
97
- },
98
- additionalProperties: false,
99
- };
100
-
101
75
  const WORKTREE_ISOLATION_SCHEMA = {
102
76
  type: 'object',
103
77
  properties: {
@@ -110,11 +84,15 @@ const WORKTREE_ISOLATION_SCHEMA = {
110
84
  primeFromPath: { type: ['string', 'null'], minLength: 1 },
111
85
  allowSymlinkOnWindows: { type: 'boolean' },
112
86
  reapOnSuccess: { type: 'boolean' },
113
- reapOnCancel: { type: 'boolean' },
114
87
  bootstrapFiles: {
115
88
  type: 'array',
116
89
  items: { type: 'string', minLength: 1 },
117
- default: ['.env', '.mcp.json'],
90
+ default: [
91
+ '.env',
92
+ '.mcp.json',
93
+ '.agentrc.local.json',
94
+ '.agents/instructions.local.md',
95
+ ],
118
96
  },
119
97
  },
120
98
  additionalProperties: false,
@@ -132,20 +110,14 @@ const WORKTREE_ISOLATION_SCHEMA = {
132
110
  };
133
111
 
134
112
  /**
135
- * `delivery.signals` — detector thresholds for the three surviving
136
- * performance-signal categories. `churn` and `idle` were dropped (low
137
- * signal-to-noise). Each block is shallow-merged by the resolver.
113
+ * `delivery.signals` — detector thresholds for the surviving
114
+ * performance-signal categories. `hotspot` was retired with its detector
115
+ * (Epic #4406); `churn` and `idle` were dropped earlier (low signal-to-noise).
116
+ * Each block is shallow-merged by the resolver.
138
117
  */
139
118
  const SIGNALS_SCHEMA = {
140
119
  type: 'object',
141
120
  properties: {
142
- hotspot: {
143
- type: 'object',
144
- properties: {
145
- p95Multiplier: { type: 'number', minimum: 0 },
146
- },
147
- additionalProperties: false,
148
- },
149
121
  rework: {
150
122
  type: 'object',
151
123
  properties: {
@@ -164,26 +136,6 @@ const SIGNALS_SCHEMA = {
164
136
  additionalProperties: false,
165
137
  };
166
138
 
167
- /**
168
- * `delivery.lifecycle` — knobs consumed by the lifecycle event bus
169
- * (Epic #2172). `timeouts` is a per-event budget map (eventName → seconds)
170
- * used by Story 11's `TimeoutWatchdog` listener; missing entries fall back
171
- * to in-listener defaults. `heartbeatWarnSeconds` is the no-progress
172
- * threshold consumed by `HeartbeatMonitor`. Story #2227 lays down the
173
- * keys; consumers land in later stories.
174
- */
175
- const LIFECYCLE_SCHEMA = {
176
- type: 'object',
177
- properties: {
178
- timeouts: {
179
- type: 'object',
180
- additionalProperties: { type: 'integer', minimum: 1 },
181
- },
182
- heartbeatWarnSeconds: { type: 'integer', minimum: 1 },
183
- },
184
- additionalProperties: false,
185
- };
186
-
187
139
  /**
188
140
  * `delivery.mergeWatch` — knobs consumed by the MergeWatcher lifecycle
189
141
  * listener (Story #2896, Epic #2880). `intervalSeconds` is the poll
@@ -203,50 +155,38 @@ const MERGE_WATCH_SCHEMA = {
203
155
  };
204
156
 
205
157
  /**
206
- * `delivery.epicAudit` bounded-retry knobs for /deliver Phase 4
207
- * (epic-audit). `maxFixAttempts` caps how many times the auto-fix loop
208
- * retries a single finding (Story #2611, Epic #2586). `maxFixScopeFiles`
209
- * caps how many files a single auto-fix may touch before escalating to
210
- * `agent::blocked` (default 5) — a deliberately narrow bound for
211
- * unattended auto-fixes, independent of the Story-sizing thresholds in
212
- * `ticket-validator-sizing.js`.
213
- *
214
- * `autoFixSeverity` (Story #4399) is the threshold that governs which findings
215
- * the Epic-close host-LLM remediation loop fixes on-branch. It is **tier-aware**
216
- * (Story #4412, Epic #4405): the Epic-close audit tier defaults to `high`
217
- * (route only 🔴 Critical + 🟠 High into remediation; 🟡 Medium + 🟢 Suggestion
218
- * graduate to follow-up issues) because 🟡 Medium code-quality concerns are
219
- * already remediated shift-left at the write-time and Story-scope tiers — the
220
- * slim outermost tier stops re-paying to fix them where a fix is most
221
- * expensive. Setting `medium` opts back into routing 🔴/🟠/🟡 on-branch. The
222
- * enum is the single validation seam: a configured value round-trips through
223
- * the resolver, and any value outside `['high', 'medium']` is rejected at load.
224
- * Hard cutover per `rules/git-conventions.md` — there is no back-compat flag.
158
+ * `delivery.epicAudit` was removed on v2 (Story-only delivery — no
159
+ * epic-audit runner). Remediation policy lives on `delivery.codeReview`
160
+ * (`CODE_REVIEW_SCHEMA` imported from the quality schema module).
225
161
  */
226
- const EPIC_AUDIT_SCHEMA = {
162
+
163
+ // Epic #4478 (M7-B) — role-scoped-agent kill-switch + maker-checker floor.
164
+ // Stage 6 dropped `delivery.routing.singleDelivery` (v1 epic route switch).
165
+ // `delivery.routing.roleScopedAgents` (default true via getDeliveryRouting)
166
+ // flips converted delivery spawns onto their `.claude/agents/<role>.md` boot
167
+ // context; false falls back to `subagent_type: general-purpose` (the instant
168
+ // per-consumer revert + the escape for hosts that ignore `.claude/agents/`).
169
+ // `delivery.routing.freshCriticSampleRate` (default 0.2, clamped [0, 1]) is the
170
+ // maker-checker sampling floor forcing a fraction of low-risk acceptance
171
+ // clusters through a fresh critic.
172
+ const ROUTING_SCHEMA = {
227
173
  type: 'object',
228
174
  properties: {
229
- maxFixAttempts: { type: 'integer', minimum: 0 },
230
- maxFixScopeFiles: { type: 'integer', minimum: 1 },
231
- autoFixSeverity: { type: 'string', enum: ['high', 'medium'] },
175
+ roleScopedAgents: { type: 'boolean' },
176
+ freshCriticSampleRate: { type: 'number', minimum: 0, maximum: 1 },
177
+ ceremonyProfile: {
178
+ type: 'string',
179
+ enum: ['minimal', 'standard', 'strict'],
180
+ },
181
+ closeAndLand: { type: 'boolean' },
232
182
  },
233
183
  additionalProperties: false,
234
184
  };
235
185
 
236
- // Story #2899 (Epic #2880) — performance defaults + preflight (F13).
237
- // `delivery.ci.skipForStoryPushes` (default true via getCiDelivery): when
238
- // true, pre-push tooling appends a `[skip ci]` trailer to Story-branch
239
- // commit subjects so intermediate pushes do not stampede the CI fleet.
240
- // The Epic-branch merge commit produced by story-close.js's merge
241
- // runner never carries the marker, regardless of this flag.
242
- //
243
- // Story #4356 (Epic #4355) — CI-aware delivery namespace. `earlyPr` gates
244
- // whether /deliver opens the Epic PR early (before every Story merges) so CI
245
- // starts warming while later waves run; defaults to `true` via getCiDelivery.
246
- // `watch.*` tunes the merge/CI watch poll loop (poll cadence, poll cap, and
247
- // how many times the watcher may resume after a transient stall).
248
- // `autoMerge` selects the merge posture: `"trust-ci"` (default) merges once
249
- // required checks pass, `"strict"` additionally requires a clean review gate.
186
+ // Story #4356 (Epic #4355) — CI-aware delivery namespace. `watch.*` tunes
187
+ // the merge/CI watch poll loop; `autoMerge` selects the merge posture.
188
+ // Retired: `earlyPr` (Epic early-PR warmup) and `requireChecks` (no
189
+ // AutomergePredicate reader on v2).
250
190
  const CI_WATCH_SCHEMA = {
251
191
  type: 'object',
252
192
  properties: {
@@ -260,33 +200,8 @@ const CI_WATCH_SCHEMA = {
260
200
  const CI_DELIVERY_SCHEMA = {
261
201
  type: 'object',
262
202
  properties: {
263
- skipForStoryPushes: { type: 'boolean' },
264
- earlyPr: { type: 'boolean' },
265
203
  watch: CI_WATCH_SCHEMA,
266
204
  autoMerge: { type: 'string', enum: ['trust-ci', 'strict'] },
267
- // Story #4472 — fail-closed-without-checks policy. When `true`, the
268
- // AutomergePredicate refuses to arm merge in a repo that reports zero
269
- // required checks ("no checks reported"), treating the absence of a CI
270
- // gate as a hard block instead of green. Defaults to `false` so a
271
- // checks-less repo with green close-validation gates lands headlessly
272
- // rather than parking on the operator-merges path.
273
- requireChecks: { type: 'boolean' },
274
- },
275
- additionalProperties: false,
276
- };
277
-
278
- // Story #2899 (Epic #2880) — `delivery.preflight.*` thresholds consumed
279
- // by `epic-deliver-preflight.js`. When any value is exceeded the CLI
280
- // surfaces a breach in its envelope and the workflow flips the Epic to
281
- // `agent::blocked` (see /deliver Phase 1 prelude).
282
- const PREFLIGHT_SCHEMA = {
283
- type: 'object',
284
- properties: {
285
- maxStories: { type: 'integer', minimum: 1 },
286
- maxWaves: { type: 'integer', minimum: 1 },
287
- maxInstallCostSeconds: { type: 'integer', minimum: 1 },
288
- maxGithubApiRequests: { type: 'integer', minimum: 1 },
289
- maxClaudeQuotaTokens: { type: 'integer', minimum: 1 },
290
205
  },
291
206
  additionalProperties: false,
292
207
  };
@@ -296,8 +211,8 @@ const PREFLIGHT_SCHEMA = {
296
211
  * checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly
297
212
  * additive and default-OFF: when `enabled` is unset or `false`, story-deliver
298
213
  * behaves exactly as before. When `true`, the worker runs an advisory
299
- * post-green refactor pass (the `refactorer` persona +
300
- * `core/refactoring-discipline` skill) after the suite is green. The stage is
214
+ * post-green refactor pass (the `core/code-review-and-quality` skill's
215
+ * Post-Green Refactor Pass) after the suite is green. The stage is
301
216
  * advisory only — it never changes existing close-validation gate semantics.
302
217
  */
303
218
  const REFACTOR_STAGE_SCHEMA = {
@@ -306,7 +221,7 @@ const REFACTOR_STAGE_SCHEMA = {
306
221
  enabled: {
307
222
  type: 'boolean',
308
223
  description:
309
- 'When true, story-deliver runs an advisory post-green refactor stage (refactorer persona + core/refactoring-discipline skill) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged.',
224
+ 'When true, story-deliver runs an advisory post-green refactor stage (core/code-review-and-quality skill, Post-Green Refactor Pass) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged.',
310
225
  },
311
226
  },
312
227
  additionalProperties: false,
@@ -337,6 +252,12 @@ const ACCEPTANCE_EVAL_SCHEMA = {
337
252
  description:
338
253
  'Maximum number of redraft rounds the acceptance self-eval loop runs before escalating to agent::blocked when criteria remain unmet. Default 2; clamped into [1, hard ceiling] by the resolver so the cap can never be disabled.',
339
254
  },
255
+ clusterCeiling: {
256
+ type: 'integer',
257
+ minimum: 1,
258
+ description:
259
+ 'Epic #4475 (M4-B). Max acceptance criteria one single-delivery acceptance critic scores in a single fresh-context pass. Single delivery clusters the Epic ## Acceptance Table ACs into ceil(totalACs / clusterCeiling) groups and spawns one maker-blind critic per cluster, restoring the distributed acceptance coverage the per-Story critic fan-out gave for free. Default 4; clamped into [1, 8] by the resolver so a large value cannot collapse the fan-out to a single diluted critic. Ignored on the fan-out route.',
260
+ },
340
261
  },
341
262
  additionalProperties: false,
342
263
  };
@@ -368,30 +289,19 @@ export const DELIVERY_SCHEMA = {
368
289
  type: 'object',
369
290
  properties: {
370
291
  execution: EXECUTION_SCHEMA,
371
- maxTokenBudget: { type: 'integer', minimum: 1 },
372
292
  lease: LEASE_SCHEMA,
373
293
  docsFreshness: DOCS_FRESHNESS_SCHEMA,
374
294
  deliverRunner: DELIVER_RUNNER_SCHEMA,
375
295
  worktreeIsolation: WORKTREE_ISOLATION_SCHEMA,
376
296
  signals: SIGNALS_SCHEMA,
377
297
  quality: QUALITY_SCHEMA,
378
- lifecycle: LIFECYCLE_SCHEMA,
379
298
  mergeWatch: MERGE_WATCH_SCHEMA,
380
- epicAudit: EPIC_AUDIT_SCHEMA,
381
299
  codeReview: CODE_REVIEW_SCHEMA,
382
- retro: RETRO_SCHEMA,
383
300
  refactorStage: REFACTOR_STAGE_SCHEMA,
384
301
  acceptanceEval: ACCEPTANCE_EVAL_SCHEMA,
385
302
  feedbackLoop: FEEDBACK_LOOP_SCHEMA,
386
303
  ci: CI_DELIVERY_SCHEMA,
387
- preflight: PREFLIGHT_SCHEMA,
388
- // Cross-Story concurrency-hazard gate (Story #2297). When true,
389
- // `epic-deliver-prepare` refuses to flip the Epic to
390
- // `agent::executing` if the upcoming waves still carry any conflict
391
- // finding (Story #2296). Off by default; operators using the gate
392
- // also need to wire findings into prepare via the runtime injection
393
- // surface.
394
- failOnConcurrencyHazards: { type: 'boolean' },
304
+ routing: ROUTING_SCHEMA,
395
305
  },
396
306
  additionalProperties: false,
397
307
  };
@@ -96,6 +96,15 @@ export const QUALITY_SCHEMA = {
96
96
  codingGuardrails: CODING_GUARDRAILS_SCHEMA,
97
97
  autoRefresh: AUTO_REFRESH_SCHEMA,
98
98
  baselineEpsilon: BASELINE_EPSILON_SCHEMA,
99
+ // Story #4495. Fail-closed baseline-enforcement policy for the unified
100
+ // check-baselines close-validation gate. Default false: a consumer that
101
+ // enables baseline gates but has not committed baseline artifacts under
102
+ // baselines/ gets a clean skip-with-reason from buildDefaultGates rather
103
+ // than a deterministic first-try close failure. Set true to keep the gate
104
+ // registered so an absent baseline artifact fails close-validation with a
105
+ // preflight hint (the fail-closed posture, analogous to
106
+ // delivery.ci.requireChecks).
107
+ requireBaselines: { type: 'boolean' },
99
108
  // Navigability lens + post-wave integration gate config (Epic #4131,
100
109
  // F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and the
101
110
  // deliver-epic.md Phase 6.5 gate (journey suite). Opt-in: absent or empty
@@ -114,12 +123,11 @@ export const QUALITY_SCHEMA = {
114
123
  };
115
124
 
116
125
  /**
117
- * `delivery.codeReview` — sibling to `delivery.epicAudit`. Same bounded
118
- * retry + scope cap, applied to /deliver Phase 5 (code-review).
126
+ * `delivery.codeReview` — review-provider chain + bounded-retry knobs for
127
+ * the /deliver code-review ceremony (Story-close and plan-run close).
119
128
  *
120
- * `autoFixSeverity` (Story #4399) is the sibling of
121
- * `delivery.epicAudit.autoFixSeverity`: the threshold that governs which
122
- * Phase 5 findings the host-LLM focused-fix routing remediates on-branch —
129
+ * `autoFixSeverity` (Story #4399) is the threshold that governs which
130
+ * findings the host-LLM focused-fix routing remediates on-branch —
123
131
  * `medium` (default) routes 🔴/🟠/🟡 while 🟢 still graduates, `high`
124
132
  * reproduces the pre-4399 Critical/High-only routing.
125
133
  */
@@ -135,15 +143,10 @@ export const CODE_REVIEW_SCHEMA = {
135
143
  // hatch reserved for adapter-specific options.
136
144
  //
137
145
  // Story #2871 added `security-review` to the inline registry plus
138
- // a multi-provider `providers: []` chain shape. When `providers` is
139
- // set and non-empty, it wins over the legacy single-string
140
- // `provider` field. Chain entries can also reference the
141
- // `ultrareview` manual-prompt provider via `manualPrompt: true`.
142
- provider: {
143
- type: 'string',
144
- enum: ['native', 'codex', 'security-review'],
145
- default: 'native',
146
- },
146
+ // the `providers: []` chain shape. Chain entries can also reference
147
+ // the `ultrareview` manual-prompt provider via `manualPrompt: true`.
148
+ // When `providers` is unset or empty, the factory defaults to
149
+ // `[{ name: 'native' }]`.
147
150
  providers: {
148
151
  type: 'array',
149
152
  items: {
@@ -246,66 +246,80 @@ const CODEBASE_SNAPSHOT_SCHEMA = {
246
246
  additionalProperties: false,
247
247
  };
248
248
 
249
- /**
250
- * `planning.taskSizing` — Story-sizing thresholds consumed by
251
- * `ticket-validator-sizing.js`. Operator overrides shallow-merge with
252
- * `DEFAULT_TASK_SIZING` defaults (softFiles 15, hardFiles 30,
253
- * softAcceptanceCount 10 — the uniform relaxed profile from Story #3874).
254
- * Story #3760 collapsed the per-profile matrix and the parallel
255
- * `testSurface` axis into a flat set of knobs; the `sizingProfile` enum was
256
- * replaced by an optional body-level `wide` declaration that lifts the
257
- * `hardFiles` rejection. The hard `maxAcceptance` ceiling was removed after
258
- * the Epic #4355 decomposition experiment — acceptance mass is advisory-only.
259
- */
260
- const TASK_SIZING_SCHEMA = {
261
- type: 'object',
262
- properties: {
263
- softFiles: { type: 'integer', minimum: 1 },
264
- hardFiles: { type: 'integer', minimum: 1 },
265
- softAcceptanceCount: { type: 'integer', minimum: 1 },
266
- // Under-size (merge-candidate) thresholds (Story #4312). A Story whose
267
- // footprint is at or below BOTH ceilings and that carries a `depends_on`
268
- // edge to a sibling trips the advisory `merge-candidate` soft finding.
269
- mergeCandidateMaxFiles: { type: 'integer', minimum: 1 },
270
- mergeCandidateMaxAcceptance: { type: 'integer', minimum: 1 },
271
- },
272
- additionalProperties: false,
273
- };
274
-
275
249
  const PLANNING_SCHEMA = {
276
250
  type: 'object',
277
251
  properties: {
278
252
  riskHeuristics: LIST_OR_EXTENDER_OF_STRINGS,
279
253
  context: PLANNING_CONTEXT_SCHEMA,
280
254
  codebaseSnapshot: CODEBASE_SNAPSHOT_SCHEMA,
281
- taskSizing: TASK_SIZING_SCHEMA,
282
255
  // Cross-Story conflict-finding severity gates. Off by default so
283
256
  // existing repos keep advisory-only behaviour; flipping either to
284
257
  // `true` upgrades the matching finding class to `'hard'`, which routes
285
258
  // it through the validator's `errors[]` channel and trips the bounded
286
259
  // decompose loop's re-prompt gate.
287
- failOnSharedEditors: { type: 'boolean' },
288
- requireExplicitCrossStoryDeps: { type: 'boolean' },
260
+ // `planning.modelCapacity` was collapsed to the framework constant
261
+ // `DEFAULT_MODEL_CAPACITY` in ticket-validator-sizing.js (authored-
262
+ // tokens-only mass); setting it in a config is rejected as an
263
+ // additional property.
264
+ failOnSharedEditors: {
265
+ type: 'boolean',
266
+ description:
267
+ 'When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).',
268
+ },
269
+ requireExplicitCrossStoryDeps: {
270
+ type: 'boolean',
271
+ description:
272
+ 'When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).',
273
+ },
289
274
  // Cross-cutting registry conflict knobs consumed by
290
275
  // `ticket-validator-conflicts.js` (wired through
291
276
  // `epic-plan-decompose/phases/planning-artifacts.js`).
292
277
  // `crossCuttingRegistries` names the registry paths whose concurrent
293
278
  // edits are flagged; `failOnRegistryConflicts` upgrades that finding to
294
279
  // `'hard'`. `failOnLargeFanOut` / `largeFanOutThreshold` gate the
295
- // single-Story fan-out finding.
296
- crossCuttingRegistries: LIST_OR_EXTENDER_OF_STRINGS,
297
- failOnRegistryConflicts: { type: 'boolean' },
298
- failOnLargeFanOut: { type: 'boolean' },
299
- largeFanOutThreshold: { type: 'integer', minimum: 0 },
280
+ // delete blast-radius finding (call sites of a module a Story marks
281
+ // `assumption: "deletes"`).
282
+ crossCuttingRegistries: {
283
+ ...LIST_OR_EXTENDER_OF_STRINGS,
284
+ description:
285
+ 'Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.',
286
+ },
287
+ failOnRegistryConflicts: {
288
+ type: 'boolean',
289
+ description:
290
+ 'When true, upgrade cross-cutting registry conflict findings to hard errors (default false).',
291
+ },
292
+ failOnLargeFanOut: {
293
+ type: 'boolean',
294
+ description:
295
+ 'When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).',
296
+ },
297
+ largeFanOutThreshold: {
298
+ type: 'integer',
299
+ minimum: 0,
300
+ description:
301
+ 'Call-site count above which a Story that deletes a module emits a fan-out-warning. Counts base-branch references to the deleted path basename. Soft by default; does not size or reject Stories. Default 10.',
302
+ },
300
303
  // Navigability-reachability config consumed by the plan-persist draft
301
- // reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6
302
- // the manual epic-plan-healthcheck --paranoid re-check reads it too).
304
+ // reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6).
303
305
  // Opt-in: absent or empty routeGlobs degrades to a silent no-op.
304
306
  navigation: {
305
307
  type: 'object',
308
+ description:
309
+ 'Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.',
306
310
  properties: {
307
- routeGlobs: { type: 'array', items: { type: 'string' } },
308
- navRegistry: { type: 'array', items: { type: 'string' } },
311
+ routeGlobs: {
312
+ type: 'array',
313
+ items: { type: 'string' },
314
+ description:
315
+ 'Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.',
316
+ },
317
+ navRegistry: {
318
+ type: 'array',
319
+ items: { type: 'string' },
320
+ description:
321
+ 'Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.',
322
+ },
309
323
  },
310
324
  additionalProperties: false,
311
325
  },
@@ -2,8 +2,9 @@
2
2
  * dependency-parser.js — Shared Dependency & Metadata Parsing Utilities
3
3
  *
4
4
  * Canonical implementation of dependency-related regex parsing and
5
- * ticket metadata extraction. Eliminates duplicated implementations
6
- * across dispatcher.js, verify-prereqs.js, and providers/github.js.
5
+ * ticket metadata extraction, shared by the ticketing provider and the
6
+ * orchestration layer (e.g. providers/github/tickets.js,
7
+ * lib/story-adjacency.js, lib/branch-name-guard.js).
7
8
  */
8
9
 
9
10
  /**
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * - `alwaysLoaded` — `CLAUDE.md` plus the transitive closure of its
9
9
  * `@`-import references (`@AGENTS.md`,
10
- * `@.agents/instructions.md`, the persona, the always-on
11
- * rules, …). This is the context every session re-pays
10
+ * `@.agents/instructions.md`, the always-on rules, …).
11
+ * This is the context every session re-pays
12
12
  * on every subagent spawn (instructions.md § 4), so it is
13
13
  * the primary budget the context-budget ratchet gates.
14
14
  * - `mandatoryRead` — the resolved `project.docsContextFiles` set (prefixed
@@ -24,10 +24,16 @@
24
24
  * - `onDemand` — the on-demand `.agents/rules/*.md` set (instructions.md
25
25
  * § 1.F): every rule file that is **not** part of the
26
26
  * always-on core already captured in `alwaysLoaded`.
27
+ * - `agentBoot` — the role-scoped boot contexts `.agents/agents/*.md`
28
+ * (issue #4478). Each is a standalone system prompt a
29
+ * converted spawn boots on **instead of** the always-loaded
30
+ * closure, so it is budgeted independently (per-file ≤8KB
31
+ * ceiling gated by `check-context-budget.js`).
27
32
  *
28
33
  * A file that could appear in more than one tier is kept in its **highest**
29
34
  * tier only (alwaysLoaded > mandatoryRead > digestVisible > onDemand), so the
30
- * four arrays partition the doc set with no double-counting.
35
+ * arrays partition the doc set with no double-counting. `agentBoot` is disjoint
36
+ * from the read-tiers (it lives under `.agents/agents/`, not the doc/rules set).
31
37
  *
32
38
  * The closure is discovered by parsing `@`-import references and following
33
39
  * them recursively (cycle-safe via a visited set). A candidate `@`-token only
@@ -216,6 +222,7 @@ export function docsContextPaths(config) {
216
222
  * mandatoryRead: Array<{ path: string, bytes: number }>,
217
223
  * digestVisible: Array<{ path: string, bytes: number }>,
218
224
  * onDemand: Array<{ path: string, bytes: number }>,
225
+ * agentBoot: Array<{ path: string, bytes: number }>,
219
226
  * } }}
220
227
  */
221
228
  export function resolveDocTiers(
@@ -254,7 +261,35 @@ export function resolveDocTiers(
254
261
  // (the always-on ones already live in the alwaysLoaded closure).
255
262
  const onDemand = collect(listOnDemandRules(root, fs));
256
263
 
257
- return { tiers: { alwaysLoaded, mandatoryRead, digestVisible, onDemand } };
264
+ // 5. agent-boot: role-scoped boot contexts .agents/agents/*.md (#4478). These
265
+ // are standalone system prompts, disjoint from the doc read-tiers.
266
+ const agentBoot = collect(listAgentDefs(root, fs));
267
+
268
+ return {
269
+ tiers: { alwaysLoaded, mandatoryRead, digestVisible, onDemand, agentBoot },
270
+ };
271
+ }
272
+
273
+ /**
274
+ * List the role-scoped agent-boot defs (repo-relative posix): every
275
+ * `.agents/agents/*.md`. Returns [] when the directory is absent.
276
+ *
277
+ * @param {string} root absolute repo root
278
+ * @param {FsLike} fs
279
+ * @returns {string[]}
280
+ */
281
+ function listAgentDefs(root, fs) {
282
+ const agentsDir = path.resolve(root, '.agents', 'agents');
283
+ let names;
284
+ try {
285
+ names = fs.readdirSync(agentsDir);
286
+ } catch {
287
+ return [];
288
+ }
289
+ return names
290
+ .filter((n) => n.endsWith('.md'))
291
+ .map((n) => path.posix.join('.agents', 'agents', n))
292
+ .sort();
258
293
  }
259
294
 
260
295
  /**