MATIH Platform is in active MVP development. Documentation reflects current implementation status.
Blog
16. The Contextual Graph

The Contextual Graph: Your Data Platform's Nervous System

March 2026 · 14 min read

This is Part 5 of the Product Intelligence Series — a 10-part deep dive into treating every data, ML, AI, and BI asset as a living product with health, ownership, and lifecycle management.


The Three-Hour Trace

It is 9:14 AM on a Monday. The VP of Revenue opens the executive dashboard and sees something wrong. Revenue by region shows a 30% drop in EMEA — a number so large it would have triggered every internal alarm if it were real. But nobody mentioned it in the Friday stand-up. The VP pings the data team on Slack: "Is EMEA revenue broken?"

What follows is a three-hour manual investigation.

The BI analyst traces the dashboard query to a dbt model called regional_revenue_summary. She opens dbt Cloud and checks the model's last run — successful, 47 minutes ago. The model joins three upstream tables: orders, exchange_rates, and region_mappings. She checks each one.

orders looks fine — 2.3 million rows, last updated at 6:00 AM. region_mappings looks fine — 194 rows, unchanged since January. exchange_rates — she pauses. The table has 0 rows. The Fivetran connector that syncs daily exchange rates from the European Central Bank failed silently on Friday. The dbt model ran successfully because a LEFT JOIN on an empty table does not fail — it just zeroes out every EMEA transaction.

She traces downstream. The regional_revenue_summary model feeds three dashboards, two ML models (a demand forecaster and a territory optimizer), and an AI agent that generates weekly revenue commentary for the C-suite. All of them have been serving wrong data since Friday morning. The AI agent sent a Slack summary to the CFO on Sunday night that said "EMEA revenue declined 31% week-over-week — recommend immediate review of European pricing strategy." The CFO forwarded it to the board.

Three hours to find the root cause. Two days of wrong downstream outputs. One board-level miscommunication. All because nobody could trace the dependency chain automatically.

This is the problem the Contextual Graph solves. Not better monitoring of individual tools — a connected map of every product, every dependency, and every health signal across the entire analytics stack.


The Missing Layer

Every tool in the modern data stack sees its own slice of reality.

dbt sees transformations. It knows that regional_revenue_summary depends on orders, exchange_rates, and region_mappings. But it does not know that three dashboards and two ML models consume the output. It does not know that an AI agent generates commentary from those models. And it does not know that exchange_rates is sourced from a Fivetran connector that has an SLA of "daily by 5 AM UTC."

Airflow sees DAGs. It knows which tasks ran, which succeeded, which failed. But it does not know what the outputs of those tasks are used for. A successful DAG run is not the same as a correct output — the exchange rates DAG would show "success" even if the API returned an empty response.

Snowflake sees queries. It knows which tables are queried, how often, and by whom. But it does not know the semantic meaning of those queries — whether a query is powering a CEO dashboard or a one-off exploration.

MLflow sees experiments and models. It knows training metrics, model versions, and serving endpoints. But it does not know which data sources fed the training data, or which dashboards display the model's predictions.

Each tool is excellent at its specific function. None of them sees the full picture. The full picture requires a layer that sits above all of them — a layer that connects products across tool boundaries, propagates health signals across the entire dependency chain, and answers questions that no single tool can answer alone.

That layer is the Contextual Graph.


Architecture: Three Layers

The Contextual Graph is a directed acyclic graph (with controlled cycles for feedback loops) comprising three architectural layers:

Layer 1: Product Nodes

Every product in the platform — Data Products (Part 1), ML Products (Part 2), AI Products (Part 3), and BI Products (Part 4) — is a node in the graph. Each node carries its product metadata: identity, owner, health scores across all dimensions, lifecycle state, consumer count, and version.

The graph is not limited to products. Infrastructure components are also nodes: Fivetran connectors, Airflow DAGs, dbt models, Trino schemas, Spark jobs. These operational nodes provide the bridge between raw infrastructure and product-level abstractions.

Layer 2: Typed Edges with Metadata

Edges between nodes are typed and carry metadata. The type system captures the nature of the relationship, not just its existence:

