You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GraphForge is pinned to DataFusion 53 (Cargo.toml workspace datafusion = "53"). Dependabot opened #464 for 54.1.0, but a bump-only PR does not compile: catalog adapters still target the 53 trait surface, and companion crates stayed on 53, producing a dual datafusion_session graph.
Until this lands, Dependabot will keep failing majors (currently ignored via @dependabot ignore this major version on #464).
Objective
Ship a single, intentional upgrade to DataFusion 54.x (and matching datafusion-* companions) so graphforge-storage catalog providers, Rust quality, bindings, and Bazel drift checks are green on the new major.
Debt / regime
Debt type: development / architecture (upstream API break + workspace pin hygiene)
Quality regime: A (compute) — correctness of catalog/SQL execution over product UX
ADR/docs that assert “DataFusion 53.x” as current ground truth are updated or explicitly annotated as historical (at least docs/adr/0008-heterogeneous-lists.md)
BDD completion scenarios
Given a workspace on DataFusion 54.x, whencargo tree -i datafusion-session is run, then only one major version appears (no 53+54 mix).
Given a GraphForge project catalog (GraphCatalog / table providers), when Rust quality and storage catalog tests run, then provider registration and scan paths succeed under DF54 Session/TableProvider APIs.
Given the upgrade PR, when CI Gate runs, then Rust Quality, bindings, Repository Policy, and Bazel Bootstrap are green at the exact head SHA.
Given Dependabot later opens a DF54 patch bump, when it only touches lockfiles within 54.x, then it is eligible to merge without repeating this adapter migration.
Testing
Scenario 1: cargo tree -i datafusion-session (and companion crates) on the PR branch
Scenario 2: cargo test -p graphforge-storage (catalog/provider coverage) + any graphforge-exec / graphforge-api tests that construct sessions/catalogs
Scenario 3: required GitHub checks on the PR (CI Gate CLEAN)
Scenario 4: observational — leave DF major ignore in place until this issue closes; afterward Dependabot majors can be re-enabled for 55+ only
Local gates appropriate to the Rust surface (from AGENTS.md):
Problem
GraphForge is pinned to DataFusion 53 (
Cargo.tomlworkspacedatafusion = "53"). Dependabot opened #464 for 54.1.0, but a bump-only PR does not compile: catalog adapters still target the 53 trait surface, and companion crates stayed on 53, producing a dualdatafusion_sessiongraph.Until this lands, Dependabot will keep failing majors (currently ignored via
@dependabot ignore this major versionon #464).Objective
Ship a single, intentional upgrade to DataFusion 54.x (and matching
datafusion-*companions) sographforge-storagecatalog providers, Rust quality, bindings, and Bazel drift checks are green on the new major.Debt / regime
Evidence from #464 (fail-closed)
From CI on
dependabot/cargo/datafusion-54.1.0(Test Suite run31201787417):as_anyremoved from provider traits (E0407) incrates/graphforge-storage/src/catalog.rsfor:TableProvider:TopologyNodeTable,TypedEdgeTable,UnionEdgeTable,EdgePropertyTable,PropertyTableSchemaProvider:GraphSchemaCatalogProvider:GraphCatalogscansignature / Session trait mismatch (E0053/E0308):datafusion::catalog::Session, founddatafusion_catalog::Sessiondatafusion_sessionin the dependency graphdatafusionmoved to 54 whiledatafusion-catalog = "53"(and related pins) stayed on 53Upstream guide: DataFusion 54.0.0 upgrade — remove
as_anyimpls; downcast via trait-objectdowncast_ref/isinstead of.as_any().downcast_ref().Requirements
datafusion,datafusion-datasourcedatafusion-catalog,datafusion-functions-aggregate(and any other directdatafusion-*version literals found byrg)crates/graphforge-storage/src/catalog.rs:fn as_anyfromTableProvider/SchemaProvider/CatalogProviderimplsscanto use the 54Sessiontype from the unified graphprovider.as_any().is::<…>()/schema.as_any().downcast_ref::<GraphSchema>()) to DF54 trait-object downcast APIsgraphforge-exec,graphforge-rel,graphforge-plan,graphforge-api) revealed by the unified bumppython3 scripts/generate_third_party_notices.pypython3 scripts/ci/cargo-bazel-drift-check.py --writeCARGO_BAZEL_REPIN=1 bazelisk build --repo_env=CARGO_BAZEL_REPIN=1 //:first_party_libs.as_any().downcast_ref::<…Array>()call sites unless Arrow itself requires a change (those are not DF provideras_any)Acceptance criteria
cargo tree -i datafusion-sessionshows a single major)cargo check/ Clippy workspace green with catalog adapters compiling under DF54 traitsgraphforge-storageupdated and passingcargo-bazel-lock.json+ fingerprint committed)docs/adr/0008-heterogeneous-lists.md)BDD completion scenarios
cargo tree -i datafusion-sessionis run, then only one major version appears (no 53+54 mix).GraphCatalog/ table providers), when Rust quality and storage catalog tests run, then provider registration andscanpaths succeed under DF54 Session/TableProvider APIs.Testing
cargo tree -i datafusion-session(and companion crates) on the PR branchcargo test -p graphforge-storage(catalog/provider coverage) + anygraphforge-exec/graphforge-apitests that construct sessions/catalogsCI GateCLEAN)Local gates appropriate to the Rust surface (from
AGENTS.md):Documentation
docs/adr/0008-heterogeneous-lists.mdObservability / security
Non-goals
#334/#335) — re-run only if behavior or plans regress in existing testsLikely touchpoints
Cargo.toml(workspace deps)crates/graphforge-storage/Cargo.toml(datafusion-catalog)crates/graphforge-rel/Cargo.toml(datafusion-functions-aggregate)crates/graphforge-storage/src/catalog.rs(primary adapter work)crates/graphforge-{exec,rel,plan,api}/(follow-on compile fixes)Cargo.lock,cargo-bazel-lock.json,tools/bazel/drift/cargo_feature_fingerprint.jsonlegal/THIRD_PARTY_NOTICES.md(+ packaging copies)docs/adr/0008-heterogeneous-lists.mdRelated
as_anyremoval on providersOpen questions
datafusion*pin to 54.x in one commit, then fix catalog adapters.