Skip to content

feat: add lancedb 0.27.2 + pin lance =4.0.0 for exact version compat#275

Merged
AdaWorldAPI merged 1 commit into
mainfrom
claude/add-lancedb-0.27.2
Apr 28, 2026
Merged

feat: add lancedb 0.27.2 + pin lance =4.0.0 for exact version compat#275
AdaWorldAPI merged 1 commit into
mainfrom
claude/add-lancedb-0.27.2

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Summary

Adds lancedb 0.27.2 as an optional dependency and pins all lance crates to exact =4.0.0.

Why exact pins

lancedb uses = (exact) pins on lance, not ^ (semver-compatible). lancedb 0.27.2 requires exactly lance 4.0.0. Our previous "4" pin resolved to 4.0.1, which is incompatible. Pinning to =4.0.0 makes lancedb resolvable.

What changes

Crate Before After
lance "4" (→4.0.1) "=4.0.0"
lance-linalg "4" "=4.0.0"
lance-namespace "4" "=4.0.0"
lance-arrow "4" "=4.0.0"
lance-index "4" "=4.0.0"
lancedb (not present) "=0.27.2" (optional, behind lancedb-sdk feature)

Feature gate

lancedb-sdk = ["dep:lancedb"]

NOT in default features. Opt-in via --features lancedb-sdk. Gives the workspace access to the LanceDB table/connection API that third-party tooling expects.

No 0.27.3 exists

Latest lancedb is 0.27.2 (published 2026-03-31). No newer version available.

Arrow 58 status

Still blocked. lance 4.0.0 pins arrow = "^57". Arrow 58 needs lance 5+ (not released).

Test plan

  • cargo check workspace clean (0 errors)
  • cargo check --features lancedb-sdk resolves lancedb 0.27.2 + lance 4.0.0

https://claude.ai/code/session_01SbYsmmbPf9YQuYbHZN52Zh


Generated by Claude Code

lancedb uses exact `=` pins on lance (not semver ^). To add lancedb 0.27.2
as a dependency, all lance crates must be pinned to exactly 4.0.0 (not 4.0.1).

Changes:
  - lance/lance-linalg/lance-namespace/lance-arrow/lance-index: "4" → "=4.0.0"
    across lance-graph, callcenter, catalog, benches, holograph
  - NEW: lancedb = { version = "=0.27.2", optional = true } in lance-graph
  - NEW: feature `lancedb-sdk` gates the lancedb dep
  - Cargo.lock regenerated

lancedb is NOT in default features — opt-in via `--features lancedb-sdk`.
This gives the workspace access to the LanceDB table/connection API surface
that third-party tooling (DuckDB lance ext, Polars reader, Python/JS SDK)
expects, without forcing the dep on minimal builds.

Version compat matrix:
  lancedb 0.27.2 → lance =4.0.0, datafusion ^52.1, arrow ^57.2
  Our pins:        lance =4.0.0, datafusion 52,     arrow 57    ✅

Workspace compiles clean (4 pre-existing warnings, 0 errors).

https://claude.ai/code/session_01SbYsmmbPf9YQuYbHZN52Zh
@AdaWorldAPI AdaWorldAPI merged commit aab4bf8 into main Apr 28, 2026
1 of 5 checks passed
AdaWorldAPI pushed a commit that referenced this pull request Apr 30, 2026
- Fix 4× `#[deprecated(since = "next")]` invalid semver in
  context_chain.rs — drop `since` field (G3 refactor artifact)
- Fix `actor.role <= u8::MAX` tautological comparison in
  lance_membrane.rs:768 — replace with meaningful `< 32` guard
