doc-drift-scanlisted
Install: claude install-skill adnanmokhtar/refract
# doc-drift-scan
Cross-check every claim in the `ai/` knowledge base + `CLAUDE.md` against the source tree, package manifest, env example, and migrations.
## Premise
**Three different failures wear the same word "drift", and they have three different fixes. Every finding names its axis before anything else:**
| Axis | The doc says… | …and the truth is | The fix |
|---|---|---|---|
| **DEAD** | X exists | X was deleted or renamed | delete the reference, or repoint it at the new name |
| **WRONG** | X behaves like this | X exists but behaves differently (signature, default, flag, shape) | correct the description — the reference is fine, the claim is false |
| **UNDOCUMENTED** | *nothing* | X exists and is public | write the missing entry |
Collapsing these is the classic failure of a drift report: a reader who sees "BROKEN" cannot tell whether to delete a line or rewrite it, and an absence has no doc line to cite at all so it silently never gets a row. **DEAD** and **WRONG** are both `BROKEN` in severity (a doc that lies blocks a PRODUCTION-GRADE verdict); **UNDOCUMENTED** is counted separately, because nothing is lying — something is simply missing, and a scan that folds absences into the lie count makes both numbers useless.
Find real issues, cite `<path:line>` for every drift finding. Each "MISSING" reports the doc location + the referenced artifact + the verification command that returned negative. File refs come from `rg` output; missing scripts from `jq` against `pa