Wiki Health Check — 2026-06-21 (post-restructuring)
A second structured lint pass per CLAUDE.md §5.3, run immediately after the risk-score-retirement restructuring (99 platform pages edited, index.md fully rewritten, CLAUDE.md schema updated, 6 new/rewritten concept pages). Large mechanical edits at that scale carry real regression risk, so this pass treats the restructuring as the thing under test, not just a routine check. Covers all 99 platform pages and 34 concept pages.
1. Orphan check — PASS
Every file in pages/platforms/ and pages/concepts/ is reachable from pages/index.md or cross-linked from another concept page. Zero orphans across 99 platform pages and 34 concept pages.
2. Broken link check (path-level) — 1 ISSUE FOUND AND FIXED
The Phase 3 rewrite of index.md’s “Methodology & Reference Pages” and “Synthesis Pages” sections used bare filenames (methodology.md, risk_scoring_pgav2.md, weare_suite.md, related_work.md, verification_report.md, tier_bifurcation.md, scraper_enforcement_gap.md) instead of concepts/-prefixed paths — 8 broken links in total, since index.md lives in pages/ while these files live in pages/concepts/. Fixed: all 8 corrected to concepts/{file}.md. Re-verified: 0 broken links remain.
3. Broken link check (anchor-level) — 1 ISSUE FOUND AND FIXED
The path-level checker doesn’t validate #fragment anchors, so a second pass parsed every linked target’s actual headings. Found one genuinely dead anchor: pages/concepts/output_ownership.md linked to risk_scoring_genga.md#formal-scoring-specification — a section that no longer exists, because risk_scoring_genga.md was restructured in an earlier turn (its old “Formal Scoring Specification” section was replaced with “GenGA-Specific Parameters”/“Worked Example”/“GenGA-Specific Limitation”). Fixed: rewrote the referencing sentence to drop the dead anchor and reframe the claim as a reading caution rather than an active scoring rule, consistent with scoring’s retirement. Re-verified: 0 broken anchors remain across the wiki.
4. Staleness check — PASS
Cross-checked all 99 rows in index.md’s two Platform/Provider Overview tables against the actual latest ### {date} heading in each corresponding platform page. 0 mismatches.
5. Threshold check — PASS (1 known non-issue re-confirmed)
Scanned every platform page’s **Flagged keywords:** line for keyword frequency. 23 of 30 distinct keywords meet the 3-platform threshold; all 23 have a corresponding concept page. The one apparent gap (prepare derivative, 4 platforms) is the same already-documented non-issue from the 2026-06-21 (first) lint pass — it’s handled as a named variant inside derivative_works.md and create_derivative.md, re-confirmed present in both.
6. Contradiction check — 4 ISSUES FOUND AND FIXED
Specifically targeted at self-consistency between the restructuring’s “risk scoring is retired” framing and the content of pages that predate that decision:
risk_scoring_unified.mdstill opened with “Status: Phase 1 draft… pending review before Phase 2” and closed with a section titled “What this page does NOT do (pending your review)” — both directly contradicted reality (Phase 2/3 happened, then the whole system was retired). Fixed: rewrote the status line and the closing section as a historical record of what actually happened.risk_scoring_pgav2.mdandrisk_scoring_genga.mdpresented themselves as live, in-effect parameter pages with no indication of retirement. Fixed: added a “Status: Historical — retired 2026-06-21” banner to both, matching the framing already used for them inindex.md’s catalog.risk_scoring_genga.md’s claim that GenGA scores “remain LLM-assigned… why this has not changed” was also factually wrong post-retirement (no GenGA page displays a score at all anymore) — corrected to past tense.genga_vs_pgav2_comparison.mddescribed PGAv2-side claims as reflecting “the externally-tagged JSONL risk scores already in the wiki” — stale, since no score is displayed anywhere now. Fixed: reworded to reference the underlying keyword/category data (which the page’s actual analysis depends on, not scores) and added a note that the page predates the retirement but is unaffected by it.- A real numeric error, caught while writing this report:
methodology.md,verification_report.md(×2), andindex.md’s new opening line all stated PGAv2 has 97 total JSONL source files; the actual count (verified via direct directory listing, bothlsand a NodereaddirSynccross-check) is 96 — there’s also a non-JSONLprocessed_hashes.jsonfile in that directory that may have caused the earlier miscount. Fixed in all 4 locations (43-of-96 ingested, 53 remaining backlog, not 54).
7. Formatting check — 6 FILES FLAGGED, NOT AUTO-FIXED (see rationale)
Scanned all 136 wiki/schema files for tab characters, trailing whitespace, and 3+ consecutive blank lines. Zero tab issues, zero blank-line-run issues. 6 files have trailing whitespace, all inside > block-quoted clause text: Facebook_Terms_of_Service.md, Instagram_Other.md, Instagram_Privacy_Policy.md, Reddit_Terms_of_Service.md, Spotify_Terms_of_Service.md, YouTube_Privacy_Policy.md. Two of Reddit_Terms_of_Service.md’s instances are trailing double spaces at the end of clause fragments — the Markdown hard-line-break convention — which is plausibly verbatim-preserved source structure rather than scraper noise. Not auto-fixed: per CLAUDE.md’s “never paraphrase legal text” rule, altering whitespace inside a verbatim block quote is a content change to verify against the raw source first, not a safe mechanical cleanup; these predate this session’s edits and were not introduced by the restructuring. Flagged here for the same reason the first lint pass flagged (but didn’t fix) the UpScrolled/Upscrolled naming inconsistency — a known, low-priority, deliberately-not-auto-fixed item.
8. Naming inconsistency — STILL OPEN (re-confirmed, not fixed)
Upscrolled_Terms_of_Service.md’s filename and **Source:** field use “Upscrolled” (matching sources/jsonl/Upscrolled_*.jsonl); the page’s H1 title and both index.md references still use “UpScrolled” (camelCase). Same item flagged in the first lint pass (2026-06-21 11:15), not yet resolved. Cosmetic only — confirmed all links still resolve correctly.
Summary
| Check | Result |
|---|---|
| Orphan pages | 0 found |
| Broken links (path) | 8 found, all fixed |
| Broken links (anchor) | 1 found, fixed |
| Stale “latest date” references | 0 found (99/99 verified) |
| Missing concept pages (3+ threshold) | 0 found (1 known non-issue re-confirmed) |
| Contradictions (retirement self-consistency) | 3 found, fixed |
| Numeric errors | 1 found (97→96 source-file count, 4 locations), fixed |
| Formatting anomalies | 6 files flagged, not auto-fixed (verbatim-quote rule) |
| Naming inconsistencies | 1 found, still open (unchanged from prior pass) |
This pass earned its keep. Every fix above was a real regression from the restructuring’s scale (8+1 broken links, 3 stale-status contradictions, 1 propagated numeric error) — none were hypothetical. The mechanical, scripted approach (orphan/link/staleness/threshold checks via Node, not manual reading) is what made checking all 99+34 files tractable; the contradiction check specifically targeted the seam between “what the restructuring changed” and “what every other page still assumed,” which is exactly where this kind of error hides after a large edit.
See also: lint_report_2026-06-21.md · methodology.md · verification_report.md