@howlil/ez-agents 3.4.1 → 3.5.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 (162) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +84 -20
  3. package/agents/ez-observer-agent.md +260 -0
  4. package/agents/ez-release-agent.md +333 -0
  5. package/agents/ez-requirements-agent.md +377 -0
  6. package/agents/ez-scrum-master-agent.md +242 -0
  7. package/agents/ez-tech-lead-agent.md +267 -0
  8. package/bin/install.js +3221 -3230
  9. package/commands/ez/arch-review.md +102 -0
  10. package/commands/ez/execute-phase.md +11 -0
  11. package/commands/ez/export-session.md +79 -0
  12. package/commands/ez/gather-requirements.md +117 -0
  13. package/commands/ez/git-workflow.md +72 -0
  14. package/commands/ez/hotfix.md +120 -0
  15. package/commands/ez/import-session.md +82 -0
  16. package/commands/ez/join-discord.md +18 -18
  17. package/commands/ez/list-sessions.md +96 -0
  18. package/commands/ez/package-manager.md +316 -0
  19. package/commands/ez/plan-phase.md +9 -1
  20. package/commands/ez/preflight.md +79 -0
  21. package/commands/ez/progress.md +13 -1
  22. package/commands/ez/release.md +153 -0
  23. package/commands/ez/resume.md +107 -0
  24. package/commands/ez/standup.md +85 -0
  25. package/ez-agents/bin/ez-tools.cjs +1095 -716
  26. package/ez-agents/bin/lib/assistant-adapter.cjs +264 -264
  27. package/ez-agents/bin/lib/audit-exec.cjs +7 -2
  28. package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
  29. package/ez-agents/bin/lib/circuit-breaker.cjs +118 -118
  30. package/ez-agents/bin/lib/config.cjs +190 -190
  31. package/ez-agents/bin/lib/content-scanner.cjs +238 -0
  32. package/ez-agents/bin/lib/context-cache.cjs +154 -0
  33. package/ez-agents/bin/lib/context-errors.cjs +71 -0
  34. package/ez-agents/bin/lib/context-manager.cjs +220 -0
  35. package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
  36. package/ez-agents/bin/lib/file-access.cjs +207 -0
  37. package/ez-agents/bin/lib/file-lock.cjs +236 -236
  38. package/ez-agents/bin/lib/frontmatter.cjs +299 -299
  39. package/ez-agents/bin/lib/fs-utils.cjs +153 -153
  40. package/ez-agents/bin/lib/git-errors.cjs +83 -0
  41. package/ez-agents/bin/lib/git-utils.cjs +118 -0
  42. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
  43. package/ez-agents/bin/lib/index.cjs +157 -113
  44. package/ez-agents/bin/lib/init.cjs +757 -757
  45. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
  46. package/ez-agents/bin/lib/logger.cjs +124 -124
  47. package/ez-agents/bin/lib/memory-compression.cjs +256 -0
  48. package/ez-agents/bin/lib/metrics-tracker.cjs +406 -0
  49. package/ez-agents/bin/lib/milestone.cjs +241 -241
  50. package/ez-agents/bin/lib/model-provider.cjs +241 -241
  51. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
  52. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
  53. package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
  54. package/ez-agents/bin/lib/phase.cjs +925 -925
  55. package/ez-agents/bin/lib/planning-write.cjs +107 -107
  56. package/ez-agents/bin/lib/release-validator.cjs +614 -0
  57. package/ez-agents/bin/lib/retry.cjs +119 -119
  58. package/ez-agents/bin/lib/roadmap.cjs +306 -306
  59. package/ez-agents/bin/lib/safe-exec.cjs +128 -128
  60. package/ez-agents/bin/lib/safe-path.cjs +130 -130
  61. package/ez-agents/bin/lib/session-chain.cjs +304 -0
  62. package/ez-agents/bin/lib/session-errors.cjs +81 -0
  63. package/ez-agents/bin/lib/session-export.cjs +251 -0
  64. package/ez-agents/bin/lib/session-import.cjs +262 -0
  65. package/ez-agents/bin/lib/session-manager.cjs +280 -0
  66. package/ez-agents/bin/lib/state.cjs +736 -736
  67. package/ez-agents/bin/lib/temp-file.cjs +239 -239
  68. package/ez-agents/bin/lib/template.cjs +223 -223
  69. package/ez-agents/bin/lib/test-file-lock.cjs +112 -112
  70. package/ez-agents/bin/lib/test-graceful.cjs +93 -93
  71. package/ez-agents/bin/lib/test-logger.cjs +60 -60
  72. package/ez-agents/bin/lib/test-safe-exec.cjs +38 -38
  73. package/ez-agents/bin/lib/test-safe-path.cjs +33 -33
  74. package/ez-agents/bin/lib/test-temp-file.cjs +125 -125
  75. package/ez-agents/bin/lib/tier-manager.cjs +428 -0
  76. package/ez-agents/bin/lib/timeout-exec.cjs +63 -63
  77. package/ez-agents/bin/lib/url-fetch.cjs +170 -0
  78. package/ez-agents/bin/lib/verify.cjs +15 -1
  79. package/ez-agents/references/checkpoints.md +776 -776
  80. package/ez-agents/references/continuation-format.md +249 -249
  81. package/ez-agents/references/metrics-schema.md +118 -0
  82. package/ez-agents/references/planning-config.md +140 -0
  83. package/ez-agents/references/questioning.md +162 -162
  84. package/ez-agents/references/tdd.md +263 -263
  85. package/ez-agents/references/tier-strategy.md +103 -0
  86. package/ez-agents/templates/bdd-feature.md +173 -0
  87. package/ez-agents/templates/codebase/concerns.md +310 -310
  88. package/ez-agents/templates/codebase/conventions.md +307 -307
  89. package/ez-agents/templates/codebase/integrations.md +280 -280
  90. package/ez-agents/templates/codebase/stack.md +186 -186
  91. package/ez-agents/templates/codebase/testing.md +480 -480
  92. package/ez-agents/templates/config.json +37 -37
  93. package/ez-agents/templates/continue-here.md +78 -78
  94. package/ez-agents/templates/discussion.md +68 -0
  95. package/ez-agents/templates/incident-runbook.md +205 -0
  96. package/ez-agents/templates/milestone-archive.md +123 -123
  97. package/ez-agents/templates/milestone.md +115 -115
  98. package/ez-agents/templates/release-checklist.md +133 -0
  99. package/ez-agents/templates/requirements.md +231 -231
  100. package/ez-agents/templates/research-project/ARCHITECTURE.md +204 -204
  101. package/ez-agents/templates/research-project/FEATURES.md +147 -147
  102. package/ez-agents/templates/research-project/PITFALLS.md +200 -200
  103. package/ez-agents/templates/research-project/STACK.md +120 -120
  104. package/ez-agents/templates/research-project/SUMMARY.md +170 -170
  105. package/ez-agents/templates/retrospective.md +54 -54
  106. package/ez-agents/templates/roadmap.md +202 -202
  107. package/ez-agents/templates/rollback-plan.md +201 -0
  108. package/ez-agents/templates/summary-minimal.md +41 -41
  109. package/ez-agents/templates/summary-standard.md +48 -48
  110. package/ez-agents/templates/summary.md +248 -248
  111. package/ez-agents/templates/user-setup.md +311 -311
  112. package/ez-agents/templates/verification-report.md +322 -322
  113. package/ez-agents/workflows/add-phase.md +112 -112
  114. package/ez-agents/workflows/add-tests.md +351 -351
  115. package/ez-agents/workflows/add-todo.md +158 -158
  116. package/ez-agents/workflows/arch-review.md +54 -0
  117. package/ez-agents/workflows/audit-milestone.md +332 -332
  118. package/ez-agents/workflows/autonomous.md +131 -30
  119. package/ez-agents/workflows/check-todos.md +177 -177
  120. package/ez-agents/workflows/cleanup.md +152 -152
  121. package/ez-agents/workflows/complete-milestone.md +766 -766
  122. package/ez-agents/workflows/diagnose-issues.md +219 -219
  123. package/ez-agents/workflows/discovery-phase.md +289 -289
  124. package/ez-agents/workflows/discuss-phase.md +762 -762
  125. package/ez-agents/workflows/execute-phase.md +513 -468
  126. package/ez-agents/workflows/execute-plan.md +483 -483
  127. package/ez-agents/workflows/export-session.md +255 -0
  128. package/ez-agents/workflows/gather-requirements.md +206 -0
  129. package/ez-agents/workflows/health.md +159 -159
  130. package/ez-agents/workflows/help.md +584 -492
  131. package/ez-agents/workflows/hotfix.md +291 -0
  132. package/ez-agents/workflows/import-session.md +303 -0
  133. package/ez-agents/workflows/insert-phase.md +130 -130
  134. package/ez-agents/workflows/list-phase-assumptions.md +178 -178
  135. package/ez-agents/workflows/map-codebase.md +316 -316
  136. package/ez-agents/workflows/new-milestone.md +339 -10
  137. package/ez-agents/workflows/new-project.md +293 -299
  138. package/ez-agents/workflows/node-repair.md +92 -92
  139. package/ez-agents/workflows/pause-work.md +122 -122
  140. package/ez-agents/workflows/plan-milestone-gaps.md +274 -274
  141. package/ez-agents/workflows/plan-phase.md +673 -651
  142. package/ez-agents/workflows/progress.md +372 -382
  143. package/ez-agents/workflows/quick.md +610 -610
  144. package/ez-agents/workflows/release.md +253 -0
  145. package/ez-agents/workflows/remove-phase.md +155 -155
  146. package/ez-agents/workflows/research-phase.md +74 -74
  147. package/ez-agents/workflows/resume-project.md +307 -307
  148. package/ez-agents/workflows/resume-session.md +215 -0
  149. package/ez-agents/workflows/set-profile.md +81 -81
  150. package/ez-agents/workflows/settings.md +242 -242
  151. package/ez-agents/workflows/standup.md +64 -0
  152. package/ez-agents/workflows/stats.md +57 -57
  153. package/ez-agents/workflows/transition.md +544 -544
  154. package/ez-agents/workflows/ui-phase.md +290 -290
  155. package/ez-agents/workflows/ui-review.md +157 -157
  156. package/ez-agents/workflows/update.md +320 -320
  157. package/ez-agents/workflows/validate-phase.md +167 -167
  158. package/ez-agents/workflows/verify-phase.md +243 -243
  159. package/ez-agents/workflows/verify-work.md +584 -584
  160. package/package.json +10 -4
  161. package/scripts/build-hooks.js +43 -43
  162. package/scripts/run-tests.cjs +29 -29
