The errors are the feature
Summary: The errors are the feature (v0.6.0b17).
For three weeks the work was almost entirely about what SecantusDB says when
something is wrong. Rejecting a malformed command is easy; rejecting it the way
mongod does — same code, same message, validated in the same order, so a
driver's own error handling behaves identically — is what makes a surrogate
usable rather than merely available. Three hundred and forty-one slices landed
in this release, and the largest group of them move an error from "generic" to
"mongod's".
Fourteen were worse than a wrong message. A null argument to createIndexes,
malformed cursor arguments, non-numeric input to $stdDevPop, a NaN in $expr,
an integer overflow in the update path — these crashed the server rather
than raising. They are fixed, and the wrong-type sweep across the command
surface now reports zero divergences. A crash is not a bad error message; it is
the absence of one, and in a database it takes the connection with it.
The Rust PostgreSQL server grew up over the same period — client_encoding,
composite types over the binary wire, column precision and scale, backend
termination and cancellation, two-phase commit — and a column-level UNIQUE
that had been accepted and then silently not enforced, which is data corruption
rather than a missing feature. Both Rust binaries now stamp the git tree they
were built from and report it in --version, because an artifact older than the
tree it is tested against produces failures that look like somebody else's
regression, and the evidence is never in the diff.
The binaries themselves were the last thing to get that treatment, and they
needed it. Both published macOS archives linked liblz4 by its absolute Homebrew
path and would not launch on a Mac that did not happen to have Homebrew lz4
installed there; the Linux archives wanted liblz4.so.1 and libz.so.1 from
the host, which a slim container image often does not carry. Both are fixed —
every archive now links only its platform's own C runtime — but the more useful
change is that the release no longer takes anyone's word for it. Before an
archive is packaged, the workflow reads the binary's real dependency table
(Mach-O load commands, ELF DT_NEEDED, or the PE import directory) and refuses
to publish one that reaches outside a per-platform allowlist. The macOS bug had
survived every build, test and smoke run for two releases because the machine
that builds the artifact is the one machine where it works.