Skip to content

feat: bump arrow 57, datafusion 51, lance 2#146

Open
AdaWorldAPI wants to merge 11 commits intolance-format:mainfrom
AdaWorldAPI:claude/review-lance-graph-architecture-i6TKf
Open

feat: bump arrow 57, datafusion 51, lance 2#146
AdaWorldAPI wants to merge 11 commits intolance-format:mainfrom
AdaWorldAPI:claude/review-lance-graph-architecture-i6TKf

Conversation

@AdaWorldAPI
Copy link

Align lance-graph's dependency matrix with ladybug-rs and rustynum:
arrow 56.2 → 57
datafusion 50.3 → 51
lance 1.0 → 2.0
lance-* 1.0 → 2.0

All 491 tests pass with zero API breakages.

The Python crate is excluded from the workspace resolver to avoid the pyarrow links = "python" conflict with pyo3. It continues to build separately via maturin develop.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV

Align lance-graph's dependency matrix with ladybug-rs and rustynum:
  arrow      56.2 → 57
  datafusion 50.3 → 51
  lance      1.0  → 2.0
  lance-*    1.0  → 2.0

All 491 tests pass with zero API breakages.

The Python crate is excluded from the workspace resolver to avoid
the pyarrow `links = "python"` conflict with pyo3. It continues
to build separately via `maturin develop`.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 86a03971cf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 2 to 7
members = [
"crates/lance-graph",
"crates/lance-graph-catalog",
"crates/lance-graph-python",
# lance-graph-python excluded: pyarrow `links = "python"` conflict with pyo3.
# Build separately with `maturin develop`.
]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Exclude the Python crate when removing it from workspace members

Removing crates/lance-graph-python from workspace.members without adding it to workspace.exclude (or adding an empty [workspace] in that crate) makes Cargo reject the crate as an in-tree non-member: cargo check --manifest-path crates/lance-graph-python/Cargo.toml now fails with “current package believes it's in a workspace when it's not.” This is an immediate regression because .github/workflows/release.yml still runs that exact cargo check command for the Python crate.

Useful? React with 👍 / 👎.

Add plan_err!, config_err!, exec_err! macros that use #[track_caller]
+ std::panic::Location for zero-cost call-site capture (Gate 4/7).

Bridge design: macros call plan_err_at()/config_err_at()/exec_err_at()
which convert std::panic::Location to snafu::Location. This gives
ergonomic macros while maintaining compatibility with 148 existing
snafu error creation sites across 18 files.

- plan_err_at(), config_err_at(), exec_err_at(): #[track_caller] helpers
- plan_err!, config_err!, exec_err!: format!() wrapper macros
- 4 tests proving location capture works

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
@beinan
Copy link
Collaborator

beinan commented Mar 3, 2026

great work, could you help fix the CI and resolve the conflicts?

@codecov-commenter
Copy link

Codecov Report

❌ Patch coverage is 94.23077% with 3 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
crates/lance-graph/src/error.rs 94.23% 3 Missing ⚠️

📢 Thoughts on this report? Let us know!

claude added 9 commits March 4, 2026 23:50
…g traversal + 7 ground truth tests

Implements the full SPO (Subject-Predicate-Object) graph primitives stack:

- graph/fingerprint.rs: label_fp() with 11% density guard, dn_hash(), hamming_distance()
- graph/sparse.rs: Bitmap [u64;BITMAP_WORDS] (fixes old [u64;2] truncation), pack_axes()
- graph/spo/truth.rs: TruthValue (NARS frequency/confidence), TruthGate (OPEN/WEAK/NORMAL/STRONG/CERTAIN)
- graph/spo/builder.rs: SpoBuilder with forward/reverse/relation query vector construction
- graph/spo/store.rs: SpoStore with 2^3 projection verbs (SxP2O, PxO2S, SxO2P), gated queries, semiring chain walk
- graph/spo/semiring.rs: HammingMin semiring (min-plus over Hamming distance)
- graph/spo/merkle.rs: MerkleRoot, ClamPath, BindSpace with verify_lineage (known gap documented) and verify_integrity
- graph/mod.rs: ContainerGeometry enum with Spo=6

Ground truth integration tests (7/7 pass):
1. SPO hydration round-trip (insert + forward/reverse query)
2. 2^3 projection verbs consistency (all three agree on same triple)
3. TruthGate filtering (OPEN=2, STRONG=1, CERTAIN=0 for test data)
4. Belichtung prefilter rejection rate (<10 hits from 100 edges)
5. Semiring chain traversal (3 hops with increasing cumulative distance)
6. ClamPath+MerkleRoot integrity (documents verify_lineage no-op gap)
7. Cypher vs projection verb convergence (SPO side validated)

31 unit tests + 7 integration tests, all passing. Clippy clean.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
…n), open ends, vision

Lance-graph engine stays in ladybug-rs. We take:
- Bumpers: parser.rs, ast.rs, error.rs (hardened input validation)
- Rims: DataFusion row/column join patterns (ground truth after thinking)

Open ends: GQL/NARS parser arms, semantic.rs adaptation,
neo4j-rs result bridge, ground truth test portability,
outage recovery for PRs 168-171.
…raph

Star chart (lance-graph) = flat neo4j ground truth render.
Thinking mesh (SPO in ladybug-rs) = holodeck of awareness.
We steal parser/AST/error from lance-graph into ladybug-rs (additive).
Nothing removed from ladybug-rs, rustynum, or any existing repo.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
…and SPO geometry

semantic.rs is the regime change boundary. Neo4j gives dead rows.
The bouncer validates bindings and types. The resolved AST projects
into SpoBuilder where literals become Hamming geometry — resonance,
causal chain discovery, truth-gated propagation. BindSpaceCatalog
replaces AcceptAllCatalog as next bolt.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
…ualia

Lance-graph semantic.rs: has_node_label("Person") → true/false. Binary. Dead.
Ladybug semantic layer: hamming(fp("Person"), fp("Agent")) → 2,847 bits, 39σ
overlap. Geometric. Alive. Same word, different universe.

SPO 2³ eight projections (S×P→O deduction, S×O→P induction, P×O→S abduction...).
Double gestalt: raw SPO + observer perspective = qualia not metadata.
Z→X causality: object of one triple resonates with subject of the next.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
…side

Explicit file-level boundary: lance_parser/ is star chart (work here),
spo/graph/container/bind_space is mesh (don't touch). Tripwires for
boundary violations. Six-step task order, each in separate PRs after
step 2, boundary relaxes one bolt at a time.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
#1: RUSTYNUM IS MANDATORY — no hand-rolled numeric ops in lance_parser/
#2: NO SERDE_JSON ON THE HOT PATH — NodeParameterValue is not
serde_json::Value, they are not convertible, the fix is never
param_to_json()

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
RUSTFLAGS with AVX-512 VPOPCNTDQ is not optional. Without it, rustynum
SIMD intrinsics fail, agents treat it as pre-existing error, and start
papering over cascading failures across repos.

One wrong toolchain, five cascading violations.

https://claude.ai/code/session_016SeGMg1pgf1MqK8YWkedvV
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.

4 participants