Real transactions, a pure-Python core, and the full Mongo CLI toolchain
Summary: The first PyPI release since v0.5.2b7 bundles real multi-document transactions, a Rust-free pure-Python core, richer change streams, and a wave of indexing and conformance work (v0.5.3b7).
This is the first release on PyPI since v0.5.2b7, and it carries a lot. The
headline is real multi-document transactions — single-node, WiredTiger-backed,
with startTransaction / commitTransaction / abortTransaction driving an
actual WT user transaction under the hood, not a stub. Alongside it, the Python
server is now pure Python with no Rust dependency in the request path: the
operator engines run as plain Python again, and numeric types (int32 vs int64 vs
double vs Decimal128) round-trip through updates and aggregation exactly as
mongod returns them.
Change streams grew up this cycle. They now report create, modify, and richer
DDL events; a resumed stream returns its backlog on open instead of starting
empty; and the internal oplog is queryable as a tailable local.oplog.rs capped
collection, so replication-style tailing works the way drivers expect. The whole
MongoDB CLI toolchain — mongosh, mongodump, mongorestore, and friends — now
runs against an embedded SecantusDB.
Underneath, a broad sweep of indexing and conformance work landed: clustered
collections, OP_MSG exhaust cursors, cursor min() / max() index bounds,
partial indexes serving range-on-indexed-field queries, parse-time update
validation, and $exists: true riding a sparse index at IXSCAN instead of
scanning the collection. A shutdown-race fix makes server teardown drain its
in-flight connections cleanly before closing storage. The pymongo conformance
gauge sits at 99.2%, with the remaining failures all features outside a single
node's scope.