Apache Airflow logoProblem

The Scheduler Knows Everything About Your Data. Nobody Governs the Scheduler.

Picture a failure any Airflow estate can produce. The revenue dashboard is wrong for nine days. Not down — wrong, which is worse, because down gets noticed. During a migration someone paused the DAG that rebuilds the orders file. The downstream DAG that feeds the dashboard keeps right on running, every run green, consuming a file that has quietly stopped changing. Airflow does exactly what it was told. That is the problem: nothing in the system is broken, and nothing in the system is accountable either.

The Scheduler Knows Everything About Your Data. Nobody Governs the Scheduler.

Picture a failure any Airflow estate can produce. The revenue dashboard is wrong for nine days. Not down — wrong, which is worse, because down gets noticed. During a migration someone paused the DAG that rebuilds the orders file. The downstream DAG that feeds the dashboard keeps right on running, every run green, consuming a file that has quietly stopped changing. Airflow does exactly what it was told. That is the problem: nothing in the system is broken, and nothing in the system is accountable either.

Data teams have spent years building governance around tables, columns, and contracts. Almost none of that attention reaches the layer that actually moves the data. Orchestration is where freshness is decided, where dependencies are wired, where ownership is supposed to live — and in most organizations it is governed by nothing but tribal memory and the Airflow UI.

The questions nobody can answer quickly

Run this test on your own deployment. Pick a DAG at random and ask who owns it. In a lot of estates the honest answer is the string airflow — the default owner, which is to say no one. The engineer who wrote it may have left two reorgs ago. When that pipeline fails at 3 a.m., the on-call rotation is doing archaeology, not operations.

Now ask what the DAG is for. A name like etl_daily_v2_final and an empty description field is documentation by folklore. Pipelines without stated intent resist governance, because you cannot audit a purpose nobody wrote down.

Then ask the hard one: what happens downstream if this DAG stops? Airflow renders each DAG's internal task graph beautifully, but the dependencies that matter most run between DAGs, chained through the datasets they share — this pipeline writes a file, three others trigger on it, one of those feeds the model that feeds the dashboard. That estate-level graph exists nowhere except in the heads of the people who built it, and heads are a terrible system of record.

Failure modes that never throw an error

What makes orchestration governance urgent is that its failure modes are silent by construction.

The paused producer is the classic. Every producer of an asset is paused — deliberately, temporarily, someone meant to come back to it — while active DAGs still consume that asset. Nothing fails. Nothing alerts. Consumers simply run on stale data until a human notices a number that looks off, which can take days.

The ungoverned upstream is its cousin: an asset that DAGs in your deployment consume but that nothing in the deployment produces. Its freshness depends on some process outside orchestration's control — a vendor drop, a manual upload, a pipeline in another system. That dependency is real and load-bearing, and it is invisible in every DAG you can open.

Neither of these is a bug. They are structural facts about the estate, and no amount of monitoring individual DAG runs will surface them, because every individual run is succeeding.

Why the existing tools don't cover this

Schema governance products stop at the warehouse: they can tell you a column's type changed, but not that the pipeline feeding it lost its only active producer. Airflow's own interface is operational and per-DAG: superb at "did last night's run succeed?", silent on "who is accountable for this pipeline, what does it mean, and what depends on it across the whole deployment?" The gap between those two perspectives is exactly where the nine-day stale dashboard lives.

What we built for that gap

CoreModels treats the orchestration estate as something worth governing in its own right. You call your own Airflow REST API — the DAG list, optionally the per-DAG tasks and the data-aware scheduling assets — and hand us the JSON. No credentials ever leave your infrastructure; there is no agent, no plugin, nothing in the execution path.

From those artifacts we build a governed model: every DAG and every asset becomes a governed type, tasks become the DAG's elements with their operator classes recorded, and the producing and consuming relationships become explicit lineage — asset to the DAG that produces it, consuming DAG to the asset it reads — chaining cross-DAG dependencies through shared assets into one queryable graph, the same dependency graph our warehouse and dbt connectors feed. Ownership, schedule, and paused state come along as queryable metadata.

Then the audit turns the silent failure modes into named, coded findings. A DAG with no real owner is dag-no-owner, a warning, because nobody is accountable. A missing description is dag-no-description. An asset consumed but produced by nothing in the deployment is asset-unproduced. And the nine-day failure above has a name now: paused-producer — every producer of this asset is paused while active DAGs still consume it, and consumers will silently run on stale data. Every finding names its exact subject, and the paused-producer warning goes further, listing the producers and active consumers involved — so the report is a work queue, not an essay.

Because it is an audit and not a dashboard, it can run where decisions happen: as a gate on your DAG repository's pull requests, as a rolling history that shows whether the estate is getting healthier, as a status badge in the README, and as a one-call re-audit whenever the governed model itself changes.

The point

The scheduler already knows which pipelines exist, what they touch, and what state they are in. What it cannot do is hold anyone to anything — it has no notion of ownership beyond a default string, no notion of intent, no opinion about a paused producer feeding an active consumer. Governance is precisely the layer that turns those facts into obligations. Your orchestration estate has been running without it for long enough.

To see the full extraction-to-audit flow, start with the Apache Airflow quickstart in the CoreModels docs.