mandrel 1.93.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/.agents/README.md +59 -73
  2. package/.agents/agents/acceptance-critic.md +129 -0
  3. package/.agents/agents/story-worker.md +161 -0
  4. package/.agents/docs/SDLC.md +489 -1285
  5. package/.agents/docs/agentrc-reference.json +177 -67
  6. package/.agents/docs/configuration.md +108 -136
  7. package/.agents/docs/execution-reference.md +44 -22
  8. package/.agents/docs/quality-gates.md +13 -19
  9. package/.agents/docs/workflows.md +3 -3
  10. package/.agents/instructions.md +107 -108
  11. package/.agents/rules/ci-remediation.md +8 -12
  12. package/.agents/rules/git-conventions-reference.md +224 -0
  13. package/.agents/rules/git-conventions.md +42 -223
  14. package/.agents/rules/security-baseline.md +5 -0
  15. package/.agents/rules/testing-standards.md +106 -13
  16. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  17. package/.agents/schemas/agentrc.schema.json +71 -201
  18. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  19. package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
  20. package/.agents/schemas/risk-verdict.schema.json +0 -13
  21. package/.agents/scripts/acceptance-eval.js +62 -18
  22. package/.agents/scripts/agents-bootstrap-github.js +1 -1
  23. package/.agents/scripts/analyze-execution.js +1 -1
  24. package/.agents/scripts/audit-to-stories.js +7 -7
  25. package/.agents/scripts/boot-sweep.js +1 -1
  26. package/.agents/scripts/check-context-budget.js +62 -5
  27. package/.agents/scripts/check-lifecycle-lint.js +6 -9
  28. package/.agents/scripts/check-prepush-recovery.js +1 -1
  29. package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
  30. package/.agents/scripts/diagnose-friction.js +0 -6
  31. package/.agents/scripts/lib/Logger.js +6 -10
  32. package/.agents/scripts/lib/audit-suite/runner.js +2 -2
  33. package/.agents/scripts/lib/audit-suite/selector.js +5 -5
  34. package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
  35. package/.agents/scripts/lib/baselines/kernel.js +206 -18
  36. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
  37. package/.agents/scripts/lib/baselines/reader.js +1 -6
  38. package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
  39. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
  40. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +56 -18
  41. package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
  42. package/.agents/scripts/lib/checks/index.js +2 -1
  43. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
  44. package/.agents/scripts/lib/cli/standard-args.js +13 -22
  45. package/.agents/scripts/lib/cli-args.js +16 -7
  46. package/.agents/scripts/lib/close-validation/gates.js +160 -22
  47. package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
  48. package/.agents/scripts/lib/config/ci.js +6 -31
  49. package/.agents/scripts/lib/config/delivery-routing.js +103 -0
  50. package/.agents/scripts/lib/config/explain.js +57 -36
  51. package/.agents/scripts/lib/config/limits.js +17 -58
  52. package/.agents/scripts/lib/config/paths.js +0 -2
  53. package/.agents/scripts/lib/config/quality.js +1 -1
  54. package/.agents/scripts/lib/config/runners.js +17 -50
  55. package/.agents/scripts/lib/config/temp-paths.js +19 -14
  56. package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
  57. package/.agents/scripts/lib/config-resolver.js +3 -8
  58. package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
  59. package/.agents/scripts/lib/config-settings-schema-quality.js +17 -14
  60. package/.agents/scripts/lib/config-settings-schema.js +52 -38
  61. package/.agents/scripts/lib/dependency-parser.js +3 -2
  62. package/.agents/scripts/lib/doc-tiers.js +39 -4
  63. package/.agents/scripts/lib/duplicate-search.js +211 -41
  64. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  65. package/.agents/scripts/lib/findings/promote-finding.js +5 -5
  66. package/.agents/scripts/lib/framework-version.js +2 -3
  67. package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
  68. package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
  69. package/.agents/scripts/lib/git-utils.js +32 -6
  70. package/.agents/scripts/lib/github/framework-repo.js +6 -0
  71. package/.agents/scripts/lib/label-constants.js +10 -23
  72. package/.agents/scripts/lib/label-taxonomy.js +9 -43
  73. package/.agents/scripts/lib/observability/active-story-env.js +112 -3
  74. package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
  75. package/.agents/scripts/lib/observability/source-classifier.js +3 -3
  76. package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
  77. package/.agents/scripts/lib/onboard/init-tail.js +1 -3
  78. package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
  79. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
  80. package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
  81. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
  82. package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
  83. package/.agents/scripts/lib/orchestration/code-review.js +20 -268
  84. package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
  85. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
  86. package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
  87. package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
  88. package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
  89. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
  90. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
  91. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
  92. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
  93. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
  94. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
  95. package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
  96. package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
  97. package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
  98. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +3 -2
  99. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
  100. package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
  101. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
  102. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
  103. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
  104. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
  105. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
  106. package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
  107. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
  108. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +14 -14
  109. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
  110. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
  111. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
  112. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
  113. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
  114. package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
  115. package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
  116. package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
  117. package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
  118. package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
  119. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
  120. package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
  121. package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
  122. package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
  123. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
  124. package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
  125. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
  126. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +1 -0
  127. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
  128. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
  129. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
  130. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
  131. package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
  132. package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
  133. package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
  134. package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
  135. package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
  136. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
  137. package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
  138. package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
  139. package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
  140. package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
  141. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
  142. package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
  143. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
  144. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
  145. package/.agents/scripts/lib/orchestration/ticket-validator.js +3 -8
  146. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
  147. package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
  148. package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
  149. package/.agents/scripts/lib/planning-corpus.js +16 -11
  150. package/.agents/scripts/lib/preflight-runner.js +2 -2
  151. package/.agents/scripts/lib/provider-factory.js +1 -1
  152. package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
  153. package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
  154. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
  155. package/.agents/scripts/lib/story-adjacency.js +11 -14
  156. package/.agents/scripts/lib/story-body/story-body.js +124 -70
  157. package/.agents/scripts/lib/story-plan.js +2 -4
  158. package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
  159. package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
  160. package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
  161. package/.agents/scripts/lib/validation-evidence.js +1 -1
  162. package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
  163. package/.agents/scripts/lib/workspace-provisioner.js +1 -1
  164. package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
  165. package/.agents/scripts/lint-issue-body.js +71 -40
  166. package/.agents/scripts/mandrel-update-preflight.js +1 -1
  167. package/.agents/scripts/notify.js +4 -3
  168. package/.agents/scripts/plan-context.js +64 -74
  169. package/.agents/scripts/plan-persist.js +121 -280
  170. package/.agents/scripts/plan-run-epilogue.js +97 -0
  171. package/.agents/scripts/post-structured-comment.js +38 -0
  172. package/.agents/scripts/providers/github/issues.js +17 -33
  173. package/.agents/scripts/providers/github/mappers.js +0 -12
  174. package/.agents/scripts/providers/github/tickets.js +2 -5
  175. package/.agents/scripts/resolve-plan-run.js +117 -0
  176. package/.agents/scripts/signals-view.js +24 -19
  177. package/.agents/scripts/single-story-close.js +11 -14
  178. package/.agents/scripts/single-story-confirm-merge.js +39 -23
  179. package/.agents/scripts/single-story-init.js +29 -20
  180. package/.agents/scripts/stories-wave-tick.js +6 -6
  181. package/.agents/scripts/story-plan.js +26 -47
  182. package/.agents/scripts/sync-claude-agents.js +165 -0
  183. package/.agents/scripts/update-ticket-state.js +37 -15
  184. package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
  185. package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
  186. package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
  187. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
  188. package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
  189. package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
  190. package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
  191. package/.agents/skills/core/scope-triage/SKILL.md +28 -172
  192. package/.agents/skills/skills.index.json +8 -418
  193. package/.agents/starter-agentrc.json +0 -5
  194. package/.agents/templates/agent-protocol.md +9 -10
  195. package/.agents/workflows/audit-architecture.md +3 -3
  196. package/.agents/workflows/audit-clean-code.md +3 -3
  197. package/.agents/workflows/audit-dependencies.md +3 -3
  198. package/.agents/workflows/audit-devops.md +3 -3
  199. package/.agents/workflows/audit-documentation.md +5 -5
  200. package/.agents/workflows/audit-lighthouse.md +3 -3
  201. package/.agents/workflows/audit-navigability.md +3 -2
  202. package/.agents/workflows/audit-performance.md +3 -3
  203. package/.agents/workflows/audit-privacy.md +3 -3
  204. package/.agents/workflows/audit-quality.md +3 -3
  205. package/.agents/workflows/audit-security.md +3 -3
  206. package/.agents/workflows/audit-seo.md +3 -3
  207. package/.agents/workflows/audit-sre.md +3 -3
  208. package/.agents/workflows/audit-to-stories.md +20 -20
  209. package/.agents/workflows/audit-ux-ui.md +3 -3
  210. package/.agents/workflows/deliver.md +122 -131
  211. package/.agents/workflows/git-cleanup.md +3 -4
  212. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  213. package/.agents/workflows/helpers/acceptance-self-eval.md +52 -40
  214. package/.agents/workflows/helpers/code-review.md +70 -193
  215. package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
  216. package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
  217. package/.agents/workflows/helpers/diagnose.md +10 -10
  218. package/.agents/workflows/helpers/mandrel-sync-config.md +1 -1
  219. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  220. package/.agents/workflows/helpers/signals.md +16 -16
  221. package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
  222. package/.agents/workflows/mandrel-update.md +3 -2
  223. package/.agents/workflows/plan.md +112 -145
  224. package/.agents/workflows/qa-assist.md +24 -30
  225. package/.agents/workflows/qa-explore.md +29 -38
  226. package/.agents/workflows/qa-run.md +2 -2
  227. package/README.md +9 -8
  228. package/docs/CHANGELOG.md +46 -0
  229. package/lib/cli/registry.js +95 -0
  230. package/lib/migrations/index.js +6 -5
  231. package/package.json +5 -3
  232. package/.agents/personas/architect.md +0 -113
  233. package/.agents/personas/devops-engineer.md +0 -38
  234. package/.agents/personas/engineer-mobile.md +0 -120
  235. package/.agents/personas/engineer-web.md +0 -111
  236. package/.agents/personas/engineer.md +0 -119
  237. package/.agents/personas/product.md +0 -94
  238. package/.agents/personas/project-manager.md +0 -114
  239. package/.agents/personas/qa-engineer.md +0 -95
  240. package/.agents/personas/refactorer.md +0 -113
  241. package/.agents/personas/security-engineer.md +0 -112
  242. package/.agents/personas/sre.md +0 -86
  243. package/.agents/personas/technical-writer.md +0 -101
  244. package/.agents/personas/ux-designer.md +0 -95
  245. package/.agents/schemas/dispatch-manifest.json +0 -232
  246. package/.agents/schemas/epic-spec.schema.json +0 -153
  247. package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
  248. package/.agents/scripts/dispatcher.js +0 -295
  249. package/.agents/scripts/epic-audit-prepare.js +0 -497
  250. package/.agents/scripts/epic-audit-recheck.js +0 -274
  251. package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
  252. package/.agents/scripts/epic-deliver-preflight.js +0 -462
  253. package/.agents/scripts/epic-deliver-prepare.js +0 -590
  254. package/.agents/scripts/epic-execute-record-wave.js +0 -449
  255. package/.agents/scripts/epic-plan-clarity.js +0 -211
  256. package/.agents/scripts/epic-plan-decompose.js +0 -54
  257. package/.agents/scripts/epic-plan-healthcheck.js +0 -581
  258. package/.agents/scripts/epic-plan-spec.js +0 -64
  259. package/.agents/scripts/epic-reconcile.js +0 -625
  260. package/.agents/scripts/lib/baseline-snapshot.js +0 -979
  261. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
  262. package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
  263. package/.agents/scripts/lib/config/lifecycle.js +0 -40
  264. package/.agents/scripts/lib/config/preflight.js +0 -58
  265. package/.agents/scripts/lib/config/retro.js +0 -77
  266. package/.agents/scripts/lib/epic-merge-lock.js +0 -322
  267. package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
  268. package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
  269. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -660
  270. package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
  271. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
  272. package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
  273. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
  274. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
  275. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
  276. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
  277. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
  278. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
  279. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
  280. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
  281. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
  282. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
  283. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
  284. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
  285. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
  286. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
  287. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
  288. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -388
  289. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
  290. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
  291. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
  292. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
  293. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
  294. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
  295. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
  296. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
  297. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
  298. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
  299. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
  300. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
  301. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
  302. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
  303. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
  304. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
  305. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
  306. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
  307. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
  308. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
  309. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
  310. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
  311. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
  313. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
  314. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
  315. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
  316. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
  317. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -278
  318. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
  319. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
  320. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
  321. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
  322. package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
  323. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
  324. package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
  325. package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
  326. package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
  327. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
  328. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
  329. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
  330. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
  331. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
  332. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
  333. package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
  334. package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
  335. package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +0 -109
  336. package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
  337. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
  338. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
  339. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
  340. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
  341. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
  342. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
  343. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
  344. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
  345. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
  346. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
  347. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
  348. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
  349. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
  350. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
  351. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
  352. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
  353. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
  354. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
  355. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
  356. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
  357. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
  358. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
  359. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
  360. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
  361. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -301
  362. package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
  363. package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
  364. package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
  365. package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
  366. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
  367. package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
  368. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
  369. package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
  370. package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
  371. package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
  372. package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
  373. package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
  374. package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
  375. package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
  376. package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
  377. package/.agents/scripts/lib/push-epic-retry.js +0 -209
  378. package/.agents/scripts/lib/spec/index.js +0 -36
  379. package/.agents/scripts/lib/spec/loader.js +0 -425
  380. package/.agents/scripts/lib/spec/state.js +0 -208
  381. package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
  382. package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
  383. package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
  384. package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
  385. package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
  386. package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
  387. package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
  388. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
  389. package/.agents/scripts/lib/wave-runner/tick.js +0 -754
  390. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
  391. package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
  392. package/.agents/scripts/lifecycle-emit.js +0 -510
  393. package/.agents/scripts/plan-critics.js +0 -199
  394. package/.agents/scripts/retro-run.js +0 -218
  395. package/.agents/scripts/standalone-feedback-rollup.js +0 -188
  396. package/.agents/scripts/story-close.js +0 -294
  397. package/.agents/scripts/story-init.js +0 -599
  398. package/.agents/scripts/story-phase.js +0 -369
  399. package/.agents/scripts/wave-tick.js +0 -335
  400. package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
  401. package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
  402. package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
  403. package/.agents/skills/core/code-simplification/SKILL.md +0 -389
  404. package/.agents/skills/core/context-engineering/SKILL.md +0 -309
  405. package/.agents/skills/core/context-engineering/examples.md +0 -58
  406. package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
  407. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
  408. package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
  409. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
  410. package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
  411. package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
  412. package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
  413. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -413
  414. package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
  415. package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
  416. package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
  417. package/.agents/skills/core/idea-refinement/examples.md +0 -437
  418. package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
  419. package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
  420. package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
  421. package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
  422. package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
  423. package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
  424. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
  425. package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
  426. package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
  427. package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
  428. package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
  429. package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
  430. package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
  431. package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
  432. package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
  433. package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
  434. package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
  435. package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
  436. package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
  437. package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
  438. package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
  439. package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
  440. package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
  441. package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
  442. package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
  443. package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
  444. package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
  445. package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
  446. package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
  447. package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
  448. package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
  449. package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
  450. package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
  451. package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
  452. package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
  453. package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
  454. package/.agents/workflows/helpers/deliver-epic.md +0 -955
  455. package/.agents/workflows/helpers/deliver-stories.md +0 -440
  456. package/.agents/workflows/helpers/epic-audit.md +0 -189
  457. package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
  458. package/.agents/workflows/helpers/epic-testing.md +0 -125
  459. package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
  460. package/.agents/workflows/helpers/plan-epic.md +0 -351
  461. package/.agents/workflows/helpers/plan-story.md +0 -251
  462. package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
  463. /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
