The drivers found the bugs this time
Summary: The drivers found the bugs this time (v0.6.0b16).
Six of the nine entries below started as a driver-conformance failure rather
than a failing unit test, and two of them could only have been found that way.
The C driver asserts on the exact text of the error a change stream returns
when a pipeline modifies the event _id; SecantusDB returned the right code
with its own paraphrase, so the assertion failed and pymongo — which never
checks that string — had been passing it for months. The Go driver sends
maxTimeMS: 0 to mean "tell me what is ready right now"; SecantusDB treated an
explicit zero the same as an absent field and waited a second, long enough for
an unrelated event to land inside the wait and be handed back to a client that
had asked what was ready when it asked.
Both are the sort of divergence a permissive client never notices and a strict one fails on immediately. In each case the Rust server was already right and the Python server carried its own approximation, which is a useful thing to know: when the two disagree, the Rust side has usually been checked against mongod more recently.
Alongside those, arithmetic got stricter. $inc and $mul now reject
non-numeric operands with mongod's own error text instead of returning 500s or
writing silently, and Decimal128 arithmetic is exact on both servers rather
than routed through binary floating point. A differential harness that compares
every operator against a live mongod — the thing that turned up nine of these
— is now part of the test suite rather than a one-off script.
Tail latency improved as well: p99.9 relative to mongod moved from 1.48× to
1.18×, measured on dedicated cloud instances as part of cutting this
release.