Two independent defects, both making the script report a correct checkout as
wrong. Neither is new; both were invisible because nobody ran it here.
1. `export/` is the exporter's OUTPUT and is gitignored (`/export*/`). A
checkout where nobody has run the exporter has no `export/` at all, so the
four `DECISIONS.md`/`BLOCKED.md` citations of `export/manifest.json` and
`export/screens/...` landed in "resolve NOWHERE" and the check exited 1 --
red for a state no edit can fix, which is the exact shape its own docstring
says it exists to avoid. `check-capture-citations` learned this for
`docs/re/captures/`; same rule now: absent BECAUSE UNBUILT is reported,
absent while the tree IS built still fails. Verified both ways -- `mkdir
export` and the same four go back to failing.
2. The selftest's peer-branch fixture cited
`docs/re/f5-a-press-snaps-the-plate.md`, which the consolidation made an
ordinary local file. The fixture stopped testing the scanner and started
reporting it broken; `PEER_REFS` also still named
`origin/auto/frame-blend-draw-path`, a branch that no longer exists. The
selftest now FINDS a peer-only path at runtime, and where none exists -- the
normal case on a clean checkout, measured: zero -- it says the class is empty
here rather than claiming a failure. The class itself stays: the next topic
branch that lands a finding recreates the condition exactly.
Measured: check 123 citations, 119 resolve, 4 unbuilt, 0 nowhere, exit 0 (was
exit 1). Selftest ok (was 🔴 BROKEN, on `main` too). The new generated-tree case
was confirmed to FAIL against the unfixed function first.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>