refactor(bans): single source of truth for banned DIDs (banned-dids.txt)
The ban list lived in four places across two languages (policy.zig, ingester,
both purge scripts) — adding crownnote meant editing all four, exactly the
smell the exclusions doc flagged as debt. Consolidate to /banned-dids.txt at
the repo root:
- Zig (backend + ingester): wired in via build.zig as an anonymous import,
@embedFile'd and parsed at comptime into BANNED_DIDS. The existing
policy.zig tests (exact DIDs + exact banned_dids_sql string) guard the parse.
- Python (both purge scripts): read the file at runtime.
DIDs now live in exactly one place; each consumer references it. Registry of
who/why/evidence stays in docs/exclusions.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>