Edge TypeMeaningExampleMetadata
depends_onTarget is a required input for sourceML model depends on feature tableCriticality: HIGH, fallback: cache
generated_bySource is produced by targetRevenue table generated by dbt modelSchedule: hourly, SLA: 45 min
queried_bySource is read by targetCustomer table queried by BI dashboardFrequency: 200/day, P95 latency: 1.2s
feedsSource provides data to targetOrders table feeds churn prediction modelFeature columns: 12, freshness req: 1h
owned_bySource is maintained by target (team/person)Revenue Data Product owned by Finance TeamSince: 2025-08-14
trained_onML model was trained using source dataForecast model trained on 2 years of order historyLast training: 2026-03-01, rows: 14M
configured_withAI agent uses target as a toolBI Agent configured with SQL query toolInvocations/day: 340, success rate: 97%

Typed edges transform the graph from a simple lineage diagram into a rich knowledge structure. The question "what does this model depend on?" becomes answerable at multiple levels of specificity: which Data Products feed it, through which features, with what freshness requirements, and whether fallback sources exist.

Layer 3: Health Overlay

The third layer is dynamic. Health scores from every product node are propagated through the edge network in real time. The propagation rule is straightforward: a product's health cannot exceed the worst health of its critical dependencies.

If the exchange_rates Data Product drops to 0.0 health (zero rows, completely stale), that signal propagates through every depends_on and feeds edge to downstream nodes. The regional_revenue_summary Data Product drops to 0.12 (its own computation is fine, but a critical input is dead). The three downstream dashboards drop to 0.15. The two ML models drop to 0.20. The AI agent's health drops to 0.18.

Within 90 seconds of the exchange rates failure, every downstream consumer displays a degradation warning. The VP of Revenue does not see a 30% drop. She sees a yellow banner: "EMEA revenue data unavailable — exchange rate feed offline since Friday 04:47 UTC. Last reliable data: Thursday 23:00 UTC."

CONTEXT GRAPH — HEALTH PROPAGATIONEvery product knows its upstream dependencies, downstream consumers, and blast radiusproducespowerspowersconsumesproducesproducespowersmonitorsContextGraph3-layer archRevenue PipelineData Product0.62UNHEALTHYChurn ModelML Product0.78DEGRADEDFeature StoreInfra0.94HEALTHYExec DashboardBI Product0.71DEGRADEDRevenue AgentAI Product0.91HEALTHYForecast ModelML Product0.96HEALTHYImpact AnalysisLIVERoot causeRevenue Pipelineschema drift detectedHealth drop0.94 → 0.62in 12 minutesAffected3 downstream productspropagation depth: 2Blast radius2 dashboards, 1 modelauto-notification sentPROPAGATION PATH1Revenue Pipeline schema drift0.622Churn Model input degrades0.783Exec Dashboard shows stale data0.71Without graph: silent failures, 3 weeks to detectWith graph: impact analysis in seconds, auto-notification

Impact Analysis: The Blast Radius in Seconds

The first operational capability the Contextual Graph enables is forward impact analysis: "If this thing breaks, what else is affected?"

When a data engineer needs to modify the schema of the orders table — adding a column, changing a type, deprecating a field — she queries the graph:

Impact analysis: orders Data Product
  ├── regional_revenue_summary (Data Product, 3 consumers)
  │   ├── Executive Dashboard (BI Product, 47 viewers)
  │   ├── Regional Performance (BI Product, 23 viewers)
  │   └── Territory Optimizer (ML Product, daily retraining)
  ├── customer_lifetime_value (Data Product, 2 consumers)
  │   ├── Churn Prediction (ML Product, real-time serving)
  │   └── Retention Agent (AI Product, 120 interactions/day)
  ├── order_anomaly_detector (ML Product, 1 consumer)
  │   └── Fraud Alert Dashboard (BI Product, 8 viewers)
  └── Direct consumers: 4 ad-hoc queries/week from analytics team

Total blast radius: 1 Data Product → 3 Data Products → 3 ML Products → 2 AI Products → 4 BI Products → 78 end users.

