Neptune vs. a Snowflake-Native Typed-VARIANT + Cortex Search Spine for CAF's Fabric
The question
"What are the tradeoffs between Neptune (or another dedicated graph DB) and a Snowflake-native typed-VARIANT + Cortex Search spine for CAF's Fabric backend, and which established mid-size deployments have made this call?"
Context: [[caf-die-roadmap-v1]] names this as a live fork (Lane A: Snowflake-native backend in NEXT, Neptune/AWS backend formalized in LATER) for the Fabric, which is the wedge of the whole CAF bet.
What we already know (from the vault)
- The spec deliberately refuses to pick a database. [[FABRIC-SPEC-v0]] §0: "The graph is a property of the contracts - typed artifacts, canonical subjects, explicit links, provenance stamps - not a property of a graph database." A graph engine becomes "one adapter (or an index over another adapter) rather than a prerequisite." Both candidate backends are already sketched: §8.1 Snowflake (stage + artifact table with VARIANT payload and a thin typed spine, Cortex Search as an adapter-level search concern, work-item table with real compare-and-set leasing) and §8.2 Neptune (graph-index adapter over an S3-resident store, explicitly labelled "a hypothesis for the Neptune-side working session to test, not a conclusion").
- The roadmap has already sequenced it, and the sizing tells the story. [[caf-die-roadmap-v1]] ticket 1.3 (Snowflake backend design note) is an M owned by the founder; ticket 1.4 (Neptune adapter working session) is an S tagged "coordination," with acceptance being a co-signed fits-and-gaps mapping table. Lane A puts the Snowflake-native backend in NEXT because it "rides the site funding" and unblocks the EOY milestone; Neptune sits in LATER.
- The real fork is ownership, not storage engine. [[roadmap-v1-founder-notes]] pre-mortem: "Murray's Neptune graph is 'a weekend project away.' If a running hub ships before the Fabric spec circulates, the spec becomes commentary. This is why Epic 1 is NOW - and why 1.4 frames Neptune as the AWS adapter rather than a rival." [[2026-07-06-die-fabric-hub-spoke-map-and-roadmap-implications]] confirms the Fabric is the one box on phData's own DIE marketing diagram with no identified owner, which is the whole wedge.
- The money is Snowflake-shaped. Per [[2026-07-05-caf-technical-pm-role-framing-and-roadmap-kit]], real dollars are gated on a native Snowflake app; [[caf-die-roadmap-v1]] L0 cites the marketplace site already deploying into Snowflake via App Runtime with changes confined to the adapter/config layer. Murray's own stated want from the DSA/DPA demo was a Snowflake-native version.
- Typed-spine + VARIANT is already ratified and battle-tested inside CAF. [[2026-06-15-caf-catalog-data-model-erd]] v1.1 settled the rule: "Column if the catalog filters, sorts, or sums on it. VARIANT if the modal just displays it and it may gain fields." It also carries hard-won portability discipline (author enforced-style constraints in DDL even though Snowflake ignores FK/UNIQUE/PK, ANSI
GENERATED ALWAYS AS IDENTITYkeys, lowercase_unquoted identifiers, all VARIANT reads through a thin DAL). That is a live precedent the Fabric store can inherit rather than re-litigate. - Cortex Search is the vault's default retrieval primitive, with a known caveat. [[2026-04-28-snowflake-enterprise-knowledge-management]]: hybrid retrieval (vector + BM25 + semantic reranker), RBAC-native at the schema-object level, internal-benchmark NDCG@10 of 0.22 lexical-only to 0.59 full hybrid. The same brief's blunt practitioner finding: "the most common production failure is not poor retrieval performance. It is sending ungoverned data into the retrieval pipeline."
- RDCO's own typed knowledge graph is direct lived evidence that the engine is not the constraint. [[prototype-results]] (2026-04-14): 394 vertices / 616 edges ingested from 50 vault docs into DuckDB, all three prototype queries (1-hop citation, 2-hop co-citation, decision-evidence audit tree) returning in under 10ms with zero tuning. The recorded failure list is entirely semantic, not performance: free-text author fields breaking Person dedup, and "
citesis notvalidates/contradicts/supports-position." The stated recommendation was to invest in edge semantics (supports-position,validates,informs-decision,part-of-cluster), not in a graph engine. That graph now runs vault-wide at~/.claude/state/graph.duckdbbehind/graph-query.
What the web says
- Snowflake has no native graph traversal engine, and its own docs do not claim one. Semantic Views reached GA for standard-SQL querying on 2026-03-02 (Snowflake release note), and Semantic View Autopilot GA'd 2026-02-03 per the same release-note series. But a semantic view encodes metrics, dimensions, and entity relationships for text-to-SQL grounding; it is not a traversal primitive. Practitioner write-ups are explicit that shortest-path and deep-traversal queries "are not natural to Snowflake," and the workaround is a node/edge table model.
- Snowflake's own recommended KG pattern is node/edge tables inside Snowflake, and it is a pattern rather than a product. Snowflake-Labs/knowledge-graph-snowflake implements
KG_NODE/KG_EDGEwith Cortex Analyst plus NetworkX tooling in Snowpark Container Services. I fetched the repo page in this run: it is Apache-2.0 Snowflake Labs reference/sample code, not a supported product, with a single commit on main, 3 stars, 0 forks, and no releases. Notably it uses semantic models and SPCS-hosted MCP servers, not Cortex Search. Treat "Snowflake-native knowledge graph" as a documented architecture, not shipped GA capability. - Snowflake's May 2026 engineering benchmark argues against runtime traversal, which cuts in the Fabric's favor. "Ontology in Snowflake: Building Cortex Agents" (2026-05-25, fetched this run) compares four configurations; a flattened two-tool GraphRAG design (recursive CTEs precomputing enriched concept profiles, then indexed in Cortex Search) scored best at 78.2% success and beat a seven-tool graph-traversal architecture. Its conclusion: "improved structural context" at the storage layer matters more than runtime reasoning complexity. Caveats to keep attached: this is vendor-run, on public biomedical corpora (Cell Ontology, PRISM), with no named customers, and the post does not label GA vs preview for the components used.
- Neptune's tradeoffs are the mature-managed-product ones. Neptune is a fully managed property-graph + RDF service with serverless scaling, IAM-native access control, point-in-time recovery, and cross-region replication, and AWS added managed GraphRAG via Bedrock Knowledge Bases + Neptune Analytics across 2025-2026. The recurring counterweights in comparison write-ups are AWS lock-in and a gap between marketing and real deep-traversal performance on dense graphs, with the advice being to benchmark representative queries before committing (TigerGraph buyer's guide, Fluree 2026 KG comparison). Both are vendor-authored, so read them as directional, not neutral.
- The gap a dedicated graph DB does not close is exactly the Fabric's actual value. The Fluree guide's claim: graph databases do not natively solve semantic consistency, entity resolution, or business-context encoding, which stay application-level problems, and teams typically discover this 6-9 months into an agentic build. Vendor content, but it converges precisely with RDCO's own DuckDB finding.
- There is a third option nobody has put on the CAF table: a graph coprocessor over Snowflake tables. Quentin Kasseh, "Knowledge Graphs on Snowflake: The Architecture Shift" (2026-01-06, fetched this run), argues for graph indexes built over existing Snowflake tables with no extraction pipeline, names RelationalAI as "the most production-ready option on Snowflake right now," and notes Neo4j/TigerGraph require extraction. Named tradeoffs: graph algorithms over large datasets burn compute ("for a simple dashboard query, traditional SQL is cheaper") and declarative graph reasoning is a paradigm shift for SQL-native engineers.
- On named deployments: I could not find one that made this call. Across three focused searches I found no named organization of any size that has publicly documented choosing between a dedicated graph DB and a Snowflake-native typed-VARIANT + Cortex Search spine for a governed knowledge-graph hub. What searches return is vendor buyer's guides, Neo4j/Neptune head-to-heads, and integration-pattern content in which Snowflake is the warehouse and the graph DB sits alongside it. The only named deployments surfaced anywhere near this space are three cited secondhand in the Kasseh piece, all of them RelationalAI-on-Snowflake rather than the VARIANT + Cortex Search pattern: Greg Macpherson's Great Artesian Basin governance model, Blue Yonder (claimed "90% reduction in legacy code"), and Cash App (PageRank and community detection for customer intelligence and fraud). I did not fetch primary sources for any of the three, none of them is mid-size, and none is the architecture in question. Do not cite these as precedent for ticket 1.3.
Convergences and contradictions
- Strong convergence, from an unexpected direction. [[FABRIC-SPEC-v0]] §8.2's stance that the graph is an index over the store, plus §8.1's precomputed typed spine, is the same conclusion Snowflake's own May 2026 benchmark reached empirically: flattened, precomputed structure beat a seven-tool runtime-traversal agent. The founder's ports-first architecture has outside-view support it was not written to claim. It also converges with RDCO's DuckDB result, where the constraint was edge semantics rather than traversal cost.
- Real contradiction on maturity, and it runs both ways. The web consensus is that serious graph work on Snowflake needs a coprocessor (RelationalAI) because Snowflake has no traversal engine; §8.1 proposes no traversal engine at all. That is survivable only if the Fabric's real query set stays shallow. Scanning §8.2's own examples ("everything produced under this engagement," "what superseded what"), the workload looks like 1-to-3-hop provenance walks that recursive CTEs handle, not shortest-path over a dense graph. But that has never been written down as a bounded query set, let alone benchmarked. Conversely, Neptune is a mature managed product while the Snowflake-native KG pattern is a Labs repo with one commit; asymmetry of maturity favors Neptune, asymmetry of governance-perimeter and funding favors Snowflake.
- Nobody has done this at mid-size in public. The vault treats the Snowflake-native direction as ratified; the web offers zero named precedent at any size for this specific comparison. That does not make the direction wrong, but it does mean ticket 1.3 cannot borrow authority from "the industry does it this way."
Synthesis for RDCO
The technology decision is already made, and this research does not overturn it - it changes what has to go inside the decision. Everything load-bearing points the same way: the funding gate is a Snowflake-native artifact, the consumption layer already runs Snowflake-native via App Runtime, the catalog data model already ratified typed spine + VARIANT with a portability DAL, Cortex Search inherits RBAC inside the governance perimeter, and Snowflake's own benchmark says the precomputed-structure design outperforms traversal-heavy agent architectures for exactly this class of retrieval. Neptune's genuine advantages (mature managed traversal, IAM-native, RDF + property graph in one service) buy capabilities the Fabric's provenance workload probably does not need, at the cost of splitting producer and consumer across two governance domains. The honest framing for ticket 1.4 stays what [[roadmap-v1-founder-notes]] already set: Neptune is the AWS adapter and the best-positioned reader of the provenance model, not a rival hub.
What changes is the confidence basis, and this is the actionable part. There is no external precedent to stand on. No named mid-size deployment has publicly made this call, and the closest named deployments are a different architecture (RelationalAI coprocessor) at a different scale, cited secondhand. So 1.3 must be written as a falsifiable design note rather than an appeal to industry practice. Two concrete acceptance-criteria additions worth making before the note circulates: (1) enumerate the Fabric's actual query set from §4's provenance model and state a maximum hop depth the Snowflake backend commits to serving, with a recursive-CTE latency budget attached; (2) name the falsification trigger in advance - if the required query set turns out to need unbounded traversal, shortest-path, or graph algorithms like community detection, that is the signal to promote a graph engine from index-adapter to index-of-record. Writing the trigger down before the Neptune session is what keeps 1.4 from becoming a re-litigation.
The second thing to carry into 1.3 is the RDCO lived lesson, because it predicts the CAF failure mode. The DuckDB prototype ([[prototype-results]]) got all its queries under 10ms on the first try and still fell short, because cites could not distinguish agreement from dissent and free-text authors broke entity resolution. The Fabric will hit the identical wall one layer up: produced_by and supersedes are cheap on any backend, but the edges that make the Fabric worth owning (which artifact informed a decision, which eval validates a capability, which approval gates what) are semantic modelling work that neither Neptune nor Snowflake gives you. That is also the Fluree observation about entity resolution and business-context encoding staying application-level. Concretely: the backend choice is roughly a wash on the things a buyer would compare, and decisive on nothing that determines whether the Fabric works. Saying that plainly in 1.3 is a stronger PM move than a feature matrix, because it reframes the fork as low-stakes and puts the spec back at the center.
Two watch items and one calibration note. Watch item one: RelationalAI as a graph coprocessor over Snowflake tables is a real third option that has not been named in any CAF artifact I can find, and it is the one path that gets traversal without leaving the Snowflake governance perimeter; worth a single line in 1.3's open-questions list so it is on the record, not a workstream. Watch item two: the App Runtime dependency in Epic 3 is public preview per [[caf-die-roadmap-v1]] ticket 3.1, so "Snowflake-native" currently rests on a preview surface, which is a fair thing for a sponsor to ask about. Calibration: this brief reads polished vault artifacts, not the room. The founder sits inside the DIE org and knows the Murray and Troy dynamics firsthand; if his read is that 1.4 needs to be a genuine bake-off rather than an adapter mapping, that read outranks this analysis.
Why this is in the vault
It determines how CAF/DIE Epic 1 ticket 1.3 (Snowflake backend design note) is written - specifically whether it carries a bounded query set, a hop-depth commitment, and a pre-registered falsification trigger - and whether ticket 1.4's Neptune working session is scoped as adapter mapping or as a backend bake-off. That scoping is what decides whether the founder's Fabric spec or Murray's already-running Neptune graph becomes the de facto hub of phData's DIE program.
Open follow-ups
- What is the Fabric's actual bounded query set from §4's provenance model, and what is the deepest traversal any spoke needs? Until that is enumerated, both backend arguments are speculative.
- Does Cortex Search support the per-artifact ACL granularity the Fabric's store needs, or does the multi-client blast-radius pattern from [[2026-06-17-multi-tenant-governance-shared-vector-store]] force one search service per engagement?
- Has any organization publicly documented a governed provenance graph on Snowflake node/edge tables in production, as opposed to Snowflake Labs samples and vendor benchmarks? Worth one re-check after Snowflake Summit 2026 material lands.
- What is RelationalAI's actual cost and consumption profile on Snowflake for a graph the size of a phData engagement portfolio, and does it change the 1.3 recommendation at all?
- Where is Snowflake App Runtime on the preview-to-GA path, given that the EOY funding artifact and now the Fabric store direction both depend on it?
- Does Murray's existing AWS knowledge graph already carry edge types the Fabric spec does not (the §8.2 "fits and gaps" question)? If it encodes richer semantics than
produced_by/supersedes, that is an argument for Neptune-as-index that is about modelling, not storage. - Would running the RDCO DuckDB graph's
validates/contradictsannotation experiment against a sample of CAF artifacts produce a cheap, credible demo of what the Fabric buys, ahead of any backend build?
Related
- [[caf-die-roadmap-v1]]
- [[roadmap-v1-founder-notes]]
- [[FABRIC-SPEC-v0]]
- [[2026-07-06-die-fabric-hub-spoke-map-and-roadmap-implications]]
- [[2026-06-15-caf-catalog-data-model-erd]]
- [[2026-04-28-snowflake-enterprise-knowledge-management]]
- [[prototype-results]]
- [[2026-07-05-caf-technical-pm-role-framing-and-roadmap-kit]]
- [[2026-07-08-cortex-sense-semantic-layer-wedge-caf]]
- [[2026-06-17-multi-tenant-governance-shared-vector-store]]
Sources
Vault
01-projects/phdata/roadmap-v1-work/caf-die-roadmap-v1.md— [[caf-die-roadmap-v1]]01-projects/phdata/roadmap-v1-work/roadmap-v1-founder-notes.md— [[roadmap-v1-founder-notes]]01-projects/phdata/fabric-spec/FABRIC-SPEC-v0.md— [[FABRIC-SPEC-v0]] (§0, §8.1, §8.2, §10 read in this run)01-projects/phdata/2026-07-06-die-fabric-hub-spoke-map-and-roadmap-implications.md— [[2026-07-06-die-fabric-hub-spoke-map-and-roadmap-implications]]01-projects/phdata/2026-06-15-caf-catalog-data-model-erd.md— [[2026-06-15-caf-catalog-data-model-erd]]06-reference/research/2026-04-28-snowflake-enterprise-knowledge-management.md— [[2026-04-28-snowflake-enterprise-knowledge-management]]01-projects/graph-db-eval/prototype-results.md— [[prototype-results]]01-projects/phdata/2026-07-05-caf-technical-pm-role-framing-and-roadmap-kit.md— [[2026-07-05-caf-technical-pm-role-framing-and-roadmap-kit]]06-reference/research/2026-07-08-cortex-sense-semantic-layer-wedge-caf.md— [[2026-07-08-cortex-sense-semantic-layer-wedge-caf]]06-reference/research/2026-06-17-multi-tenant-governance-shared-vector-store.md— [[2026-06-17-multi-tenant-governance-shared-vector-store]]
Web — fetched and read in this run
- https://github.com/snowflake-Labs/knowledge-graph-snowflake — Snowflake Labs reference implementation,
KG_NODE/KG_EDGE, Apache-2.0, 1 commit / 3 stars / 0 forks, no releases - https://www.snowflake.com/en/blog/engineering/ontology-grounded-cortex-agents/ — Snowflake engineering, 2026-05-25, flattened GraphRAG 78.2% vs seven-tool KG; vendor-run, public biomedical data, no named customers
- https://www.kasseh.com/knowledge-graphs-on-snowflake/ — Quentin Kasseh, 2026-01-06, graph-coprocessor-over-Snowflake argument; source of the three secondhand named deployments
Web — search results only, not individually fetched (treat as directional)
- https://docs.snowflake.com/en/release-notes/2026/other/2026-03-02-semantic-views-standard-sql — standard-SQL querying of semantic views GA 2026-03-02 (surfaced via search; the release-note page itself was not fetched in this run)
- https://www.tigergraph.com/blog/best-graph-databases/ — vendor-authored graph-DB buyer's guide, 2026
- https://flur.ee/blog/enterprise-kg-buyers-guide-2026 — vendor-authored enterprise KG comparison, 2026
- https://neo4j.com/blog/developer/unleash-neo4j-on-your-snowflake-data/ — Neo4j graph analytics projecting Snowflake data into memory
- https://docs.aws.amazon.com/neptune/latest/userguide/migrating-from-neo4j.html — AWS Neptune migration docs
Paywalled / skipped: none encountered.
Not found: no named mid-size deployment publicly documenting a Neptune-vs-Snowflake-native-KG backend decision. Stated as an absence of evidence, not as evidence of absence.