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.
- checksums.yaml +7 -0
- data/.ace-defaults/nav/protocols/agent-sources/ace-test.yml +19 -0
- data/.ace-defaults/nav/protocols/guide-sources/ace-test.yml +19 -0
- data/.ace-defaults/nav/protocols/tmpl-sources/ace-test.yml +11 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-test.yml +19 -0
- data/CHANGELOG.md +169 -0
- data/LICENSE +21 -0
- data/README.md +40 -0
- data/Rakefile +12 -0
- data/handbook/agents/mock.ag.md +164 -0
- data/handbook/agents/profile-tests.ag.md +132 -0
- data/handbook/agents/test.ag.md +99 -0
- data/handbook/guides/SUMMARY.md +95 -0
- data/handbook/guides/embedded-testing-guide.g.md +261 -0
- data/handbook/guides/mocking-patterns.g.md +464 -0
- data/handbook/guides/quick-reference.g.md +46 -0
- data/handbook/guides/test-driven-development-cycle/meta-documentation.md +26 -0
- data/handbook/guides/test-driven-development-cycle/ruby-application.md +18 -0
- data/handbook/guides/test-driven-development-cycle/ruby-gem.md +19 -0
- data/handbook/guides/test-driven-development-cycle/rust-cli.md +18 -0
- data/handbook/guides/test-driven-development-cycle/rust-wasm-zed.md +19 -0
- data/handbook/guides/test-driven-development-cycle/typescript-nuxt.md +18 -0
- data/handbook/guides/test-driven-development-cycle/typescript-vue.md +19 -0
- data/handbook/guides/test-layer-decision.g.md +261 -0
- data/handbook/guides/test-mocking-patterns.g.md +414 -0
- data/handbook/guides/test-organization.g.md +140 -0
- data/handbook/guides/test-performance.g.md +353 -0
- data/handbook/guides/test-responsibility-map.g.md +220 -0
- data/handbook/guides/test-review-checklist.g.md +231 -0
- data/handbook/guides/test-suite-health.g.md +337 -0
- data/handbook/guides/testable-code-patterns.g.md +315 -0
- data/handbook/guides/testing/ruby-rspec-config-examples.md +120 -0
- data/handbook/guides/testing/ruby-rspec.md +87 -0
- data/handbook/guides/testing/rust.md +52 -0
- data/handbook/guides/testing/test-maintenance.md +364 -0
- data/handbook/guides/testing/typescript-bun.md +47 -0
- data/handbook/guides/testing/vue-firebase-auth.md +546 -0
- data/handbook/guides/testing/vue-vitest.md +236 -0
- data/handbook/guides/testing-philosophy.g.md +82 -0
- data/handbook/guides/testing-strategy.g.md +151 -0
- data/handbook/guides/testing-tdd-cycle.g.md +146 -0
- data/handbook/guides/testing.g.md +170 -0
- data/handbook/skills/as-test-create-cases/SKILL.md +24 -0
- data/handbook/skills/as-test-fix/SKILL.md +26 -0
- data/handbook/skills/as-test-improve-coverage/SKILL.md +22 -0
- data/handbook/skills/as-test-optimize/SKILL.md +34 -0
- data/handbook/skills/as-test-performance-audit/SKILL.md +34 -0
- data/handbook/skills/as-test-plan/SKILL.md +34 -0
- data/handbook/skills/as-test-review/SKILL.md +34 -0
- data/handbook/skills/as-test-verify-suite/SKILL.md +45 -0
- data/handbook/templates/e2e-sandbox-checklist.template.md +289 -0
- data/handbook/templates/test-case.template.md +56 -0
- data/handbook/templates/test-performance-audit.template.md +132 -0
- data/handbook/templates/test-responsibility-map.template.md +92 -0
- data/handbook/templates/test-review-checklist.template.md +163 -0
- data/handbook/workflow-instructions/test/analyze-failures.wf.md +120 -0
- data/handbook/workflow-instructions/test/create-cases.wf.md +675 -0
- data/handbook/workflow-instructions/test/fix.wf.md +120 -0
- data/handbook/workflow-instructions/test/improve-coverage.wf.md +370 -0
- data/handbook/workflow-instructions/test/optimize.wf.md +368 -0
- data/handbook/workflow-instructions/test/performance-audit.wf.md +17 -0
- data/handbook/workflow-instructions/test/plan.wf.md +323 -0
- data/handbook/workflow-instructions/test/review.wf.md +16 -0
- data/handbook/workflow-instructions/test/verify-suite.wf.md +343 -0
- data/lib/ace/test/version.rb +7 -0
- data/lib/ace/test.rb +10 -0
- 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}}
|