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
@@ -0,0 +1,375 @@
1
+ # Security and Hardening — Reference (on-demand)
2
+
3
+ **Read this when** a task engages one of the sections below and the Policy
4
+ Capsule in [`SKILL.md`](SKILL.md) does not settle it on its own. The capsule
5
+ is the contract; this file is the reference material behind it. Nothing here
6
+ relaxes a capsule MUST, and nothing here is required reading merely because
7
+ the skill is active.
8
+
9
+ ## When to Use
10
+
11
+ - Building anything that accepts user input
12
+ - Implementing authentication or authorization
13
+ - Storing or transmitting sensitive data
14
+ - Integrating with external APIs or services
15
+ - Adding file uploads, webhooks, or callbacks
16
+ - Handling payment or PII data
17
+
18
+ ## Security Surfacing, Not Runtime Pause
19
+
20
+ Some changes are not unsafe by themselves but expand the security surface
21
+ enough that the change must be **explicitly documented** in the PR
22
+ description and on the originating ticket so a reviewer can sign off in
23
+ band. Documenting them is the gate — they do **not** pause execution:
24
+
25
+ - Adding new authentication flows or changing auth logic
26
+ - Storing new categories of sensitive data (PII, payment info)
27
+ - Adding new external service integrations
28
+ - Changing CORS configuration
29
+ - Adding file upload handlers
30
+ - Modifying rate limiting or throttling
31
+ - Granting elevated permissions or roles
32
+
33
+ For each item that applies, call it out under a "Security surface" section
34
+ in the PR body and on the parent ticket, label the change `risk::high`,
35
+ and link the relevant `security-baseline.md` MUST. Reviewers gate the
36
+ merge; the agent keeps moving.
37
+
38
+ `agent::blocked` remains the **only** runtime pause label. Use it for
39
+ unrecoverable blockers (missing prerequisite, ambiguous spec a sub-agent
40
+ cannot resolve), not for "this change is sensitive." Sensitive changes
41
+ ship through the documentation path above.
42
+
43
+ ## OWASP Top 10 Prevention Patterns
44
+
45
+ The patterns below show **how** to satisfy the MUSTs in
46
+ [`security-baseline.md`](../../../rules/security-baseline.md). The MUSTs
47
+ themselves (parameterize queries, hash passwords, encode output, verify
48
+ ownership, set headers, restrict CORS, exclude sensitive fields) are listed
49
+ in the rule.
50
+
51
+ ### 1. Injection (SQL, NoSQL, OS Command)
52
+
53
+ See [security-baseline § Output & Rendering](../../../rules/security-baseline.md#output--rendering).
54
+
55
+ ```typescript
56
+ // BAD: SQL injection via string concatenation
57
+ const query = `SELECT * FROM users WHERE id = '${userId}'`;
58
+
59
+ // GOOD: Parameterized query
60
+ const user = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
61
+
62
+ // GOOD: ORM with parameterized input
63
+ const user = await prisma.user.findUnique({ where: { id: userId } });
64
+ ```
65
+
66
+ ### 2. Broken Authentication
67
+
68
+ See [security-baseline § Authentication](../../../rules/security-baseline.md#authentication).
69
+
70
+ ```typescript
71
+ import { hash, compare } from 'bcrypt';
72
+
73
+ const SALT_ROUNDS = 12;
74
+ const hashedPassword = await hash(plaintext, SALT_ROUNDS);
75
+ const isValid = await compare(plaintext, hashedPassword);
76
+
77
+ // Session management
78
+ app.use(
79
+ session({
80
+ secret: process.env.SESSION_SECRET, // From environment, not code
81
+ resave: false,
82
+ saveUninitialized: false,
83
+ cookie: {
84
+ httpOnly: true,
85
+ secure: true,
86
+ sameSite: 'lax',
87
+ maxAge: 24 * 60 * 60 * 1000,
88
+ },
89
+ }),
90
+ );
91
+ ```
92
+
93
+ ### 3. Cross-Site Scripting (XSS)
94
+
95
+ See [security-baseline § Output & Rendering](../../../rules/security-baseline.md#output--rendering).
96
+
97
+ ```typescript
98
+ // BAD: Rendering user input as HTML
99
+ element.innerHTML = userInput;
100
+
101
+ // GOOD: Use framework auto-escaping (React does this by default)
102
+ return <div>{userInput}</div>;
103
+
104
+ // If you MUST render HTML, sanitize first
105
+ import DOMPurify from 'dompurify';
106
+ const clean = DOMPurify.sanitize(userInput);
107
+ ```
108
+
109
+ ### 4. Broken Access Control
110
+
111
+ See [security-baseline § Authorization](../../../rules/security-baseline.md#authorization).
112
+
113
+ ```typescript
114
+ app.patch('/api/tasks/:id', authenticate, async (req, res) => {
115
+ const task = await taskService.findById(req.params.id);
116
+
117
+ if (task.ownerId !== req.user.id) {
118
+ return res.status(403).json({
119
+ error: {
120
+ code: 'FORBIDDEN',
121
+ message: 'Not authorized to modify this task',
122
+ },
123
+ });
124
+ }
125
+
126
+ const updated = await taskService.update(req.params.id, req.body);
127
+ return res.json(updated);
128
+ });
129
+ ```
130
+
131
+ ### 5. Security Misconfiguration
132
+
133
+ See [security-baseline § Transport & Headers](../../../rules/security-baseline.md#transport--headers).
134
+
135
+ ```typescript
136
+ import helmet from 'helmet';
137
+ app.use(helmet());
138
+
139
+ app.use(
140
+ helmet.contentSecurityPolicy({
141
+ directives: {
142
+ defaultSrc: ["'self'"],
143
+ scriptSrc: ["'self'"],
144
+ styleSrc: ["'self'", "'unsafe-inline'"],
145
+ imgSrc: ["'self'", 'data:', 'https:'],
146
+ connectSrc: ["'self'"],
147
+ },
148
+ }),
149
+ );
150
+
151
+ app.use(
152
+ cors({
153
+ origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
154
+ credentials: true,
155
+ }),
156
+ );
157
+ ```
158
+
159
+ ### 6. Sensitive Data Exposure
160
+
161
+ See [security-baseline § Output & Rendering](../../../rules/security-baseline.md#output--rendering)
162
+ and [§ Secrets Management](../../../rules/security-baseline.md#secrets-management).
163
+
164
+ ```typescript
165
+ function sanitizeUser(user: UserRecord): PublicUser {
166
+ const { passwordHash, resetToken, ...publicFields } = user;
167
+ return publicFields;
168
+ }
169
+
170
+ const API_KEY = process.env.STRIPE_API_KEY;
171
+ if (!API_KEY) throw new Error('STRIPE_API_KEY not configured');
172
+ ```
173
+
174
+ ## Input Validation Patterns
175
+
176
+ See [security-baseline § Input Validation](../../../rules/security-baseline.md#input-validation).
177
+
178
+ ### Schema Validation at Boundaries
179
+
180
+ ```typescript
181
+ import { z } from 'zod';
182
+
183
+ const CreateTaskSchema = z.object({
184
+ title: z.string().min(1).max(200).trim(),
185
+ description: z.string().max(2000).optional(),
186
+ priority: z.enum(['low', 'medium', 'high']).default('medium'),
187
+ dueDate: z.string().datetime().optional(),
188
+ });
189
+
190
+ app.post('/api/tasks', async (req, res) => {
191
+ const result = CreateTaskSchema.safeParse(req.body);
192
+ if (!result.success) {
193
+ return res.status(422).json({
194
+ error: {
195
+ code: 'VALIDATION_ERROR',
196
+ message: 'Invalid input',
197
+ details: result.error.flatten(),
198
+ },
199
+ });
200
+ }
201
+ const task = await taskService.create(result.data);
202
+ return res.status(201).json(task);
203
+ });
204
+ ```
205
+
206
+ ### File Upload Safety
207
+
208
+ ```typescript
209
+ const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/webp'];
210
+ const MAX_SIZE = 5 * 1024 * 1024; // 5MB
211
+
212
+ function validateUpload(file: UploadedFile) {
213
+ if (!ALLOWED_TYPES.includes(file.mimetype)) {
214
+ throw new ValidationError('File type not allowed');
215
+ }
216
+ if (file.size > MAX_SIZE) {
217
+ throw new ValidationError('File too large (max 5MB)');
218
+ }
219
+ // Don't trust the file extension — check magic bytes if critical
220
+ }
221
+ ```
222
+
223
+ ## Triaging npm audit Results
224
+
225
+ The MUST is in [security-baseline § Dependency Hygiene](../../../rules/security-baseline.md#dependency-hygiene).
226
+ This decision tree shows how to prioritize:
227
+
228
+ ```text
229
+ npm audit reports a vulnerability
230
+ ├── Severity: critical or high
231
+ │ ├── Is the vulnerable code reachable in your app?
232
+ │ │ ├── YES --> Fix immediately (update, patch, or replace the dependency)
233
+ │ │ └── NO (dev-only dep, unused code path) --> Fix soon, but not a blocker
234
+ │ └── Is a fix available?
235
+ │ ├── YES --> Update to the patched version
236
+ │ └── NO --> Check for workarounds, consider replacing the dependency, or add to allowlist with a review date
237
+ ├── Severity: moderate
238
+ │ ├── Reachable in production? --> Fix in the next release cycle
239
+ │ └── Dev-only? --> Fix when convenient, track in backlog
240
+ └── Severity: low
241
+ └── Track and fix during regular dependency updates
242
+ ```
243
+
244
+ **Key questions:**
245
+
246
+ - Is the vulnerable function actually called in your code path?
247
+ - Is the dependency a runtime dependency or dev-only?
248
+ - Is the vulnerability exploitable given your deployment context (e.g., a
249
+ server-side vulnerability in a client-only app)?
250
+
251
+ When you defer a fix, document the reason and set a review date.
252
+
253
+ ## Rate Limiting
254
+
255
+ ```typescript
256
+ import rateLimit from 'express-rate-limit';
257
+
258
+ // General API rate limit
259
+ app.use(
260
+ '/api/',
261
+ rateLimit({
262
+ windowMs: 15 * 60 * 1000,
263
+ max: 100,
264
+ standardHeaders: true,
265
+ legacyHeaders: false,
266
+ }),
267
+ );
268
+
269
+ // Stricter limit for auth endpoints (the rule MUSTs rate-limiting on auth)
270
+ app.use(
271
+ '/api/auth/',
272
+ rateLimit({
273
+ windowMs: 15 * 60 * 1000,
274
+ max: 10,
275
+ }),
276
+ );
277
+ ```
278
+
279
+ ## Secrets Management Layout
280
+
281
+ See [security-baseline § Secrets Management](../../../rules/security-baseline.md#secrets-management).
282
+
283
+ ```text
284
+ .env files:
285
+ ├── .env.example → Committed (template with placeholder values)
286
+ ├── .env → NOT committed (contains real secrets)
287
+ └── .env.local → NOT committed (local overrides)
288
+
289
+ .gitignore must include:
290
+ .env
291
+ .env.local
292
+ .env.*.local
293
+ *.pem
294
+ *.key
295
+ ```
296
+
297
+ **Always check before committing:**
298
+
299
+ ```bash
300
+ # Check for accidentally staged secrets
301
+ git diff --cached | grep -i "password\|secret\|api_key\|token"
302
+ ```
303
+
304
+ ## Security Review Checklist
305
+
306
+ Use this when reviewing your own change before requesting human review. Each
307
+ item maps to a section in
308
+ [`security-baseline.md`](../../../rules/security-baseline.md).
309
+
310
+ ```markdown
311
+ ### Authentication
312
+
313
+ - [ ] Passwords hashed with bcrypt/scrypt/argon2 (salt rounds ≥ 12)
314
+ - [ ] Session tokens are httpOnly, secure, sameSite
315
+ - [ ] Login has rate limiting
316
+ - [ ] Password reset tokens expire
317
+
318
+ ### Authorization
319
+
320
+ - [ ] Every endpoint checks user permissions
321
+ - [ ] Users can only access their own resources
322
+ - [ ] Admin actions require admin role verification
323
+
324
+ ### Input
325
+
326
+ - [ ] All user input validated at the boundary
327
+ - [ ] SQL queries are parameterized
328
+ - [ ] HTML output is encoded/escaped
329
+
330
+ ### Data
331
+
332
+ - [ ] No secrets in code or version control
333
+ - [ ] Sensitive fields excluded from API responses
334
+ - [ ] PII encrypted at rest (if applicable)
335
+
336
+ ### Infrastructure
337
+
338
+ - [ ] Security headers configured (CSP, HSTS, etc.)
339
+ - [ ] CORS restricted to known origins
340
+ - [ ] Dependencies audited for vulnerabilities
341
+ - [ ] Error messages don't expose internals
342
+ ```
343
+
344
+ ## Common Rationalizations
345
+
346
+ | Rationalization | Reality |
347
+ | --------------------------------------------------- | ------------------------------------------------------------------------------- |
348
+ | "This is an internal tool, security doesn't matter" | Internal tools get compromised. Attackers target the weakest link. |
349
+ | "We'll add security later" | Security retrofitting is 10x harder than building it in. Add it now. |
350
+ | "No one would try to exploit this" | Automated scanners will find it. Security by obscurity is not security. |
351
+ | "The framework handles security" | Frameworks provide tools, not guarantees. You still need to use them correctly. |
352
+ | "It's just a prototype" | Prototypes become production. Security habits from day one. |
353
+
354
+ ## Red Flags
355
+
356
+ - User input passed directly to database queries, shell commands, or HTML
357
+ rendering
358
+ - Secrets in source code or commit history
359
+ - API endpoints without authentication or authorization checks
360
+ - Missing CORS configuration or wildcard (`*`) origins
361
+ - No rate limiting on authentication endpoints
362
+ - Stack traces or internal errors exposed to users
363
+ - Dependencies with known critical vulnerabilities
364
+
365
+ ## Verification
366
+
367
+ After implementing security-relevant code, confirm against the rule:
368
+
369
+ - [ ] `npm audit` shows no critical or high vulnerabilities
370
+ - [ ] No secrets in source code or git history
371
+ - [ ] All user input validated at system boundaries
372
+ - [ ] Authentication and authorization checked on every protected endpoint
373
+ - [ ] Security headers present in response (check with browser DevTools)
374
+ - [ ] Error responses don't expose internal details
375
+ - [ ] Rate limiting active on auth endpoints
@@ -1,17 +1,7 @@
1
1
  {
2
- "generatedAt": "2026-07-13T15:00:10.171Z",
2
+ "generatedAt": "2026-07-16T20:44:41.281Z",
3
3
  "generator": "generate-skills-index.js@1",
4
4
  "skills": [
5
- {
6
- "name": "analyze-execution",
7
- "tier": "core",
8
- "category": "core",
9
- "path": ".agents/skills/core/analyze-execution/SKILL.md",
10
- "description": "Aggregate per-Story or per-Epic execution signals into a structured perf-summary or perf-report and upsert it onto the corresponding GitHub ticket. Use after a Story closes (Story mode) or as part of `/deliver` Phase 6 (Epic mode). Reads NDJSON via `lib/signals/read` and writes a single structured comment.",
11
- "policyCapsuleBullets": 8,
12
- "allowedTools": ["Read", "Bash"],
13
- "vendor": null
14
- },
15
5
  {
16
6
  "name": "api-and-interface-design",
17
7
  "tier": "core",
@@ -72,46 +62,6 @@
72
62
  "allowedTools": null,
73
63
  "vendor": null
74
64
  },
75
- {
76
- "name": "epic-plan-consolidate",
77
- "tier": "core",
78
- "category": "core",
79
- "path": ".agents/skills/core/epic-plan-consolidate/SKILL.md",
80
- "description": "Run a holistic, pre-persist consolidation pass over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` writes `temp/epic-<Epic_ID>/tickets.json` and before `plan-persist.js` validates and persists it. Reconciles the draft against the Tech Spec \"Delivery Slicing\" ceiling via scope-preserving operations only.",
81
- "policyCapsuleBullets": 9,
82
- "allowedTools": ["Read", "Write", "Bash"],
83
- "vendor": null
84
- },
85
- {
86
- "name": "epic-plan-decompose-author",
87
- "tier": "core",
88
- "category": "core",
89
- "path": ".agents/skills/core/epic-plan-decompose-author/SKILL.md",
90
- "description": "Author the Story ticket JSON for an Epic from the decomposer authoring context emitted by `plan-context.js --epic <Epic_ID>`. Use during Phase 8 of `/plan` when the host LLM needs to write the ticket array before `plan-persist.js` validates and persists it.",
91
- "policyCapsuleBullets": 15,
92
- "allowedTools": ["Read", "Write", "Bash"],
93
- "vendor": null
94
- },
95
- {
96
- "name": "epic-plan-premortem",
97
- "tier": "core",
98
- "category": "core",
99
- "path": ".agents/skills/core/epic-plan-premortem/SKILL.md",
100
- "description": "Run a fresh-context, code-reading pre-mortem critic over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` / `epic-plan-consolidate` write `temp/epic-<Epic_ID>/tickets.json` and before `plan-persist.js` validates and persists it. Reads the sectioned Epic body AND the cited code surfaces, then emits predicted-rework findings before any GitHub write.",
101
- "policyCapsuleBullets": 7,
102
- "allowedTools": ["Read", "Write", "Bash", "Grep"],
103
- "vendor": null
104
- },
105
- {
106
- "name": "epic-plan-spec-author",
107
- "tier": "core",
108
- "category": "core",
109
- "path": ".agents/skills/core/epic-plan-spec-author/SKILL.md",
110
- "description": "Author the Tech Spec, Acceptance Table markdown, and risk-verdict JSON for an Epic from the planner authoring context emitted by `plan-context.js --epic <Epic_ID>`. Use during Phase 7 of `/plan` when the host LLM needs to write the three artifacts before `plan-persist.js` folds them into the Epic body's managed sections.",
111
- "policyCapsuleBullets": 14,
112
- "allowedTools": ["Read", "Write", "Bash"],
113
- "vendor": null
114
- },
115
65
  {
116
66
  "name": "gates-and-baselines",
117
67
  "tier": "core",
@@ -157,8 +107,8 @@
157
107
  "tier": "core",
158
108
  "category": "core",
159
109
  "path": ".agents/skills/core/scope-triage/SKILL.md",
160
- "description": "Judge whether a piece of planned work is epic-sized or story-sized before the planning ceremony is paid for. Emits one of three verdicts `epic` | `story` | `borderline` over any planning artifact (a one-pager, an Epic body, or a Story draft). Use from `/plan` Phase 1.5 and any other planning gate that needs the canonical story-vs-epic rubric.",
161
- "policyCapsuleBullets": 1,
110
+ "description": "Optional split-advisory for `/plan`. Under v2 there is no epic|story routing verdict `/plan` always authors Stories. Use this skill only when judging whether a draft should stay one Story or legitimately split (near-zero overlap or an architectural seam).",
111
+ "policyCapsuleBullets": 5,
162
112
  "allowedTools": null,
163
113
  "vendor": null
164
114
  },
@@ -122,9 +122,8 @@ authoring.
122
122
  expression across jobs — tag-sharding makes flake triage non-deterministic.
123
123
  - Run `bddgen` once per job before `playwright test`; cache the generated
124
124
  directory only if the cache key includes every `.feature` and step file.
125
- - Publish the Cucumber HTML/JSON report as the evidence artifact consumed by the
126
- `epic-testing` helper, alongside the Playwright HTML report and any trace
127
- zips.
125
+ - Publish the Cucumber HTML/JSON report as the evidence artifact, alongside
126
+ the Playwright HTML report and any trace zips.
128
127
  - Quarantine `@flaky` scenarios with a dedicated job that does not gate the
129
128
  merge queue; do not silently retry flakes in the main suite.
130
129
 
@@ -185,4 +184,3 @@ those outcomes.
185
184
  - Scenario authoring rules: `.agents/rules/gherkin-standards.md`.
186
185
  - Browser-level conventions: `.agents/skills/stack/qa/playwright/SKILL.md`.
187
186
  - Operator entry point: `.agents/workflows/qa-run.md`.
188
- - Evidence handoff: `.agents/workflows/helpers/epic-testing.md`.
@@ -91,7 +91,7 @@ source, route definitions, and rendered markup rather than a running browser.
91
91
 
92
92
  The agent-driven Capture phase is **strictly read-only**. This invariant is
93
93
  inviolable per [`security-baseline.md`](../../../../rules/security-baseline.md)
94
- and the Epic's security considerations — it is not a soft preference.
94
+ and the Story's security considerations — it is not a soft preference.
95
95
 
96
96
  - **No source edits.** The agent does not modify application code, config, or
97
97
  tests while driving. Exploration observes; it never repairs.
@@ -192,9 +192,7 @@ Bundle findings **by likely root cause** into proposed follow-up tickets with
192
192
  `Depends-on` / `Blocks` relationships, then present the draft for operator
193
193
  approval. The harness **MUST NOT** create tickets autonomously — it stops at a
194
194
  draft. The operator-approval gate is the safety boundary against spurious
195
- filing. When the run was triggered from an Epic-testing context, hand the
196
- **approved** findings to the Epic-testing helper for attachment to the Epic's
197
- QA evidence ticket.
195
+ filing.
198
196
 
199
197
  ## 6. Sign-In & Contract Discipline
200
198
 
@@ -13,10 +13,5 @@
13
13
  "repo": "[REPO]",
14
14
  "operatorHandle": "@[USERNAME]",
15
15
  "projectNumber": null
16
- },
17
- "delivery": {
18
- "ci": {
19
- "skipForStoryPushes": true
20
- }
21
16
  }
22
17
  }
@@ -5,14 +5,14 @@ Version: {{PROTOCOL_VERSION}}
5
5
  You are an AI coding assistant. This protocol governs your execution of the
6
6
  current work unit. You must follow these rules strictly.
7
7
 
8
- > **Hierarchy shape.** Mandrel uses a **2-tier hierarchy**
9
- > (Epic → Story). The work unit is the `type::story` issue
10
- > itself, with acceptance criteria and verification inlined on the
11
- > Story body. There is no per-Task sub-loop; the agent authors commit
8
+ > **Hierarchy shape.** Mandrel uses a **Story-only** model. The work unit
9
+ > is the `type::story` issue itself, with acceptance criteria and
10
+ > verification inlined on the Story body and the folded Tech Spec in
11
+ > `## Spec`. There is no per-Task sub-loop; the agent authors commit
12
12
  > subjects directly per `.agents/rules/git-conventions.md` and
13
- > references the parent Story via `(refs #<storyId>)`. Branch naming
14
- > (`{{BRANCH_NAME}}` from `{{EPIC_BRANCH}}`), the Epic-branch
15
- > integration target, and the close protocol are as documented below.
13
+ > references the Story via `(refs #<storyId>)`. Branch naming
14
+ > (`{{BRANCH_NAME}}` from `{{EPIC_BRANCH}}` / base), the PR target
15
+ > (`main`), and the close protocol are as documented below.
16
16
 
17
17
  ## 1. Pre-Flight Verification
18
18
 
@@ -50,9 +50,8 @@ When your implementation is complete and verified:
50
50
  `{{TEST_CMD}}`) here. The close script's lint/test/format/maintainability
51
51
  chain is the authoritative gate, run at Story closure (`story-close.js`).
52
52
  Exception: you may run them interactively while iterating on a fix.
53
- 3. The Story branch is auto-merged into the Epic branch by
54
- `helpers/epic-deliver-story` (via `story-close.js`) — do **not** merge
55
- manually.
53
+ 3. The Story branch is opened as a PR to `main` by `helpers/deliver-story`
54
+ (via `single-story-close.js`) — do **not** merge manually.
56
55
 
57
56
  ## 6. Definition of Done
58
57
 
@@ -19,8 +19,7 @@ existing external APIs or business logic.
19
19
  ## Execution strategy (dual-path)
20
20
 
21
21
  This lens runs along one of two execution paths. Both emit the **identical**
22
- report contract (Step 3); downstream consumers (`/deliver` Phase 4
23
- epic-audit, `audit-to-stories`) are agnostic to which path produced it.
22
+ report contract (Step 3); downstream consumers (`audit-to-stories`) are agnostic to which path produced it.
24
23
 
25
24
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
26
25
  [dynamic workflows](https://code.claude.com/docs/en/workflows) are
@@ -70,10 +69,10 @@ degrade to the sequential path.
70
69
  > read/search tools (`Read`, `Grep`, `Glob`) — no write/edit/shell-mutation
71
70
  > tools. The single write in an orchestrated run is the final report artifact.
72
71
 
73
- ## Scope (Epic mode)
72
+ ## Scope (Story / plan-run mode)
74
73
 
75
- When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
76
- following block is populated with the Epic's change-set file list.
74
+ When this lens is invoked from `/deliver` close lenses (or a plan-run audit), the
75
+ following block is populated with the Story (or plan-run) change-set file list.
77
76
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
78
77
  renders the literal substitution token and you MUST treat it as **no
79
78
  scope filter — run the lens codebase-wide** exactly as you would have
@@ -218,7 +217,7 @@ Evaluate the gathered context against the following clean code dimensions:
218
217
  gates, baseline kinds, close-validation steps, dependencies, or
219
218
  harness subsystems under this dimension.
220
219
 
221
- **Scope-mode behavior.** When this lens is invoked in Epic mode (the
220
+ **Scope-mode behavior.** When this lens is invoked in Story scope (the
222
221
  `{{changedFiles}}` block above is populated with a file list), the
223
222
  maturity assessment for this dimension is a repo-wide property that
224
223
  cannot be represented by a small changeset. In that case, render the
@@ -269,7 +268,7 @@ architectural pain points and areas for simplification.]
269
268
  ## Architecture Guardrail Coverage
270
269
 
271
270
  [Codebase-wide mode: complete this section using the maturity rubric in
272
- Step 2. Epic-mode / scoped run: set `Current Maturity` to
271
+ Step 2. Story-scoped run: set `Current Maturity` to
273
272
  `Not Assessed — scoped run` and leave the remaining fields empty or
274
273
  marked `n/a`.]
275
274
 
@@ -15,10 +15,10 @@ quality. Your objective is to identify "code smells," technical debt, and
15
15
  violations of clean code principles (SOLID, DRY, KISS) that hinder long-term
16
16
  velocity.
17
17
 
18
- ## Scope (Epic mode)
18
+ ## Scope (Story / plan-run mode)
19
19
 
20
- When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
21
- following block is populated with the Epic's change-set file list.
20
+ When this lens is invoked from `/deliver` close lenses (or a plan-run audit), the
21
+ following block is populated with the Story (or plan-run) change-set file list.
22
22
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
23
23
  renders the literal substitution token and you MUST treat it as **no
24
24
  scope filter — run the lens codebase-wide** exactly as you would have
@@ -39,8 +39,7 @@ before this section existed.
39
39
  ## Execution strategy (dual-path)
40
40
 
41
41
  This lens runs along one of two execution paths. Both emit the **identical**
42
- report contract (Step 3); downstream consumers (`/deliver` Phase 4
43
- epic-audit, `audit-to-stories`) are agnostic to which path produced it.
42
+ report contract (Step 3); downstream consumers (`audit-to-stories`) are agnostic to which path produced it.
44
43
 
45
44
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
46
45
  [dynamic workflows](https://code.claude.com/docs/en/workflows) are
@@ -102,8 +101,9 @@ Analyze the repository with a focus on:
102
101
  cyclomatic complexity > 8 (`delivery.quality.codingGuardrails.cyclomaticFlag`)
103
102
  is **flag in review** (annotate or split); > 12
104
103
  (`codingGuardrails.cyclomaticMustFix`) is **must-fix** before the work merges.
105
- A per-file MI drop > 1.5pt (`codingGuardrails.miDropMustRefactor`) requires a
106
- refactor in the same Story rather than a baseline bump.
104
+ A per-file MI drop beyond the configured
105
+ `delivery.quality.gates.maintainability.tolerance` (default 0.5pt) requires
106
+ a refactor in the same Story rather than a baseline bump.
107
107
  - **Duplication:** Find "copy-paste" logic that should be abstracted into
108
108
  reusable utilities or hooks.
109
109
  - **Component Health:** In UI code, look for "component bloat" (files > 300
@@ -14,10 +14,10 @@ Manage the lifecycle of project dependencies. Your goal is to identify outdated,
14
14
  vulnerable, or bloated packages and suggest a safe upgrade path that maintains
15
15
  system stability.
16
16
 
17
- ## Scope (Epic mode)
17
+ ## Scope (Story / plan-run mode)
18
18
 
19
- When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
20
- following block is populated with the Epic's change-set file list.
19
+ When this lens is invoked from `/deliver` close lenses (or a plan-run audit), the
20
+ following block is populated with the Story (or plan-run) change-set file list.
21
21
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
22
22
  renders the literal substitution token and you MUST treat it as **no
23
23
  scope filter — run the lens codebase-wide** exactly as you would have
@@ -15,10 +15,10 @@ infrastructure, developer experience (DX) tooling, and CI/CD pipelines. Your
15
15
  goal is to identify inefficiencies, security risks, and areas for modernization
16
16
  without making any immediate changes.
17
17
 
18
- ## Scope (Epic mode)
18
+ ## Scope (Story / plan-run mode)
19
19
 
20
- When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
21
- following block is populated with the Epic's change-set file list.
20
+ When this lens is invoked from `/deliver` close lenses (or a plan-run audit), the
21
+ following block is populated with the Story (or plan-run) change-set file list.
22
22
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
23
23
  renders the literal substitution token and you MUST treat it as **no
24
24
  scope filter — run the lens codebase-wide** exactly as you would have