# Cross-Driver Conformance Summary Generated 2026-05-15 — SecantusDB 0.5.1b11. Each per-driver gauge runs the driver vendor's own integration test suite (unmodified) against a SecantusDB daemon and emits its raw output to `.validation/`. This summary normalises on **test count** so the five gauges compare like for like — every row counts one assertion outcome, whether it landed as a JUnit ``, a Mocha test, an RSpec example, a `go test` event, or a pytest collected item. **Failures split into two columns**: *Failed* counts tests that actually need a fix on SecantusDB; *Expected* counts tests with a documented reason for failing (driver-side cascade, out-of-scope feature, single-node-topology assumption, known intermittent flake). The expected list lives in `validation_summary/expected_failures.py` and each entry carries a rationale. Adjusted pass rate = passes ÷ (passes + actual failures). ## Summary by driver | Driver | Language | Driver version | Tests run | Passed | Failed | Expected | Skipped | Pass rate | Adjusted | |---|---|---|---:|---:|---:|---:|---:|---:|---:| | `pymongo` | Python | `f2103a95870a` | 1341 | 959 | 0 | 0 | 382 | 100.0% | 100.0% | | `mongo-java-driver` | Java | `cb45be6bb147` | 4710 | 4245 | 0 | 1 | 464 | 100.0% | 100.0% | | `mongo-go-driver` | Go | `fd85a834c40e` | 453 | 399 | 0 | 2 | 52 | 99.5% | 100.0% | | `mongo-node-driver` | Node.js | `7e53685952f2` | 364 | 358 | 0 | 1 | 5 | 99.7% | 100.0% | | `mongo-ruby-driver` | Ruby | `f68d676643c1` | 318 | 293 | 0 | 1 | 24 | 99.7% | 100.0% | | **All drivers** | — | — | **7186** | **6254** | **0** | **5** | **927** | **99.9%** | **100.0%** | ## Per-driver scope - **`pymongo`** — curated pytest paths under vendor/pymongo-tests/test/. - **`mongo-java-driver`** — 21 of 112 driver-sync functional classes + bson unit tests. - **`mongo-go-driver`** — vendor/mongo-go-driver/internal/integration/.... - **`mongo-node-driver`** — curated test/integration/ spec set. - **`mongo-ruby-driver`** — curated spec/mongo/*.rb spec files. ## Expected failures These tests fail for documented reasons that have no SecantusDB-side fix (driver-internal behaviour we can't influence, features intentionally out of scope, single-node topology assumptions in tests that assume a 3-node replica set, etc.). Each entry has a rationale in `validation_summary/expected_failures.py`. If you fix one of these gaps, delete its entry there. ### `mongo-java-driver` (1) - **CRUD Api Version 1 (strict): distinct appends declared API version** — apiStrict rejection on the `distinct` command-name triggers a `MongoConnectionPoolClearedException` cascade in the Java driver's SDAM for reasons not yet diagnosed (root cause is in the driver, not SecantusDB). Leaving the stage-level apiStrict gate active but the command-level gate inert. Documented in tasks/backlog.md §5. ### `mongo-go-driver` (2) - **TestIndexView/drop_all** — Same load-induced server-selection timeout as TestIndexView/drop_one. - **TestIndexView** — Rollup of the `drop_one` / `drop_all` / `create_many` subtests above. ### `mongo-node-driver` (1) - **Find should correctly sort using text search in find** — Text indexes (`$text`, `$meta: textScore`, text-index creation) are intentionally out of scope per CLAUDE.md — would require a full-text index implementation. Documented in tasks/backlog.md §4. ### `mongo-ruby-driver` (1) - **Mongo::Collection#create when the collection has options when the collection has a write concern when write concern passed in as an option applies the write concern passed in as an option** — The test passes `w: 2` and expects success — it assumes the canonical multi-node replica-set test cluster the Ruby driver's own CI runs against. SecantusDB advertises as a single-node replica set, so `w: 2` returns `CannotSatisfyWriteConcern` (the correct mongod emulation). Documented in tasks/backlog.md §5. ## Per-driver reports Each gauge ships its own detailed report — per-category breakdown, named failures for triage, and the gauge's own setup notes. Open the one whose pass / fail counts you want to dig into: - [pymongo](./validation-report.md) - [mongo-java-driver](./validation-report-java.md) - [mongo-go-driver](./validation-report-go.md) - [mongo-node-driver](./validation-report-node.md) - [mongo-ruby-driver](./validation-report-ruby.md) ## Refreshing Run all five gauges plus this summary: ``` uv run python -m invoke validate-all uv run python -m invoke validate-summary ``` Run a single gauge (still updates that one report) plus the summary: ``` uv run python -m invoke validate-java # or validate / validate-go / etc. uv run python -m invoke validate-summary ``` The summary reads whatever is currently in `.validation/`; a gauge that's never been run is silently omitted from the table.