mandrel 1.94.0 → 2.1.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 (560) hide show
  1. package/.agents/README.md +116 -99
  2. package/.agents/agents/acceptance-critic.md +9 -7
  3. package/.agents/agents/story-worker.md +45 -51
  4. package/.agents/audit-checklists/performance.md +1 -1
  5. package/.agents/docs/SDLC.md +498 -1287
  6. package/.agents/docs/agentrc-reference.json +185 -80
  7. package/.agents/docs/configuration.md +132 -190
  8. package/.agents/docs/execution-reference.md +51 -25
  9. package/.agents/docs/quality-gates.md +25 -33
  10. package/.agents/docs/workflows.md +8 -8
  11. package/.agents/instructions.md +113 -139
  12. package/.agents/rules/ci-remediation.md +11 -15
  13. package/.agents/rules/git-conventions-reference.md +48 -58
  14. package/.agents/rules/git-conventions.md +16 -22
  15. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  16. package/.agents/schemas/agentrc.schema.json +83 -254
  17. package/.agents/schemas/audit-rules.json +59 -1
  18. package/.agents/schemas/audit-rules.schema.json +33 -1
  19. package/.agents/schemas/lifecycle/README.md +1 -2
  20. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  21. package/.agents/schemas/lifecycle/merge.flip-failed.schema.json +33 -0
  22. package/.agents/schemas/lifecycle/merge.unlanded.schema.json +1 -0
  23. package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
  24. package/.agents/schemas/lifecycle/story.merged.schema.json +1 -1
  25. package/.agents/schemas/signal-event.schema.json +3 -3
  26. package/.agents/schemas/story-deliver-terminal.schema.json +152 -0
  27. package/.agents/schemas/validation-evidence.schema.json +1 -1
  28. package/.agents/scripts/acceptance-eval.js +22 -66
  29. package/.agents/scripts/agents-bootstrap-github.js +1 -1
  30. package/.agents/scripts/audit-to-stories.js +7 -7
  31. package/.agents/scripts/boot-sweep.js +1 -1
  32. package/.agents/scripts/bootstrap.js +3 -3
  33. package/.agents/scripts/check-dead-exports.js +43 -104
  34. package/.agents/scripts/check-doc-links.js +2 -2
  35. package/.agents/scripts/check-lifecycle-lint.js +7 -10
  36. package/.agents/scripts/check-workflow-cli-lint.js +91 -0
  37. package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
  38. package/.agents/scripts/deliver-recover.js +122 -0
  39. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  40. package/.agents/scripts/evidence-gate.js +20 -50
  41. package/.agents/scripts/generate-skills-index.js +17 -1
  42. package/.agents/scripts/generate-workflows-doc.js +4 -4
  43. package/.agents/scripts/lib/ITicketingProvider.js +1 -19
  44. package/.agents/scripts/lib/Logger.js +6 -10
  45. package/.agents/scripts/lib/audit-suite/runner.js +2 -2
  46. package/.agents/scripts/lib/audit-suite/selector.js +328 -28
  47. package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
  48. package/.agents/scripts/lib/baselines/kernel.js +206 -18
  49. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -15
  50. package/.agents/scripts/lib/baselines/reader.js +1 -6
  51. package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
  52. package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +28 -33
  53. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
  54. package/.agents/scripts/lib/bootstrap/manifest.js +8 -11
  55. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +30 -53
  56. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +0 -2
  57. package/.agents/scripts/lib/checks/core-bare-clean.js +6 -3
  58. package/.agents/scripts/lib/checks/index.js +3 -2
  59. package/.agents/scripts/lib/checks/loop-health.js +12 -11
  60. package/.agents/scripts/lib/checks/state.js +17 -248
  61. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +26 -24
  62. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +3 -4
  63. package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +2 -2
  64. package/.agents/scripts/lib/checks/worktree-residue-biome.js +3 -3
  65. package/.agents/scripts/lib/cli/standard-args.js +13 -22
  66. package/.agents/scripts/lib/cli-args.js +39 -9
  67. package/.agents/scripts/lib/close-validation/gates.js +15 -15
  68. package/.agents/scripts/lib/close-validation/projections/inputs.js +7 -7
  69. package/.agents/scripts/lib/close-validation/projections/maintainability.js +12 -12
  70. package/.agents/scripts/lib/close-validation/runner.js +13 -21
  71. package/.agents/scripts/lib/close-validation/telemetry.js +17 -8
  72. package/.agents/scripts/lib/config/ci.js +6 -31
  73. package/.agents/scripts/lib/config/delivery-routing.js +52 -35
  74. package/.agents/scripts/lib/config/explain.js +61 -48
  75. package/.agents/scripts/lib/config/github.js +7 -5
  76. package/.agents/scripts/lib/config/limits.js +29 -80
  77. package/.agents/scripts/lib/config/paths.js +0 -2
  78. package/.agents/scripts/lib/config/quality.js +12 -15
  79. package/.agents/scripts/lib/config/runners.js +20 -66
  80. package/.agents/scripts/lib/config/temp-paths.js +30 -63
  81. package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
  82. package/.agents/scripts/lib/config-resolver.js +2 -7
  83. package/.agents/scripts/lib/config-settings-schema-delivery.js +55 -161
  84. package/.agents/scripts/lib/config-settings-schema-quality.js +17 -16
  85. package/.agents/scripts/lib/config-settings-schema.js +100 -60
  86. package/.agents/scripts/lib/dead-exports-knip.js +105 -0
  87. package/.agents/scripts/lib/dead-exports-mode.js +51 -0
  88. package/.agents/scripts/lib/dependency-parser.js +3 -2
  89. package/.agents/scripts/lib/doc-tiers.js +2 -2
  90. package/.agents/scripts/lib/duplicate-search.js +242 -41
  91. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  92. package/.agents/scripts/lib/findings/promote-finding.js +23 -14
  93. package/.agents/scripts/lib/format-generated-json.js +97 -0
  94. package/.agents/scripts/lib/framework-version.js +19 -190
  95. package/.agents/scripts/lib/gh-exec.js +8 -0
  96. package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
  97. package/.agents/scripts/lib/git-branch-lifecycle.js +17 -180
  98. package/.agents/scripts/lib/git-utils.js +32 -20
  99. package/.agents/scripts/lib/github/framework-repo.js +6 -0
  100. package/.agents/scripts/lib/json-utils.js +1 -2
  101. package/.agents/scripts/lib/label-constants.js +10 -38
  102. package/.agents/scripts/lib/label-taxonomy.js +10 -55
  103. package/.agents/scripts/lib/observability/active-story-env.js +44 -165
  104. package/.agents/scripts/lib/observability/runtime-friction.js +243 -0
  105. package/.agents/scripts/lib/observability/signal-validator.js +4 -4
  106. package/.agents/scripts/lib/observability/signals-writer.js +6 -82
  107. package/.agents/scripts/lib/observability/source-classifier.js +5 -5
  108. package/.agents/scripts/lib/observability/tool-trace-hook.js +2 -12
  109. package/.agents/scripts/lib/onboard/init-tail.js +1 -3
  110. package/.agents/scripts/lib/orchestration/acceptance-clusters.js +1 -1
  111. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +2 -2
  112. package/.agents/scripts/lib/orchestration/ceremony-routing.js +105 -44
  113. package/.agents/scripts/lib/orchestration/code-review.js +78 -436
  114. package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
  115. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +4 -4
  116. package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
  117. package/.agents/scripts/lib/orchestration/deliver-recover.js +328 -0
  118. package/.agents/scripts/lib/orchestration/detectors-phase.js +12 -6
  119. package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
  120. package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
  121. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
  122. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +34 -0
  123. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -2
  124. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +142 -0
  125. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +17 -19
  126. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +86 -0
  127. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +37 -103
  128. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
  129. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +21 -43
  130. package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +50 -85
  131. package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +3 -14
  132. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
  133. package/.agents/scripts/lib/orchestration/merge-block-class.js +77 -21
  134. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -0
  135. package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
  136. package/.agents/scripts/lib/orchestration/plan-context.js +354 -282
  137. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +11 -22
  138. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +4 -8
  139. package/.agents/scripts/lib/orchestration/plan-metrics.js +38 -6
  140. package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
  141. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +71 -0
  142. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +245 -0
  143. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +116 -0
  144. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +432 -858
  145. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +778 -0
  146. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +47 -115
  147. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +509 -0
  148. package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
  149. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
  150. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +52 -51
  151. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
  152. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +1 -1
  153. package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
  154. package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
  155. package/.agents/scripts/lib/orchestration/resolve-stories.js +344 -0
  156. package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
  157. package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
  158. package/.agents/scripts/lib/orchestration/review-depth.js +126 -47
  159. package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
  160. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +3 -13
  161. package/.agents/scripts/lib/orchestration/review-providers/native.js +1 -154
  162. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +3 -2
  163. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
  164. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +1 -1
  165. package/.agents/scripts/lib/orchestration/review-providers/types.js +5 -4
  166. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +1 -1
  167. package/.agents/scripts/lib/orchestration/run-epilogue.js +784 -0
  168. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +25 -1
  169. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +11 -9
  170. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +4 -4
  171. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +86 -41
  172. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +608 -152
  173. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +77 -32
  174. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +305 -0
  175. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +1 -1
  176. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +44 -0
  177. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +37 -4
  178. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +2 -2
  179. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +275 -46
  180. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
  181. package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
  182. package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
  183. package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
  184. package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
  185. package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
  186. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +10 -10
  187. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +28 -42
  188. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +360 -0
  189. package/.agents/scripts/lib/orchestration/story-follow-ups.js +298 -0
  190. package/.agents/scripts/lib/orchestration/story-init-remote.js +51 -0
  191. package/.agents/scripts/lib/orchestration/story-plan-state.js +33 -0
  192. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
  193. package/.agents/scripts/lib/orchestration/task-body-validator.js +60 -25
  194. package/.agents/scripts/lib/orchestration/ticket-lease.js +27 -74
  195. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +130 -75
  196. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +192 -377
  197. package/.agents/scripts/lib/orchestration/ticket-validator.js +123 -25
  198. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +14 -72
  199. package/.agents/scripts/lib/orchestration/ticketing/reads.js +45 -55
  200. package/.agents/scripts/lib/orchestration/ticketing/transition.js +66 -6
  201. package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
  202. package/.agents/scripts/lib/plan-phase-cleanup.js +12 -14
  203. package/.agents/scripts/lib/planning-corpus.js +12 -281
  204. package/.agents/scripts/lib/preflight-runner.js +4 -4
  205. package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
  206. package/.agents/scripts/lib/qa/qa-context-hydrator.js +5 -5
  207. package/.agents/scripts/lib/signals/index.js +4 -17
  208. package/.agents/scripts/lib/signals/read.js +35 -35
  209. package/.agents/scripts/lib/signals/schema.js +8 -11
  210. package/.agents/scripts/lib/signals/span-tree.js +7 -7
  211. package/.agents/scripts/lib/signals/write.js +0 -1
  212. package/.agents/scripts/lib/single-story/story-merged-notify.js +13 -2
  213. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
  214. package/.agents/scripts/lib/skills/parse-skill.js +16 -3
  215. package/.agents/scripts/lib/story-adjacency.js +17 -19
  216. package/.agents/scripts/lib/story-body/story-body.js +130 -75
  217. package/.agents/scripts/lib/story-plan.js +2 -4
  218. package/.agents/scripts/lib/templates/decomposer-prompts.js +51 -46
  219. package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
  220. package/.agents/scripts/lib/test-env.js +14 -1
  221. package/.agents/scripts/lib/test-tiers.js +0 -3
  222. package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +25 -39
  223. package/.agents/scripts/lib/validation-evidence.js +32 -60
  224. package/.agents/scripts/lib/wave-runner/ready-set.js +38 -12
  225. package/.agents/scripts/lib/workspace-provisioner.js +1 -1
  226. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +1 -1
  227. package/.agents/scripts/lib/worktree/lifecycle/reap.js +72 -25
  228. package/.agents/scripts/lib/worktree/lifecycle-manager.js +1 -2
  229. package/.agents/scripts/lint-issue-body.js +71 -40
  230. package/.agents/scripts/mandrel-update-preflight.js +1 -1
  231. package/.agents/scripts/notify.js +4 -3
  232. package/.agents/scripts/plan-context.js +102 -80
  233. package/.agents/scripts/plan-persist.js +230 -279
  234. package/.agents/scripts/plan-run-epilogue.js +142 -0
  235. package/.agents/scripts/post-structured-comment.js +0 -38
  236. package/.agents/scripts/pr-watch-with-update.js +43 -22
  237. package/.agents/scripts/providers/github/compose.js +0 -1
  238. package/.agents/scripts/providers/github/errors.js +0 -19
  239. package/.agents/scripts/providers/github/issues.js +13 -39
  240. package/.agents/scripts/providers/github/mappers.js +5 -12
  241. package/.agents/scripts/providers/github/sub-issues.js +0 -47
  242. package/.agents/scripts/providers/github/tickets.js +33 -156
  243. package/.agents/scripts/providers/github.js +17 -6
  244. package/.agents/scripts/resolve-stories.js +236 -0
  245. package/.agents/scripts/run-coverage.js +4 -1
  246. package/.agents/scripts/run-lint.js +2 -2
  247. package/.agents/scripts/run-verify.js +31 -2
  248. package/.agents/scripts/signals-view.js +25 -21
  249. package/.agents/scripts/single-story-close.js +178 -26
  250. package/.agents/scripts/single-story-confirm-merge.js +313 -24
  251. package/.agents/scripts/single-story-init.js +35 -30
  252. package/.agents/scripts/stories-wave-tick.js +85 -10
  253. package/.agents/scripts/story-plan.js +28 -49
  254. package/.agents/scripts/update-ticket-state.js +14 -65
  255. package/.agents/skills/core/code-review-and-quality/SKILL.md +28 -450
  256. package/.agents/skills/core/code-review-and-quality/reference.md +458 -0
  257. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +22 -315
  258. package/.agents/skills/core/debugging-and-error-recovery/reference.md +323 -0
  259. package/.agents/skills/core/diagnose-friction/SKILL.md +14 -18
  260. package/.agents/skills/core/documentation-and-adrs/SKILL.md +25 -397
  261. package/.agents/skills/core/documentation-and-adrs/reference.md +403 -0
  262. package/.agents/skills/core/gates-and-baselines/SKILL.md +12 -12
  263. package/.agents/skills/core/idea-refinement/SKILL.md +9 -9
  264. package/.agents/skills/core/scope-triage/SKILL.md +31 -172
  265. package/.agents/skills/core/security-and-hardening/SKILL.md +22 -367
  266. package/.agents/skills/core/security-and-hardening/reference.md +375 -0
  267. package/.agents/skills/skills.index.json +3 -53
  268. package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +2 -4
  269. package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +1 -1
  270. package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -3
  271. package/.agents/starter-agentrc.json +0 -5
  272. package/.agents/templates/agent-protocol.md +9 -10
  273. package/.agents/workflows/audit-architecture.md +6 -7
  274. package/.agents/workflows/audit-clean-code.md +7 -7
  275. package/.agents/workflows/audit-dependencies.md +3 -3
  276. package/.agents/workflows/audit-devops.md +3 -3
  277. package/.agents/workflows/audit-documentation.md +9 -10
  278. package/.agents/workflows/audit-lighthouse.md +11 -3
  279. package/.agents/workflows/audit-navigability.md +13 -2
  280. package/.agents/workflows/audit-performance.md +5 -6
  281. package/.agents/workflows/audit-privacy.md +3 -3
  282. package/.agents/workflows/audit-quality.md +11 -12
  283. package/.agents/workflows/audit-security.md +4 -5
  284. package/.agents/workflows/audit-seo.md +13 -3
  285. package/.agents/workflows/audit-sre.md +3 -3
  286. package/.agents/workflows/audit-to-stories.md +20 -20
  287. package/.agents/workflows/audit-ux-ui.md +10 -3
  288. package/.agents/workflows/deliver.md +177 -176
  289. package/.agents/workflows/git-cleanup.md +5 -6
  290. package/.agents/workflows/git-deliver.md +1 -1
  291. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  292. package/.agents/workflows/helpers/acceptance-self-eval.md +35 -40
  293. package/.agents/workflows/helpers/code-quality-guardrails.md +7 -7
  294. package/.agents/workflows/helpers/code-review.md +75 -196
  295. package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +83 -44
  296. package/.agents/workflows/helpers/deliver-story.md +606 -0
  297. package/.agents/workflows/helpers/diagnose.md +10 -10
  298. package/.agents/workflows/helpers/parallel-tooling.md +3 -3
  299. package/.agents/workflows/helpers/signals.md +16 -16
  300. package/.agents/workflows/helpers/worktree-lifecycle.md +66 -86
  301. package/.agents/workflows/mandrel-update.md +2 -1
  302. package/.agents/workflows/plan.md +277 -145
  303. package/.agents/workflows/qa-assist.md +27 -33
  304. package/.agents/workflows/qa-explore.md +29 -38
  305. package/.agents/workflows/qa-run.md +2 -6
  306. package/README.md +9 -8
  307. package/bin/mandrel.js +12 -1
  308. package/docs/CHANGELOG.md +70 -0
  309. package/lib/cli/registry.js +262 -19
  310. package/lib/cli/sync-agents.js +157 -0
  311. package/lib/cli/sync-commands.js +115 -6
  312. package/lib/cli/sync.js +168 -6
  313. package/lib/cli/update.js +105 -8
  314. package/lib/cli/version-helpers.js +131 -0
  315. package/lib/migrations/README.md +7 -5
  316. package/lib/migrations/index.js +12 -8
  317. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +100 -0
  318. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +101 -0
  319. package/package.json +2 -2
  320. package/.agents/agents/retro.md +0 -42
  321. package/.agents/personas/architect.md +0 -113
  322. package/.agents/personas/devops-engineer.md +0 -38
  323. package/.agents/personas/engineer.md +0 -33
  324. package/.agents/personas/project-manager.md +0 -114
  325. package/.agents/personas/qa-engineer.md +0 -95
  326. package/.agents/personas/security-engineer.md +0 -111
  327. package/.agents/personas/technical-writer.md +0 -101
  328. package/.agents/schemas/dispatch-manifest.json +0 -232
  329. package/.agents/schemas/epic-perf-report.schema.json +0 -89
  330. package/.agents/schemas/epic-spec.schema.json +0 -153
  331. package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +0 -13
  332. package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +0 -13
  333. package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +0 -13
  334. package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +0 -12
  335. package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +0 -13
  336. package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +0 -15
  337. package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +0 -13
  338. package/.agents/schemas/lifecycle/epic.blocked.schema.json +0 -13
  339. package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +0 -12
  340. package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +0 -12
  341. package/.agents/schemas/lifecycle/epic.close.end.schema.json +0 -12
  342. package/.agents/schemas/lifecycle/epic.complete.schema.json +0 -13
  343. package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +0 -13
  344. package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +0 -12
  345. package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +0 -13
  346. package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +0 -14
  347. package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +0 -17
  348. package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +0 -15
  349. package/.agents/schemas/lifecycle/epic.plan.end.schema.json +0 -18
  350. package/.agents/schemas/lifecycle/epic.plan.start.schema.json +0 -12
  351. package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +0 -16
  352. package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +0 -12
  353. package/.agents/schemas/lifecycle/epic.watch.end.schema.json +0 -29
  354. package/.agents/schemas/lifecycle/epic.watch.start.schema.json +0 -16
  355. package/.agents/schemas/lifecycle/slice.end.schema.json +0 -21
  356. package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
  357. package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
  358. package/.agents/schemas/lifecycle/story.heartbeat.schema.json +0 -20
  359. package/.agents/schemas/risk-verdict.schema.json +0 -66
  360. package/.agents/schemas/story-perf-summary.schema.json +0 -73
  361. package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
  362. package/.agents/scripts/analyze-execution.js +0 -444
  363. package/.agents/scripts/bookkeeping-reconcile.js +0 -117
  364. package/.agents/scripts/check-prepush-recovery.js +0 -90
  365. package/.agents/scripts/dispatcher.js +0 -295
  366. package/.agents/scripts/epic-audit-prepare.js +0 -497
  367. package/.agents/scripts/epic-audit-recheck.js +0 -274
  368. package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
  369. package/.agents/scripts/epic-deliver-preflight.js +0 -462
  370. package/.agents/scripts/epic-deliver-prepare.js +0 -852
  371. package/.agents/scripts/epic-execute-record-wave.js +0 -449
  372. package/.agents/scripts/epic-plan-clarity.js +0 -211
  373. package/.agents/scripts/epic-plan-healthcheck.js +0 -581
  374. package/.agents/scripts/epic-reconcile.js +0 -625
  375. package/.agents/scripts/lib/baseline-snapshot.js +0 -979
  376. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
  377. package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
  378. package/.agents/scripts/lib/config/lifecycle.js +0 -40
  379. package/.agents/scripts/lib/config/preflight.js +0 -58
  380. package/.agents/scripts/lib/config/retro.js +0 -77
  381. package/.agents/scripts/lib/epic-merge-lock.js +0 -322
  382. package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
  383. package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
  384. package/.agents/scripts/lib/git-merge-orchestrator.js +0 -261
  385. package/.agents/scripts/lib/observability/baseline-refresh-rate.js +0 -221
  386. package/.agents/scripts/lib/observability/hook-heartbeat.js +0 -219
  387. package/.agents/scripts/lib/observability/perf-aggregator.js +0 -813
  388. package/.agents/scripts/lib/observability/perf-report-readers.js +0 -328
  389. package/.agents/scripts/lib/observability/perf-report-render.js +0 -182
  390. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +0 -270
  391. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
  392. package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
  393. package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
  394. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
  395. package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
  396. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
  397. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
  398. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
  399. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
  400. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
  401. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
  402. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
  403. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
  404. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
  405. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
  406. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
  407. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
  408. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +0 -105
  409. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
  410. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
  411. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
  412. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
  413. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
  414. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
  415. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
  416. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
  417. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
  418. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
  419. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
  420. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
  421. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
  422. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
  423. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
  424. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
  425. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
  426. package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +0 -400
  427. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
  428. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
  429. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
  430. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
  431. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
  432. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
  433. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
  434. package/.agents/scripts/lib/orchestration/error-journal.js +0 -139
  435. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
  436. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
  437. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
  438. package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
  439. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
  440. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +0 -155
  441. package/.agents/scripts/lib/orchestration/lifecycle/ledger-diff.js +0 -140
  442. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -465
  443. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
  444. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
  445. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
  446. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
  447. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
  448. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
  449. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
  450. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
  451. package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
  452. package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +0 -665
  453. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
  454. package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
  455. package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
  456. package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
  457. package/.agents/scripts/lib/orchestration/plan-review-routing.js +0 -63
  458. package/.agents/scripts/lib/orchestration/planning-context-budget.js +0 -213
  459. package/.agents/scripts/lib/orchestration/planning-risk.js +0 -194
  460. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +0 -56
  461. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +0 -33
  462. package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +0 -78
  463. package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +0 -68
  464. package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +0 -118
  465. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +0 -396
  466. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
  467. package/.agents/scripts/lib/orchestration/preflight-cache.js +0 -187
  468. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
  469. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
  470. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
  471. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
  472. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
  473. package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
  474. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +0 -275
  475. package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
  476. package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
  477. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
  478. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
  479. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
  480. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
  481. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
  482. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
  483. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
  484. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
  485. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
  486. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
  487. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
  488. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
  489. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
  490. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
  491. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
  492. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
  493. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
  494. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
  495. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
  496. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
  497. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
  498. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
  499. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
  500. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
  501. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
  502. package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
  503. package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
  504. package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
  505. package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
  506. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
  507. package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
  508. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
  509. package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
  510. package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
  511. package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
  512. package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
  513. package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
  514. package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
  515. package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
  516. package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
  517. package/.agents/scripts/lib/push-epic-retry.js +0 -209
  518. package/.agents/scripts/lib/spec/index.js +0 -36
  519. package/.agents/scripts/lib/spec/loader.js +0 -425
  520. package/.agents/scripts/lib/spec/state.js +0 -208
  521. package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
  522. package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
  523. package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
  524. package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
  525. package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
  526. package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
  527. package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
  528. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
  529. package/.agents/scripts/lib/wave-runner/tick.js +0 -754
  530. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
  531. package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
  532. package/.agents/scripts/lifecycle-emit.js +0 -510
  533. package/.agents/scripts/retro-run.js +0 -218
  534. package/.agents/scripts/slice-phase.js +0 -361
  535. package/.agents/scripts/standalone-feedback-rollup.js +0 -188
  536. package/.agents/scripts/story-close.js +0 -294
  537. package/.agents/scripts/story-init.js +0 -599
  538. package/.agents/scripts/story-phase.js +0 -369
  539. package/.agents/scripts/wave-tick.js +0 -464
  540. package/.agents/skills/core/analyze-execution/SKILL.md +0 -98
  541. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
  542. package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
  543. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
  544. package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
  545. package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
  546. package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
  547. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
  548. package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
  549. package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
  550. package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
  551. package/.agents/workflows/helpers/deliver-epic.md +0 -998
  552. package/.agents/workflows/helpers/deliver-stories.md +0 -450
  553. package/.agents/workflows/helpers/epic-audit.md +0 -189
  554. package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
  555. package/.agents/workflows/helpers/epic-testing.md +0 -125
  556. package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
  557. package/.agents/workflows/helpers/plan-epic.md +0 -353
  558. package/.agents/workflows/helpers/plan-story.md +0 -251
  559. package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
  560. package/.agents/workflows/helpers/single-story-deliver.md +0 -557
