This skill should be used when the user asks to "track feature completion", "check progress", "verify all features pass", "count passing tests", "show completion status", or "update...
This skill provides guidance for tracking and managing progress in autonomous coding projects using the .spec/feature_list.json file as the single source of truth.
Progress tracking in autonomous coding projects centers on .spec/feature_list.json, which contains all test cases that need to be implemented. Each feature has a "passes" field that indicates completion status.
.spec/feature_list.json is an array of test cases:
[
{
"id": 1,
"category": "functional",
"description": "User can login with email and password",
"steps": [
"Navigate to /login",
"Enter email and password",
"Click submit button",
"Verify redirect to dashboard"
],
"passes": false
}
]
Count all features in the list:
cat .spec/feature_list.json | jq '. | length'
Or with grep:
cat .spec/feature_list.json | grep '"id":' | wc -l
Count features with "passes": true:
cat .spec/feature_list.json | jq '[.[] | select(.passes == true)] | length'
Or with grep:
cat .spec/feature_list.json | grep '"passes": true' | wc -l
Count features with "passes": false:
cat .spec/feature_list.json | grep '"passes": false' | wc -l
PASSING=$(cat .spec/feature_list.json | jq '[.[] | select(.passes == true)] | length')
TOTAL=$(cat .spec/feature_list.json | jq '. | length')
echo "scale=1; $PASSING * 100 / $TOTAL" | bc
Generate a human-readable progress summary:
=== Development Progress ===
Total Features: 30
✓ Completed: 15 (50%)
○ Remaining: 15 (50%)
Category Breakdown:
Functional: 10/20 (50%)
Style: 5/10 (50%)
Feature Breakdown by Status:
- Authentication: 3/3 (100%)
- User Interface: 7/10 (70%)
- Data Management: 3/5 (60%)
- API Integration: 2/7 (29%)
After implementing and verifying a feature, update the "passes" field:
CRITICAL: Only modify the "passes" field. Never:
{
"id": 1,
"category": "functional",
"description": "User can login with email and password",
"steps": [...],
"passes": true // ← Only change this field
}
Only mark a feature as "passes": true AFTER:
Before marking as passing, verify:
Find the first feature with "passes": false:
cat .spec/feature_list.json | jq '[.[] | select(.passes == false)] | .[0]'
cat .spec/feature_list.json | jq '[.[] | select(.passes == true)]'
Find all functional features:
cat .spec/feature_list.json | jq '[.[] | select(.category == "functional")]'
Find all style features:
cat .spec/feature_list.json | jq '[.[] | select(.category == "style")]'
Maintain .spec/claude-progress.txt with session notes:
# Session - [Date]
## Accomplished
- Implemented feature #1: User login
- Implemented feature #2: Password reset
## Tests Completed
- Test #1 now passing
- Test #2 now passing
## Issues Found and Fixed
- Fixed login form validation
- Fixed redirect after login
## Next Session
- Implement feature #3: User profile
- Implement feature #4: Settings page
## Current Status
15/30 tests passing (50%)
Track progress by feature category:
# Functional features
FUNC_PASSING=$(cat .spec/feature_list.json | jq '[.[] | select(.category == "functional" and .passes == true)] | length')
FUNC_TOTAL=$(cat .spec/feature_list.json | jq '[.[] | select(.category == "functional")] | length')
# Style features
STYLE_PASSING=$(cat .spec/feature_list.json | jq '[.[] | select(.category == "style" and .passes == true)] | length')
STYLE_TOTAL=$(cat .spec/feature_list.json | jq '[.[] | select(.category == "style")] | length')
Each completed feature should be committed:
git add .spec/feature_list.json
git commit -m "Implement [feature name] - verified end-to-end
- Added [specific changes]
- Tested with browser automation
- Updated .spec/feature_list.json: marked test #X as passing
"
Run /show-progress or manually check:
echo "Total: $(cat .spec/feature_list.json | jq 'length')"
echo "Passing: $(cat .spec/feature_list.json | jq '[.[] | select(.passes == true)] | length')"
echo "Remaining: $(cat .spec/feature_list.json | jq '[.[] | select(.passes == false)] | length')"
Find the first non-passing feature:
cat .spec/feature_list.json | jq '[.[] | select(.passes == false)] | .[0]'
Check if all features pass:
REMAINING=$(cat .spec/feature_list.json | jq '[.[] | select(.passes == false)] | length')
if [ "$REMAINING" -eq 0 ]; then
echo "✓ All features complete!"
else
echo "○ $REMAINING features remaining"
fi
Initialize project first:
/start-project spec="Your project spec"
Normal for new projects. Begin implementation:
/continue
Project is complete! Review and deploy.
Previous session may have introduced bugs. Fix before implementing new features:
For detailed feature validation processes and browser verification workflows, consult:
references/feature-validation.md - Comprehensive feature validation guide with testing strategiesreferences/verification-workflows.md - Step-by-step verification proceduresThe scripts/ directory contains helper scripts:
scripts/check-progress.py - Automated progress checking with detailed outputscripts/update-progress.py - Safe progress updates with validationbrowser-verification - Detailed browser automation testing guidance