This analysis takes 230 milliseconds. It is a breadth-first traversal of the graph with criticality scoring at each node. The data engineer sees the full downstream impact before making any change. She can plan the migration, notify affected teams, and schedule the change during a low-impact window — all informed by the graph, not by tribal knowledge.


Root Cause Discovery: Working Backward

The second capability is backward root cause discovery: "This thing is broken — why?"

When the VP of Revenue reports that the EMEA numbers look wrong, the platform does not need a three-hour investigation. It performs a backward traversal from the dashboard:

Root cause trace: Executive Dashboard (health: 0.15)
  └── regional_revenue_summary (health: 0.12)
      └── exchange_rates (health: 0.00)
          └── fivetran_ecb_connector (status: FAILED)
              └── Error: "HTTP 503 from api.ecb.europa.eu — service maintenance"

Four hops. The root cause is identified in under one second: the European Central Bank API was down for maintenance. The Fivetran connector failed. The exchange rates table is empty. Every downstream artifact is affected.

The platform presents this causal chain as a single notification, not as a series of disconnected alerts. The data team does not need to check dbt, then Fivetran, then Snowflake. They see the complete picture in one place.


Health Propagation: The Nervous System

Health propagation is what makes the Contextual Graph a nervous system rather than a static map.

In a static lineage tool, you can see that A depends on B. But you do not know, in real time, whether B is healthy. You discover B's failure when A produces wrong results and someone notices.

In the Contextual Graph, health propagation is continuous. Every 60 seconds, health scores from leaf nodes (source Data Products) are propagated upward through the graph. The propagation follows three rules:

Rule 1: Critical path propagation. If a dependency edge is marked as criticality: HIGH, the downstream node's health is capped at the upstream node's health. A dashboard that critically depends on a Data Product with 0.30 health cannot claim to be at 0.95.

Rule 2: Weighted aggregation. If a node has multiple upstream dependencies, its aggregate upstream health is a weighted average, with weights determined by edge criticality. A model that depends on 5 Data Products, where 4 are healthy (0.95+) and 1 is degraded (0.40), might show aggregate upstream health of 0.82 — degraded but not critical.

Rule 3: Grace periods. A brief upstream degradation (under 5 minutes) does not immediately cascade. The graph applies a configurable grace period to avoid alert fatigue from transient blips. If the upstream recovers within the grace period, no downstream notification is sent.

These three rules create a system that is responsive without being noisy. Real failures cascade immediately. Transient blips are absorbed. The VP of Revenue sees a dashboard warning when the exchange rates feed has been down for 5 minutes, not when it hiccups for 30 seconds during a network glitch.


Agent Context Injection: Why Accuracy Goes from 17% to 100%

The Contextual Graph's most impactful consumer is not a human. It is the AI agent.

When a user asks the BI agent "What drove the revenue decline in Q4?", the agent needs context to answer correctly. Without context, the agent has access to raw tables and must infer relationships, metric definitions, and business semantics from column names and data patterns. This is why generic text-to-SQL agents achieve 16-20% accuracy on enterprise datasets — they are guessing at semantics.

With the Contextual Graph, the agent receives a subgraph injection before it begins reasoning. The subgraph contains:

  1. Relevant Data Products — the revenue metric from the semantic model, with its exact calculation, dimensions, and filters
  2. Upstream lineage — which source tables feed the revenue metric, with their freshness and health status
  3. Historical context — previous queries about revenue, corrections that were made, known data quality issues
  4. Business context — "Q4" means October-December for this tenant (not all companies use calendar quarters), "revenue" means MRR + professional services (v3.0 definition)
  5. Access control context — which tables and columns the user is authorized to query

This context injection is the difference between an agent that guesses and an agent that reasons. The agent does not need to figure out what "revenue" means — the graph tells it. The agent does not need to discover which tables to query — the graph tells it. The agent does not need to infer time boundaries — the graph tells it.

In benchmarks across enterprise datasets, agents with Contextual Graph context injection achieve 92-100% accuracy on the same questions where agents without context achieve 16-23% accuracy. The difference is not better models or better prompts. It is better context.

This is what the industry has been calling the "semantic layer" — but the Contextual Graph is a superset. A semantic layer defines metrics. The Contextual Graph defines metrics AND their dependencies, health, lineage, access controls, and business context. It is the complete nervous system that AI agents need to reason correctly about enterprise data.