@@ -32,7 +32,6 @@ export const PATHS_DEFAULTS = Object.freeze({
32
32
  * auditOutputDir: string,
33
33
  * scriptsRoot: string,
34
34
  * workflowsRoot: string,
35
- * personasRoot: string,
36
35
  * schemasRoot: string,
37
36
  * skillsRoot: string,
38
37
  * templatesRoot: string,
@@ -53,7 +52,6 @@ export function resolvePaths(userPaths) {
53
52
  auditOutputDir: `${tempRoot}/audits`,
54
53
  scriptsRoot: `${agentRoot}/scripts`,
55
54
  workflowsRoot: `${agentRoot}/workflows`,
56
- personasRoot: `${agentRoot}/personas`,
57
55
  schemasRoot: `${agentRoot}/schemas`,
58
56
  skillsRoot: `${agentRoot}/skills`,
59
57
  templatesRoot: `${agentRoot}/templates`,
@@ -57,7 +57,7 @@ const DEFAULT_COVERAGE_FLOORS = Object.freeze({
57
57
  '*': Object.freeze({ lines: 90, branches: 85, functions: 90 }),
58
58
  });
59
59
  const DEFAULT_CRAP_FLOORS = Object.freeze({
60
- '*': Object.freeze({ crap: 20 }),
60
+ '*': Object.freeze({ max: 30, p95: 20, methodsAbove20: 50 }),
61
61
  });
62
62
  /**
63
63
  * Story #2193 — maintainability rollups expose the `min` / `p50` / `p95`
@@ -366,14 +366,19 @@ function resolveCoverageGate(userBlock) {
366
366
  }
367
367
 
368
368
  /**
369
- * Framework defaults for `delivery.quality.codingGuardrails`. The legacy
370
- * field name `miDropRefactor` was renamed to `miDropMustRefactor` in
371
- * Story 1 to avoid semantic collision with `autoRefresh.miDropCap`.
369
+ * Framework defaults for `delivery.quality.codingGuardrails`.
370
+ *
371
+ * `miDropMustRefactor` was retired in Story #4531: schema-validated,
372
+ * defaulted, and resolved, but never consumed — the gate it named
373
+ * (`quality-preview.js`'s `computeExitCode`) short-circuits on `miExit`
374
+ * (derived from the already-consumed `gates.maintainability.tolerance`)
375
+ * before this value is ever read. `maintainability.tolerance` is the one
376
+ * documented MI-drop control now; see `lib/migrations/index.js` for the
377
+ * consumer-config migration that strips a leftover key on upgrade.
372
378
  */
373
379
  export const CODING_GUARDRAILS_DEFAULTS = Object.freeze({
374
380
  cyclomaticFlag: 8,
375
381
  cyclomaticMustFix: 12,
376
- miDropMustRefactor: 1.5,
377
382
  requireSiblingTest: false,
378
383
  });
379
384
 
@@ -393,8 +398,6 @@ export function resolveCodingGuardrails(userBlock) {
393
398
  cyclomaticFlag: userBlock.cyclomaticFlag ?? defaults.cyclomaticFlag,
394
399
  cyclomaticMustFix:
395
400
  userBlock.cyclomaticMustFix ?? defaults.cyclomaticMustFix,
396
- miDropMustRefactor:
397
- userBlock.miDropMustRefactor ?? defaults.miDropMustRefactor,
398
401
  requireSiblingTest:
399
402
  typeof userBlock.requireSiblingTest === 'boolean'
400
403
  ? userBlock.requireSiblingTest
@@ -402,9 +405,10 @@ export function resolveCodingGuardrails(userBlock) {
402
405
  };
403
406
  }
404
407
 
408
+ // autoRefresh.miDropCap was retired alongside codingGuardrails.
409
+ // miDropMustRefactor in Story #4531 — same unconsumed-knob shape, same fix.
405
410
  const AUTO_REFRESH_DEFAULTS = Object.freeze({
406
411
  enabled: true,
407
- miDropCap: 1.5,
408
412
  crapJumpCap: 5,
409
413
  scope: 'diff',
410
414
  });
@@ -416,7 +420,6 @@ function resolveAutoRefresh(userBlock) {
416
420
  if (userBlock == null || typeof userBlock !== 'object') {
417
421
  return {
418
422
  enabled: defaults.enabled,
419
- miDropCap: defaults.miDropCap,
420
423
  crapJumpCap: defaults.crapJumpCap,
421
424
  scope: defaults.scope,
422
425
  };
@@ -429,12 +432,6 @@ function resolveAutoRefresh(userBlock) {
429
432
  typeof userBlock.enabled === 'boolean'
430
433
  ? userBlock.enabled
431
434
  : defaults.enabled,
432
- miDropCap:
433
- typeof userBlock.miDropCap === 'number' &&
434
- Number.isFinite(userBlock.miDropCap) &&
435
- userBlock.miDropCap >= 0
436
- ? userBlock.miDropCap
437
- : defaults.miDropCap,
438
435
  crapJumpCap:
439
436
  typeof userBlock.crapJumpCap === 'number' &&
440
437
  Number.isFinite(userBlock.crapJumpCap) &&
@@ -1,18 +1,13 @@
1
1
  /**
2
2
  * Runner accessor (Epic #1720 Story #1739 — top-level reshape).
3
3
  *
4
- * Post-reshape, only `delivery.deliverRunner`, `delivery.epicAudit`, and
5
- * `delivery.codeReview` are configurable; everything else lives in
6
- * framework-internal constants exported alongside (`DEFAULT_STORY_MERGE_RETRY`,
7
- * `DEFAULT_DECOMPOSER`).
4
+ * Post-reshape, only `delivery.deliverRunner` and `delivery.codeReview` are
5
+ * configurable via this accessor; everything else lives in framework-internal
6
+ * constants exported alongside (`DEFAULT_DECOMPOSER`).
7
+ * `delivery.epicAudit` was removed on v2 (Story-only delivery — no
8
+ * epic-audit runner; remediation policy lives on `delivery.codeReview`).
8
9
  */
9
10
 
10
- /** Hardcoded story-merge retry policy (was `orchestration.runners.storyMergeRetry`). */
11
- export const DEFAULT_STORY_MERGE_RETRY = Object.freeze({
12
- maxAttempts: 3,
13
- backoffMs: Object.freeze([250, 500, 1000]),
14
- });
15
-
16
11
  /** Hardcoded decomposer concurrency cap (was `orchestration.runners.decomposer.concurrencyCap`). */
17
12
  export const DEFAULT_DECOMPOSER = Object.freeze({
18
13
  concurrencyCap: 3,
@@ -23,51 +18,28 @@ export const DEFAULT_DECOMPOSER = Object.freeze({
23
18
  * `delivery.deliverRunner.*` in `.agentrc.json`.
24
19
  *
25
20
  * **Throughput tradeoff — `concurrencyCap`.**
26
- * The default of 3 is intentionally conservative: it keeps host-quota
27
- * consumption low for Epics with small waves and avoids saturating the
28
- * GitHub API with concurrent label writes. For wide-wave Epics where the
29
- * host has adequate parallel-agent quota, operators should raise
30
- * `delivery.deliverRunner.concurrencyCap` wall-clock time falls
31
- * proportionally to the extra concurrency. The safe default is a tuning
32
- * knob, not a performance ceiling. See `helpers/deliver-epic.md` § Phase 2b and
33
- * `agentrc-reference.json` `delivery.deliverRunner.concurrencyCap` for details.
21
+ * The default of 3 is intentionally moderate: it keeps host-quota
22
+ * consumption predictable for multi-Story plan-runs and avoids saturating
23
+ * the GitHub API with concurrent label writes, while still allowing a
24
+ * small ready-set fan-out. Operators who want strictly sequential delivery
25
+ * should set `delivery.deliverRunner.concurrencyCap: 1`. Raising the cap
26
+ * reduces wall-clock time where dependencies allow. See `deliver.md` and
27
+ * `agentrc-reference.json` `delivery.deliverRunner.concurrencyCap`.
34
28
  *
35
- * **`verifyConcurrencyCap`** (Epic #3019 Tech Spec §1.4 / Story #3024) is a
36
- * separate knob that bounds the `verifyWaveResults` loop independently of
37
- * Story-dispatch concurrency, so operators can tune ticket-verify parallelism
38
- * without raising the wave fan-out. Default 4.
29
+ * Story #4545 removed the sibling `verifyConcurrencyCap`: the
30
+ * `verifyWaveResults` loop it claimed to bound never existed in the tree, and
31
+ * its only reader was the retired execution-analysis CLI, which echoed the
32
+ * number into a report rather than bounding anything.
39
33
  */
40
34
  const DEFAULT_DELIVER_RUNNER = Object.freeze({
41
35
  concurrencyCap: 3,
42
- progressReportIntervalSec: 120,
43
- verifyConcurrencyCap: 4,
44
36
  });
45
37
 
46
38
  /**
47
- * Default auto-fix loop ceilings for /deliver Phase 4 (epic-audit)
48
- * and Phase 5 (code-review). Operators override via
49
- * `delivery.epicAudit.*` and `delivery.codeReview.*` in `.agentrc.json`
50
- * (Story #2611, Epic #2586).
51
- *
52
- * `autoFixSeverity` is **tier-aware** (Story #4412, Epic #4405). The
53
- * Epic-close audit tier (`DEFAULT_EPIC_AUDIT`) defaults to `'high'` —
54
- * remediating only 🔴 Critical + 🟠 High findings on-branch while 🟡 Medium
55
- * and 🟢 Suggestion findings graduate to follow-up issues. This is the
56
- * three-tier model's slim outermost tier: 🟡 Medium code-quality concerns are
57
- * already routed into on-branch remediation shift-left (the write-time
58
- * checklist threading of Story #4410 and the Story-scope local-lens pass of
59
- * Story #4409), so the Epic-close tier stops paying to re-remediate them where
60
- * a fix is most expensive. The code-review tier (`DEFAULT_CODE_REVIEW`) keeps
61
- * the `'medium'` default introduced by Story #4399. Both are hard cutovers per
62
- * `rules/git-conventions.md` — no back-compat flag; an operator opts back into
63
- * the wider routing by setting `delivery.epicAudit.autoFixSeverity: 'medium'`.
39
+ * Default auto-fix loop ceilings for /deliver code-review. Operators
40
+ * override via `delivery.codeReview.*` in `.agentrc.json` (Story #2611,
41
+ * Epic #2586; `autoFixSeverity` default `'medium'` per Story #4399).
64
42
  */
65
- export const DEFAULT_EPIC_AUDIT = Object.freeze({
66
- maxFixAttempts: 3,
67
- maxFixScopeFiles: 5,
68
- autoFixSeverity: 'high',
69
- });
70
-
71
43
  export const DEFAULT_CODE_REVIEW = Object.freeze({
72
44
  maxFixAttempts: 3,
73
45
  maxFixScopeFiles: 5,
@@ -79,36 +51,19 @@ export const DEFAULT_CODE_REVIEW = Object.freeze({
79
51
  *
80
52
  * @param {object | null | undefined} config
81
53
  * @returns {{
82
- * deliverRunner: { concurrencyCap: number, progressReportIntervalSec: number, verifyConcurrencyCap: number },
83
- * epicAudit: { maxFixAttempts: number, maxFixScopeFiles: number, autoFixSeverity: 'high'|'medium' },
54
+ * deliverRunner: { concurrencyCap: number },
84
55
  * codeReview: { maxFixAttempts: number, maxFixScopeFiles: number, autoFixSeverity: 'high'|'medium' },
85
- * storyMergeRetry: { maxAttempts: number, backoffMs: readonly number[] },
86
56
  * decomposer: { concurrencyCap: number },
87
57
  * }}
88
58
  */
89
59
  export function getRunners(config) {
90
60
  const deliverRunnerUser = config?.delivery?.deliverRunner ?? {};
91
- const epicAuditUser = config?.delivery?.epicAudit ?? {};
92
61
  const codeReviewUser = config?.delivery?.codeReview ?? {};
93
62
  return {
94
63
  deliverRunner: {
95
64
  concurrencyCap:
96
65
  deliverRunnerUser.concurrencyCap ??
97
66
  DEFAULT_DELIVER_RUNNER.concurrencyCap,
98
- progressReportIntervalSec:
99
- deliverRunnerUser.progressReportIntervalSec ??
100
- DEFAULT_DELIVER_RUNNER.progressReportIntervalSec,
101
- verifyConcurrencyCap:
102
- deliverRunnerUser.verifyConcurrencyCap ??
103
- DEFAULT_DELIVER_RUNNER.verifyConcurrencyCap,
104
- },
105
- epicAudit: {
106
- maxFixAttempts:
107
- epicAuditUser.maxFixAttempts ?? DEFAULT_EPIC_AUDIT.maxFixAttempts,
108
- maxFixScopeFiles:
109
- epicAuditUser.maxFixScopeFiles ?? DEFAULT_EPIC_AUDIT.maxFixScopeFiles,
110
- autoFixSeverity:
111
- epicAuditUser.autoFixSeverity ?? DEFAULT_EPIC_AUDIT.autoFixSeverity,
112
67
  },
113
68
  codeReview: {
114
69
  maxFixAttempts:
@@ -118,7 +73,6 @@ export function getRunners(config) {
118
73
  autoFixSeverity:
119
74
  codeReviewUser.autoFixSeverity ?? DEFAULT_CODE_REVIEW.autoFixSeverity,
120
75
  },
121
- storyMergeRetry: DEFAULT_STORY_MERGE_RETRY,
122
76
  decomposer: DEFAULT_DECOMPOSER,
123
77
  };
124
78
  }
@@ -1,27 +1,25 @@
1
1
  /**
2
- * `temp/epic-<id>/` path-resolution helper (Epic #1030 Story #1039).
2
+ * `temp/run-<id>/` path-resolution helper (Epic #1030 Story #1039).
3
3
  *
4
4
  * Single source of truth for every artifact path that lives under
5
5
  * `project.paths.tempRoot`. Every script that previously hand-rolled
6
- * a flat `temp/<artifact>-epic-<id>.<ext>` path migrates to call one of
6
+ * a flat `temp/<artifact>-run-<id>.<ext>` path migrates to call one of
7
7
  * these helpers. The Tech Spec (#1032) names this module as the cutover
8
8
  * grep target — `temp/.*-epic-` should be empty across `.agents/scripts`
9
9
  * once the migration Stories land.
10
10
  *
11
11
  * Layout:
12
- * temp/epic-<eid>/
12
+ * temp/run-<eid>/
13
13
  * ├─ techspec.md
14
14
  * ├─ manifest.md (dispatch manifest)
15
15
  * ├─ retro.md (mirror of GitHub retro at Epic close)
16
- * ├─ perf-report.md (analyzer output, Epic-level)
17
16
  * ├─ lifecycle.ndjson (lifecycle bus ledger)
18
- * ├─ checkpoints/... (epic-runner state store)
19
- * ├─ <name> (epicArtifactPath escape hatch)
17
+ * ├─ checkpoints/... (pre-v2 epic-runner state store; retained layout)
18
+ * ├─ <name> (runArtifactPath escape hatch)
20
19
  * └─ stories/
21
20
  * └─ story-<sid>/
22
21
  * ├─ manifest.md (story dispatch manifest)
23
22
  * ├─ signals.ndjson (append-only signals writer)
24
- * ├─ perf-summary.md
25
23
  * └─ <name> (storyArtifactPath escape hatch)
26
24
  *
27
25
  * Standalone Stories (no parent Epic) follow the same shape under
@@ -42,11 +40,12 @@
42
40
  * resolve a *relative* `tempRoot` against the **main checkout root** (the
43
41
  * parent of `git rev-parse --git-common-dir`) rather than `process.cwd()`.
44
42
  * Without this, a story child that `cd`s into `.worktrees/story-<id>/` before
45
- * calling `story-phase.js` would append `story.heartbeat` records to
46
- * `<worktree>/temp/epic-N/lifecycle.ndjson`, while the `/deliver` host
43
+ * emitting a lifecycle record would append it to
44
+ * `<worktree>/temp/run-N/lifecycle.ndjson`, while the `/deliver` host
47
45
  * (running from the main checkout) reads the main-checkout copy — so the
48
- * idle-watchdog never sees heartbeats and the Epic-lease guard silently
49
- * reclaims live foreign claims (the audit-#3513 bug class). Anchoring the
46
+ * host never sees the child's records (the audit-#3513 bug class; its
47
+ * original `story.heartbeat` instance is gone with that emitter, but the
48
+ * divergence applies to every ledger writer). Anchoring the
50
49
  * ledger to the git common dir makes the worktree child writer and the
51
50
  * main-checkout host reader converge on a single file regardless of cwd. An
52
51
  * absolute `tempRoot` is honoured verbatim; only relative roots are anchored.
@@ -155,11 +154,9 @@ export function tempRootFrom(config) {
155
154
  : 'temp';
156
155
  }
157
156
 
158
- const epicId = (id) => {
157
+ const runId = (id) => {
159
158
  if (!Number.isInteger(id) || id <= 0) {
160
- throw new Error(
161
- `[temp-paths] epicId must be a positive integer; got ${id}`,
162
- );
159
+ throw new Error(`[temp-paths] runId must be a positive integer; got ${id}`);
163
160
  }
164
161
  return id;
165
162
  };
@@ -206,18 +203,18 @@ const artifactName = (name) => {
206
203
  };
207
204
 
208
205
  /**
209
- * `temp/epic-<eid>/` — every Epic-scoped artifact lives under here.
206
+ * `temp/run-<id>/` — every run-scoped artifact lives under here.
210
207
  *
211
- * @param {number} eid
208
+ * @param {number} rid
212
209
  * @param {object} [config]
213
210
  * @returns {string}
214
211
  */
215
- export function epicTempDir(eid, config) {
216
- return path.join(anchorTempRoot(tempRootFrom(config)), `epic-${epicId(eid)}`);
212
+ export function runTempDir(rid, config) {
213
+ return path.join(anchorTempRoot(tempRootFrom(config)), `run-${runId(rid)}`);
217
214
  }
218
215
 
219
216
  /**
220
- * `temp/epic-<eid>/stories/story-<sid>/` — every Story-scoped artifact
217
+ * `temp/run-<eid>/stories/story-<sid>/` — every Story-scoped artifact
221
218
  * lives under here.
222
219
  *
223
220
  * Story #2874: accepts `eid === null` for standalone Stories (no
@@ -241,12 +238,12 @@ export function storyTempDir(eid, sid, config) {
241
238
  const parent =
242
239
  checkedEid === null
243
240
  ? path.join(anchorTempRoot(tempRootFrom(config)), 'standalone')
244
- : epicTempDir(checkedEid, config);
241
+ : runTempDir(checkedEid, config);
245
242
  return path.join(parent, 'stories', `story-${storyId(sid)}`);
246
243
  }
247
244
 
248
245
  /**
249
- * `temp/epic-<eid>/stories/story-<sid>/signals.ndjson` — append-only
246
+ * `temp/run-<eid>/stories/story-<sid>/signals.ndjson` — append-only
250
247
  * signal stream consumed by the analyzer (Epic #1030 AC1).
251
248
  *
252
249
  * @param {number} eid
@@ -259,18 +256,18 @@ export function signalsFile(eid, sid, config) {
259
256
  }
260
257
 
261
258
  /**
262
- * `temp/epic-<eid>/stories/story-<sid>/lifecycle.ndjson` — the story-scope
259
+ * `temp/run-<eid>/stories/story-<sid>/lifecycle.ndjson` — the story-scope
263
260
  * ledger destination for lifecycle events emitted directly by a Story
264
261
  * (rather than routed through the Epic-scoped bus ledger). Story #4426
265
262
  * (Epic #4425) introduces the first consumer: a standalone
266
263
  * `single-story-close` run (no parent Epic) emitting `merge.unlanded`
267
- * needs an on-disk home even though there is no `epic-<id>/` directory to
264
+ * needs an on-disk home even though there is no `run-<id>/` directory to
268
265
  * anchor the event to.
269
266
  *
270
- * Mirrors `epicLedgerPath` exactly, one level down: `eid === null` routes
267
+ * Mirrors `runLedgerPath` exactly, one level down: `eid === null` routes
271
268
  * through `storyTempDir`'s standalone branch to
272
269
  * `<tempRoot>/standalone/stories/story-<sid>/lifecycle.ndjson`; a real
273
- * `eid` routes to `<tempRoot>/epic-<eid>/stories/story-<sid>/lifecycle.ndjson`,
270
+ * `eid` routes to `<tempRoot>/run-<eid>/stories/story-<sid>/lifecycle.ndjson`,
274
271
  * so an Epic-attached Story's story-scope ledger sits alongside its
275
272
  * `signals.ndjson` sibling.
276
273
  *
@@ -293,14 +290,13 @@ export const storyLedgerPath = (eid, sid, config) =>
293
290
  * @param {object} [config]
294
291
  * @returns {string}
295
292
  */
296
- export function epicArtifactPath(eid, name, config) {
297
- return path.join(epicTempDir(eid, config), artifactName(name));
293
+ export function runArtifactPath(eid, name, config) {
294
+ return path.join(runTempDir(eid, config), artifactName(name));
298
295
  }
299
296
 
300
297
  /**
301
298
  * Escape hatch for a Story-level artifact whose name isn't part of the
302
- * canonical layout (signals.ndjson + perf-summary.md + manifest.md ship
303
- * named helpers).
299
+ * canonical layout (signals.ndjson + manifest.md ship named helpers).
304
300
  *
305
301
  * @param {number} eid
306
302
  * @param {number} sid
@@ -308,39 +304,12 @@ export function epicArtifactPath(eid, name, config) {
308
304
  * @param {object} [config]
309
305
  * @returns {string}
310
306
  */
311
- export function storyArtifactPath(eid, sid, name, config) {
307
+ function storyArtifactPath(eid, sid, name, config) {
312
308
  return path.join(storyTempDir(eid, sid, config), artifactName(name));
313
309
  }
314
310
 
315
- // --- Canonical Epic-level filenames (Tech Spec #1032 §tempRoot) ---
316
-
317
- export const epicTechSpecPath = (eid, config) =>
318
- epicArtifactPath(eid, 'techspec.md', config);
319
- export const epicManifestPath = (eid, config) =>
320
- epicArtifactPath(eid, 'manifest.md', config);
321
- export const epicRetroMirrorPath = (eid, config) =>
322
- epicArtifactPath(eid, 'retro.md', config);
323
- export const epicPerfReportPath = (eid, config) =>
324
- epicArtifactPath(eid, 'perf-report.md', config);
325
-
326
- /**
327
- * `temp/epic-<eid>/epic-perf-report.json` — canonical JSON snapshot of
328
- * the `epic-perf-report` payload persisted at /deliver close
329
- * (Epic #3019 / Story #3029 / Task #3040). When present alongside the
330
- * `epic-perf-report` structured comment, the report is discoverable
331
- * from the file system without round-tripping the ticketing provider,
332
- * and the `epic-handoff` structured close comment links it by relative
333
- * path.
334
- *
335
- * @param {number} eid
336
- * @param {object} [config]
337
- * @returns {string}
338
- */
339
- export const epicPerfReportJsonPath = (eid, config) =>
340
- epicArtifactPath(eid, 'epic-perf-report.json', config);
341
-
342
311
  /**
343
- * `temp/epic-<eid>/lifecycle.ndjson` — append-only lifecycle bus ledger
312
+ * `temp/run-<eid>/lifecycle.ndjson` — append-only lifecycle bus ledger
344
313
  * (Story #2510). The LedgerWriter persists every emitted/completed/failed
345
314
  * record here; the TraceLogger renders the companion markdown from it.
346
315
  *
@@ -352,12 +321,10 @@ export const epicPerfReportJsonPath = (eid, config) =>
352
321
  * @param {object} [config]
353
322
  * @returns {string}
354
323
  */
355
- export const epicLedgerPath = (eid, config) =>
356
- epicArtifactPath(eid, 'lifecycle.ndjson', config);
324
+ export const runLedgerPath = (eid, config) =>
325
+ runArtifactPath(eid, 'lifecycle.ndjson', config);
357
326
 
358
327
  // --- Canonical Story-level filenames ---
359
328
 
360
329
  export const storyManifestPath = (eid, sid, config) =>
361
330
  storyArtifactPath(eid, sid, 'manifest.md', config);
362
- export const storyPerfSummaryPath = (eid, sid, config) =>
363
- storyArtifactPath(eid, sid, 'perf-summary.md', config);
@@ -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],
@@ -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
  }