# doc-hygiene Claude Code plugin that monitors and manages **stale** and **bloated** project documentation. Installed globally, operates per-project. Reminds (deterministic, zero-token) on `SessionStart`; checks and cleans on demand via skills. > `PRD.md` is the historical source-of-truth design doc (see its top-of-file > migration note for current location). This file is a current-state index, > not a build map — the plugin is fully built (5 skills, tests passing). > Vault user guide (nuance/mental-model, not a how-to): > `~/Documents/SecondBrain/user-guide/os-doc-hygiene-user-guide.md`. ## Core distinction (do not conflate) - **Stale** = the doc is *wrong* (contradicted, orphaned, superseded, provisional, completed-in-place, duplicated). Remedy: fix or remove. - **Bloat** = the doc is *true but mostly irrelevant* (distill, split, freeze). Remedy: change its altitude, almost never delete history. Severity scales with **injection frequency** — a stale line in `CLAUDE.md` (auto -injected every session) is worse than the same line in a doc nobody opens. ## Component map - `skills/` — five skills: `check`, `clean`, `status`, `sweep`, `calibrate` (each `SKILL.md` + `workflows/`); see `skills/CONTEXT.md` for the index. - `scripts/` — deterministic Python core (scanner, state store, reminder, report builder, validator, patch applier, token estimator, rulebook, calibrate helpers); see `scripts/CONTEXT.md`. - `hooks/hooks.json` — `SessionStart` → `scripts/reminder.py` (banner only, no analysis, no mutation beyond `last_reminded`). - `tests/` — pytest suite covering every deterministic seam; see `tests/CONTEXT.md`. - `invariants.md` — the reversion-protection contract (numbered behavioral invariants); read before changing scanner, state, or safety-tier logic. - `examples/golden/` — golden classifier fixtures (Layer 2 of reversion protection, paired with `invariants.md`). - `lifecycle-spec.md` — the rulebook layer (global `rulebook.json` + per-project `.dochygiene-rules.json`) feeding tier derivation and the `calibrate` skill; decisions are ADR-0038–0041. - `openspec/` — this plugin's own OpenSpec changes/specs tree (archived changes correspond to shipped features). ## Conventions - **Language**: Python, OOP — small single-responsibility classes, dependency injection, immutable transforms where possible. See `../cc-architect/references/tool-patterns/deterministic-scripting.md`. - **Model routing**: scripts = no model; classification = Sonnet (hard cases → Opus); generative distillation = Sonnet (NOT Haiku). - **Reversion protection**: `invariants.md` + `examples/golden/` + human gate for changes to either. See `../cc-architect/references/tool-patterns/reversion-protection.md`. - Read a directory's `CONTEXT.md` before its source files (progressive disclosure). Changing any invariant requires updating `invariants.md` and the golden examples, with explicit human approval — do not restate the invariants here.