Verify Documentation
Check documentation for consistency and completeness.
Usage
code
/docs-verify
Checks Performed
1. Rule Count Matches CLAUDE.md
bash
ACTUAL=$(ls .claude/rules/*.md 2>/dev/null | wc -l | tr -d ' ')
LISTED=$(grep -c '^- `.*\.md`' CLAUDE.md)
if [ "$ACTUAL" -eq "$LISTED" ]; then
echo "✓ Rule count matches: $ACTUAL rules"
else
echo "✗ Mismatch: $ACTUAL files, $LISTED listed in CLAUDE.md"
echo " Actual files:"
ls .claude/rules/*.md
fi
2. Check for Duplicate Type Definitions
bash
echo ""
echo "Checking for Player struct definitions..."
PLAYER_DEFS=$(grep -l "struct Player" .claude/rules/*.md docs/**/*.md 2>/dev/null)
echo " Should appear in:"
echo " - .claude/rules/game-state.md (CANONICAL)"
echo " - docs/api/types.md (reference to canonical)"
echo ""
echo " Found in:"
echo "$PLAYER_DEFS" | while read file; do
if [ ! -z "$file" ]; then
HAS_CANONICAL=$(grep -c "CANONICAL" "$file" 2>/dev/null || echo "0")
if [ "$HAS_CANONICAL" -gt 0 ]; then
echo " ✓ $file (CANONICAL)"
else
echo " → $file (reference)"
fi
fi
done
3. Skill Count Matches
bash
echo ""
SKILL_DIRS=$(ls -d .claude/skills/*/ 2>/dev/null | wc -l | tr -d ' ')
SKILL_ROWS=$(grep -c '^| `/.*`' CLAUDE.md)
if [ "$SKILL_DIRS" -eq "$SKILL_ROWS" ]; then
echo "✓ Skill count matches: $SKILL_DIRS skills"
else
echo "✗ Mismatch: $SKILL_DIRS directories, $SKILL_ROWS in table"
echo " Skill directories:"
ls -d .claude/skills/*/
fi
4. Cross-References Valid
bash
echo ""
echo "Checking cross-references in CLAUDE.md..."
grep -oh 'docs/[^)]*\.md' CLAUDE.md | sort -u | while read file; do
if [ -f "$file" ]; then
echo " ✓ $file exists"
else
echo " ✗ $file referenced but not found"
fi
done
5. Agent Count
bash
echo ""
AGENT_FILES=$(ls .claude/agents/*.md 2>/dev/null | wc -l | tr -d ' ')
echo "Agents: $AGENT_FILES files"
ls .claude/agents/*.md 2>/dev/null | while read file; do
AGENT_NAME=$(basename "$file" .md)
echo " → $AGENT_NAME"
done
6. GitHub Templates Exist
bash
echo ""
echo "Checking GitHub issue templates..."
TEMPLATES=("bug_report.md" "feature_request.md" "task.md" "config.yml")
LABELS_FILE=".github/labels.json"
for template in "${TEMPLATES[@]}"; do
if [ -f ".github/ISSUE_TEMPLATE/$template" ]; then
echo " ✓ $template"
else
echo " ✗ $template missing"
fi
done
if [ -f "$LABELS_FILE" ]; then
LABEL_COUNT=$(jq 'length' "$LABELS_FILE" 2>/dev/null || echo "?")
echo " ✓ labels.json ($LABEL_COUNT labels defined)"
else
echo " ✗ labels.json missing"
fi
Final Report
Generate summary report:
code
Documentation Verification Report =================================== Date: [timestamp] Rules: [X/Y] ✓ Skills: [X/Y] ✓ Agents: [N] ✓ Cross-references: [Status] GitHub templates: [X/4] ✓ Issues Found: [count] [List any issues] Recommendations: [If issues found, suggest fixes]
Example Output
code
Documentation Verification Report =================================== ✓ Rule count matches: 8 rules ✓ Player struct found in correct locations ✓ Skill count matches: 19 skills ✓ All cross-references valid ✓ Agents: 6 files → architect → bug-hunter → code-reviewer → game-designer → play-tester → test-runner ✓ GitHub templates: 4/4 ✓ ✓ bug_report.md ✓ feature_request.md ✓ task.md ✓ config.yml ✓ labels.json (16 labels defined) Issues Found: 0 Last verified: 2026-01-25 18:45:00 Status: All checks passed ✓
Use Cases
Before committing documentation changes:
code
/docs-verify → Ensure all references are consistent
After adding new skill:
code
/docs-verify → Check skill count matches CLAUDE.md
Weekly maintenance:
code
/docs-verify → Catch any drift or inconsistencies
Notes
- •Non-destructive: only reads files, never modifies
- •Can be run anytime without risk
- •Use
/docs-updateto fix issues found - •Requires jq for JSON parsing (labels.json check)