77> ` lance-graph-contract::action ` ), ` docs/STACK_SCAFFOLD.md ` , the
88> "cold TS + kanban stay Lance-native" ruling.
99
10+ ## Process, not a switch (operator constraint, 2026-06-18) — LOAD-BEARING
11+
12+ ** datafusion is NOT deprecated and NOT removed.** It stays the ** default** query
13+ engine. ` lite-unified ` is an ** additive, default-OFF coexistence gate** (wired as
14+ an empty feature in ` crates/lance-graph/Cargo.toml ` , datafusion untouched) that
15+ adds the SurrealQL-on-lance path * alongside* datafusion. Promotion is ** gradual,
16+ per query-shape** — a shape moves to the SurrealQL path only after the OQ-LU-2a
17+ probe shows SurrealQL covers it; everything else keeps running on datafusion,
18+ indefinitely if need be. There is no flip-the-switch cutover and no
19+ deprecation milestone. The two engines coexist; the feature selects the path
20+ per workload. Any wording below that reads as "drop/replace datafusion" means
21+ * "feature-gate an alternative path,"* never * "remove datafusion."*
22+
1023## Epiphany (less is more)
1124
1225Today there are ** two query engines over the same lance storage** (lance-graph's
@@ -26,9 +39,13 @@ A `lite-unified` feature that, when ON:
2639 (Cypher/GQL/Gremlin/SPARQL/neo4j) lowers to ** SurrealQL** (or the DO-arm
2740 ` ActionInvocation ` ) instead of datafusion SQL. * Missing today:* the
2841 polyglot→SurrealQL lowering (today it's polyglot→datafusion).
29- 3 . ** datafusion = ` optional ` , OFF** on this path. Kept behind a separate
30- ` datafusion-analytical ` feature for the workloads that genuinely need
31- vectorized/analytical SQL (joins, aggregations) — SurrealQL's weak spot.
42+ 3 . ** datafusion stays DEFAULT + ON — NOT made optional, NOT deprecated.** Under
43+ ` lite-unified ` the SurrealQL path runs * alongside* it; a query-shape uses
44+ SurrealQL only once the probe proves coverage, otherwise it stays on
45+ datafusion. Far-future (only if the probe ever shows SurrealQL covers
46+ * everything* a deployment uses, and a deployment opts in): datafusion * could*
47+ become ` optional ` behind a ` datafusion-analytical ` feature — but that is a
48+ separate, later, opt-in decision, never part of wiring ` lite-unified ` .
32494 . The DO-arm ` ExecTarget::SurrealQl ` becomes the ** primary** exec path, not one
3350 of four.
3451
@@ -66,11 +83,17 @@ is a separate C++ build.
6683 integration; add the ` kv-lance ` feature + lance dep + ` mod lance ` in ` kvs/mod.rs ` ).
67843 . ** Polyglot→SurrealQL lowering** — the missing front-end leg (parallel to the
6885 existing polyglot→datafusion).
69- 4 . ** ` datafusion ` → ` optional ` ** + a ` datafusion-analytical ` feature; default the
70- common path to SurrealQL-on-lance under ` lite-unified ` .
86+ 4 . ** Per-shape promotion under the gate** — move covered query-shapes to the
87+ SurrealQL path under ` lite-unified ` ; datafusion stays the default for
88+ everything else. NO ` datafusion ` →optional flip here (that's a far-future,
89+ separate, opt-in decision — see § Process, not a switch).
71905 . ** Measure** footprint + query-shape coverage; promote CONJECTURE→FINDING or
7291 correct.
7392
93+ ** Increment 0 — DONE (this commit):** the ` lite-unified ` coexistence feature is
94+ wired in ` crates/lance-graph/Cargo.toml ` (additive, default-OFF, empty, datafusion
95+ untouched). The gate exists; the lowering attaches to it incrementally per above.
96+
7497## Blockers / open questions
7598
7699- ** OQ-LU-1:** surreal kv-lance feature-wiring (the integration TODOs).
0 commit comments