← Binderdex dev log

2026-09-23

2026-09-23-fast-path-unshipped-parity-check

flowchart TD
  A[new fast source] -->|ship behind flag| B{parity check}
  B -->|counts match| C[default: fast]
  B -->|any gap| D[default: verified]

A parity check caught it before collectors did

Monday night we switched Binderdex imports to a quicker way of reading a collector’s public showcase. Same cards, less waiting, and the tests all passed. By Tuesday morning a parity check told a different story.

The routine compares what the new source counts against what the trusted one counts. On a real, live showcase they disagreed: the quick source came back short. Not on a synthetic fixture, on someone’s actual collection. We still don’t know exactly why it drops items, and until we do, the argument for speed doesn’t matter. When two sources disagree and you can’t explain the gap, the new one loses by default.

So we flipped the default back within hours. You should see complete showcases on import again; nothing changed on your side except the speed we’d borrowed got returned. The quick path stays in the codebase as an explicit opt-in while we hunt the undercount.

The takeaway: trust is a flag you flip last

The pattern we’ll reuse (and the one I’d hand any team adding a second data source): keep the verified-but-slow path as the default, ship the fast path behind a flag, and promote it only after a parity check passes on real data, repeatedly. The check is cheap. The bug it catches is the kind users find for you, which is the worst way to find out.

Decision flow: a new fast data source ships behind a flag, a parity check compares counts against the verified source, and only a full match promotes it to default
Parity before promotion: any gap keeps the fast source opt-in.

this is the build log of binderdex · www.binderdex.com · all entries · essays