regression-test-generator
Generate regression tests when bugs are discovered during /debug or continuous checks. Auto-detects test framework, creates Arrange-Act-Assert tests, and links to error-log.md entries. (project)
git clone --depth 1 https://github.com/marcusgoll/Spec-Flow /tmp/regression-test-generator && cp -r /tmp/regression-test-generator/.claude/skills/regression-test-generator ~/.claude/skills/regression-test-generatorSKILL.md
<objective>
Automatically generate regression tests that capture bugs to prevent recurrence. Creates complete, framework-appropriate tests that:
1. Reproduce the bug scenario (fails before fix)
2. Verify correct behavior (passes after fix)
3. Link back to error-log.md for traceability
</objective>
<quick_start>
Generate regression test for a bug:
1. Collect bug details: error ID, symptoms, root cause, affected component
2. Detect test framework from project (Jest, Vitest, pytest, Playwright)
3. Generate test file following project patterns
4. Present to user for review: [A] Save [B] Edit [C] Skip
5. Save test to `tests/regression/` and update error-log.md
**Key principle**: Tests should FAIL before the fix is applied (proves bug exists).
</quick_start>
<prerequisites>
Before generating regression test:
- Bug has been identified with symptoms and reproduction steps
- Root cause determined (from 5 Whys or debugging)
- Component/file affected is known
- Error ID assigned (ERR-XXXX) or will be assigned
Check error-log.md to avoid duplicate tests for same error.
</prerequisites>
<workflow>
<step number="1">
**Collect bug details**
Extract from debug context:
- **Error ID**: ERR-XXXX from error-log.md (or generate new)
- **Title**: Brief description (e.g., "Dashboard timeout due to missing pagination")
- **Symptoms**: Observable behavior (error message, incorrect output)
- **Root cause**: Why the bug occurred (from 5 Whys analysis)
- **Component**: Affected file/function (e.g., `StudentProgressService.fetchExternalData`)
- **Reproduction steps**: How to trigger the bug
Example:
```yaml
error_id: ERR-0042
title: Dashboard timeout due to missing pagination
symptoms: Dashboard fails to load, timeout after 30s
root_cause: Missing pagination parameter causes over-fetching
component: src/services/StudentProgressService.ts:fetchExternalData
reproduction:
- Navigate to /dashboard/student/123
- Click "Load Data" button
- Observe timeout error
```
</step>
<step number="2">
**Detect test framework**
Check project configuration (in priority order):
1. **docs/project/tech-stack.md** (if exists):
```bash
grep -i "test\|jest\|vitest\|pytest\|playwright" docs/project/tech-stack.md
```
2. **package.json** (JavaScript/TypeScript):
```bash
# Check devDependencies
grep -E '"(jest|vitest|@playwright/test|mocha)"' package.json
```
3. **pyproject.toml / requirements.txt** (Python):
```bash
grep -E "(pytest|unittest|nose)" pyproject.toml requirements.txt
```
4. **Existing test file patterns**:
```bash
# JavaScript patterns
find . -name "*.test.ts" -o -name "*.spec.ts" | head -1
# Python patterns
find . -name "*_test.py" -o -name "test_*.py" | head -1
```
5. **Defaults**:
- JavaScript/TypeScript: Jest
- Python: pytest
- Document assumption in test file comment
**Output**: Framework name and test file extension (e.g., Jest → `.test.ts`)
</step>
<step number="3">
**Determine test file location**
Find appropriate location:
1. Check if `tests/regression/` exists → use it
2. Check project test structure:
- `tests/` directory → `tests/regression/`
- `__tests__/` directory → `__tests__/regression/`
- Co-located tests (same dir as source) → `src/__tests__/regression/`
3. Create `tests/regression/` if no pattern found
**File naming**:
- Format: `regression-ERR-{ID}-{slug}.{ext}`
- Slug: lowercase kebab-case from title
- Examples:
- `regression-ERR-0042-dashboard-timeout.test.ts`
- `test_regression_err_0042_dashboard_timeout.py`
</step>
<step number="4">
**Generate test code**
Use framework-appropriate template from references/framework-templates.md.
**Structure (Arrange-Act-Assert)**:
```
Header: Error ID, title, description, root cause, link to error-log
describe/class: "Regression: ERR-XXXX - {title_short}"
test: "should {expected} when {condition}"
ARRANGE: Set up bug scenario (data, mocks, state)
ACT: Execute action that caused bug
ASSERT: Verify correct behavior (would have failed before fix)
```
**Required elements**:
- Error ID reference in comment header
- Link to error-log.md entry
- Clear test name describing expected behavior
- Setup code matching reproduction steps
- Assertion that validates the fix
See references/framework-templates.md for complete templates.
</step>
<step number="5">
**Present to user for review**
Display generated test:
```
=== Regression Test Generated ===
Error: ERR-0042 - Dashboard Timeout Due to Missing Pagination
File: tests/regression/regression-ERR-0042-dashboard-timeout.test.ts
--- Generated Test Code ---
[Full test code here]
---
This test will:
- {describe what test validates}
- {explain why test would have failed before fix}
What would you like to do?
[A] Save test and continue
[B] Edit test before saving
[C] Skip generation (add to debt tracker)
>
```
**If user chooses**:
- **A (Save)**: Write file, run test, update error-log.md
- **B (Edit)**: Show edit instructions, wait for confirmation
- **C (Skip)**: Log skip reason in NOTES.md as technical debt
</step>
<step number="6">
**Save and verify**
After user approval:
1. **Write test file** to determined location
2. **Run test** to verify:
- If bug not yet fixed: Test should FAIL (proves bug exists)
- If bug already fixed: Test should PASS (validates fix)
3. **Update error-log.md** with regression test reference:
```markdown
**Regression Test**:
- **File**: `tests/regression/regression-ERR-0042-dashboard-timeout.test.ts`
- **Status**: Generated
- **Validates**: Pagination parameter prevents timeout
```
4. **Stage file** for commit (do not auto-commit)
**Validation**: Test file exists, runs without syntax errors, linked in error-log.md.
</step>
</workflow>
<validation>
After generating regression test, verify:
- Test file created in correct location
- Test follows project naming conventions
- Test uses Arrange-Act-Assert pattern
- Test has clear name describing expected behavior
- Error IDExecute multiple sprints in parallel based on dependency graph from sprint-plan.md
Build and validate locally for projects without remote deployment (prototypes, experiments, local-only dev)
Execute multi-sprint epic workflow from interactive scoping through deployment with parallel sprint execution and self-improvement
Execute feature development workflow from specification through production deployment with automated quality gates
Analyze workflow state and provide context-aware guidance with visual progress indicators and recommended next steps
Initialize project documentation, preferences, or design tokens
Implement small bug fixes and features (<100 LOC) without full workflow. Use for single-file changes, bug fixes, refactors, and minor enhancements that can be completed in under 30 minutes.
Enter deep craftsman mode - question everything, plan like Da Vinci, craft insanely great solutions, then materialize to roadmap