| name | pre-push-validation |
| description | Ensures CLAUDE.md, README.md, and CHANGELOG.md are updated before git push operations |
| version | 1.0.0 |
| author | Tom Cranstoun |
| trigger_type | intent |
| keywords | git push, commit push, pushing changes, before push, validate docs, check documentation |
| intent_patterns | push.*changes, git push, ready.*push, update.*push |
| enforcement | suggest |
Pre-Push Validation Skill
Ensures critical documentation files are updated before pushing changes to the repository.
What This Skill Does
Automatic validation before git push - The pre-push hook checks that documentation is current:
- CHANGELOG.md - Must document your changes
- README.md - Must reflect any project structure changes
- CLAUDE.md - Must reflect any AI instruction changes
How It Works
Pre-Push Hook
The hook .claude/hooks/pre-push-validation.sh runs automatically before git push operations:
Validation Logic:
- ✅ Checks commit dates - Documentation must be updated since oldest unpushed commit
- ✅ Detects uncommitted changes - Warns if docs have uncommitted changes
- ✅ Validates file existence - Ensures all critical files exist
- ❌ Blocks push - If documentation is outdated relative to code changes
Example Output:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 PRE-PUSH VALIDATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 Commits to push: 3
🌿 Branch: main → origin/main
📝 Checking documentation files...
✓ CLAUDE.md: Updated 2025-12-10
✓ README.md: Updated 2025-12-10
❌ CHANGELOG.md: Not updated since 2025-12-09
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ VALIDATION FAILED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Please update the following files before pushing:
• CHANGELOG.md
💡 Tips:
1. Update CHANGELOG.md with your changes
2. Update README.md if project structure changed
3. Update CLAUDE.md if AI instructions changed
4. Commit your documentation updates
5. Push again
When to Update Each File
CHANGELOG.md (Required for ALL commits)
Always update when:
- Adding new features
- Fixing bugs
- Refactoring code
- Changing dependencies
- Modifying configuration
- Updating documentation
Format:
## [YYYY-MM-DD<letter>] - Brief Title
### Added/Changed/Fixed/Removed
- Detailed description of changes
- Impact and rationale
- Technical details
### Files Modified
1. `path/to/file.js` - Description
2. `path/to/file.css` - Description
**Total: X files modified**
README.md (Update when project changes)
Update when:
- Adding new blocks or components
- Changing project structure
- Adding new npm scripts
- Modifying development workflow
- Adding new dependencies
- Changing infrastructure
CLAUDE.md (Update when AI instructions change)
Update when:
- Adding new coding patterns
- Changing project conventions
- Adding new skills or commands
- Modifying development requirements
- Updating architecture decisions
- Changing configuration patterns
Using the Skill
Before Every Push
Review your commits:
git log origin/main..HEAD --onelineUpdate documentation:
- CHANGELOG.md - Document all changes
- README.md - Update if structure changed
- CLAUDE.md - Update if AI instructions changed
Commit all changes (including user edits):
git add . git commit -m "docs: Update documentation for [feature/fix]"Push with confidence:
git pushThe hook will validate and either allow or block the push.
Bypassing Validation (NOT RECOMMENDED)
If you absolutely must push without updating documentation:
git push --no-verify
⚠️ Warning: Only use this for:
- Emergency hotfixes
- Work-in-progress branches
- Documentation-only changes
Never use --no-verify for main/production branches.
Hook Installation
The hook is automatically available in Claude Code projects. To verify:
ls -la .claude/hooks/pre-push-validation.sh
Should show executable permissions: -rwxr-xr-x
If not executable:
chmod +x .claude/hooks/pre-push-validation.sh
Workflow Integration
Recommended Git Workflow
- Make code changes - Implement features/fixes
- Commit code -
git commit -m "feat: Add new feature" - Update documentation - CHANGELOG.md, README.md, CLAUDE.md as needed
- Commit documentation -
git commit -m "docs: Document new feature" - Push -
git push(hook validates automatically)
Multi-Commit Sessions
If you have multiple commits:
# Commits in current session
git log origin/main..HEAD --oneline
# The hook checks documentation is newer than ALL unpushed commits
Best Practice: Update documentation as you go, not at the end.
Troubleshooting
"VALIDATION FAILED" Error
Problem: Documentation files are outdated compared to code commits.
Solution:
- Check which files need updating (listed in error message)
- Update those files with your changes
- Commit all changes (including user edits):
git add . && git commit -m "docs: Update documentation" - Try pushing again:
git push
"Has uncommitted changes" Warning
Problem: Documentation file has uncommitted changes.
Solution:
- Review changes:
git diff [file] - Stage all changes:
git add . - Commit changes:
git commit -m "docs: Update [file]" - Push:
git push
Hook Not Running
Problem: Push succeeds without validation.
Possible causes:
- Hook file not executable - Run:
chmod +x .claude/hooks/pre-push-validation.sh - Not in git repository - Verify:
git rev-parse --is-inside-work-tree - New branch without upstream - Expected behavior, validation skipped
Benefits
- Consistent Documentation - Forces documentation updates before push
- Better Change History - CHANGELOG.md always current
- Team Alignment - Everyone knows what changed and why
- AI Assistant Context - CLAUDE.md stays current with project changes
- Prevents "I forgot to document" - Automated validation reminder
Configuration
The hook is configured via critical files array in the script:
CRITICAL_FILES=(
"CLAUDE.md"
"README.md"
"CHANGELOG.md"
)
To add more files, edit .claude/hooks/pre-push-validation.sh and add to the array.
See Also
- Hook configuration:
.claude/hooks/CONFIG.md - Git hooks documentation:
.claude/hooks/README.md - CHANGELOG format:
CHANGELOG.md(see existing entries) - README structure:
README.md(top-level sections) - CLAUDE.md patterns:
CLAUDE.md(configuration patterns section)