@howlil/ez-agents 3.5.0 → 4.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 (382) hide show
  1. package/README.md +735 -537
  2. package/agents/ez-architect-agent.md +267 -0
  3. package/agents/ez-backend-agent.md +303 -0
  4. package/agents/ez-chief-strategist.md +271 -0
  5. package/agents/ez-codebase-mapper.md +770 -770
  6. package/agents/ez-context-manager.md +319 -0
  7. package/agents/ez-debugger.md +1255 -1255
  8. package/agents/ez-design-expert.md +347 -0
  9. package/agents/ez-devops-agent.md +331 -0
  10. package/agents/ez-executor.md +487 -487
  11. package/agents/ez-frontend-agent.md +322 -0
  12. package/agents/ez-phase-researcher.md +553 -553
  13. package/agents/ez-planner.md +1307 -1307
  14. package/agents/ez-product-engineer.md +435 -0
  15. package/agents/ez-project-researcher.md +629 -629
  16. package/agents/ez-qa-agent.md +320 -0
  17. package/agents/ez-release-agent.md +333 -333
  18. package/agents/ez-requirements-agent.md +377 -377
  19. package/agents/ez-roadmapper.md +650 -650
  20. package/agents/ez-technical-writer.md +551 -0
  21. package/agents/ez-ux-expert.md +393 -0
  22. package/agents/ez-verifier.md +579 -579
  23. package/bin/guards/autonomy-guard.cjs +346 -0
  24. package/bin/guards/context-budget-guard.cjs +278 -0
  25. package/bin/guards/hallucination-guard.cjs +380 -0
  26. package/bin/guards/hidden-state-guard.cjs +182 -0
  27. package/bin/guards/team-overhead-guard.cjs +266 -0
  28. package/bin/guards/tool-sprawl-guard.cjs +271 -0
  29. package/bin/lib/analytics/analytics-collector.cjs +86 -0
  30. package/bin/lib/analytics/analytics-reporter.cjs +130 -0
  31. package/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  32. package/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  33. package/bin/lib/analytics/nps-tracker.cjs +147 -0
  34. package/bin/lib/archetype-detector.cjs +289 -0
  35. package/bin/lib/assistant-adapter.cjs +361 -0
  36. package/bin/lib/audit-exec.cjs +175 -0
  37. package/bin/lib/auth.cjs +176 -0
  38. package/bin/lib/backup-service.cjs +422 -0
  39. package/bin/lib/bdd-validator.cjs +622 -0
  40. package/bin/lib/business-flow-mapper.cjs +429 -0
  41. package/bin/lib/circuit-breaker.cjs +276 -0
  42. package/bin/lib/code-complexity-analyzer.cjs +360 -0
  43. package/bin/lib/codebase-analyzer.cjs +241 -0
  44. package/bin/lib/commands.cjs +691 -0
  45. package/bin/lib/config.cjs +236 -0
  46. package/bin/lib/constraint-extractor.cjs +526 -0
  47. package/bin/lib/content-scanner.cjs +238 -0
  48. package/bin/lib/context-cache.cjs +154 -0
  49. package/bin/lib/context-compressor.cjs +102 -0
  50. package/bin/lib/context-deduplicator.cjs +105 -0
  51. package/bin/lib/context-errors.cjs +78 -0
  52. package/bin/lib/context-manager.cjs +338 -0
  53. package/bin/lib/context-metadata-tracker.cjs +140 -0
  54. package/bin/lib/context-relevance-scorer.cjs +99 -0
  55. package/bin/lib/core.cjs +507 -0
  56. package/bin/lib/cost-alerts.cjs +174 -0
  57. package/bin/lib/cost-tracker.cjs +275 -0
  58. package/bin/lib/crash-recovery.cjs +220 -0
  59. package/bin/lib/dependency-graph.cjs +319 -0
  60. package/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  61. package/bin/lib/deploy/deploy-detector.cjs +69 -0
  62. package/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  63. package/bin/lib/deploy/deploy-health-check.cjs +88 -0
  64. package/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  65. package/bin/lib/deploy/deploy-rollback.cjs +72 -0
  66. package/bin/lib/deploy/deploy-runner.cjs +97 -0
  67. package/bin/lib/deploy/deploy-status.cjs +74 -0
  68. package/bin/lib/discussion-synthesizer.cjs +439 -0
  69. package/bin/lib/error-cache.cjs +114 -0
  70. package/bin/lib/error-registry.cjs +177 -0
  71. package/bin/lib/file-access.cjs +207 -0
  72. package/bin/lib/file-lock.cjs +236 -0
  73. package/bin/lib/finops/budget-enforcer.cjs +126 -0
  74. package/bin/lib/finops/cost-reporter.cjs +132 -0
  75. package/bin/lib/finops/finops-analyzer.cjs +112 -0
  76. package/bin/lib/finops/spot-manager.cjs +118 -0
  77. package/bin/lib/framework-detector.cjs +396 -0
  78. package/bin/lib/frontmatter.cjs +313 -0
  79. package/bin/lib/fs-utils.cjs +153 -0
  80. package/bin/lib/gate-executor.cjs +272 -0
  81. package/bin/lib/gates/README.md +374 -0
  82. package/bin/lib/gates/gate-01-requirement.cjs +303 -0
  83. package/bin/lib/gates/gate-02-architecture.cjs +555 -0
  84. package/bin/lib/gates/gate-03-code.cjs +635 -0
  85. package/bin/lib/gates/gate-04-security.cjs +829 -0
  86. package/bin/lib/git-errors.cjs +83 -0
  87. package/bin/lib/git-utils.cjs +321 -0
  88. package/bin/lib/git-workflow-engine.cjs +1157 -0
  89. package/bin/lib/health-check.cjs +227 -0
  90. package/bin/lib/index.cjs +279 -0
  91. package/bin/lib/init.cjs +725 -0
  92. package/bin/lib/lock-logger.cjs +194 -0
  93. package/bin/lib/lock-state.cjs +263 -0
  94. package/bin/lib/lockfile-validator.cjs +227 -0
  95. package/bin/lib/log-rotation.cjs +71 -0
  96. package/bin/lib/logger.cjs +125 -0
  97. package/bin/lib/memory-compression.cjs +256 -0
  98. package/bin/lib/milestone.cjs +247 -0
  99. package/bin/lib/model-provider.cjs +241 -0
  100. package/bin/lib/package-manager-detector.cjs +203 -0
  101. package/bin/lib/package-manager-executor.cjs +385 -0
  102. package/bin/lib/package-manager-service.cjs +216 -0
  103. package/bin/lib/perf/api-monitor.cjs +88 -0
  104. package/bin/lib/perf/db-optimizer.cjs +78 -0
  105. package/bin/lib/perf/frontend-performance.cjs +56 -0
  106. package/bin/lib/perf/perf-analyzer.cjs +77 -0
  107. package/bin/lib/perf/perf-baseline.cjs +102 -0
  108. package/bin/lib/perf/perf-reporter.cjs +117 -0
  109. package/bin/lib/perf/regression-detector.cjs +92 -0
  110. package/bin/lib/phase.cjs +963 -0
  111. package/bin/lib/planning-write.cjs +123 -0
  112. package/bin/lib/project-reporter.cjs +565 -0
  113. package/bin/lib/quality-gate.cjs +332 -0
  114. package/bin/lib/quality-metrics.cjs +324 -0
  115. package/bin/lib/recovery-manager.cjs +98 -0
  116. package/bin/lib/release-validator.cjs +617 -0
  117. package/bin/lib/retry.cjs +119 -0
  118. package/bin/lib/roadmap.cjs +309 -0
  119. package/bin/lib/safe-exec.cjs +173 -0
  120. package/bin/lib/safe-path.cjs +130 -0
  121. package/bin/lib/security-errors.cjs +62 -0
  122. package/bin/lib/session-chain.cjs +304 -0
  123. package/bin/lib/session-errors.cjs +81 -0
  124. package/bin/lib/session-export.cjs +251 -0
  125. package/bin/lib/session-import.cjs +262 -0
  126. package/bin/lib/session-manager.cjs +280 -0
  127. package/bin/lib/skill-context.cjs +148 -0
  128. package/bin/lib/skill-matcher.cjs +236 -0
  129. package/bin/lib/skill-registry.cjs +360 -0
  130. package/bin/lib/skill-resolver.cjs +449 -0
  131. package/bin/lib/skill-triggers.cjs +90 -0
  132. package/bin/lib/skill-validator.cjs +270 -0
  133. package/bin/lib/skill-versioning.cjs +355 -0
  134. package/bin/lib/stack-detector.cjs +399 -0
  135. package/bin/lib/state.cjs +736 -0
  136. package/bin/lib/tech-debt-analyzer.cjs +309 -0
  137. package/bin/lib/temp-file.cjs +239 -0
  138. package/bin/lib/template.cjs +223 -0
  139. package/bin/lib/test-file-lock.cjs +112 -0
  140. package/bin/lib/test-graceful.cjs +93 -0
  141. package/bin/lib/test-logger.cjs +60 -0
  142. package/bin/lib/test-safe-exec.cjs +38 -0
  143. package/bin/lib/test-safe-path.cjs +33 -0
  144. package/bin/lib/test-temp-file.cjs +125 -0
  145. package/bin/lib/tier-manager.cjs +428 -0
  146. package/bin/lib/timeout-exec.cjs +63 -0
  147. package/bin/lib/tradeoff-analyzer.cjs +284 -0
  148. package/bin/lib/url-fetch.cjs +170 -0
  149. package/bin/lib/verify.cjs +863 -0
  150. package/bin/update.js +217 -214
  151. package/commands/deploy.cjs +53 -0
  152. package/commands/ez/add-tests.md +41 -41
  153. package/commands/ez/audit-milestone.md +36 -36
  154. package/commands/ez/complete-milestone.md +136 -136
  155. package/commands/ez/discuss-phase.md +90 -90
  156. package/commands/ez/execute-phase.md +52 -52
  157. package/commands/ez/help.md +22 -22
  158. package/commands/ez/map-codebase.md +71 -71
  159. package/commands/ez/new-milestone.md +44 -44
  160. package/commands/ez/new-project.md +51 -42
  161. package/commands/ez/plan-phase.md +53 -53
  162. package/commands/ez/progress.md +36 -36
  163. package/commands/ez/quick.md +45 -45
  164. package/commands/ez/resume-work.md +40 -40
  165. package/commands/ez/run-phase.md +580 -0
  166. package/commands/ez/settings.md +36 -36
  167. package/commands/ez/update.md +37 -37
  168. package/commands/ez/verify-work.md +402 -38
  169. package/commands/health-check.cjs +44 -0
  170. package/commands/rollback.cjs +47 -0
  171. package/ez-agents/bin/ez-tools.cjs +599 -2
  172. package/ez-agents/bin/guards/autonomy-guard.cjs +346 -0
  173. package/ez-agents/bin/guards/context-budget-guard.cjs +247 -0
  174. package/ez-agents/bin/guards/hallucination-guard.cjs +271 -0
  175. package/ez-agents/bin/guards/hidden-state-guard.cjs +182 -0
  176. package/ez-agents/bin/guards/team-overhead-guard.cjs +266 -0
  177. package/ez-agents/bin/guards/tool-sprawl-guard.cjs +271 -0
  178. package/ez-agents/bin/lib/analytics/analytics-collector.cjs +86 -0
  179. package/ez-agents/bin/lib/analytics/analytics-reporter.cjs +130 -0
  180. package/ez-agents/bin/lib/analytics/cohort-analyzer.cjs +138 -0
  181. package/ez-agents/bin/lib/analytics/funnel-analyzer.cjs +147 -0
  182. package/ez-agents/bin/lib/analytics/nps-tracker.cjs +147 -0
  183. package/ez-agents/bin/lib/archetype-detector.cjs +289 -0
  184. package/ez-agents/bin/lib/audit-exec.cjs +166 -167
  185. package/ez-agents/bin/lib/auth.cjs +176 -176
  186. package/ez-agents/bin/lib/backup-service.cjs +422 -0
  187. package/ez-agents/bin/lib/bdd-validator.cjs +622 -622
  188. package/ez-agents/bin/lib/business-flow-mapper.cjs +429 -0
  189. package/ez-agents/bin/lib/code-complexity-analyzer.cjs +360 -0
  190. package/ez-agents/bin/lib/codebase-analyzer.cjs +241 -0
  191. package/ez-agents/bin/lib/commands.cjs +685 -685
  192. package/ez-agents/bin/lib/config.cjs +41 -1
  193. package/ez-agents/bin/lib/constraint-extractor.cjs +526 -0
  194. package/ez-agents/bin/lib/content-scanner.cjs +238 -238
  195. package/ez-agents/bin/lib/context-cache.cjs +154 -154
  196. package/ez-agents/bin/lib/context-errors.cjs +71 -71
  197. package/ez-agents/bin/lib/context-manager.cjs +220 -220
  198. package/ez-agents/bin/lib/core.cjs +507 -512
  199. package/ez-agents/bin/lib/cost-tracker.cjs +243 -0
  200. package/ez-agents/bin/lib/crash-recovery.cjs +172 -0
  201. package/ez-agents/bin/lib/dependency-graph.cjs +319 -0
  202. package/ez-agents/bin/lib/deploy/deploy-audit-log.cjs +76 -0
  203. package/ez-agents/bin/lib/deploy/deploy-detector.cjs +69 -0
  204. package/ez-agents/bin/lib/deploy/deploy-env-manager.cjs +109 -0
  205. package/ez-agents/bin/lib/deploy/deploy-health-check.cjs +88 -0
  206. package/ez-agents/bin/lib/deploy/deploy-pre-flight.cjs +57 -0
  207. package/ez-agents/bin/lib/deploy/deploy-rollback.cjs +72 -0
  208. package/ez-agents/bin/lib/deploy/deploy-runner.cjs +97 -0
  209. package/ez-agents/bin/lib/deploy/deploy-status.cjs +74 -0
  210. package/ez-agents/bin/lib/file-access.cjs +207 -207
  211. package/ez-agents/bin/lib/finops/budget-enforcer.cjs +126 -0
  212. package/ez-agents/bin/lib/finops/cost-reporter.cjs +132 -0
  213. package/ez-agents/bin/lib/finops/finops-analyzer.cjs +112 -0
  214. package/ez-agents/bin/lib/finops/spot-manager.cjs +118 -0
  215. package/ez-agents/bin/lib/framework-detector.cjs +396 -0
  216. package/ez-agents/bin/lib/frontmatter.cjs +3 -1
  217. package/ez-agents/bin/lib/gates/README.md +374 -0
  218. package/ez-agents/bin/lib/gates/gate-01-requirement.cjs +303 -0
  219. package/ez-agents/bin/lib/gates/gate-02-architecture.cjs +555 -0
  220. package/ez-agents/bin/lib/gates/gate-03-code.cjs +635 -0
  221. package/ez-agents/bin/lib/gates/gate-04-security.cjs +829 -0
  222. package/ez-agents/bin/lib/git-errors.cjs +83 -83
  223. package/ez-agents/bin/lib/git-utils.cjs +321 -321
  224. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -1157
  225. package/ez-agents/bin/lib/health-check.cjs +162 -162
  226. package/ez-agents/bin/lib/index.cjs +2 -8
  227. package/ez-agents/bin/lib/init.cjs +0 -2
  228. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -227
  229. package/ez-agents/bin/lib/log-rotation.cjs +71 -0
  230. package/ez-agents/bin/lib/logger.cjs +22 -47
  231. package/ez-agents/bin/lib/memory-compression.cjs +256 -256
  232. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -203
  233. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -385
  234. package/ez-agents/bin/lib/package-manager-service.cjs +216 -216
  235. package/ez-agents/bin/lib/perf/api-monitor.cjs +88 -0
  236. package/ez-agents/bin/lib/perf/db-optimizer.cjs +78 -0
  237. package/ez-agents/bin/lib/perf/frontend-performance.cjs +56 -0
  238. package/ez-agents/bin/lib/perf/perf-analyzer.cjs +77 -0
  239. package/ez-agents/bin/lib/perf/perf-baseline.cjs +102 -0
  240. package/ez-agents/bin/lib/perf/perf-reporter.cjs +117 -0
  241. package/ez-agents/bin/lib/perf/regression-detector.cjs +92 -0
  242. package/ez-agents/bin/lib/project-reporter.cjs +502 -0
  243. package/ez-agents/bin/lib/quality-gate.cjs +332 -0
  244. package/ez-agents/bin/lib/recovery-manager.cjs +98 -0
  245. package/ez-agents/bin/lib/release-validator.cjs +617 -614
  246. package/ez-agents/bin/lib/security-errors.cjs +62 -0
  247. package/ez-agents/bin/lib/session-chain.cjs +304 -304
  248. package/ez-agents/bin/lib/session-errors.cjs +81 -81
  249. package/ez-agents/bin/lib/session-export.cjs +251 -251
  250. package/ez-agents/bin/lib/session-import.cjs +262 -262
  251. package/ez-agents/bin/lib/session-manager.cjs +280 -280
  252. package/ez-agents/bin/lib/skill-context.cjs +148 -0
  253. package/ez-agents/bin/lib/skill-matcher.cjs +236 -0
  254. package/ez-agents/bin/lib/skill-registry.cjs +341 -0
  255. package/ez-agents/bin/lib/skill-resolver.cjs +449 -0
  256. package/ez-agents/bin/lib/skill-triggers.cjs +90 -0
  257. package/ez-agents/bin/lib/skill-validator.cjs +270 -0
  258. package/ez-agents/bin/lib/skill-versioning.cjs +355 -0
  259. package/ez-agents/bin/lib/stack-detector.cjs +399 -0
  260. package/ez-agents/bin/lib/tech-debt-analyzer.cjs +309 -0
  261. package/ez-agents/bin/lib/tier-manager.cjs +428 -428
  262. package/ez-agents/bin/lib/tradeoff-analyzer.cjs +284 -0
  263. package/ez-agents/bin/lib/url-fetch.cjs +170 -170
  264. package/ez-agents/bin/lib/verify.cjs +863 -863
  265. package/ez-agents/references/decimal-phase-calculation.md +65 -65
  266. package/ez-agents/references/git-integration.md +248 -248
  267. package/ez-agents/references/git-planning-commit.md +38 -38
  268. package/ez-agents/references/metrics-schema.md +118 -118
  269. package/ez-agents/references/model-profile-resolution.md +34 -34
  270. package/ez-agents/references/model-profiles.md +93 -93
  271. package/ez-agents/references/phase-argument-parsing.md +61 -61
  272. package/ez-agents/references/planning-config.md +340 -340
  273. package/ez-agents/references/tier-strategy.md +103 -103
  274. package/ez-agents/references/ui-brand.md +160 -160
  275. package/ez-agents/references/verification-patterns.md +612 -612
  276. package/ez-agents/templates/DEBUG.md +164 -164
  277. package/ez-agents/templates/UAT.md +247 -247
  278. package/ez-agents/templates/agent-output-format.md +404 -0
  279. package/ez-agents/templates/bdd-feature.md +173 -173
  280. package/ez-agents/templates/codebase/architecture.md +255 -255
  281. package/ez-agents/templates/codebase/structure.md +285 -285
  282. package/ez-agents/templates/copilot-instructions.md +7 -7
  283. package/ez-agents/templates/debug-subagent-prompt.md +91 -91
  284. package/ez-agents/templates/discovery.md +146 -146
  285. package/ez-agents/templates/discussion.md +68 -68
  286. package/ez-agents/templates/handoff-protocol.md +294 -0
  287. package/ez-agents/templates/incident-runbook.md +205 -205
  288. package/ez-agents/templates/mode-workflow-templates.md +301 -0
  289. package/ez-agents/templates/phase-prompt.md +610 -610
  290. package/ez-agents/templates/planner-subagent-prompt.md +117 -117
  291. package/ez-agents/templates/project.md +184 -184
  292. package/ez-agents/templates/release-checklist.md +136 -133
  293. package/ez-agents/templates/research.md +552 -552
  294. package/ez-agents/templates/rollback-plan.md +201 -201
  295. package/ez-agents/templates/security-user-setup.md +244 -0
  296. package/ez-agents/templates/skill-validation-rules.md +476 -0
  297. package/ez-agents/templates/state.md +180 -176
  298. package/ez-agents/templates/summary-complex.md +59 -59
  299. package/ez-agents/tests/gates/gate-01-02.test.cjs +812 -0
  300. package/ez-agents/tests/gates/gate-03-04.test.cjs +762 -0
  301. package/ez-agents/tests/gates/gate-05-validator.test.cjs +145 -0
  302. package/ez-agents/tests/gates/gate-06-docs-validator.test.cjs +244 -0
  303. package/ez-agents/tests/gates/gate-07-release-validator.test.cjs +219 -0
  304. package/ez-agents/tests/guards/context-budget-guard.test.cjs +145 -0
  305. package/ez-agents/tests/guards/edge-case-guards.test.cjs +238 -0
  306. package/ez-agents/tests/guards/hallucination-guard.test.cjs +124 -0
  307. package/ez-agents/workflows/audit-milestone.md +1 -1
  308. package/ez-agents/workflows/autonomous.md +844 -844
  309. package/ez-agents/workflows/complete-milestone.md +1 -1
  310. package/ez-agents/workflows/discuss-phase.md +1 -1
  311. package/ez-agents/workflows/execute-phase.md +124 -3
  312. package/ez-agents/workflows/help.md +42 -181
  313. package/ez-agents/workflows/hotfix.md +291 -291
  314. package/ez-agents/workflows/new-milestone.md +713 -713
  315. package/ez-agents/workflows/new-project.md +1089 -1107
  316. package/ez-agents/workflows/plan-phase.md +0 -40
  317. package/ez-agents/workflows/release.md +253 -253
  318. package/ez-agents/workflows/resume-session.md +215 -215
  319. package/ez-agents/workflows/run-phase.md +531 -0
  320. package/ez-agents/workflows/settings.md +2 -35
  321. package/hooks/dist/ez-check-update.js +81 -81
  322. package/hooks/dist/ez-context-monitor.js +148 -141
  323. package/hooks/dist/ez-statusline.js +115 -115
  324. package/package.json +78 -71
  325. package/scripts/fix-qwen-installation.js +144 -144
  326. package/agents/ez-integration-checker.md +0 -443
  327. package/agents/ez-nyquist-auditor.md +0 -176
  328. package/agents/ez-observer-agent.md +0 -260
  329. package/agents/ez-plan-checker.md +0 -706
  330. package/agents/ez-research-synthesizer.md +0 -247
  331. package/agents/ez-scrum-master-agent.md +0 -242
  332. package/agents/ez-tech-lead-agent.md +0 -267
  333. package/agents/ez-ui-auditor.md +0 -439
  334. package/agents/ez-ui-checker.md +0 -300
  335. package/agents/ez-ui-researcher.md +0 -353
  336. package/commands/ez/add-phase.md +0 -43
  337. package/commands/ez/add-todo.md +0 -47
  338. package/commands/ez/arch-review.md +0 -102
  339. package/commands/ez/auth.md +0 -87
  340. package/commands/ez/autonomous.md +0 -41
  341. package/commands/ez/check-todos.md +0 -45
  342. package/commands/ez/cleanup.md +0 -18
  343. package/commands/ez/debug.md +0 -168
  344. package/commands/ez/export-session.md +0 -79
  345. package/commands/ez/gather-requirements.md +0 -117
  346. package/commands/ez/git-workflow.md +0 -72
  347. package/commands/ez/health.md +0 -22
  348. package/commands/ez/hotfix.md +0 -120
  349. package/commands/ez/import-session.md +0 -82
  350. package/commands/ez/insert-phase.md +0 -32
  351. package/commands/ez/join-discord.md +0 -18
  352. package/commands/ez/list-phase-assumptions.md +0 -46
  353. package/commands/ez/list-sessions.md +0 -96
  354. package/commands/ez/package-manager.md +0 -316
  355. package/commands/ez/pause-work.md +0 -38
  356. package/commands/ez/plan-milestone-gaps.md +0 -34
  357. package/commands/ez/preflight.md +0 -79
  358. package/commands/ez/reapply-patches.md +0 -124
  359. package/commands/ez/release.md +0 -153
  360. package/commands/ez/remove-phase.md +0 -31
  361. package/commands/ez/research-phase.md +0 -190
  362. package/commands/ez/resume.md +0 -107
  363. package/commands/ez/set-profile.md +0 -34
  364. package/commands/ez/standup.md +0 -85
  365. package/commands/ez/stats.md +0 -18
  366. package/commands/ez/ui-phase.md +0 -34
  367. package/commands/ez/ui-review.md +0 -32
  368. package/commands/ez/validate-phase.md +0 -35
  369. package/ez-agents/bin/lib/metrics-tracker.cjs +0 -406
  370. package/ez-agents/templates/UI-SPEC.md +0 -100
  371. package/ez-agents/templates/VALIDATION.md +0 -76
  372. package/ez-agents/templates/context.md +0 -352
  373. package/ez-agents/templates/verification-report.md +0 -322
  374. package/ez-agents/workflows/arch-review.md +0 -54
  375. package/ez-agents/workflows/export-session.md +0 -255
  376. package/ez-agents/workflows/gather-requirements.md +0 -206
  377. package/ez-agents/workflows/import-session.md +0 -303
  378. package/ez-agents/workflows/research-phase.md +0 -74
  379. package/ez-agents/workflows/standup.md +0 -64
  380. package/ez-agents/workflows/ui-phase.md +0 -290
  381. package/ez-agents/workflows/ui-review.md +0 -157
  382. package/ez-agents/workflows/validate-phase.md +0 -167