@@ -1,181 +0,0 @@
1
- ---
2
- name: baseline-refresh
3
- description: >-
4
- Author a refresh commit for any of the unified-baseline snapshots (CRAP,
5
- maintainability, dead-exports, lighthouse). Use whenever an intentional
6
- code change resets a baseline key (rename, deliberate complexity bump,
7
- perf regression with operator sign-off) and the close-validation chain
8
- needs the refreshed snapshot to land on the same Story branch as the
9
- triggering edit.
10
- allowed_tools:
11
- - Read
12
- - Write
13
- - Bash
14
- ---
15
-
16
- # baseline-refresh
17
-
18
- ## Policy Capsule
19
-
20
- - Refresh only when the change is **deliberate** (rename, approved complexity bump, signed-off perf delta, intentional API surface change). Never refresh to paper over an unintentional regression — fix the regression instead.
21
- - Run the kind-specific update command (`npm run crap:update` / `maintainability:update` / `dead-exports:update` / `lighthouse:update`) on the **Story branch**, not on `main`.
22
- - Verify the resulting diff is scoped to the relevant `baselines/<kind>.json` (plus cosmetic `package-lock.json` churn only). If unrelated files appear, STOP — the refresh is contaminated.
23
- - Stage baseline files **explicitly** (`git add baselines/<kind>.json`). Never `git add -A` in a refresh commit.
24
- - Commit-subject contract: a **Conventional-Commits** subject of the form `chore(baselines): refresh <kind> snapshot for <reason>` — never an ad-hoc leading token like `baseline-refresh:` (commitlint and the planner validator reject it).
25
- - The commit body is **mandatory** and non-empty: explain what changed, why the new floor is correct, and link the Story/Epic that triggered the refresh.
26
- - Add the machine-readable trailer `baseline-refresh: true` (one per line, `Key: value` git-trailer style) to the body whenever observability classification matters.
27
- - Include `Epic: #<epic-id>` as a body trailer.
28
- - Never pass `--no-verify`. The `commit-msg` hook (commitlint) MUST run and pass.
29
- - After the refresh lands, re-run `node .agents/scripts/check-baselines.js` to confirm the gate passes against the new snapshot; if it still fails, a sibling kind drifted — refresh that kind too.
30
-
31
- ## Role
32
-
33
- Senior engineer authoring a deliberate, observable refresh of one of the
34
- unified baseline snapshots that the close-validation chain enforces
35
- (`baselines/crap.json`, `baselines/maintainability.json`,
36
- `baselines/dead-exports.json`, `baselines/lighthouse.json`).
37
-
38
- A refresh is **not** a regression entry — it tells the ratchet that the
39
- new baseline key is intentional, so the gate compares future runs against
40
- the refreshed snapshot rather than the prior one.
41
-
42
- ## When to use
43
-
44
- - A file rename or move detached an MI/CRAP key from its prior baseline.
45
- - A method rename inside a file produced a phantom new key + phantom
46
- deleted key under escomplex's `<file>::<methodName>` keying.
47
- - An operator-approved complexity bump or perf delta needs to be
48
- enshrined as the new floor.
49
- - A dead-export gate flagged a deliberate API surface change that has
50
- been signed off.
51
-
52
- If the underlying change is an **unintentional** regression, do not refresh
53
- — remediate the regression first.
54
-
55
- ## Commit-subject contract (authoritative)
56
-
57
- Refresh commits MUST use a **Conventional-Commits subject** and MUST NOT
58
- use a legacy ad-hoc prefix as the leading token. The canonical shape is:
59
-
60
- ```text
61
- chore(baselines): refresh <kind> snapshot for <reason>
62
-
63
- <non-empty body explaining the refresh — what changed, why the new
64
- baseline is the correct floor, and any operator sign-off reference>
65
-
66
- baseline-refresh: true
67
- Epic: #<epic-id>
68
- ```
69
-
70
- ### Why a Conventional-Commits subject
71
-
72
- 1. The local `commit-msg` hook (`.husky/commit-msg` → `commitlint`) rejects
73
- any subject whose leading token is not one of
74
- `feat|fix|chore|refactor|perf|docs|style|test|build|ci|revert`. Legacy
75
- ad-hoc leading tokens fail this hook. `--no-verify` is forbidden by
76
- [`.agents/rules/git-conventions.md`](../../../rules/git-conventions.md),
77
- so the subject must conform.
78
- 2. `release-please` consumes Conventional-Commits subjects on `main` to
79
- generate `docs/CHANGELOG.md` and bump `package.json`. A
80
- non-conventional subject parses as "no changelog entry" and the
81
- refresh disappears from the release record.
82
- 3. `chore(baselines):` keeps the refresh out of the user-facing changelog
83
- (which is correct — a baseline refresh is internal hygiene, not a
84
- feature or fix) while still being machine-parseable.
85
-
86
- ### Body trailer for machine-readable classification
87
-
88
- When telemetry, the friction analyzer, or the baseline-refresh-rate
89
- observability surface needs to detect a refresh commit, add the trailer
90
- `baseline-refresh: true` to the commit **body** (one trailer per line,
91
- following the `Key: value` git-trailer convention). The trailer is the
92
- canonical machine-readable marker. Subject-level leading tokens are not
93
- — and must not be — used for this purpose.
94
-
95
- The trailer form is also what
96
- [`.agents/scripts/lib/observability/baseline-refresh-rate.js`](../../../scripts/lib/observability/baseline-refresh-rate.js)
97
- should classify against going forward; until that classifier is updated,
98
- the historical subject-prefix detection remains in place as a
99
- backwards-compatibility fallback but is not the prescribed shape for new
100
- commits.
101
-
102
- ## Procedure
103
-
104
- ### Step 1 — Run the matching update command
105
-
106
- Each baseline kind has a dedicated update script:
107
-
108
- | Kind | Update command |
109
- | --------------- | ------------------------------- |
110
- | CRAP | `npm run crap:update` |
111
- | Maintainability | `npm run maintainability:update`|
112
- | Dead-exports | `npm run dead-exports:update` |
113
- | Lighthouse | `npm run lighthouse:update` |
114
-
115
- Run the command on the Story branch that triggered the refresh — the
116
- worktree's HEAD must already be the Story branch, not `main`.
117
-
118
- ### Step 2 — Verify the diff is scoped to the baseline file
119
-
120
- `git status` should show only the relevant `baselines/<kind>.json` (or
121
- sibling per-kind files) and possibly `package-lock.json` cosmetic churn.
122
- If unrelated files appear in the diff, **STOP** — the update script
123
- picked up an unintentional regression and the refresh is contaminated.
124
-
125
- ### Step 3 — Author the commit
126
-
127
- Stage the baseline file(s) explicitly (do not `git add -A`), then commit
128
- with the Conventional-Commits subject + body trailer:
129
-
130
- ```bash
131
- git add baselines/<kind>.json
132
- git commit -m "$(cat <<'EOF'
133
- chore(baselines): refresh <kind> snapshot for <reason>
134
-
135
- <body explaining what changed, why the new floor is correct, and
136
- linking the upstream Story/Epic that triggered the refresh.>
137
-
138
- baseline-refresh: true
139
- Epic: #<epic-id>
140
- EOF
141
- )"
142
- ```
143
-
144
- Do NOT pass `--no-verify`. The `commit-msg` hook (commitlint) MUST run
145
- and MUST pass.
146
-
147
- ### Step 4 — Re-run the gate
148
-
149
- After the refresh commit lands on the Story branch, re-run
150
- `node .agents/scripts/check-baselines.js` to confirm the gate now passes
151
- against the refreshed snapshot. If it still fails, the refresh was
152
- incomplete (a sibling kind also drifted) — repeat from Step 1 for the
153
- remaining kind.
154
-
155
- ## Constraints
156
-
157
- - **Never** use a legacy ad-hoc token as the leading Conventional-Commits
158
- type in the commit subject. The allowed leading types are
159
- `feat|fix|chore|refactor|perf|docs|style|test|build|ci|revert` — this
160
- is enforced by commitlint locally and by the planning-time validator
161
- (`ticket-validator.js` → `validateAcceptanceSubjectPrefix`) at
162
- decompose time.
163
- - **Always** include a non-empty body. Empty-body refreshes are
164
- unreviewable and hide the operator decision behind a one-line subject.
165
- - **Always** include the `baseline-refresh: true` trailer when telemetry
166
- / observability classification matters. The trailer is the
167
- machine-readable marker going forward.
168
- - **Always** stage the baseline file(s) explicitly. A refresh commit
169
- whose diff also touches unrelated files is a contaminated refresh and
170
- the gate's "this floor is correct" semantics no longer hold.
171
- - **Never** refresh to paper over an unintentional regression. Refresh
172
- is "this is the new correct floor"; if the change isn't a deliberate
173
- one, fix the regression instead.
174
-
175
- ## Rationale anchor
176
-
177
- Epic #2501 retired the legacy `baseline-refresh` ad-hoc leading-token
178
- prescription in favor of the Conventional-Commits subject +
179
- `baseline-refresh: true` body-trailer shape documented above. See that
180
- Epic for the full migration history and the friction signals that
181
- motivated the change.
@@ -1,274 +0,0 @@
1
- ---
2
- name: ci-cd-and-automation
3
- description:
4
- Automates CI/CD pipeline setup. Use when setting up or modifying build and
5
- deployment pipelines. Use when you need to automate quality gates, configure
6
- test runners in CI, or establish deployment strategies.
7
- ---
8
-
9
- # CI/CD and Automation
10
-
11
- ## Policy Capsule
12
-
13
- - Every PR passes the same quality-gate pipeline before merge: **lint → typecheck → unit tests → build → integration tests → optional E2E → security audit → bundle-size**. Gates are ordered shift-left so cheap checks fail first.
14
- - **No gate may be skipped.** Failing lint means fix lint, not disable the rule. Failing a test means fix the code, not delete or `.skip` the test.
15
- - **Faster is safer.** Prefer many small, frequent releases over big-bang merges; one deploy of three changes is debuggable, one deploy of thirty is not.
16
- - Cache aggressively (npm cache, build cache) and split lint / typecheck / test into parallel jobs to keep PR feedback under ~10 minutes.
17
- - Use GitHub Secrets (or platform equivalent) for every credential — even in CI-only test databases. Never hardcode credentials in workflow YAML.
18
- - Wire preview deployments for every PR so reviewers can exercise the change in a production-like environment before merge.
19
- - Feed CI failure output verbatim back to the agent loop with the specific error and the directive to verify locally before re-pushing.
20
- - Treat the security audit (`npm audit` or equivalent) as gating: critical and high vulnerabilities reachable in production code MUST be remediated before merge.
21
- - Enforce a bundle-size budget in CI; a budget breach blocks the change just like a failing test.
22
-
23
- ## Overview
24
-
25
- Automate quality gates so that no change reaches production without passing
26
- tests, lint, type checking, and build. CI/CD is the enforcement mechanism for
27
- every other skill — it catches what humans and agents miss, and it does so
28
- consistently on every single change.
29
-
30
- **Shift Left:** Catch problems as early in the pipeline as possible. A bug
31
- caught in linting costs minutes; the same bug caught in production costs hours.
32
- Move checks upstream — static analysis before tests, tests before staging,
33
- staging before production.
34
-
35
- **Faster is Safer:** Smaller batches and more frequent releases reduce risk, not
36
- increase it. A deployment with 3 changes is easier to debug than one with 30.
37
- Frequent releases build confidence in the release process itself.
38
-
39
- ## When to Use
40
-
41
- - Setting up a new project's CI pipeline
42
- - Adding or modifying automated checks
43
- - Configuring deployment pipelines
44
- - When a change should trigger automated verification
45
- - Debugging CI failures
46
-
47
- ## The Quality Gate Pipeline
48
-
49
- Every change goes through these gates before merge:
50
-
51
- ```text
52
- Pull Request Opened
53
-
54
-
55
- ┌─────────────────┐
56
- │ LINT CHECK │ eslint, prettier
57
- │ ↓ pass │
58
- │ TYPE CHECK │ tsc --noEmit
59
- │ ↓ pass │
60
- │ UNIT TESTS │ jest/vitest
61
- │ ↓ pass │
62
- │ BUILD │ npm run build
63
- │ ↓ pass │
64
- │ INTEGRATION │ API/DB tests
65
- │ ↓ pass │
66
- │ E2E (optional) │ Playwright/Cypress
67
- │ ↓ pass │
68
- │ SECURITY AUDIT │ npm audit
69
- │ ↓ pass │
70
- │ BUNDLE SIZE │ bundlesize check
71
- └─────────────────┘
72
-
73
-
74
- Ready for review
75
- ```
76
-
77
- **No gate can be skipped.** If lint fails, fix lint — don't disable the rule. If
78
- a test fails, fix the code — don't skip the test.
79
-
80
- **Introducing a new gate that asserts on pre-existing state** (doc-drift,
81
- lint-vocabulary, dependency-cycle, missing-test-coverage) has its own
82
- hazard: the gate lands red because of latent findings nobody authored,
83
- and every downstream PR is blocked until someone hotfixes the integration
84
- branch. Before wiring such a gate into `requiredChecks`, read
85
- [`core/introducing-a-baseline-gate`](../introducing-a-baseline-gate/SKILL.md) —
86
- it covers the two landing shapes (advisory-first or
87
- populate-the-baseline) that keep the gate green at merge.
88
-
89
- ## CI Configuration (GitHub Actions)
90
-
91
- A representative pipeline for a Node project runs lint → type check → unit
92
- tests → build → security audit on every PR and push to `main`. Add
93
- integration jobs that spin up service containers (e.g. Postgres) and an E2E
94
- job that installs Playwright and uploads the report on failure.
95
-
96
- > See [`examples.md`](./examples.md) for full GitHub Actions YAML covering:
97
- >
98
- > - Basic CI pipeline (lint, types, tests, build, audit)
99
- > - Integration tests with a Postgres service container + Prisma migrations
100
- > - Playwright E2E with report artifacts
101
- > - Caching and parallelism (split lint/typecheck/test into separate jobs)
102
- >
103
- > Use GitHub Secrets for credentials — even in CI-only test databases — to
104
- > avoid normalizing hardcoded values that could leak into other contexts.
105
-
106
- ## Feeding CI Failures Back to Agents
107
-
108
- The power of CI with AI agents is the feedback loop. When CI fails:
109
-
110
- ```text
111
- CI fails
112
-
113
-
114
- Copy the failure output
115
-
116
-
117
- Feed it to the agent:
118
- "The CI pipeline failed with this error:
119
- [paste specific error]
120
- Fix the issue and verify locally before pushing again."
121
-
122
-
123
- Agent fixes → pushes → CI runs again
124
- ```
125
-
126
- **Key patterns:**
127
-
128
- ```text
129
- Lint failure → Agent runs `npm run lint --fix` and commits
130
- Type error → Agent reads the error location and fixes the type
131
- Test failure → Agent follows debugging-and-error-recovery skill
132
- Build error → Agent checks config and dependencies
133
- ```
134
-
135
- ## Deployment Strategies
136
-
137
- ### Preview Deployments
138
-
139
- Every PR gets a preview deployment for manual testing — most platforms (Vercel,
140
- Netlify, Cloudflare Pages) ship a one-step action you wire into the PR
141
- workflow. See [`examples.md`](./examples.md) for a representative Vercel
142
- preview-deploy job.
143
-
144
- ### Feature Flags
145
-
146
- Feature flags decouple deployment from release. Deploy incomplete or risky
147
- features behind flags so you can:
148
-
149
- - **Ship code without enabling it.** Merge to main early, enable when ready.
150
- - **Roll back without redeploying.** Disable the flag instead of reverting code.
151
- - **Canary new features.** Enable for 1% of users, then 10%, then 100%.
152
- - **Run A/B tests.** Compare behavior with and without the feature.
153
-
154
- **Flag lifecycle:** Create → Enable for testing → Canary → Full rollout →
155
- Remove the flag and dead code. Flags that live forever become technical debt —
156
- set a cleanup date when you create them. See [`examples.md`](./examples.md)
157
- for a minimal flag-check pattern.
158
-
159
- ### Staged Rollouts
160
-
161
- ```text
162
- PR merged to main
163
-
164
-
165
- Staging deployment (auto)
166
- │ Manual verification
167
-
168
- Production deployment (manual trigger or auto after staging)
169
-
170
-
171
- Monitor for errors (15-minute window)
172
-
173
- ├── Errors detected → Rollback
174
- └── Clean → Done
175
- ```
176
-
177
- ### Rollback Plan
178
-
179
- Every deployment should be reversible. Wire a `workflow_dispatch` job that
180
- takes a target version as input and re-deploys it; see
181
- [`examples.md`](./examples.md) for a representative manual-rollback workflow.
182
-
183
- ## Environment Management
184
-
185
- ```text
186
- .env.example → Committed (template for developers)
187
- .env → NOT committed (local development)
188
- .env.test → Committed (test environment, no real secrets)
189
- CI secrets → Stored in GitHub Secrets / vault
190
- Production secrets → Stored in deployment platform / vault
191
- ```
192
-
193
- CI should never have production secrets. Use separate secrets for CI testing.
194
-
195
- ## Automation Beyond CI
196
-
197
- ### Dependabot / Renovate
198
-
199
- Schedule dependency updates so they show up as PRs you can triage in batches
200
- rather than chasing security advisories ad hoc. A minimal `dependabot.yml` is
201
- in [`examples.md`](./examples.md); Renovate's config covers the same shape
202
- with more knobs.
203
-
204
- ### Build Cop Role
205
-
206
- Designate someone responsible for keeping CI green. When the build breaks, the
207
- Build Cop's job is to fix or revert — not the person whose change caused the
208
- break. This prevents broken builds from accumulating while everyone assumes
209
- someone else will fix it.
210
-
211
- ### PR Checks
212
-
213
- - **Required reviews:** At least 1 approval before merge
214
- - **Required status checks:** CI must pass before merge
215
- - **Branch protection:** No force-pushes to main
216
- - **Auto-merge:** If all checks pass and approved, merge automatically
217
-
218
- ## CI Optimization
219
-
220
- When the pipeline exceeds 10 minutes, apply these strategies in order of impact:
221
-
222
- ```text
223
- Slow CI pipeline?
224
- ├── Cache dependencies
225
- │ └── Use actions/cache or setup-node cache option for node_modules
226
- ├── Run jobs in parallel
227
- │ └── Split lint, typecheck, test, build into separate parallel jobs
228
- ├── Only run what changed
229
- │ └── Use path filters to skip unrelated jobs (e.g., skip e2e for docs-only PRs)
230
- ├── Use matrix builds
231
- │ └── Shard test suites across multiple runners
232
- ├── Optimize the test suite
233
- │ └── Remove slow tests from the critical path, run them on a schedule instead
234
- └── Use larger runners
235
- └── GitHub-hosted larger runners or self-hosted for CPU-heavy builds
236
- ```
237
-
238
- ### Example: Caching and Parallelism
239
-
240
- Split lint, typecheck, and test into separate jobs that each restore the npm
241
- cache via `actions/setup-node`'s `cache: 'npm'` option. See
242
- [`examples.md`](./examples.md) for a parallel three-job layout.
243
-
244
- ## Common Rationalizations
245
-
246
- | Rationalization | Reality |
247
- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
248
- | "CI is too slow" | Optimize the pipeline (see CI Optimization below), don't skip it. A 5-minute pipeline prevents hours of debugging. |
249
- | "This change is trivial, skip CI" | Trivial changes break builds. CI is fast for trivial changes anyway. |
250
- | "The test is flaky, just re-run" | Flaky tests mask real bugs and waste everyone's time. Fix the flakiness. |
251
- | "We'll add CI later" | Projects without CI accumulate broken states. Set it up on day one. |
252
- | "Manual testing is enough" | Manual testing doesn't scale and isn't repeatable. Automate what you can. |
253
-
254
- ## Red Flags
255
-
256
- - No CI pipeline in the project
257
- - CI failures ignored or silenced
258
- - Tests disabled in CI to make the pipeline pass
259
- - Production deploys without staging verification
260
- - No rollback mechanism
261
- - Secrets stored in code or CI config files (not secrets manager)
262
- - Long CI times with no optimization effort
263
-
264
- ## Verification
265
-
266
- After setting up or modifying CI:
267
-
268
- - [ ] All quality gates are present (lint, types, tests, build, audit)
269
- - [ ] Pipeline runs on every PR and push to main
270
- - [ ] Failures block merge (branch protection configured)
271
- - [ ] CI results feed back into the development loop
272
- - [ ] Secrets are stored in the secrets manager, not in code
273
- - [ ] Deployment has a rollback mechanism
274
- - [ ] Pipeline runs in under 10 minutes for the test suite
@@ -1,211 +0,0 @@
1
- # CI/CD and Automation — Examples
2
-
3
- Long stack-specific snippets extracted from `SKILL.md` so the skill stays
4
- focused on policy and routing. The samples below assume GitHub Actions plus
5
- Node 22 / npm; adapt to your project's runner, package manager, and language.
6
-
7
- ---
8
-
9
- ## GitHub Actions: Basic CI Pipeline
10
-
11
- ```yaml
12
- # .github/workflows/ci.yml
13
- name: CI
14
-
15
- on:
16
- pull_request:
17
- branches: [main]
18
- push:
19
- branches: [main]
20
-
21
- jobs:
22
- quality:
23
- runs-on: ubuntu-latest
24
- steps:
25
- - uses: actions/checkout@v4
26
-
27
- - uses: actions/setup-node@v4
28
- with:
29
- node-version: '22'
30
- cache: 'npm'
31
-
32
- - name: Install dependencies
33
- run: npm ci
34
-
35
- - name: Lint
36
- run: npm run lint
37
-
38
- - name: Type check
39
- run: npx tsc --noEmit
40
-
41
- - name: Test
42
- run: npm test -- --coverage
43
-
44
- - name: Build
45
- run: npm run build
46
-
47
- - name: Security audit
48
- run: npm audit --audit-level=high
49
- ```
50
-
51
- ## GitHub Actions: With Database Integration Tests
52
-
53
- ```yaml
54
- integration:
55
- runs-on: ubuntu-latest
56
- services:
57
- postgres:
58
- image: postgres:16
59
- env:
60
- POSTGRES_DB: testdb
61
- POSTGRES_USER: ci_user
62
- POSTGRES_PASSWORD: ${{ secrets.CI_DB_PASSWORD }}
63
- ports:
64
- - 5432:5432
65
- options: >-
66
- --health-cmd pg_isready --health-interval 10s --health-timeout 5s
67
- --health-retries 5
68
-
69
- steps:
70
- - uses: actions/checkout@v4
71
- - uses: actions/setup-node@v4
72
- with:
73
- node-version: '22'
74
- cache: 'npm'
75
- - run: npm ci
76
- - name: Run migrations
77
- run: npx prisma migrate deploy
78
- env:
79
- DATABASE_URL:
80
- postgresql://ci_user:${{ secrets.CI_DB_PASSWORD
81
- }}@localhost:5432/testdb
82
- - name: Integration tests
83
- run: npm run test:integration
84
- env:
85
- DATABASE_URL:
86
- postgresql://ci_user:${{ secrets.CI_DB_PASSWORD
87
- }}@localhost:5432/testdb
88
- ```
89
-
90
- > **Note:** Even for CI-only test databases, use GitHub Secrets for credentials
91
- > rather than hardcoding values. This builds good habits and prevents accidental
92
- > reuse of test credentials in other contexts.
93
-
94
- ## GitHub Actions: E2E Tests
95
-
96
- ```yaml
97
- e2e:
98
- runs-on: ubuntu-latest
99
- steps:
100
- - uses: actions/checkout@v4
101
- - uses: actions/setup-node@v4
102
- with:
103
- node-version: '22'
104
- cache: 'npm'
105
- - run: npm ci
106
- - name: Install Playwright
107
- run: npx playwright install --with-deps chromium
108
- - name: Build
109
- run: npm run build
110
- - name: Run E2E tests
111
- run: npx playwright test
112
- - uses: actions/upload-artifact@v4
113
- if: failure()
114
- with:
115
- name: playwright-report
116
- path: playwright-report/
117
- ```
118
-
119
- ## Deployment: Preview on PR
120
-
121
- ```yaml
122
- # Deploy preview on PR (Vercel/Netlify/etc.)
123
- deploy-preview:
124
- runs-on: ubuntu-latest
125
- if: github.event_name == 'pull_request'
126
- steps:
127
- - uses: actions/checkout@v4
128
- - name: Deploy preview
129
- run: npx vercel --token=${{ secrets.VERCEL_TOKEN }}
130
- ```
131
-
132
- ## Deployment: Manual Rollback Workflow
133
-
134
- ```yaml
135
- # Manual rollback workflow
136
- name: Rollback
137
- on:
138
- workflow_dispatch:
139
- inputs:
140
- version:
141
- description: 'Version to rollback to'
142
- required: true
143
-
144
- jobs:
145
- rollback:
146
- runs-on: ubuntu-latest
147
- steps:
148
- - name: Rollback deployment
149
- run: |
150
- # Deploy the specified previous version
151
- npx vercel rollback ${{ inputs.version }}
152
- ```
153
-
154
- ## Caching and Parallelism
155
-
156
- ```yaml
157
- jobs:
158
- lint:
159
- runs-on: ubuntu-latest
160
- steps:
161
- - uses: actions/checkout@v4
162
- - uses: actions/setup-node@v4
163
- with: { node-version: '22', cache: 'npm' }
164
- - run: npm ci
165
- - run: npm run lint
166
-
167
- typecheck:
168
- runs-on: ubuntu-latest
169
- steps:
170
- - uses: actions/checkout@v4
171
- - uses: actions/setup-node@v4
172
- with: { node-version: '22', cache: 'npm' }
173
- - run: npm ci
174
- - run: npx tsc --noEmit
175
-
176
- test:
177
- runs-on: ubuntu-latest
178
- steps:
179
- - uses: actions/checkout@v4
180
- - uses: actions/setup-node@v4
181
- with: { node-version: '22', cache: 'npm' }
182
- - run: npm ci
183
- - run: npm test -- --coverage
184
- ```
185
-
186
- ## Dependency Updates: Dependabot
187
-
188
- ```yaml
189
- # .github/dependabot.yml
190
- version: 2
191
- updates:
192
- - package-ecosystem: npm
193
- directory: /
194
- schedule:
195
- interval: weekly
196
- open-pull-requests-limit: 5
197
- ```
198
-
199
- ## Feature Flag Pattern
200
-
201
- ```typescript
202
- // Simple feature flag pattern
203
- if (featureFlags.isEnabled('new-checkout-flow', { userId })) {
204
- return renderNewCheckout();
205
- }
206
- return renderLegacyCheckout();
207
- ```
208
-
209
- **Flag lifecycle:** Create → Enable for testing → Canary → Full rollout →
210
- Remove the flag and dead code. Flags that live forever become technical debt —
211
- set a cleanup date when you create them.