ace-test 0.6.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 (67) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/nav/protocols/agent-sources/ace-test.yml +19 -0
  3. data/.ace-defaults/nav/protocols/guide-sources/ace-test.yml +19 -0
  4. data/.ace-defaults/nav/protocols/tmpl-sources/ace-test.yml +11 -0
  5. data/.ace-defaults/nav/protocols/wfi-sources/ace-test.yml +19 -0
  6. data/CHANGELOG.md +169 -0
  7. data/LICENSE +21 -0
  8. data/README.md +40 -0
  9. data/Rakefile +12 -0
  10. data/handbook/agents/mock.ag.md +164 -0
  11. data/handbook/agents/profile-tests.ag.md +132 -0
  12. data/handbook/agents/test.ag.md +99 -0
  13. data/handbook/guides/SUMMARY.md +95 -0
  14. data/handbook/guides/embedded-testing-guide.g.md +261 -0
  15. data/handbook/guides/mocking-patterns.g.md +464 -0
  16. data/handbook/guides/quick-reference.g.md +46 -0
  17. data/handbook/guides/test-driven-development-cycle/meta-documentation.md +26 -0
  18. data/handbook/guides/test-driven-development-cycle/ruby-application.md +18 -0
  19. data/handbook/guides/test-driven-development-cycle/ruby-gem.md +19 -0
  20. data/handbook/guides/test-driven-development-cycle/rust-cli.md +18 -0
  21. data/handbook/guides/test-driven-development-cycle/rust-wasm-zed.md +19 -0
  22. data/handbook/guides/test-driven-development-cycle/typescript-nuxt.md +18 -0
  23. data/handbook/guides/test-driven-development-cycle/typescript-vue.md +19 -0
  24. data/handbook/guides/test-layer-decision.g.md +261 -0
  25. data/handbook/guides/test-mocking-patterns.g.md +414 -0
  26. data/handbook/guides/test-organization.g.md +140 -0
  27. data/handbook/guides/test-performance.g.md +353 -0
  28. data/handbook/guides/test-responsibility-map.g.md +220 -0
  29. data/handbook/guides/test-review-checklist.g.md +231 -0
  30. data/handbook/guides/test-suite-health.g.md +337 -0
  31. data/handbook/guides/testable-code-patterns.g.md +315 -0
  32. data/handbook/guides/testing/ruby-rspec-config-examples.md +120 -0
  33. data/handbook/guides/testing/ruby-rspec.md +87 -0
  34. data/handbook/guides/testing/rust.md +52 -0
  35. data/handbook/guides/testing/test-maintenance.md +364 -0
  36. data/handbook/guides/testing/typescript-bun.md +47 -0
  37. data/handbook/guides/testing/vue-firebase-auth.md +546 -0
  38. data/handbook/guides/testing/vue-vitest.md +236 -0
  39. data/handbook/guides/testing-philosophy.g.md +82 -0
  40. data/handbook/guides/testing-strategy.g.md +151 -0
  41. data/handbook/guides/testing-tdd-cycle.g.md +146 -0
  42. data/handbook/guides/testing.g.md +170 -0
  43. data/handbook/skills/as-test-create-cases/SKILL.md +24 -0
  44. data/handbook/skills/as-test-fix/SKILL.md +26 -0
  45. data/handbook/skills/as-test-improve-coverage/SKILL.md +22 -0
  46. data/handbook/skills/as-test-optimize/SKILL.md +34 -0
  47. data/handbook/skills/as-test-performance-audit/SKILL.md +34 -0
  48. data/handbook/skills/as-test-plan/SKILL.md +34 -0
  49. data/handbook/skills/as-test-review/SKILL.md +34 -0
  50. data/handbook/skills/as-test-verify-suite/SKILL.md +45 -0
  51. data/handbook/templates/e2e-sandbox-checklist.template.md +289 -0
  52. data/handbook/templates/test-case.template.md +56 -0
  53. data/handbook/templates/test-performance-audit.template.md +132 -0
  54. data/handbook/templates/test-responsibility-map.template.md +92 -0
  55. data/handbook/templates/test-review-checklist.template.md +163 -0
  56. data/handbook/workflow-instructions/test/analyze-failures.wf.md +120 -0
  57. data/handbook/workflow-instructions/test/create-cases.wf.md +675 -0
  58. data/handbook/workflow-instructions/test/fix.wf.md +120 -0
  59. data/handbook/workflow-instructions/test/improve-coverage.wf.md +370 -0
  60. data/handbook/workflow-instructions/test/optimize.wf.md +368 -0
  61. data/handbook/workflow-instructions/test/performance-audit.wf.md +17 -0
  62. data/handbook/workflow-instructions/test/plan.wf.md +323 -0
  63. data/handbook/workflow-instructions/test/review.wf.md +16 -0
  64. data/handbook/workflow-instructions/test/verify-suite.wf.md +343 -0
  65. data/lib/ace/test/version.rb +7 -0
  66. data/lib/ace/test.rb +10 -0
  67. metadata +152 -0
