Introduction
This article describes what Foundational detects across your code and data pipelines, grouped into meaningful categories. Each detection includes a description and a severity level.
Foundational continuously scans your code and data pipelines across platforms such as dbt, Airflow, Snowflake, BigQuery, Redshift, Databricks, Spark, Looker, Power BI, Tableau, and many more. It builds a unified, column-level lineage graph of how data flows between tables, columns, dashboards, and jobs. Foundational analyzes the graph on every pull request and catches problems before they reach production.
The exact set of detections enabled for your organization, and their thresholds, can vary. Contact your Foundational representative to review or adjust your configuration.
How detection works
Foundational detects issues at three points:
On a pull request (pre-merge): Foundational compares the lineage graph as it exists today against how it would look after your change, and flags anything the change would break or degrade. This is where breaking changes are caught.
Continuously (post-merge / scheduled): Data observability monitors run against your warehouses to catch freshness, volume, and data quality problems as they happen.
At scan time: Parsing and compilation checks confirm Foundational can fully understand each project, so lineage stays complete and trustworthy.
Every detection is configurable per organization. You can tune individual checks, scope them to specific platforms, or disable them to match your team's workflow.
Severity levels
Severity | Meaning |
Critical | A project could not be compiled or understood. Lineage for the affected asset may be incomplete until you resolve it. |
Error | A change or condition will break a downstream consumer or produce incorrect results. |
Warning | A likely problem or risky change that warrants review. It may be intentional. |
Information | A suggestion or best-practice gap with no immediate impact. |
What is a breaking change?
A breaking change is a code change that removes or alters a table or column that other assets still depend on. It leaves a downstream query, model, dashboard, or job pointing at data that no longer exists or no longer matches.
Foundational detects breaking changes by diffing the lineage graph. Because that graph is unified across platforms and resolved down to the individual column, Foundational catches a change no matter how many transformations or platform hops separate it from the asset it affects.
For example, Foundational flags a column dropped in a dbt model even when the dependent asset is a downstream Snowflake view, a Looker explore, a Power BI dashboard, or an Airflow job.
Breaking Schema Changes
Forward-looking checks run on every pull request and pinpoint exactly which downstream assets a change would break, across every connected platform, down to the individual column.
Detection | Severity | What it means |
Removed table still in use | Error | A change deletes a table that downstream models, queries, dashboards, or jobs still read from. Foundational names every consumer that would break. |
Renamed table still in use | Error | A change renames a table, but downstream assets still reference it by its old name and will break. |
Removed column still in use | Error | A change deletes a column that is still consumed downstream. Foundational catches this at the individual-column level, even when the column is read many steps away from where it was removed. |
Renamed column still in use | Error | A change renames a column, but downstream assets still read it by its old name and will break. |
Column type change | Warning | A column's data type changes in a way that can break or silently corrupt the downstream consumers that read it. For example, a numeric column becomes a string. |
Breaking change reaching BI and operational tools | Error | A change in one system breaks an asset in a different one: a Power BI, Looker, or Tableau dashboard, a reverse-ETL sync, or a Spark or Airflow job. Single-tool checks cannot see these cross-platform breaks. |
Reference to a non-existent table | Error | A model, query, or dashboard references a table that does not exist in any connected source. This points to a typo, an object that was dropped, or a source that was never created. |
Reference to a non-existent column | Error | An asset reads a column that does not exist on its source table, so the query fails or silently returns no data. |
SQL correctness and semantics
Foundational statically analyzes SQL across every dialect in your stack and surfaces correctness and semantic problems before the SQL ever runs.
Detection | Severity | What it means |
SQL Syntax Error | Error | SQL that is grammatically malformed and will fail to parse or compile. |
SQL Type / Cast Error | Error | SQL that parses correctly but contains an invalid type conversion. This includes casting a value to a type it cannot become, or forming an invalid timestamp or temporal expression, either of which fails at runtime or silently corrupts results. |
Unresolved Reference | Warning | A query references a table, column, or schema that cannot be resolved in its context, indicating a likely broken or out-of-date reference. |
SQL Column Ambiguity | Error | A column reference is ambiguous across joined tables, so the engine may resolve it to the wrong source and return unexpected values. |
Union Size Mismatch | Warning | The branches of a UNION return different numbers of columns, which fails or misaligns the combined result. |
Union Names Mismatch | Warning | The branches of a UNION carry mismatched column names, risking mislabeled output downstream. |
Unhandled Enum (non-exhaustive CASE) | Warning | A CASE expression does not cover all known values of its input, leaving unhandled values to fall through unexpectedly. |
dbt Enum Mismatch | Warning | A column's data contains values outside the set declared as accepted for it. |
Duplicate Definition | Warning | The same table or entity is defined in more than one place, creating ambiguity about the source of truth. |
Metadata & Governance
Detection | Severity | What it means |
Missing Description | Warning | A table or column has no description, reducing discoverability and governance coverage. |
Missing Enum Test | Information | A column expected to be validated against an enumerated set has no such test or validation. |
Data Observability & Quality
Continuous monitors watch your data after it lands, catching freshness and anomaly problems automatically.
Detection | Severity | What it means |
Freshness | Warning | A table has not been updated within its expected time window. |
Row Count Freshness | Warning | A table's row count has not changed when new data was expected. |
Volume Anomaly | Warning | An unusual spike, drop, or zero in the volume of data written. |
Row Count Threshold Violation | Warning | A table's row count fell outside its expected range. |
Count Threshold Violation | Warning | A monitored value count fell outside its configured threshold. |
Value Count Anomaly | Warning | The distribution of values in a column deviated from what is expected. |
Value Rate Anomaly | Warning | The rate of unexpected or invalid values in a column is too high. |
Monitor Failure | Warning | A monitoring query failed to execute. |
Monitored Entity Missing | Error | A table that is under active monitoring no longer exists. |
