The check asserts that every make target named in a doc exists, and its scanned set was .pi/ plus CLAUDE.md. Since #50, CONTRIBUTING.md is the document a *human* goes to for a build command, and it names 21 targets that nothing verified; README.md names none today and is in for the same reason. The script's own header sentence is the argument — a renamed target sends a person off the same cliff it sends an agent off. The file list is now one `docs` variable used twice, because the failure message carried a second copy of it and a second list is a second thing to forget. The `[ -d .pi ]` guard went with it: gating the whole run on .pi/ would make the human-facing half conditional on the agent-facing one, and an empty list is the same "nothing to scan" exit without the coupling. The lefthook glob is that scanned set now rather than {Makefile,.pi/**/*.md} — #220's smaller half, and it did not fire on CLAUDE.md either, which the script had read for months. Verified by planting a bad target rather than by reading the diff: both matched forms in each of the four scanned surfaces, each naming the right file; the same two plants pass on the pre-change script; unfenced prose still does not match; and the hook fires on a staged CONTRIBUTING.md under the new glob where the old one skipped it. The count is unchanged at 47 — the set is a union — so coverage is the only thing that moved. Closes #220