@@ -1,263 +1,263 @@
1
- <overview>
2
- TDD is about design quality, not coverage metrics. The red-green-refactor cycle forces you to think about behavior before implementation, producing cleaner interfaces and more testable code.
3
-
4
- **Principle:** If you can describe the behavior as `expect(fn(input)).toBe(output)` before writing `fn`, TDD improves the result.
5
-
6
- **Key insight:** TDD work is fundamentally heavier than standard tasks—it requires 2-3 execution cycles (RED → GREEN → REFACTOR), each with file reads, test runs, and potential debugging. TDD features get dedicated plans to ensure full context is available throughout the cycle.
7
- </overview>
8
-
9
- <when_to_use_tdd>
10
- ## When TDD Improves Quality
11
-
12
- **TDD candidates (create a TDD plan):**
13
- - Business logic with defined inputs/outputs
14
- - API endpoints with request/response contracts
15
- - Data transformations, parsing, formatting
16
- - Validation rules and constraints
17
- - Algorithms with testable behavior
18
- - State machines and workflows
19
- - Utility functions with clear specifications
20
-
21
- **Skip TDD (use standard plan with `type="auto"` tasks):**
22
- - UI layout, styling, visual components
23
- - Configuration changes
24
- - Glue code connecting existing components
25
- - One-off scripts and migrations
26
- - Simple CRUD with no business logic
27
- - Exploratory prototyping
28
-
29
- **Heuristic:** Can you write `expect(fn(input)).toBe(output)` before writing `fn`?
30
- → Yes: Create a TDD plan
31
- → No: Use standard plan, add tests after if needed
32
- </when_to_use_tdd>
33
-
34
- <tdd_plan_structure>
35
- ## TDD Plan Structure
36
-
37
- Each TDD plan implements **one feature** through the full RED-GREEN-REFACTOR cycle.
38
-
39
- ```markdown
40
- ---
41
- phase: XX-name
42
- plan: NN
43
- type: tdd
44
- ---
45
-
46
- <objective>
47
- [What feature and why]
48
- Purpose: [Design benefit of TDD for this feature]
49
- Output: [Working, tested feature]
50
- </objective>
51
-
52
- <context>
53
- @.planning/PROJECT.md
54
- @.planning/ROADMAP.md
55
- @relevant/source/files.ts
56
- </context>
57
-
58
- <feature>
59
- <name>[Feature name]</name>
60
- <files>[source file, test file]</files>
61
- <behavior>
62
- [Expected behavior in testable terms]
63
- Cases: input → expected output
64
- </behavior>
65
- <implementation>[How to implement once tests pass]</implementation>
66
- </feature>
67
-
68
- <verification>
69
- [Test command that proves feature works]
70
- </verification>
71
-
72
- <success_criteria>
73
- - Failing test written and committed
74
- - Implementation passes test
75
- - Refactor complete (if needed)
76
- - All 2-3 commits present
77
- </success_criteria>
78
-
79
- <output>
80
- After completion, create SUMMARY.md with:
81
- - RED: What test was written, why it failed
82
- - GREEN: What implementation made it pass
83
- - REFACTOR: What cleanup was done (if any)
84
- - Commits: List of commits produced
85
- </output>
86
- ```
87
-
88
- **One feature per TDD plan.** If features are trivial enough to batch, they're trivial enough to skip TDD—use a standard plan and add tests after.
89
- </tdd_plan_structure>
90
-
91
- <execution_flow>
92
- ## Red-Green-Refactor Cycle
93
-
94
- **RED - Write failing test:**
95
- 1. Create test file following project conventions
96
- 2. Write test describing expected behavior (from `<behavior>` element)
97
- 3. Run test - it MUST fail
98
- 4. If test passes: feature exists or test is wrong. Investigate.
99
- 5. Commit: `test({phase}-{plan}): add failing test for [feature]`
100
-
101
- **GREEN - Implement to pass:**
102
- 1. Write minimal code to make test pass
103
- 2. No cleverness, no optimization - just make it work
104
- 3. Run test - it MUST pass
105
- 4. Commit: `feat({phase}-{plan}): implement [feature]`
106
-
107
- **REFACTOR (if needed):**
108
- 1. Clean up implementation if obvious improvements exist
109
- 2. Run tests - MUST still pass
110
- 3. Only commit if changes made: `refactor({phase}-{plan}): clean up [feature]`
111
-
112
- **Result:** Each TDD plan produces 2-3 atomic commits.
113
- </execution_flow>
114
-
115
- <test_quality>
116
- ## Good Tests vs Bad Tests
117
-
118
- **Test behavior, not implementation:**
119
- - Good: "returns formatted date string"
120
- - Bad: "calls formatDate helper with correct params"
121
- - Tests should survive refactors
122
-
123
- **One concept per test:**
124
- - Good: Separate tests for valid input, empty input, malformed input
125
- - Bad: Single test checking all edge cases with multiple assertions
126
-
127
- **Descriptive names:**
128
- - Good: "should reject empty email", "returns null for invalid ID"
129
- - Bad: "test1", "handles error", "works correctly"
130
-
131
- **No implementation details:**
132
- - Good: Test public API, observable behavior
133
- - Bad: Mock internals, test private methods, assert on internal state
134
- </test_quality>
135
-
136
- <framework_setup>
137
- ## Test Framework Setup (If None Exists)
138
-
139
- When executing a TDD plan but no test framework is configured, set it up as part of the RED phase:
140
-
141
- **1. Detect project type:**
142
- ```bash
143
- # JavaScript/TypeScript
144
- if [ -f package.json ]; then echo "node"; fi
145
-
146
- # Python
147
- if [ -f requirements.txt ] || [ -f pyproject.toml ]; then echo "python"; fi
148
-
149
- # Go
150
- if [ -f go.mod ]; then echo "go"; fi
151
-
152
- # Rust
153
- if [ -f Cargo.toml ]; then echo "rust"; fi
154
- ```
155
-
156
- **2. Install minimal framework:**
157
- | Project | Framework | Install |
158
- |---------|-----------|---------|
159
- | Node.js | Jest | `npm install -D jest @types/jest ts-jest` |
160
- | Node.js (Vite) | Vitest | `npm install -D vitest` |
161
- | Python | pytest | `pip install pytest` |
162
- | Go | testing | Built-in |
163
- | Rust | cargo test | Built-in |
164
-
165
- **3. Create config if needed:**
166
- - Jest: `jest.config.js` with ts-jest preset
167
- - Vitest: `vitest.config.ts` with test globals
168
- - pytest: `pytest.ini` or `pyproject.toml` section
169
-
170
- **4. Verify setup:**
171
- ```bash
172
- # Run empty test suite - should pass with 0 tests
173
- npm test # Node
174
- pytest # Python
175
- go test ./... # Go
176
- cargo test # Rust
177
- ```
178
-
179
- **5. Create first test file:**
180
- Follow project conventions for test location:
181
- - `*.test.ts` / `*.spec.ts` next to source
182
- - `__tests__/` directory
183
- - `tests/` directory at root
184
-
185
- Framework setup is a one-time cost included in the first TDD plan's RED phase.
186
- </framework_setup>
187
-
188
- <error_handling>
189
- ## Error Handling
190
-
191
- **Test doesn't fail in RED phase:**
192
- - Feature may already exist - investigate
193
- - Test may be wrong (not testing what you think)
194
- - Fix before proceeding
195
-
196
- **Test doesn't pass in GREEN phase:**
197
- - Debug implementation
198
- - Don't skip to refactor
199
- - Keep iterating until green
200
-
201
- **Tests fail in REFACTOR phase:**
202
- - Undo refactor
203
- - Commit was premature
204
- - Refactor in smaller steps
205
-
206
- **Unrelated tests break:**
207
- - Stop and investigate
208
- - May indicate coupling issue
209
- - Fix before proceeding
210
- </error_handling>
211
-
212
- <commit_pattern>
213
- ## Commit Pattern for TDD Plans
214
-
215
- TDD plans produce 2-3 atomic commits (one per phase):
216
-
217
- ```
218
- test(08-02): add failing test for email validation
219
-
220
- - Tests valid email formats accepted
221
- - Tests invalid formats rejected
222
- - Tests empty input handling
223
-
224
- feat(08-02): implement email validation
225
-
226
- - Regex pattern matches RFC 5322
227
- - Returns boolean for validity
228
- - Handles edge cases (empty, null)
229
-
230
- refactor(08-02): extract regex to constant (optional)
231
-
232
- - Moved pattern to EMAIL_REGEX constant
233
- - No behavior changes
234
- - Tests still pass
235
- ```
236
-
237
- **Comparison with standard plans:**
238
- - Standard plans: 1 commit per task, 2-4 commits per plan
239
- - TDD plans: 2-3 commits for single feature
240
-
241
- Both follow same format: `{type}({phase}-{plan}): {description}`
242
-
243
- **Benefits:**
244
- - Each commit independently revertable
245
- - Git bisect works at commit level
246
- - Clear history showing TDD discipline
247
- - Consistent with overall commit strategy
248
- </commit_pattern>
249
-
250
- <context_budget>
251
- ## Context Budget
252
-
253
- TDD plans target **~40% context usage** (lower than standard plans' ~50%).
254
-
255
- Why lower:
256
- - RED phase: write test, run test, potentially debug why it didn't fail
257
- - GREEN phase: implement, run test, potentially iterate on failures
258
- - REFACTOR phase: modify code, run tests, verify no regressions
259
-
260
- Each phase involves reading files, running commands, analyzing output. The back-and-forth is inherently heavier than linear task execution.
261
-
262
- Single feature focus ensures full quality throughout the cycle.
263
- </context_budget>
1
+ <overview>
2
+ TDD is about design quality, not coverage metrics. The red-green-refactor cycle forces you to think about behavior before implementation, producing cleaner interfaces and more testable code.
3
+
4
+ **Principle:** If you can describe the behavior as `expect(fn(input)).toBe(output)` before writing `fn`, TDD improves the result.
5
+
6
+ **Key insight:** TDD work is fundamentally heavier than standard tasks—it requires 2-3 execution cycles (RED → GREEN → REFACTOR), each with file reads, test runs, and potential debugging. TDD features get dedicated plans to ensure full context is available throughout the cycle.
7
+ </overview>
8
+
9
+ <when_to_use_tdd>
10
+ ## When TDD Improves Quality
11
+
12
+ **TDD candidates (create a TDD plan):**
13
+ - Business logic with defined inputs/outputs
14
+ - API endpoints with request/response contracts
15
+ - Data transformations, parsing, formatting
16
+ - Validation rules and constraints
17
+ - Algorithms with testable behavior
18
+ - State machines and workflows
19
+ - Utility functions with clear specifications
20
+
21
+ **Skip TDD (use standard plan with `type="auto"` tasks):**
22
+ - UI layout, styling, visual components
23
+ - Configuration changes
24
+ - Glue code connecting existing components
25
+ - One-off scripts and migrations
26
+ - Simple CRUD with no business logic
27
+ - Exploratory prototyping
28
+
29
+ **Heuristic:** Can you write `expect(fn(input)).toBe(output)` before writing `fn`?
30
+ → Yes: Create a TDD plan
31
+ → No: Use standard plan, add tests after if needed
32
+ </when_to_use_tdd>
33
+
34
+ <tdd_plan_structure>
35
+ ## TDD Plan Structure
36
+
37
+ Each TDD plan implements **one feature** through the full RED-GREEN-REFACTOR cycle.
38
+
39
+ ```markdown
40
+ ---
41
+ phase: XX-name
42
+ plan: NN
43
+ type: tdd
44
+ ---
45
+
46
+ <objective>
47
+ [What feature and why]
48
+ Purpose: [Design benefit of TDD for this feature]
49
+ Output: [Working, tested feature]
50
+ </objective>
51
+
52
+ <context>
53
+ @.planning/PROJECT.md
54
+ @.planning/ROADMAP.md
55
+ @relevant/source/files.ts
56
+ </context>
57
+
58
+ <feature>
59
+ <name>[Feature name]</name>
60
+ <files>[source file, test file]</files>
61
+ <behavior>
62
+ [Expected behavior in testable terms]
63
+ Cases: input → expected output
64
+ </behavior>
65
+ <implementation>[How to implement once tests pass]</implementation>
66
+ </feature>
67
+
68
+ <verification>
69
+ [Test command that proves feature works]
70
+ </verification>
71
+
72
+ <success_criteria>
73
+ - Failing test written and committed
74
+ - Implementation passes test
75
+ - Refactor complete (if needed)
76
+ - All 2-3 commits present
77
+ </success_criteria>
78
+
79
+ <output>
80
+ After completion, create SUMMARY.md with:
81
+ - RED: What test was written, why it failed
82
+ - GREEN: What implementation made it pass
83
+ - REFACTOR: What cleanup was done (if any)
84
+ - Commits: List of commits produced
85
+ </output>
86
+ ```
87
+
88
+ **One feature per TDD plan.** If features are trivial enough to batch, they're trivial enough to skip TDD—use a standard plan and add tests after.
89
+ </tdd_plan_structure>
90
+
91
+ <execution_flow>
92
+ ## Red-Green-Refactor Cycle
93
+
94
+ **RED - Write failing test:**
95
+ 1. Create test file following project conventions
96
+ 2. Write test describing expected behavior (from `<behavior>` element)
97
+ 3. Run test - it MUST fail
98
+ 4. If test passes: feature exists or test is wrong. Investigate.
99
+ 5. Commit: `test({phase}-{plan}): add failing test for [feature]`
100
+
101
+ **GREEN - Implement to pass:**
102
+ 1. Write minimal code to make test pass
103
+ 2. No cleverness, no optimization - just make it work
104
+ 3. Run test - it MUST pass
105
+ 4. Commit: `feat({phase}-{plan}): implement [feature]`
106
+
107
+ **REFACTOR (if needed):**
108
+ 1. Clean up implementation if obvious improvements exist
109
+ 2. Run tests - MUST still pass
110
+ 3. Only commit if changes made: `refactor({phase}-{plan}): clean up [feature]`
111
+
112
+ **Result:** Each TDD plan produces 2-3 atomic commits.
113
+ </execution_flow>
114
+
115
+ <test_quality>
116
+ ## Good Tests vs Bad Tests
117
+
118
+ **Test behavior, not implementation:**
119
+ - Good: "returns formatted date string"
120
+ - Bad: "calls formatDate helper with correct params"
121
+ - Tests should survive refactors
122
+
123
+ **One concept per test:**
124
+ - Good: Separate tests for valid input, empty input, malformed input
125
+ - Bad: Single test checking all edge cases with multiple assertions
126
+
127
+ **Descriptive names:**
128
+ - Good: "should reject empty email", "returns null for invalid ID"
129
+ - Bad: "test1", "handles error", "works correctly"
130
+
131
+ **No implementation details:**
132
+ - Good: Test public API, observable behavior
133
+ - Bad: Mock internals, test private methods, assert on internal state
134
+ </test_quality>
135
+
136
+ <framework_setup>
137
+ ## Test Framework Setup (If None Exists)
138
+
139
+ When executing a TDD plan but no test framework is configured, set it up as part of the RED phase:
140
+
141
+ **1. Detect project type:**
142
+ ```bash
143
+ # JavaScript/TypeScript
144
+ if [ -f package.json ]; then echo "node"; fi
145
+
146
+ # Python
147
+ if [ -f requirements.txt ] || [ -f pyproject.toml ]; then echo "python"; fi
148
+
149
+ # Go
150
+ if [ -f go.mod ]; then echo "go"; fi
151
+
152
+ # Rust
153
+ if [ -f Cargo.toml ]; then echo "rust"; fi
154
+ ```
155
+
156
+ **2. Install minimal framework:**
157
+ | Project | Framework | Install |
158
+ |---------|-----------|---------|
159
+ | Node.js | Jest | `npm install -D jest @types/jest ts-jest` |
160
+ | Node.js (Vite) | Vitest | `npm install -D vitest` |
161
+ | Python | pytest | `pip install pytest` |
162
+ | Go | testing | Built-in |
163
+ | Rust | cargo test | Built-in |
164
+
165
+ **3. Create config if needed:**
166
+ - Jest: `jest.config.js` with ts-jest preset
167
+ - Vitest: `vitest.config.ts` with test globals
168
+ - pytest: `pytest.ini` or `pyproject.toml` section
169
+
170
+ **4. Verify setup:**
171
+ ```bash
172
+ # Run empty test suite - should pass with 0 tests
173
+ npm test # Node
174
+ pytest # Python
175
+ go test ./... # Go
176
+ cargo test # Rust
177
+ ```
178
+
179
+ **5. Create first test file:**
180
+ Follow project conventions for test location:
181
+ - `*.test.ts` / `*.spec.ts` next to source
182
+ - `__tests__/` directory
183
+ - `tests/` directory at root
184
+
185
+ Framework setup is a one-time cost included in the first TDD plan's RED phase.
186
+ </framework_setup>
187
+
188
+ <error_handling>
189
+ ## Error Handling
190
+
191
+ **Test doesn't fail in RED phase:**
192
+ - Feature may already exist - investigate
193
+ - Test may be wrong (not testing what you think)
194
+ - Fix before proceeding
195
+
196
+ **Test doesn't pass in GREEN phase:**
197
+ - Debug implementation
198
+ - Don't skip to refactor
199
+ - Keep iterating until green
200
+
201
+ **Tests fail in REFACTOR phase:**
202
+ - Undo refactor
203
+ - Commit was premature
204
+ - Refactor in smaller steps
205
+
206
+ **Unrelated tests break:**
207
+ - Stop and investigate
208
+ - May indicate coupling issue
209
+ - Fix before proceeding
210
+ </error_handling>
211
+
212
+ <commit_pattern>
213
+ ## Commit Pattern for TDD Plans
214
+
215
+ TDD plans produce 2-3 atomic commits (one per phase):
216
+
217
+ ```
218
+ test(08-02): add failing test for email validation
219
+
220
+ - Tests valid email formats accepted
221
+ - Tests invalid formats rejected
222
+ - Tests empty input handling
223
+
224
+ feat(08-02): implement email validation
225
+
226
+ - Regex pattern matches RFC 5322
227
+ - Returns boolean for validity
228
+ - Handles edge cases (empty, null)
229
+
230
+ refactor(08-02): extract regex to constant (optional)
231
+
232
+ - Moved pattern to EMAIL_REGEX constant
233
+ - No behavior changes
234
+ - Tests still pass
235
+ ```
236
+
237
+ **Comparison with standard plans:**
238
+ - Standard plans: 1 commit per task, 2-4 commits per plan
239
+ - TDD plans: 2-3 commits for single feature
240
+
241
+ Both follow same format: `{type}({phase}-{plan}): {description}`
242
+
243
+ **Benefits:**
244
+ - Each commit independently revertable
245
+ - Git bisect works at commit level
246
+ - Clear history showing TDD discipline
247
+ - Consistent with overall commit strategy
248
+ </commit_pattern>
249
+
250
+ <context_budget>
251
+ ## Context Budget
252
+
253
+ TDD plans target **~40% context usage** (lower than standard plans' ~50%).
254
+
255
+ Why lower:
256
+ - RED phase: write test, run test, potentially debug why it didn't fail
257
+ - GREEN phase: implement, run test, potentially iterate on failures
258
+ - REFACTOR phase: modify code, run tests, verify no regressions
259
+
260
+ Each phase involves reading files, running commands, analyzing output. The back-and-forth is inherently heavier than linear task execution.
261
+
262
+ Single feature focus ensures full quality throughout the cycle.
263
+ </context_budget>
@@ -0,0 +1,103 @@
1
+ # Tier Strategy Reference
2
+
3
+ Decision reference for git branching and release strategy per tier.
4
+
5
+ ## Quick Decision Matrix
6
+
7
+ | Question | MVP | Medium | Enterprise |
8
+ |----------|-----|--------|------------|
9
+ | Git strategy | Trunk (tag main) | GitHub Flow | GitFlow |
10
+ | Release branch | None | `release/vX.Y.Z` | `release/vX.Y.Z` from develop |
11
+ | Hotfix to develop? | No | No | Yes |
12
+ | PR required? | No | Yes (optional) | Yes (required) |
13
+ | Coverage gate | 60% | 80% | 95% |
14
+ | Checklist items | 6 | 18 | 30 |
15
+ | MoSCoW scope | @must | @must + @should | All |
16
+ | Rollback window | 30 min | 15 min | 5 min |
17
+
18
+ ## When to Use Each Tier
19
+
20
+ **MVP** — You need to ship NOW
21
+ - First public release
22
+ - Early access / beta
23
+ - Founder-driven sales demo
24
+ - Internal tool, no SLA
25
+
26
+ **Medium** — Real users, real consequences
27
+ - General availability
28
+ - Paying customers
29
+ - Public-facing product
30
+ - Team of 2-10 developers
31
+
32
+ **Enterprise** — Compliance matters
33
+ - Fortune 500 customers
34
+ - Regulated industry (finance, health, legal)
35
+ - SOC2 / GDPR required
36
+ - 24/7 SLA commitment
37
+
38
+ ## Tier Promotion Path
39
+
40
+ ```
41
+ Initial release → MVP v1.0.0
42
+ ↓ (enough users to need reliability)
43
+ GA release → Medium v1.5.0
44
+ ↓ (enterprise deal signed)
45
+ Enterprise → v2.0.0
46
+ ```
47
+
48
+ Each promotion is additive — enterprise features are behind feature flags in the codebase from day one. Promotion just enables the flags and runs the stricter checklist.
49
+
50
+ ## Feature Flag Convention
51
+
52
+ ```javascript
53
+ // In code: guard enterprise/medium features
54
+ const ENABLE_SHOULD_FEATURES = process.env.ENABLE_SHOULD_FEATURES === 'true';
55
+ const ENABLE_COULD_FEATURES = process.env.ENABLE_COULD_FEATURES === 'true';
56
+
57
+ // MVP deploy: both = false (no overhead)
58
+ // Medium deploy: SHOULD = true
59
+ // Enterprise: SHOULD = true, COULD = true
60
+ ```
61
+
62
+ ## GitFlow (Enterprise) Branch Layout
63
+
64
+ ```
65
+ main ← production releases (tagged)
66
+ develop ← integration branch
67
+ feature/* ← new features
68
+ fix/* ← bug fixes
69
+ release/vX.Y.Z ← release preparation (from develop → main)
70
+ hotfix/* ← emergency production fixes (from main → main + develop)
71
+ ```
72
+
73
+ ## GitHub Flow (Medium) Branch Layout
74
+
75
+ ```
76
+ main ← production (deploy on merge)
77
+ feature/* ← all work branches
78
+ release/vX.Y.Z ← optional: release prep branch
79
+ hotfix/* ← emergency fixes
80
+ ```
81
+
82
+ ## Trunk-Based (MVP) Branch Layout
83
+
84
+ ```
85
+ main ← production + development
86
+ task/* ← short-lived feature branches (optional)
87
+ ← hotfix directly if needed
88
+ ```
89
+
90
+ ## Config Location
91
+
92
+ Tier is stored in `.planning/config.json`:
93
+
94
+ ```json
95
+ {
96
+ "release": {
97
+ "tier": "mvp",
98
+ "tiers": { ... }
99
+ }
100
+ }
101
+ ```
102
+
103
+ Update with: `node ez-tools.cjs tier-manager save-tier medium`