@@ -0,0 +1,289 @@
1
+ ---
2
+ doc-type: template
3
+ title: E2E Sandbox Setup Checklist
4
+ purpose: E2E sandbox setup checklist
5
+ ace-docs:
6
+ last-updated: 2026-03-04
7
+ last-checked: 2026-03-21
8
+ ---
9
+
10
+ # E2E Sandbox Setup Checklist
11
+
12
+ **Test ID**: TS-{{AREA}}-{{NNN}}
13
+ **Package**: {{package}}
14
+ **Date**: {{date}}
15
+
16
+ ## Pre-Setup Verification
17
+
18
+ ### Tool Requirements
19
+
20
+ - [ ] Required tools installed:
21
+ - [ ] {{tool_1}} (version: {{version}})
22
+ - [ ] {{tool_2}} (version: {{version}})
23
+ - [ ] Tool versions verified:
24
+ ```bash
25
+ {{tool_1}} --version
26
+ {{tool_2}} --version
27
+ ```
28
+
29
+ ### Environment Requirements
30
+
31
+ - [ ] Ruby version: {{version}}
32
+ - [ ] Working directory writable
33
+ - [ ] Network access (if needed): {{yes/no}}
34
+ - [ ] External API access (if needed): {{yes/no}}
35
+
36
+ ---
37
+
38
+ ## Sandbox Creation
39
+
40
+ ### 1. Create Isolated Directory
41
+
42
+ ```bash
43
+ TIMESTAMP_ID="$(ace-b36ts encode)"
44
+ SHORT_PKG="{{short-pkg}}" # Package name without ace- prefix
45
+ SHORT_ID="ts{{nnn}}" # Lowercase test number
46
+ TEST_DIR=".ace-local/test-e2e/${TIMESTAMP_ID}-${SHORT_PKG}-${SHORT_ID}"
47
+ REPORTS_DIR="${TEST_DIR}-reports"
48
+
49
+ mkdir -p "$TEST_DIR"
50
+ mkdir -p "$REPORTS_DIR"
51
+ cd "$TEST_DIR"
52
+
53
+ # Capture for cleanup
54
+ echo "$TEST_DIR" > /tmp/current-e2e-sandbox
55
+ ```
56
+
57
+ - [ ] Directory created
58
+ - [ ] Reports directory created
59
+ - [ ] Path recorded for cleanup
60
+
61
+ ### 2. Set Environment Variables
62
+
63
+ ```bash
64
+ # Isolate from main project
65
+ export PROJECT_ROOT_PATH="$TEST_DIR"
66
+
67
+ # Disable any caching that might pollute
68
+ export ACE_TEST_MODE=true
69
+
70
+ # Set test-specific config if needed
71
+ export ACE_CONFIG_PATH="$TEST_DIR/.ace"
72
+ ```
73
+
74
+ - [ ] PROJECT_ROOT_PATH set to sandbox
75
+ - [ ] Test mode enabled
76
+ - [ ] Config path isolated
77
+
78
+ ### 3. Initialize Git Repository (if needed)
79
+
80
+ ```bash
81
+ git init --quiet .
82
+ git config user.email "test@example.com"
83
+ git config user.name "Test User"
84
+ ```
85
+
86
+ - [ ] Git initialized
87
+ - [ ] User config set (prevents prompts)
88
+
89
+ ---
90
+
91
+ ## External API Safety
92
+
93
+ ### API Token Handling
94
+
95
+ - [ ] Using test/sandbox tokens, NOT production
96
+ - [ ] Token scope limited to minimum required
97
+ - [ ] Token stored in environment variable, not file
98
+
99
+ ```bash
100
+ # Example: GitHub test token with limited scope
101
+ export GITHUB_TOKEN="${TEST_GITHUB_TOKEN:-}"
102
+ if [ -z "$GITHUB_TOKEN" ]; then
103
+ echo "SKIP: No test token available"
104
+ exit 0
105
+ fi
106
+ ```
107
+
108
+ ### API Call Safety
109
+
110
+ - [ ] Test endpoints used (not production)
111
+ - [ ] Rate limiting considered
112
+ - [ ] Cleanup API calls planned
113
+
114
+ | API | Test Endpoint | Production Endpoint | Using |
115
+ |-----|---------------|---------------------|-------|
116
+ | GitHub | api.github.com (test org) | api.github.com | Test |
117
+ | LLM | - | - | Skipped/Mocked |
118
+
119
+ ### Rollback Plan
120
+
121
+ If test creates resources that need cleanup:
122
+
123
+ ```bash
124
+ # Record resources created
125
+ echo "{{resource_type}}: {{resource_id}}" >> "$REPORTS_DIR/resources-created.txt"
126
+
127
+ # Cleanup function
128
+ cleanup_resources() {
129
+ while read -r line; do
130
+ type=$(echo "$line" | cut -d: -f1)
131
+ id=$(echo "$line" | cut -d: -f2)
132
+ # Delete resource
133
+ {{cleanup_command}} "$id"
134
+ done < "$REPORTS_DIR/resources-created.txt"
135
+ }
136
+ ```
137
+
138
+ - [ ] Resources tracked
139
+ - [ ] Cleanup function defined
140
+ - [ ] Cleanup runs on success AND failure
141
+
142
+ ---
143
+
144
+ ## Test Data Setup
145
+
146
+ ### Create Test Files
147
+
148
+ ```bash
149
+ cat > "$TEST_DIR/{{filename}}" << 'EOF'
150
+ {{file_content}}
151
+ EOF
152
+ ```
153
+
154
+ - [ ] Test files created
155
+ - [ ] File permissions correct
156
+ - [ ] Content matches test requirements
157
+
158
+ ### Create Test Configuration
159
+
160
+ ```bash
161
+ mkdir -p "$TEST_DIR/.ace/{{tool}}"
162
+ cat > "$TEST_DIR/.ace/{{tool}}/config.yml" << 'EOF'
163
+ {{config_content}}
164
+ EOF
165
+ ```
166
+
167
+ - [ ] Config directory created
168
+ - [ ] Config file created
169
+ - [ ] Config values appropriate for test
170
+
171
+ ---
172
+
173
+ ## Execution Safety
174
+
175
+ ### Timeout Protection
176
+
177
+ ```bash
178
+ # Prevent runaway tests
179
+ timeout 300 {{command}} || {
180
+ echo "FAIL: Command timed out after 300s"
181
+ exit 1
182
+ }
183
+ ```
184
+
185
+ - [ ] Timeout set for long-running commands
186
+ - [ ] Timeout value appropriate
187
+
188
+ ### Output Capture
189
+
190
+ ```bash
191
+ # Capture all output for analysis
192
+ {{command}} > "$REPORTS_DIR/stdout.txt" 2> "$REPORTS_DIR/stderr.txt"
193
+ EXIT_CODE=$?
194
+ echo "$EXIT_CODE" > "$REPORTS_DIR/exit_code.txt"
195
+ ```
196
+
197
+ - [ ] stdout captured
198
+ - [ ] stderr captured
199
+ - [ ] Exit code recorded
200
+
201
+ ---
202
+
203
+ ## Cleanup
204
+
205
+ ### On Success
206
+
207
+ ```bash
208
+ # Optional: Remove sandbox if test passed
209
+ if [ "$ALL_TESTS_PASSED" = "true" ]; then
210
+ rm -rf "$TEST_DIR"
211
+ echo "Sandbox cleaned up"
212
+ fi
213
+ ```
214
+
215
+ ### On Failure
216
+
217
+ ```bash
218
+ # Keep sandbox for debugging
219
+ echo "Sandbox preserved at: $TEST_DIR"
220
+ echo "Reports at: $REPORTS_DIR"
221
+ ```
222
+
223
+ ### Always
224
+
225
+ ```bash
226
+ # Restore environment
227
+ unset PROJECT_ROOT_PATH
228
+ unset ACE_TEST_MODE
229
+ unset ACE_CONFIG_PATH
230
+
231
+ # Clean up any API resources
232
+ cleanup_resources 2>/dev/null || true
233
+ ```
234
+
235
+ - [ ] Environment variables restored
236
+ - [ ] API resources cleaned up
237
+ - [ ] Sandbox disposition documented
238
+
239
+ ---
240
+
241
+ ## Verification Checklist
242
+
243
+ Before running test:
244
+
245
+ - [ ] Sandbox is isolated (PROJECT_ROOT_PATH set)
246
+ - [ ] Git is initialized (if needed)
247
+ - [ ] Test tokens are non-production
248
+ - [ ] API scopes are minimal
249
+ - [ ] Cleanup is defined
250
+ - [ ] Timeouts are set
251
+ - [ ] Output capture is configured
252
+
253
+ After running test:
254
+
255
+ - [ ] Results recorded in reports directory
256
+ - [ ] Resources cleaned up (or cleanup planned)
257
+ - [ ] Sandbox preserved (failure) or cleaned (success)
258
+ - [ ] No pollution to main project
259
+
260
+ ---
261
+
262
+ ## Quick Setup Script
263
+
264
+ ```bash
265
+ #!/bin/bash
266
+ # e2e-sandbox-setup.sh
267
+
268
+ set -e
269
+
270
+ TIMESTAMP_ID="$(ace-b36ts encode)"
271
+ SHORT_PKG="${1:-unknown}"
272
+ SHORT_ID="${2:-ts000}"
273
+
274
+ TEST_DIR=".ace-local/test-e2e/${TIMESTAMP_ID}-${SHORT_PKG}-${SHORT_ID}"
275
+ REPORTS_DIR="${TEST_DIR}-reports"
276
+
277
+ mkdir -p "$TEST_DIR" "$REPORTS_DIR"
278
+ cd "$TEST_DIR"
279
+
280
+ export PROJECT_ROOT_PATH="$TEST_DIR"
281
+ export ACE_TEST_MODE=true
282
+
283
+ git init --quiet .
284
+ git config user.email "test@example.com"
285
+ git config user.name "Test User"
286
+
287
+ echo "Sandbox ready: $TEST_DIR"
288
+ echo "Reports: $REPORTS_DIR"
289
+ ```
@@ -0,0 +1,56 @@
1
+ ---
2
+ doc-type: template
3
+ title: "Test Case: {{FEATURE_NAME}}"
4
+ purpose: Template for writing test cases
5
+ ace-docs:
6
+ last-updated: 2026-01-23
7
+ last-checked: 2026-03-21
8
+ ---
9
+
10
+ # Test Case: {{FEATURE_NAME}}
11
+
12
+ ## Description
13
+
14
+ Brief description of what this test case covers.
15
+
16
+ ## Test Scenario
17
+
18
+ ### Given
19
+ - Precondition 1
20
+ - Precondition 2
21
+
22
+ ### When
23
+ - Action or event occurs
24
+
25
+ ### Then
26
+ - Expected outcome 1
27
+ - Expected outcome 2
28
+
29
+ ## Test Implementation
30
+
31
+ ```ruby
32
+ # frozen_string_literal: true
33
+
34
+ require_relative "test_helper"
35
+
36
+ module {{MODULE_NAME}}
37
+ class {{FEATURE_NAME}}Test < TestCase
38
+ def test_{{scenario_name}}
39
+ # Arrange
40
+ # Setup test conditions
41
+
42
+ # Act
43
+ # Execute the behavior being tested
44
+
45
+ # Assert
46
+ # Verify expected outcomes
47
+ end
48
+ end
49
+ end
50
+ ```
51
+
52
+ ## Edge Cases to Consider
53
+
54
+ 1. Edge case 1
55
+ 2. Edge case 2
56
+ 3. Edge case 3
@@ -0,0 +1,132 @@
1
+ ---
2
+ doc-type: template
3
+ title: Test Suite Performance Audit
4
+ purpose: Test performance audit report
5
+ ace-docs:
6
+ last-updated: 2026-02-01
7
+ last-checked: 2026-03-21
8
+ ---
9
+
10
+ # Test Suite Performance Audit
11
+
12
+ **Date**: {{YYYY-MM-DD}}
13
+ **Scope**: {{package or "full monorepo"}}
14
+ **Auditor**: {{name}}
15
+
16
+ ## Executive Summary
17
+
18
+ | Metric | Value | Status |
19
+ |--------|-------|--------|
20
+ | Total packages | {{N}} | - |
21
+ | Total tests | {{N}} | - |
22
+ | Suite time | {{N}}s | OK / Warning / Critical |
23
+ | Tests >100ms | {{N}} | OK / Warning / Critical |
24
+ | Tests >200ms | {{N}} | OK / Warning / Critical |
25
+ | Flake rate | {{N}}% | OK / Warning / Critical |
26
+
27
+ **Overall Health**: Good / Warning / Critical
28
+
29
+ ## Performance Profile
30
+
31
+ ### Slowest Tests (Top 20)
32
+
33
+ | # | Package | Test | Time | Category | Action |
34
+ |---|---------|------|------|----------|--------|
35
+ | 1 | {{pkg}} | {{test_name}} | {{time}}ms | Unit/Integration/E2E | Fix/Move/OK |
36
+
37
+ ### Package Summary
38
+
39
+ | Package | Tests | Time | Avg | Slowest | Status |
40
+ |---------|-------|------|-----|---------|--------|
41
+ | {{pkg}} | {{N}} | {{N}}s | {{N}}ms | {{N}}ms | OK/Warning/Critical |
42
+
43
+ ## Threshold Violations
44
+
45
+ ### Critical (>200ms) - Must Fix
46
+
47
+ | Package | Test | Time | Root Cause | Remediation |
48
+ |---------|------|------|------------|-------------|
49
+ | {{pkg}} | {{test}} | {{N}}ms | Zombie mock / Subprocess leak / Wrong layer | {{action}} |
50
+
51
+ ### Warning (100-200ms) - Should Fix
52
+
53
+ | Package | Test | Time | Root Cause | Remediation |
54
+ |---------|------|------|------------|-------------|
55
+ | {{pkg}} | {{test}} | {{N}}ms | {{cause}} | {{action}} |
56
+
57
+ ## Zombie Mock Detection
58
+
59
+ Tests that passed but showed performance anomalies:
60
+
61
+ | Package | Test | Stub Target | Actual Code Path | Fix |
62
+ |---------|------|-------------|------------------|-----|
63
+ | {{pkg}} | {{test}} | {{stubbed_method}} | {{actual_method}} | Update stub to {{new_target}} |
64
+
65
+ ## Layer Classification Audit
66
+
67
+ Tests potentially at wrong layer:
68
+
69
+ | Package | Test | Current Layer | Suggested Layer | Reason |
70
+ |---------|------|---------------|-----------------|--------|
71
+ | {{pkg}} | {{test}} | Integration | E2E | Uses real subprocess |
72
+ | {{pkg}} | {{test}} | Integration | Unit | No real I/O needed |
73
+
74
+ ## Trend Analysis
75
+
76
+ ### Compared to Previous Audit ({{previous_date}})
77
+
78
+ | Metric | Previous | Current | Change |
79
+ |--------|----------|---------|--------|
80
+ | Suite time | {{N}}s | {{N}}s | +/-{{N}}% |
81
+ | Tests >100ms | {{N}} | {{N}} | +/-{{N}} |
82
+ | Flake rate | {{N}}% | {{N}}% | +/-{{N}}% |
83
+
84
+ ### Regression Sources
85
+
86
+ - {{package}}: +{{N}}s due to {{reason}}
87
+ - {{package}}: +{{N}} slow tests due to {{reason}}
88
+
89
+ ## Flakiness Report
90
+
91
+ | Package | Test | Failure Rate | Cause | Fix |
92
+ |---------|------|--------------|-------|-----|
93
+ | {{pkg}} | {{test}} | {{N}}/{{N}} runs | Timing / Ordering / External | {{action}} |
94
+
95
+ ## Action Items
96
+
97
+ ### Immediate (This Week)
98
+
99
+ - [ ] Fix critical violations in {{package}}
100
+ - [ ] Update zombie mocks in {{package}}
101
+ - [ ] Move {{test}} to E2E layer
102
+
103
+ ### Short-term (This Month)
104
+
105
+ - [ ] Address warning-level violations
106
+ - [ ] Investigate flaky tests
107
+ - [ ] Update composite helpers in {{package}}
108
+
109
+ ### Long-term (This Quarter)
110
+
111
+ - [ ] Improve coverage in {{area}}
112
+ - [ ] Review E2E test relevance
113
+ - [ ] Update mock data for API drift
114
+
115
+ ## Recommendations
116
+
117
+ 1. {{recommendation_1}}
118
+ 2. {{recommendation_2}}
119
+ 3. {{recommendation_3}}
120
+
121
+ ## Appendix: Commands Used
122
+
123
+ ```bash
124
+ # Profile all packages
125
+ ace-test-suite --profile
126
+
127
+ # Profile specific package
128
+ ace-test {{package}} --profile 20
129
+
130
+ # Check flakiness (5 runs)
131
+ for i in {1..5}; do ace-test-suite --quiet 2>&1 | grep FAIL; done
132
+ ```
@@ -0,0 +1,92 @@
1
+ ---
2
+ doc-type: template
3
+ title: "Test Responsibility Map: {{SCOPE}}"
4
+ purpose: Test responsibility mapping document
5
+ ace-docs:
6
+ last-updated: 2026-02-19
7
+ last-checked: 2026-03-21
8
+ ---
9
+
10
+ # Test Responsibility Map: {{SCOPE}}
11
+
12
+ **Scope**: {{feature_or_package}}
13
+ **Owner**: {{owner}}
14
+ **Date**: {{date}}
15
+ **Status**: Draft | Review | Approved
16
+
17
+ ## Summary
18
+
19
+ - Total behaviors: {{count}}
20
+ - High risk: {{high_risk_count}}
21
+ - Unit tests planned: {{unit_count}}
22
+ - Integration tests planned: {{integration_count}}
23
+ - E2E tests planned: {{e2e_count}}
24
+
25
+ ## Behaviors and Coverage
26
+
27
+ | Behavior | Risk | Layer | Test File / ID | Source of Truth | Notes |
28
+ |----------|------|-------|----------------|-----------------|-------|
29
+ | {{behavior}} | High/Med/Low | Unit/Integration/E2E | {{test_file}} | {{source}} | {{notes}} |
30
+
31
+ ### Layer Legend
32
+
33
+ - **Unit (atoms)**: Pure logic, no I/O, <10ms
34
+ - **Unit (molecules)**: Composed logic, stubbed I/O, <50ms
35
+ - **Integration (organisms)**: Component wiring, stubbed external, <500ms
36
+ - **E2E**: Real I/O, sandboxed, seconds
37
+
38
+ ### Risk Legend
39
+
40
+ - **High**: Security, data integrity, core business, user-facing errors
41
+ - **Medium**: Important functionality, configuration, integrations
42
+ - **Low**: Logging, cosmetic, internal helpers
43
+
44
+ ## Gaps Identified
45
+
46
+ Behaviors without test coverage:
47
+
48
+ - [ ] {{gap_1}}
49
+ - [ ] {{gap_2}}
50
+
51
+ ## Redundancies to Remove
52
+
53
+ Tests that duplicate coverage:
54
+
55
+ - [ ] {{redundancy_1}} - covered by {{other_test}}
56
+ - [ ] {{redundancy_2}} - covered by {{other_test}}
57
+
58
+ ## E2E Coverage Summary
59
+
60
+ Critical workflows requiring E2E validation:
61
+
62
+ | Workflow | E2E Test ID | Status |
63
+ |----------|-------------|--------|
64
+ | {{workflow_1}} | TS-{{AREA}}-{{NNN}} | Planned/Exists |
65
+ | {{workflow_2}} | TS-{{AREA}}-{{NNN}} | Planned/Exists |
66
+
67
+ ## Fixtures and Contracts Needed
68
+
69
+ | Fixture/Contract | Purpose | Source |
70
+ |------------------|---------|--------|
71
+ | {{fixture_name}} | {{purpose}} | Real API snapshot / Schema / Manual |
72
+
73
+ ## Action Items
74
+
75
+ - [ ] Create unit tests for: {{list}}
76
+ - [ ] Create integration tests for: {{list}}
77
+ - [ ] Create E2E test: TS-{{AREA}}-{{NNN}}
78
+ - [ ] Remove redundant tests: {{list}}
79
+ - [ ] Update fixtures: {{list}}
80
+
81
+ ## Review Checklist
82
+
83
+ - [ ] Each behavior tested at lowest possible layer
84
+ - [ ] Critical workflows have E2E coverage
85
+ - [ ] Edge cases in fast loop, not E2E
86
+ - [ ] No duplicate tests across layers
87
+ - [ ] Source of truth identified for each behavior
88
+ - [ ] Risk levels assigned appropriately
89
+
90
+ ## Notes
91
+
92
+ {{additional_notes}}