Every checker is Rust now

Six ported, 17 scripts down to 11, 119 tests up to 161. guards, counts, doccheck, compat, protocol and protocol --selftest are obscene-tool subcommands, and the verify.sh stages and CI step point at them.

compat and protocol ported without behavioural change, and both were proved by differential rejection rather than by agreement. compat renders a table compared byte-for-byte against the committed document, so both versions producing "current" means both produced identical markdown. protocol was run against its own thirteen mutations - an unknown verb answered, a sequence going backwards, a capability never announced, a bytes run one nibble too long - and both caught all thirteen. Agreement on clean input proves nothing; that is exactly how the Python guard passed for months while skipping eight rows.

Three things worth keeping from the port itself:

Remaining Python is four analysis scripts and seven generators. Five of the generators are gated in verify.sh, so those are next.