Running everything the models touch
Dagster represents the entire asset graph: the source tables your connectors load, the outputs of your Python and ML work, the records your reverse ETL syncs push out. Your dbt models sit in the same asset graph.
From there you decide when things run. An asset can wait for the assets it depends on to update, so your models build after ingestion finishes rather than at a time you guessed. Your dbt tests come across as asset checks, and a failing test stops the assets downstream of it. Backfills cover ingestion, dbt, and everything after it in one pass, as long as those assets are partitioned the same way.
Dagster builds its asset graph from dbt's own metadata. Against dbt Core it reads artifacts directly; against dbt Cloud it pulls project metadata through the API and watches run history from there. Either way your dbt project is translated into assets with the proper dependencies already in place, so nobody redeclares a pipeline that exists.