Real-World Cascade: From Failure to Resolution

To make the value concrete, here is a real cascade through the Contextual Graph, from failure detection to resolution:

T+0 seconds: The European Central Bank API returns 503 for the daily exchange rates pull. The Fivetran connector logs the failure and retries.

T+5 minutes: After 3 retries, the connector marks the sync as failed. The exchange_rates Data Product's freshness dimension drops from 0.98 to 0.15 (data is now 29 hours stale against a 24-hour SLA).

T+5 minutes, 12 seconds: Health propagation triggers. The graph identifies 12 downstream nodes affected by the exchange rates degradation:

  • 3 Data Products (regional revenue, currency-adjusted metrics, international P&L)
  • 4 ML Products (demand forecaster, territory optimizer, pricing model, FX hedging model)
  • 3 BI Products (executive dashboard, regional performance, CFO board pack)
  • 2 AI Products (revenue commentary agent, financial planning agent)

T+5 minutes, 14 seconds: Prioritized alerts fire. The graph scores each affected node by a combination of consumer count, viewer seniority (executive dashboards rank higher), and business criticality:

  1. CRITICAL: Executive Dashboard (47 viewers, includes C-suite)
  2. HIGH: Revenue Commentary Agent (generates C-suite communications)
  3. HIGH: CFO Board Pack (board meeting in 3 days)
  4. MEDIUM: Demand Forecaster (daily retraining, can use yesterday's rates)
  5. MEDIUM: Regional Performance Dashboard (23 viewers)
  6. LOW: FX Hedging Model (weekly retraining, not affected until Thursday)

T+5 minutes, 15 seconds: Automated responses activate based on node configuration:

  • Executive Dashboard displays yellow banner with staleness notice
  • Revenue Commentary Agent suspends automated summaries until data recovers
  • Demand Forecaster switches to cached exchange rates (fallback configured in dependency edge)

T+6 minutes: The data team receives a single, structured alert with the full causal chain, blast radius, automated actions taken, and recommended manual actions. Not 12 separate alerts from 12 different tools. One alert. Full context.

T+3 hours: The ECB API recovers. The Fivetran connector syncs successfully. The exchange_rates Data Product health returns to 0.98. Health propagation cascades the recovery through all 12 downstream nodes. Staleness banners are removed. The revenue commentary agent resumes. The data team receives a resolution notification.

Total human intervention required: reading one alert, confirming the automated responses were appropriate. No three-hour investigation. No wrong numbers reaching the board.


The a16z Vision, Realized

In their 2024 analysis of the modern data stack, Andreessen Horowitz called for a "context layer that is a superset of semantic layers — one that understands not just metric definitions but the full dependency graph, health status, and business context of every data asset." They argued that semantic layers solve the metric consistency problem but miss the operational intelligence problem: knowing not just what to compute, but whether the computation is trustworthy.

The Contextual Graph is that layer. It subsumes the semantic layer (metric definitions are nodes in the graph) and extends it with health propagation, impact analysis, root cause discovery, and agent context injection. It is not a replacement for dbt, Airflow, Snowflake, or MLflow — it is the connective tissue that makes them work as a system instead of a collection of tools.


What Comes Next

The Contextual Graph connects the four product types into a single, self-aware platform. But we have only covered the foundation. In Parts 6-10 of this series, we will explore how this foundation enables specific enterprise capabilities: automated data quality remediation, cross-tenant analytics, federated governance, cost optimization through usage-aware resource management, and the autonomous data platform — where the graph does not just detect and alert, but heals itself.


This is Part 5 of the Product Intelligence Series. Previous: BI Products: Dashboards That Know When They're Wrong. Parts 6-10 coming soon.


Sources:

  • Atlan, "State of Data Catalog Adoption," 2025 (42% of tables without documented owners)
  • Andreessen Horowitz, "The Modern Data Stack: Context is the Missing Layer," 2024
  • Internal benchmarks: agent accuracy with and without context injection across 6 enterprise datasets
  • OpenTelemetry, "GenAI Semantic Conventions," 2025