[ PROMPT_NODE_24711 ]
Replay
[ SKILL_DOCUMENTATION ]
# Replay System
The replay system records successful error resolutions for future reference, enabling faster problem-solving when similar errors occur.
## How It Works
```
1. Encounter Error
|
v
2. Check Replay History -----> Match Found? ---> Apply Known Solution
| |
No Match |
| v
v Verify & Done
3. Analyze & Resolve
|
v
4. Record Solution ---------> .claude/error-solutions/
|
v
5. Future Benefit
```
## Directory Structure
```
project/
└── .claude/
└── error-solutions/
├── nodejs-module-not-found-express.yaml
├── react-hydration-mismatch-date.yaml
├── postgres-connection-refused.yaml
└── ...
```
## Recording Solutions
### When to Record
Record a solution when:
- You spent significant time debugging
- The error is likely to recur
- The solution isn't obvious
- Team members might encounter same issue
### How to Record
1. Copy the template:
```bash
mkdir -p .claude/error-solutions
cp solution-template.yaml .claude/error-solutions/.yaml
```
2. Fill in the details:
```yaml
id: "nodejs-module-not-found-express"
created: "2024-01-15T10:30:00Z"
error:
type: "dependency"
category: "ModuleNotFound"
language: "nodejs"
pattern: "Cannot find module 'express'"
context: "Starting Node.js server"
diagnosis:
root_cause: "Express package not installed"
factors:
- "npm install not run after git clone"
- "package.json missing express"
solution:
immediate:
- "Run: npm install express"
proper:
- "Add express to package.json if missing"
- "Run: npm install"
verification:
- "Run: node server.js"
- "Check server starts without error"
prevention:
- "Document npm install in README"
- "Use npm ci in CI/CD"
metadata:
tags: ["nodejs", "npm", "dependency"]
```
## Error Signature Generation
Create consistent signatures for matching:
### Pattern: `[language]-[category]-[specific]`
Examples:
- `nodejs-module-not-found-express`
- `react-hydration-mismatch-date`
- `python-import-error-circular`
- `postgres-connection-refused-docker`
- `docker-permission-denied-volume`
### Normalizing Error Messages
Replace specific values with placeholders:
| Original | Normalized |
|----------|------------|
| `Cannot find module 'express'` | `Cannot find module '{module}'` |
| `User 12345 not found` | `User {id} not found` |
| `Connection refused 127.0.0.1:5432` | `Connection refused {host}:{port}` |
## Lookup Process
When encountering an error:
### 1. Generate Signature
```
Error: Cannot find module 'lodash'
|
v
Category: ModuleNotFound
Language: nodejs
|
v
Pattern: nodejs-module-not-found-*
```
### 2. Search Solutions
```bash
# Find matching solutions
ls .claude/error-solutions/ | grep "nodejs-module-not-found"
```
### 3. Check Match Quality
```yaml
# Compare error pattern
error:
pattern: "Cannot find module '{module}'" # Matches!
# Check context
context: "Starting Node.js server" # Same context!
```
### 4. Apply Solution
Follow the steps in `solution.immediate` or `solution.proper`.
### 5. Update Metadata
```yaml
metadata:
occurrences: 6 # Increment
last_resolved: "2024-01-20T14:30:00Z" # Update
```
## Best Practices
### Writing Good Solutions
1. **Be Specific**
```yaml
# Bad
root_cause: "Something wrong with dependencies"
# Good
root_cause: "Express package not in node_modules because npm install wasn't run after cloning"
```
2. **Include Commands**
```yaml
commands:
- "npm install express"
- "npm ls express" # Verify installation
```
3. **Document Verification**
```yaml
verification:
- "Server starts without error"
- "GET /api/health returns 200"
```
4. **Add Prevention**
```yaml
prevention:
- "Add postinstall check script"
- "Document setup in README"
```
### Organizing Solutions
**By Language/Framework:**
```
nodejs-*.yaml
python-*.yaml
react-*.yaml
```
**By Error Type:**
```
*-connection-refused-*.yaml
*-module-not-found-*.yaml
*-permission-denied-*.yaml
```
### Team Sharing
1. **Version Control**
```bash
# Add to git
git add .claude/error-solutions/
git commit -m "Add error solution: nodejs-module-not-found-express"
```
2. **Review Solutions**
- Include solutions in code review
- Validate accuracy before merging
3. **Maintain Currency**
- Update solutions when better fixes found
- Remove obsolete solutions
- Add timestamps for relevance
## Integration with Error Resolver
When using the error-resolver skill:
1. **Automatic Lookup**: Check replay history first
2. **Match Scoring**: Rate match quality (exact > pattern > category)
3. **Solution Application**: Apply known solution if high confidence
4. **Gap Analysis**: Identify missing patterns to record
5. **Continuous Learning**: Record new solutions after resolution
## Example Solutions
### Simple: Missing Dependency
```yaml
id: "nodejs-module-not-found-express"
error:
type: "dependency"
pattern: "Cannot find module 'express'"
solution:
immediate:
- "npm install express"
```
### Complex: Race Condition
```yaml
id: "react-state-update-unmounted"
error:
type: "runtime"
pattern: "Can't perform a React state update on an unmounted component"
context: "Async operation completing after component unmount"
diagnosis:
root_cause: "useEffect cleanup not cancelling async operations"
factors:
- "fetch() or setTimeout() completing after unmount"
- "No cleanup function in useEffect"
solution:
proper:
- "Add cleanup function to useEffect"
- "Use AbortController for fetch"
- "Track mounted state with ref"
code_change: |
useEffect(() => {
const controller = new AbortController()
fetch(url, { signal: controller.signal })
.then(res => res.json())
.then(setData)
return () => controller.abort()
}, [url])
```
### Environment-Specific: Docker
```yaml
id: "docker-permission-denied-volume"
error:
type: "permission"
pattern: "permission denied: '/app/data'"
context: "Docker container cannot write to mounted volume"
diagnosis:
root_cause: "Container user doesn't have write permission to host directory"
factors:
- "Container runs as non-root user"
- "Host directory owned by different user"
solution:
immediate:
- "chmod 777 /host/path" # Quick but not secure
proper:
- "Match container user ID to host user"
- "Use named volume instead of bind mount"
commands:
- "chown -R 1000:1000 /host/path"
```
Source: claude-code-templates (MIT). See About Us for full credits.