Move Lance to crates.io 9.0.0 and bump the workspace to 0.9.0 - #385
Merged
Conversation
Lance 9.0.0 shipped stable on 2026-07-24 and every crate this workspace depends on is published at that version, so the 9.x prerelease git-rev pin (`v9.0.0-rc.1`, cec0b7df) is retired for ordinary registry version pins. `Cargo.lock` now carries zero git sources, which restores ordinary publishability — the release gate recorded in docs/dev/versioning.md. The delta is 35 commits with no file-format or minimum-reader-version movement: OmniGraph still writes explicit stable V2_2, and every MemWAL format-bearing file is byte-identical to the rc.1 rev. Dependency floors are unchanged (Arrow 58, DataFusion 54, object_store 0.13.2, roaring 0.11.4, Rust 1.91+). Includes the engine's `lance-io` test dependency, which carried the same rev pin.
Lance 9.0.0 fixed the documented limitation that a `Some(filter)` `scan_with_staged` silently dropped matching *staged* rows: stats-based pruning discarded uncommitted fragments because they lack the per-column statistics committed fragments carry, and `use_stats(false)` did not bypass it. The pin for that limitation carried an explicit instruction to rewrite it if Lance ever scanned uncommitted fragments without stats-based pruning. It did, so the assertion becomes the correct semantics and the test is renamed to describe them. Production was unaffected in both directions: no production caller passes a filter to `scan_with_staged`, and read-your-writes goes through `MutationStaging`'s in-memory union via DataFusion `MemTable`.
Gate R0's tripwire asserted the exact git rev in `Cargo.lock` so the source audit could not silently outlive the source it surveyed. The crates.io move retires that rev, so the tripwire now pins the released version across the whole Lance package family — with the two Arrow-versioned members (`lance-arrow-scalar`, `lance-arrow-stats`) carrying their own surveyed version — and additionally refuses any return to a git source. Purpose unchanged, and verified non-vacuous: faking a version move fails the assertion. The underlying RC.1 no-go facts survive the bump because the MemWAL flush ordering and system-index files did not change.
Adds the required audit stanza for the bump and demotes the rc.1 stanza to prior. Records: no storage-format event; the #7769 `ShardWriter::close` contract change (the pre-registered re-audit item, which needed no code change because close is never durability evidence here); the fixed filtered-staged-scan limitation; #7817's extra ranged read with the cost gates re-run green; #7699's BM25 corpus-statistics change; and that neither RFC-026 upstream ask landed, so adapter-side containment stays load-bearing. Also records the three known gaps taken by choosing 9.0.0 over the v10 beta line — #7704 (stable-row-id filter_deleted_ids), #7868 (flat-KNN ordering, upstream-Critical), and #7965 (blob compaction misclassifying an empty blob as NULL, reachable through `omnigraph optimize`) — and notes that OmniGraph's own blob decoder replicates the same empty-vs-null misclassification independently, to be fixed on its own merits. Rewords the matching close-contract sentences in testing.md and RFC-026, and updates the substrate line in AGENTS.md.
Moves every published crate manifest, path-dependency constraint,
Cargo.lock, the generated openapi.json `info.version`, and AGENTS.md's
surveyed version from 0.8.1 to 0.9.0.
Corrects the schema-to-release map in the same change, because the bump
makes it wrong. `release_for_internal_schema_version` claimed v5 -> 0.9.x,
v6 -> 0.10.x, v7 -> 0.11.x, v8 -> 0.12.x, v9 -> 0.13.x, but v0.8.1 was
the last published release and it stamped v4 (verified with
`git show v0.8.1:.../migrations.rs`). The format then advanced five times
— RFC-028 identity, RFC-023 key fencing, and the three RFC-026 stream
slices — entirely inside the 0.8.1 -> 0.9.0 development window, so no
release ever stamped v5 through v8 and none ever will.
Left uncorrected, a v9 graph's refusal would have told operators to fetch
an omnigraph 0.13.x binary that will never exist, and a v5 graph's
refusal would have named 0.9.x — the line this release actually occupies.
v5-v8 now report `0.9.0-dev`, which reads correctly in both slots of the
rebuild instruction ("created by omnigraph X" and "with an omnigraph X
binary"); a new assertion pins that grammar. v9 reports 0.9.x.
docs/user/operations/upgrade.md carries the same correction and explains
that those stamps only ever came from source builds.
aaltshuler
force-pushed
the
chore/lance-9-crates-io
branch
from
July 25, 2026 20:21
0a02eae to
16ce2fa
Compare
AGENTS.md's maintenance contract requires a docs/releases/<version>.md alongside any release-version bump; the 0.8.1 -> 0.9.0 move landed without one. Covers the user-visible delta across the whole window, not just the substrate bump: the Lance 9.0.0 stable move and restored registry publication, the internal schema v4 -> v9 rebuild requirement (including why stamps v5-v8 name no published release), stable schema identity across renames, keyed-write conflict fencing, writer crash recovery, `branch merge --delete-branch`, release container images, and batched committed @unique probes. Behavior changes are called out separately because several are script-breaking: newest-first commit listings, strict `load --mode append` on an existing id, per-verb rejection of scope flags that were previously discarded, registry-scoped `graphs list`, and `GET /commits` authorizing an omitted branch as main. Excludes the blob read surface added and then reverted in this window (#367 / #373) — it is not in the release.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Lance 9.0.0 shipped stable on 2026-07-24 and every crate this workspace depends on is published at that version, so the 9.x prerelease git-rev pin (
v9.0.0-rc.1,cec0b7df) is retired for ordinary registry version pins.Cargo.locknow carries zero git sources, which restores ordinary publishability — the release gate recorded indocs/dev/versioning.mdand promised in the v0.8.1 notes ("registry publication resumes at v0.9.0").The workspace version moves 0.8.1 → 0.9.0 in the same series.
Backing issue / RFC
Checklist
upgrade.md,lance.md,testing.md, RFC-026, AGENTS.md)docs/dev/invariants.md— no Hard Invariant weakened, no deny-list item hitThe Lance move (
4385eda4)35 commits from the rc.1 rev, and not a storage-format event: no file-format or minimum-reader-version movement, OmniGraph still writes explicit stable V2_2, and every MemWAL format-bearing file (
wal.rs,batch_store.rs,system_index/mem_wal.rs,protos/table.proto,mem_wal/util.rs) is byte-identical to the pinned rev. Dependency floors unchanged (Arrow 58, DataFusion 54,object_store0.13.2, roaring 0.11.4, Rust 1.91+).Behavior-affecting findings, all recorded in the new
lance.mdaudit stanza:ShardWriter::closenow propagates final flush failures (upstream #7769) — the re-audit item pre-registered at the rc.1 stanza. No code change needed: OmniGraph never treatscloseas durability evidence, and the enrollment adapter already maps its empty-shard close error. The three contract sentences (lance.md,testing.md, RFC-026) are reworded.742da064). Through rc.1 aSome(filter)scan_with_stagedsilently dropped matching staged rows because stats-based pruning discarded uncommitted fragments. That limitation had a pin carrying an explicit "rewrite me if Lance fixes this" instruction; it fired, so the assertion is now the correct semantics and the test is renamed. Production was never affected either way — no production caller passes a filter, and read-your-writes goes throughMutationStaging's in-memory union.read_transaction_by_versionno longer populates session caches (#7817), adding one ranged read on the RFC-023 certificate-chain path. Cost gates re-run and unchanged.InitializeMemWalBuilder::executeis still-> Result<()>with no enrollment receipt/seal, andWalAppender::appendstill has no post-success epoch recheck. Both negative MemWAL guards stay green and adapter-side containment remains load-bearing.f638a7ce) — it now pins the released version across the Lance package family (the two Arrow-versioned members carry their own surveyed version) and refuses any return to a git source. Verified non-vacuous: faking a version move fails it.The version bump (
0a02eae8)Beyond the mechanical surfaces, this corrects the schema-to-release map, which the bump would otherwise have made wrong.
release_for_internal_schema_versionclaimed v5→0.9.x, v6→0.10.x, v7→0.11.x, v8→0.12.x, v9→0.13.x. But v0.8.1 is the last published release and it stamped v4 (verified viagit show v0.8.1:crates/omnigraph/src/db/manifest/migrations.rs). The format then advanced five times — RFC-028 identity, RFC-023 key fencing, and the three RFC-026 stream slices — entirely inside the 0.8.1 → 0.9.0 development window, so no release ever stamped v5–v8 and none ever will.Left uncorrected, two user-visible refusals would have lied: a v9 graph would tell operators to fetch an
omnigraph 0.13.xbinary that will never exist, and a v5 graph would name0.9.x— the line this release now occupies. v5–v8 now report0.9.0-dev; v9 reports0.9.x.Notes for reviewers
lance.md: #7704 (stable-row-idfilter_deleted_ids— we setenable_stable_row_ids: trueeverywhere), #7868 (flat-KNN ordering, upstream-Critical), and #7965 (blob compaction misclassifying a valid empty blob as NULL, reachable throughomnigraph optimize). All three exist only on v10, which is 96 commits ahead and 36 behind 9.0.0 after a 9.1→10.0 renumber, ships two breaking changes, and renames the MemWAL vocabulary our recovery sidecars bind to.mainand should be fixed on its own merits.docs/releases/v0.9.0.mdis not in this PR. Per AGENTS.md rule 2 a release boundary needs it, but the 0.8.1 → 0.9.0 delta is large and public-facing (five format bumps, the RFC-022/023/028 program, Lance 9 stable, resumed crates.io publication) and wants deliberate framing rather than a mechanical changelog.created by omnigraph Xandwith an omnigraph X binary).Validation
cargo test --workspace --locked— 75 suites, 0 failurescargo test -p omnigraph-engine --test lance_surface_guards— 26 passedcargo test -p omnigraph-engine --features failpoints --test failpoints— 141 passed, 1 ignoredcargo test -p omnigraph-engine --features failpoints --test memwal_stream— 35 passedcargo test -p omnigraph-server --features awswrite_cost,warm_read_cost,merge_costOMNIGRAPH_UPDATE_OPENAPI=1 cargo test -p omnigraph-server --test openapi— regenerated, 84 passedscripts/check-agents-md.sh,rustfmt --checkon touched files,git diff --checkBucket-gated RustFS/S3 cells were not run locally and remain CI's responsibility.
Greptile Summary
The PR completes the OmniGraph 0.9.0 release transition.
Confidence Score: 5/5
The PR appears safe to merge.
No blocking failure remains; the previously missing 0.9.0 release notes are now present and cover the required storage rebuild and Lance transition.
Important Files Changed
Reviews (3): Last reviewed commit: "docs: add the v0.9.0 release notes" | Re-trigger Greptile