Customer reported fetch-by-key returning found=False on a paper that was definitely in the collection. Spent a while staring at the wire protocol, the WAL, the index. All clean. Then watched two processes hash the same string side-by-side and get different u128s.

Rust's DefaultHasher uses SipHash with a random seed per process. Intentional, it's DoS-protection for HashMap. Also exactly wrong for any case where you're hashing a string in process A and looking it up in process B. Source had been hashing at ingest with its seed, worker at fetch with its own. Same string, two different keys. Switched to xxh3_128. Deterministic by construction. Existing collections needed re-ingest. The default for hashing a string in Rust is, very deliberately, not a content-addressable hash. I'd just been getting away with it because everything had been in one process up until now.