- Document Wave-1 LOC audit in EPIPHANIES.md: recovery (#275-#283)
  = +8,728; Wave 1 (#300-#306) = +3,156; combined = +11,807;
  zero LOC lost from G1 rebase

cargo fmt --check: clean
cargo clippy (4 crates): warnings only, 0 errors

https://claude.ai/code/session_01NYGrxVopyszZYgLBxe4hgj
AdaWorldAPI pushed a commit that referenced this pull request May 13, 2026
…onical SIMD path

Locks the build invariants for all D-SDR-* deliverables:

Pinned versions (per PR #275 + Cargo.toml):
- rust 1.94.1 (MSRV; portable_simd patterns ndarray::simd uses)
- lance =4.0.0 (exact pin)
- lancedb 0.27.2

ndarray::simd is the canonical SIMD path:
- All vectorized ops use ndarray::simd from workspace vendored ndarray fork
- Not raw std::simd, not packed_simd, not hand-rolled intrinsics
- One SIMD path, one test surface, one cross-platform contract
- Hot-path ops mapped:
  * OwlIdentity bitmask scans (Cypher MATCH lowering)
  * Batch MerkleRoot computation across rows
  * BitSet256 bitwise ops (role redaction mask)
  * Per-family codebook PQ centroid distance
  * Canonicalization rule application across batch
  * DataFusion predicate vector composition (UnifiedBridge::authorize)
  * ArrowBatchDriftSignal MerkleRoot-of-batch
- Tier A LOC drops ~15-25%: scalar fallback paths collapse to ndarray::simd
  one-liners, no separate code

Mandatory-ndarray promotion (decoupled concurrent workstream):
- User directive: ndarray should be mandatory dep, not optional ndarray-hpc
- Per CLAUDE.md Phase 3 IN PROGRESS already includes the wiring; this
  promotes that to "make ndarray mandatory, retire feature flag"
- NOT blocking any D-SDR-* deliverable
- Tier A may temporarily ship behind #[cfg(feature = "ndarray-hpc")]
  until the promotion lands; gates retire via mechanical find/replace
- Workstream sequencing:
  1. Promote ndarray: feature → mandatory dep (Phase 3 + new directive)
  2. Retire blasgraph/ndarray_bridge.rs standalone fallbacks
  3. Retire #[cfg(feature = "ndarray-hpc")] gates from D-SDR-*

Tradeoff flagged: ndarray::simd couples lance-graph MSRV to ndarray's;
acceptable per workspace policy (ndarray = The Foundation per CLAUDE.md).
Version pinning stricter than rest of workspace, correct for storage layer
+ Flight SQL where minor-version drift causes real bugs.

INTEGRATION_PLANS.md fourth correction line appended per APPEND-ONLY governance.
AdaWorldAPI pushed a commit that referenced this pull request May 28, 2026
…onical SIMD path

Locks the build invariants for all D-SDR-* deliverables:

Pinned versions (per PR #275 + Cargo.toml):
- rust 1.94.1 (MSRV; portable_simd patterns ndarray::simd uses)
- lance =4.0.0 (exact pin)
- lancedb 0.27.2

ndarray::simd is the canonical SIMD path:
- All vectorized ops use ndarray::simd from workspace vendored ndarray fork
- Not raw std::simd, not packed_simd, not hand-rolled intrinsics
- One SIMD path, one test surface, one cross-platform contract
- Hot-path ops mapped:
  * OwlIdentity bitmask scans (Cypher MATCH lowering)
  * Batch MerkleRoot computation across rows
  * BitSet256 bitwise ops (role redaction mask)
  * Per-family codebook PQ centroid distance
  * Canonicalization rule application across batch
  * DataFusion predicate vector composition (UnifiedBridge::authorize)
  * ArrowBatchDriftSignal MerkleRoot-of-batch
- Tier A LOC drops ~15-25%: scalar fallback paths collapse to ndarray::simd
  one-liners, no separate code

Mandatory-ndarray promotion (decoupled concurrent workstream):
- User directive: ndarray should be mandatory dep, not optional ndarray-hpc
- Per CLAUDE.md Phase 3 IN PROGRESS already includes the wiring; this
  promotes that to "make ndarray mandatory, retire feature flag"
- NOT blocking any D-SDR-* deliverable
- Tier A may temporarily ship behind #[cfg(feature = "ndarray-hpc")]
  until the promotion lands; gates retire via mechanical find/replace
- Workstream sequencing:
  1. Promote ndarray: feature → mandatory dep (Phase 3 + new directive)
  2. Retire blasgraph/ndarray_bridge.rs standalone fallbacks
  3. Retire #[cfg(feature = "ndarray-hpc")] gates from D-SDR-*

Tradeoff flagged: ndarray::simd couples lance-graph MSRV to ndarray's;
acceptable per workspace policy (ndarray = The Foundation per CLAUDE.md).
Version pinning stricter than rest of workspace, correct for storage layer
+ Flight SQL where minor-version drift causes real bugs.

INTEGRATION_PLANS.md fourth correction line appended per APPEND-ONLY governance.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants