grep — Documentation Audit
Quality Audit
Find empty/thin adoc pages (<5 content lines)
for f in $(find docs/modules/ROOT/pages/codex -name '*.adoc'); do
body=$(grep -c '^[^:]' "$f" 2>/dev/null)
[ "$body" -lt 5 ] && echo "THIN ($body lines): $f"
done
Find pages missing :description: header
grep -rLP ':description:' --include='*.adoc' docs/modules/ROOT/pages/ | head -10
Find pages missing :navtitle: header
grep -rLP ':navtitle:' --include='*.adoc' docs/modules/ROOT/pages/ | head -10
Count pages per codex category
for d in docs/modules/ROOT/pages/codex/*/; do
count=$(find "$d" -name '*.adoc' | wc -l)
echo "$count $(basename $d)"
done | sort -rn
Find duplicate document titles
grep -rhP '^= ' docs/modules/ROOT/pages/ | sort | uniq -d
Orphaned partials — included by nothing
for p in docs/modules/ROOT/partials/codex/grep/*.adoc; do
name=$(basename "$p")
refs=$(grep -rl "$name" docs/modules/ROOT/pages/ 2>/dev/null | wc -l)
[ "$refs" -eq 0 ] && echo "ORPHAN: $p"
done
AsciiDoc Linting
Find unescaped pipes in tables (build error prevention)
grep -nP '^\|.*`[^`]*(?<!\\)\|[^`]*`' docs/modules/ROOT/**/*.adoc
# Real catch: | `[object] | Get-Member` → should be | `[object] \| Get-Member`
Find hardcoded IPs (STD-019 violation)
grep -rnP '\b10\.50\.\d+\.\d+\b' --include='*.adoc' docs/modules/ROOT/pages/
Find inline TOC violations (STD-004)
grep -rnP '^:toc:' --include='*.adoc' docs/
Find missing description headers
grep -rLP ':description:' --include='*.adoc' docs/modules/ROOT/pages/
Verify xref fix — negative lookbehind excludes escaped instances
grep -rnP '(?<!\\)\{search_id\}' --include='*.adoc' docs/modules/ROOT/
# Returns nothing = all escaped
Find broken xrefs after directory rename
grep -rnP 'xref:codex/cli/' --include='*.adoc' docs/modules/ROOT/