@@ -1,35 +0,0 @@
1
- ---
2
- name: ez:validate-phase
3
- description: Retroactively audit and fill Nyquist validation gaps for a completed phase
4
- argument-hint: "[phase number]"
5
- allowed-tools:
6
- - Read
7
- - Write
8
- - Edit
9
- - Bash
10
- - Glob
11
- - Grep
12
- - Task
13
- - AskUserQuestion
14
- ---
15
- <objective>
16
- Audit Nyquist validation coverage for a completed phase. Three states:
17
- - (A) VALIDATION.md exists — audit and fill gaps
18
- - (B) No VALIDATION.md, SUMMARY.md exists — reconstruct from artifacts
19
- - (C) Phase not executed — exit with guidance
20
-
21
- Output: updated VALIDATION.md + generated test files.
22
- </objective>
23
-
24
- <execution_context>
25
- @~/.claude/ez-agents/workflows/validate-phase.md
26
- </execution_context>
27
-
28
- <context>
29
- Phase: $ARGUMENTS — optional, defaults to last completed phase.
30
- </context>
31
-
32
- <process>
33
- Execute @~/.claude/ez-agents/workflows/validate-phase.md.
34
- Preserve all workflow gates.
35
- </process>
@@ -1,406 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Metrics Tracker — Records and queries EZ Agents success metrics
5
- *
6
- * Manages .planning/metrics.json: phase velocity, BDD pass rate,
7
- * defect density, token cost, and DORA-inspired metrics.
8
- */
9
-
10
- 'use strict';
11
-
12
- const fs = require('fs');
13
- const path = require('path');
14
- const { withLock } = require('./file-lock.cjs');
15
-
16
- const METRICS_PATH = '.planning/metrics.json';
17
-
18
- // ─────────────────────────────────────────────
19
- // Metric Thresholds
20
- // ─────────────────────────────────────────────
21
-
22
- const METRIC_THRESHOLDS = {
23
- deviation_rate: { warn: 0.2, bad: 0.4 }, // DORA: change failure rate
24
- avg_velocity_min: { warn: 120, bad: 240 }, // warn if avg > 2h, bad if > 4h
25
- bdd_pass_rate: { warn: 0.8, bad: 0.6 }, // MVP: 60%, Medium: 80%
26
- test_coverage: { warn: 60, bad: 40 } // warn below 60%
27
- };
28
-
29
- function getThresholdStatus(value, thresholds, lowerIsBetter = false) {
30
- if (lowerIsBetter) {
31
- if (value >= thresholds.bad) return '🔴';
32
- if (value >= thresholds.warn) return '🟡';
33
- return '🟢';
34
- } else {
35
- if (value <= thresholds.bad) return '🔴';
36
- if (value <= thresholds.warn) return '🟡';
37
- return '🟢';
38
- }
39
- }
40
-
41
- // ─────────────────────────────────────────────
42
- // Schema defaults
43
- // ─────────────────────────────────────────────
44
-
45
- function defaultMetrics(project) {
46
- return {
47
- schema_version: '1.0',
48
- project: project || 'unknown',
49
- updated: new Date().toISOString(),
50
- phase_metrics: [],
51
- project_metrics: {
52
- requirements_coverage_pct: 0,
53
- test_coverage_pct: 0,
54
- bdd_scenarios_total: 0,
55
- bdd_scenarios_passing: 0,
56
- bdd_scenarios_must: 0,
57
- bdd_scenarios_must_passing: 0
58
- },
59
- agent_metrics: {
60
- total_token_cost_usd: 0,
61
- avg_cost_per_plan: 0,
62
- deviation_rate: 0,
63
- avg_plans_per_phase: 0,
64
- avg_velocity_min_per_plan: 0
65
- },
66
- business_metrics: {
67
- time_to_first_ship_days: null,
68
- hotfixes_deployed: 0,
69
- milestones_shipped: 0,
70
- current_tier: 'mvp',
71
- phases_total: 0,
72
- phases_completed: 0
73
- }
74
- };
75
- }
76
-
77
- // ─────────────────────────────────────────────
78
- // Load / Save
79
- // ─────────────────────────────────────────────
80
-
81
- function loadMetrics(metricsPath = METRICS_PATH) {
82
- const fullPath = path.resolve(process.cwd(), metricsPath);
83
- if (!fs.existsSync(fullPath)) {
84
- return defaultMetrics();
85
- }
86
- try {
87
- return JSON.parse(fs.readFileSync(fullPath, 'utf8'));
88
- } catch {
89
- return defaultMetrics();
90
- }
91
- }
92
-
93
- function saveMetrics(metrics, metricsPath = METRICS_PATH) {
94
- const fullPath = path.resolve(process.cwd(), metricsPath);
95
- const dir = path.dirname(fullPath);
96
- if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
97
- metrics.updated = new Date().toISOString();
98
- fs.writeFileSync(fullPath, JSON.stringify(metrics, null, 2) + '\n', 'utf8');
99
- }
100
-
101
- async function saveMetricsLocked(metrics, metricsPath = METRICS_PATH) {
102
- const fullPath = path.resolve(process.cwd(), metricsPath);
103
- return withLock(fullPath, async () => {
104
- saveMetrics(metrics, metricsPath);
105
- });
106
- }
107
-
108
- // ─────────────────────────────────────────────
109
- // Phase Metrics
110
- // ─────────────────────────────────────────────
111
-
112
- /**
113
- * Record phase execution metrics (called by ez-executor after plan completion)
114
- * @param {object} data - { phase, phase_name, plans_total, plans_completed, velocity_min, deviation_count, tasks_total, cost_usd }
115
- */
116
- async function recordPlanMetrics(data, metricsPath = METRICS_PATH) {
117
- const fullPath = path.resolve(process.cwd(), metricsPath);
118
- return withLock(fullPath, async () => {
119
- const metrics = loadMetrics(metricsPath); // read INSIDE lock
120
-
121
- const existing = metrics.phase_metrics.find(m => m.phase === data.phase);
122
- if (existing) {
123
- // Update existing phase entry
124
- Object.assign(existing, {
125
- plans_completed: data.plans_completed || existing.plans_completed,
126
- velocity_min: data.velocity_min || existing.velocity_min,
127
- deviation_count: (existing.deviation_count || 0) + (data.deviation_count || 0),
128
- defect_density: data.tasks_total > 0
129
- ? ((existing.deviation_count || 0) + (data.deviation_count || 0)) / data.tasks_total
130
- : existing.defect_density
131
- });
132
- } else {
133
- metrics.phase_metrics.push({
134
- phase: data.phase,
135
- phase_name: data.phase_name || `phase-${data.phase}`,
136
- plans_total: data.plans_total || 0,
137
- plans_completed: data.plans_completed || 0,
138
- velocity_min: data.velocity_min || 0,
139
- defect_density: data.tasks_total > 0 ? (data.deviation_count || 0) / data.tasks_total : 0,
140
- bdd_pass_rate: null, // filled by verifier
141
- bdd_must_passing: null,
142
- bdd_must_total: null,
143
- deviation_count: data.deviation_count || 0,
144
- completed_at: new Date().toISOString()
145
- });
146
- }
147
-
148
- // Update agent metrics
149
- if (data.cost_usd) {
150
- metrics.agent_metrics.total_token_cost_usd =
151
- (metrics.agent_metrics.total_token_cost_usd || 0) + data.cost_usd;
152
- }
153
-
154
- // Recalculate averages
155
- _recalcAverages(metrics);
156
- saveMetrics(metrics, metricsPath); // write INSIDE lock
157
- return metrics.phase_metrics.find(m => m.phase === data.phase);
158
- });
159
- }
160
-
161
- /**
162
- * Record BDD verification results (called by ez-verifier)
163
- * @param {object} data - { phase, bdd_must_passing, bdd_must_total, bdd_pass_rate, test_coverage_pct }
164
- */
165
- async function recordBddMetrics(data, metricsPath = METRICS_PATH) {
166
- const fullPath = path.resolve(process.cwd(), metricsPath);
167
- return withLock(fullPath, async () => {
168
- const metrics = loadMetrics(metricsPath); // read INSIDE lock
169
-
170
- const phaseEntry = metrics.phase_metrics.find(m => m.phase === data.phase);
171
- if (phaseEntry) {
172
- phaseEntry.bdd_pass_rate = data.bdd_pass_rate;
173
- phaseEntry.bdd_must_passing = data.bdd_must_passing;
174
- phaseEntry.bdd_must_total = data.bdd_must_total;
175
- }
176
-
177
- if (data.test_coverage_pct !== undefined) {
178
- metrics.project_metrics.test_coverage_pct = data.test_coverage_pct;
179
- }
180
- if (data.bdd_must_passing !== undefined) {
181
- metrics.project_metrics.bdd_scenarios_must_passing = data.bdd_must_passing;
182
- metrics.project_metrics.bdd_scenarios_must = data.bdd_must_total;
183
- }
184
-
185
- saveMetrics(metrics, metricsPath); // write INSIDE lock
186
- });
187
- }
188
-
189
- /**
190
- * Record release event (called by ez-release-agent)
191
- * @param {object} data - { tier, version, is_hotfix }
192
- */
193
- async function recordRelease(data, metricsPath = METRICS_PATH) {
194
- const fullPath = path.resolve(process.cwd(), metricsPath);
195
- return withLock(fullPath, async () => {
196
- const metrics = loadMetrics(metricsPath); // read INSIDE lock
197
-
198
- if (data.is_hotfix) {
199
- metrics.business_metrics.hotfixes_deployed =
200
- (metrics.business_metrics.hotfixes_deployed || 0) + 1;
201
- } else {
202
- metrics.business_metrics.milestones_shipped =
203
- (metrics.business_metrics.milestones_shipped || 0) + 1;
204
-
205
- if (!metrics.business_metrics.first_ship_date) {
206
- metrics.business_metrics.first_ship_date = new Date().toISOString();
207
- // Calculate time to first ship from project init
208
- const planningStateFile = '.planning/STATE.md';
209
- if (fs.existsSync(planningStateFile)) {
210
- const stat = fs.statSync(planningStateFile);
211
- const initDate = stat.birthtime || stat.mtime;
212
- const days = Math.ceil((Date.now() - initDate.getTime()) / (1000 * 60 * 60 * 24));
213
- metrics.business_metrics.time_to_first_ship_days = days;
214
- }
215
- }
216
- }
217
-
218
- if (data.tier) {
219
- metrics.business_metrics.current_tier = data.tier;
220
- }
221
-
222
- saveMetrics(metrics, metricsPath); // write INSIDE lock
223
- });
224
- }
225
-
226
- /**
227
- * Update project-level metrics
228
- * @param {object} data - { requirements_coverage_pct, phases_total, phases_completed }
229
- */
230
- async function updateProjectMetrics(data, metricsPath = METRICS_PATH) {
231
- const fullPath = path.resolve(process.cwd(), metricsPath);
232
- return withLock(fullPath, async () => {
233
- const metrics = loadMetrics(metricsPath); // read INSIDE lock
234
- Object.assign(metrics.project_metrics, data);
235
- Object.assign(metrics.business_metrics, {
236
- phases_total: data.phases_total || metrics.business_metrics.phases_total,
237
- phases_completed: data.phases_completed || metrics.business_metrics.phases_completed
238
- });
239
- saveMetrics(metrics, metricsPath); // write INSIDE lock
240
- });
241
- }
242
-
243
- // ─────────────────────────────────────────────
244
- // Dashboard
245
- // ─────────────────────────────────────────────
246
-
247
- /**
248
- * Generate enhanced /ez:stats dashboard
249
- * @param {string} metricsPath
250
- * @returns {string} Formatted dashboard
251
- */
252
- function generateDashboard(metricsPath = METRICS_PATH) {
253
- const metrics = loadMetrics(metricsPath);
254
- const pm = metrics.project_metrics;
255
- const am = metrics.agent_metrics;
256
- const bm = metrics.business_metrics;
257
-
258
- // Velocity trend
259
- const phases = metrics.phase_metrics.slice(-5);
260
- let velocityTrend = '→ STABLE';
261
- if (phases.length >= 3) {
262
- const recent = phases.slice(-2).reduce((sum, p) => sum + (p.velocity_min || 0), 0) / 2;
263
- const older = phases.slice(0, -2).reduce((sum, p) => sum + (p.velocity_min || 0), 0) / Math.max(1, phases.length - 2);
264
- if (recent < older * 0.9) velocityTrend = '↑ IMPROVING';
265
- else if (recent > older * 1.1) velocityTrend = '↓ SLOWING';
266
- }
267
-
268
- // BDD status
269
- const bddRate = pm.bdd_scenarios_must > 0
270
- ? Math.round((pm.bdd_scenarios_must_passing / pm.bdd_scenarios_must) * 100)
271
- : null;
272
-
273
- // Cost estimate remaining
274
- const remainingPhases = (bm.phases_total || 0) - (bm.phases_completed || 0);
275
- const costEst = am.avg_cost_per_plan > 0 && am.avg_plans_per_phase > 0
276
- ? (remainingPhases * am.avg_plans_per_phase * am.avg_cost_per_plan).toFixed(2)
277
- : null;
278
-
279
- const lines = [
280
- '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
281
- ' EZ ► PROJECT METRICS DASHBOARD',
282
- '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
283
- '',
284
- `PROGRESS: Phase ${bm.phases_completed || '?'}/${bm.phases_total || '?'} (${bm.phases_total ? Math.round((bm.phases_completed / bm.phases_total) * 100) : '?'}%) | Requirements ${pm.requirements_coverage_pct || 0}%${bddRate !== null ? ` | BDD @must ${bddRate}% (est.)` : ''}`,
285
- `VELOCITY: ${am.avg_velocity_min_per_plan || '?'} min/plan avg | Trend: ${velocityTrend}`,
286
- ];
287
-
288
- // Fix 12: QUALITY line with threshold indicators
289
- const coveragePct = pm.test_coverage_pct || 0;
290
- const deviationRate = am.deviation_rate || 0;
291
- const coverageIcon = getThresholdStatus(coveragePct, METRIC_THRESHOLDS.test_coverage);
292
- const deviationIcon = getThresholdStatus(deviationRate, METRIC_THRESHOLDS.deviation_rate, true);
293
- const deviationPct = Math.round(deviationRate * 100);
294
- lines.push(`QUALITY: ${coverageIcon} Coverage ${coveragePct}% | ${deviationIcon} Deviation ${deviationPct}%${deviationRate >= METRIC_THRESHOLDS.deviation_rate.warn ? ` (warn: >${Math.round(METRIC_THRESHOLDS.deviation_rate.warn * 100)}%)` : ''} | Defect density ${am.deviation_rate ? am.deviation_rate.toFixed(2) : '?'}`);
295
- lines.push(`COSTS: $${(am.total_token_cost_usd || 0).toFixed(2)} total | $${(am.avg_cost_per_plan || 0).toFixed(2)}/plan${costEst ? ` | Est. remaining: ~$${costEst}` : ''}`);
296
- lines.push(`RELEASE: Tier: ${bm.current_tier || 'mvp'} | Hotfixes: ${bm.hotfixes_deployed || 0} | Ships: ${bm.milestones_shipped || 0}`);
297
- lines.push('');
298
-
299
- if (metrics.phase_metrics.length > 0) {
300
- lines.push('Recent Phases:');
301
- for (const p of metrics.phase_metrics.slice(-5).reverse()) {
302
- const bdd = p.bdd_pass_rate !== null && p.bdd_pass_rate !== undefined
303
- ? ` | BDD ${Math.round(p.bdd_pass_rate * 100)}%`
304
- : '';
305
- lines.push(` Phase ${p.phase} ${p.phase_name}: ${p.velocity_min || '?'}min | dev:${(p.defect_density || 0).toFixed(2)}${bdd}`);
306
- }
307
- lines.push('');
308
- }
309
-
310
- // Fix 12: Cost projection alert
311
- if (am.total_token_cost_usd > 5) {
312
- const projectedTotal = costEst ? parseFloat(costEst) + am.total_token_cost_usd : null;
313
- if (projectedTotal && projectedTotal > 30) {
314
- lines.push(`⚠ COST ALERT: Projected total ~$${projectedTotal.toFixed(0)}. Consider disabling scrum_master_standup for budget tiers.`);
315
- }
316
- }
317
-
318
- lines.push('─────────────────────────────────────────────────────');
319
- lines.push('⚠ BDD rates are ESTIMATED (scenario existence, not test runs).');
320
- lines.push(' For actual pass rates, configure a BDD runner (Jest/Cucumber/Playwright).');
321
- lines.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
322
-
323
- return lines.join('\n');
324
- }
325
-
326
- // ─────────────────────────────────────────────
327
- // Internal helpers
328
- // ─────────────────────────────────────────────
329
-
330
- function _recalcAverages(metrics) {
331
- const phases = metrics.phase_metrics;
332
- if (phases.length === 0) return;
333
-
334
- const withVelocity = phases.filter(p => p.velocity_min > 0);
335
- if (withVelocity.length > 0) {
336
- metrics.agent_metrics.avg_velocity_min_per_plan =
337
- Math.round(withVelocity.reduce((sum, p) => sum + p.velocity_min, 0) / withVelocity.length);
338
- }
339
-
340
- const totalDeviations = phases.reduce((sum, p) => sum + (p.deviation_count || 0), 0);
341
- const totalPlans = phases.reduce((sum, p) => sum + (p.plans_completed || 0), 0);
342
- if (totalPlans > 0) {
343
- metrics.agent_metrics.deviation_rate = parseFloat((totalDeviations / totalPlans).toFixed(3));
344
- metrics.agent_metrics.avg_plans_per_phase = parseFloat((totalPlans / phases.length).toFixed(1));
345
- }
346
-
347
- if (metrics.agent_metrics.total_token_cost_usd > 0 && totalPlans > 0) {
348
- metrics.agent_metrics.avg_cost_per_plan =
349
- parseFloat((metrics.agent_metrics.total_token_cost_usd / totalPlans).toFixed(3));
350
- }
351
- }
352
-
353
- // ─────────────────────────────────────────────
354
- // CLI
355
- // ─────────────────────────────────────────────
356
-
357
- if (require.main === module) {
358
- const args = process.argv.slice(2);
359
- const cmd = args[0];
360
-
361
- (async () => {
362
- try {
363
- if (cmd === 'record-plan') {
364
- const data = JSON.parse(args[1] || '{}');
365
- const result = await recordPlanMetrics(data);
366
- console.log(JSON.stringify({ recorded: true, phase: result }));
367
- } else if (cmd === 'record-bdd') {
368
- const data = JSON.parse(args[1] || '{}');
369
- await recordBddMetrics(data);
370
- console.log(JSON.stringify({ recorded: true }));
371
- } else if (cmd === 'record-release') {
372
- const data = JSON.parse(args[1] || '{}');
373
- await recordRelease(data);
374
- console.log(JSON.stringify({ recorded: true }));
375
- } else if (cmd === 'update-project') {
376
- const data = JSON.parse(args[1] || '{}');
377
- await updateProjectMetrics(data);
378
- console.log(JSON.stringify({ updated: true }));
379
- } else if (cmd === 'dashboard') {
380
- console.log(generateDashboard());
381
- } else if (cmd === 'get') {
382
- const metrics = loadMetrics();
383
- console.log(JSON.stringify(metrics, null, 2));
384
- } else {
385
- console.error('Commands: record-plan, record-bdd, record-release, update-project, dashboard, get');
386
- process.exit(1);
387
- }
388
- } catch (err) {
389
- console.error(`Error: ${err.message}`);
390
- process.exit(1);
391
- }
392
- })();
393
- }
394
-
395
- module.exports = {
396
- loadMetrics,
397
- saveMetrics,
398
- saveMetricsLocked,
399
- recordPlanMetrics,
400
- recordBddMetrics,
401
- recordRelease,
402
- updateProjectMetrics,
403
- generateDashboard,
404
- METRIC_THRESHOLDS,
405
- getThresholdStatus
406
- };
@@ -1,100 +0,0 @@
1
- ---
2
- phase: {N}
3
- slug: {phase-slug}
4
- status: draft
5
- shadcn_initialized: false
6
- preset: none
7
- created: {date}
8
- ---
9
-
10
- # Phase {N} — UI Design Contract
11
-
12
- > Visual and interaction contract for frontend phases. Generated by ez-ui-researcher, verified by ez-ui-checker.
13
-
14
- ---
15
-
16
- ## Design System
17
-
18
- | Property | Value |
19
- |----------|-------|
20
- | Tool | {shadcn / none} |
21
- | Preset | {preset string or "not applicable"} |
22
- | Component library | {radix / base-ui / none} |
23
- | Icon library | {library} |
24
- | Font | {font} |
25
-
26
- ---
27
-
28
- ## Spacing Scale
29
-
30
- Declared values (must be multiples of 4):
31
-
32
- | Token | Value | Usage |
33
- |-------|-------|-------|
34
- | xs | 4px | Icon gaps, inline padding |
35
- | sm | 8px | Compact element spacing |
36
- | md | 16px | Default element spacing |
37
- | lg | 24px | Section padding |
38
- | xl | 32px | Layout gaps |
39
- | 2xl | 48px | Major section breaks |
40
- | 3xl | 64px | Page-level spacing |
41
-
42
- Exceptions: {list any, or "none"}
43
-
44
- ---
45
-
46
- ## Typography
47
-
48
- | Role | Size | Weight | Line Height |
49
- |------|------|--------|-------------|
50
- | Body | {px} | {weight} | {ratio} |
51
- | Label | {px} | {weight} | {ratio} |
52
- | Heading | {px} | {weight} | {ratio} |
53
- | Display | {px} | {weight} | {ratio} |
54
-
55
- ---
56
-
57
- ## Color
58
-
59
- | Role | Value | Usage |
60
- |------|-------|-------|
61
- | Dominant (60%) | {hex} | Background, surfaces |
62
- | Secondary (30%) | {hex} | Cards, sidebar, nav |
63
- | Accent (10%) | {hex} | {list specific elements only} |
64
- | Destructive | {hex} | Destructive actions only |
65
-
66
- Accent reserved for: {explicit list — never "all interactive elements"}
67
-
68
- ---
69
-
70
- ## Copywriting Contract
71
-
72
- | Element | Copy |
73
- |---------|------|
74
- | Primary CTA | {specific verb + noun} |
75
- | Empty state heading | {copy} |
76
- | Empty state body | {copy + next step} |
77
- | Error state | {problem + solution path} |
78
- | Destructive confirmation | {action name}: {confirmation copy} |
79
-
80
- ---
81
-
82
- ## Registry Safety
83
-
84
- | Registry | Blocks Used | Safety Gate |
85
- |----------|-------------|-------------|
86
- | shadcn official | {list} | not required |
87
- | {third-party name} | {list} | shadcn view + diff required |
88
-
89
- ---
90
-
91
- ## Checker Sign-Off
92
-
93
- - [ ] Dimension 1 Copywriting: PASS
94
- - [ ] Dimension 2 Visuals: PASS
95
- - [ ] Dimension 3 Color: PASS
96
- - [ ] Dimension 4 Typography: PASS
97
- - [ ] Dimension 5 Spacing: PASS
98
- - [ ] Dimension 6 Registry Safety: PASS
99
-
100
- **Approval:** {pending / approved YYYY-MM-DD}
@@ -1,76 +0,0 @@
1
- ---
2
- phase: {N}
3
- slug: {phase-slug}
4
- status: draft
5
- nyquist_compliant: false
6
- wave_0_complete: false
7
- created: {date}
8
- ---
9
-
10
- # Phase {N} — Validation Strategy
11
-
12
- > Per-phase validation contract for feedback sampling during execution.
13
-
14
- ---
15
-
16
- ## Test Infrastructure
17
-
18
- | Property | Value |
19
- |----------|-------|
20
- | **Framework** | {pytest 7.x / jest 29.x / vitest / go test / other} |
21
- | **Config file** | {path or "none — Wave 0 installs"} |
22
- | **Quick run command** | `{quick command}` |
23
- | **Full suite command** | `{full command}` |
24
- | **Estimated runtime** | ~{N} seconds |
25
-
26
- ---
27
-
28
- ## Sampling Rate
29
-
30
- - **After every task commit:** Run `{quick run command}`
31
- - **After every plan wave:** Run `{full suite command}`
32
- - **Before `/ez:verify-work`:** Full suite must be green
33
- - **Max feedback latency:** {N} seconds
34
-
35
- ---
36
-
37
- ## Per-Task Verification Map
38
-
39
- | Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status |
40
- |---------|------|------|-------------|-----------|-------------------|-------------|--------|
41
- | {N}-01-01 | 01 | 1 | REQ-{XX} | unit | `{command}` | ✅ / ❌ W0 | ⬜ pending |
42
-
43
- *Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky*
44
-
45
- ---
46
-
47
- ## Wave 0 Requirements
48
-
49
- - [ ] `{tests/test_file.py}` — stubs for REQ-{XX}
50
- - [ ] `{tests/conftest.py}` — shared fixtures
51
- - [ ] `{framework install}` — if no framework detected
52
-
53
- *If none: "Existing infrastructure covers all phase requirements."*
54
-
55
- ---
56
-
57
- ## Manual-Only Verifications
58
-
59
- | Behavior | Requirement | Why Manual | Test Instructions |
60
- |----------|-------------|------------|-------------------|
61
- | {behavior} | REQ-{XX} | {reason} | {steps} |
62
-
63
- *If none: "All phase behaviors have automated verification."*
64
-
65
- ---
66
-
67
- ## Validation Sign-Off
68
-
69
- - [ ] All tasks have `<automated>` verify or Wave 0 dependencies
70
- - [ ] Sampling continuity: no 3 consecutive tasks without automated verify
71
- - [ ] Wave 0 covers all MISSING references
72
- - [ ] No watch-mode flags
73
- - [ ] Feedback latency < {N}s
74
- - [ ] `nyquist_compliant: true` set in frontmatter
75
-
76
- **Approval:** {pending / approved YYYY-MM-DD}