You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add principle 14: couple through data at rest, not run status
Production jobs read whatever is on disk when they run and record how
stale it was. None of them asks whether the job producing its input
succeeded, or ran at all. That is why a failed ingest makes the 06:00
forecast slightly staler rather than absent.
The property was already implemented and already argued for in one place
(dropping the promoted_model lineage edge), but the docs never stated it,
and two places framed it as a defect awaiting a fix: the TODO on
power_time_series_and_metadata_schedule proposed a run-status sensor that
would only fire live_forecasts once the ingest had succeeded, and the
Airflow comparison table listed "run-status coordination" as planned
work. Both would have introduced exactly the cascade the design avoids.
live_forecasts wants to run at 00/06/12/18 regardless, so there is no
acceleration to be had from a sensor there. Sensors are still wanted on
the ingest assets, where they save booting Fargate for a no-op fetch;
that is what #324 is actually for, and the table row now says so.
Note the asymmetry that makes this work: the lineage edge stays. It is
what builds a developer's inputs on a laptop. What it must never become
is a runtime gate.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/architecture/why-dagster-not-airflow.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -200,7 +200,7 @@ around the Dagster UI and would need rewriting.
200
200
|`add_output_metadata` tables, asset catalog, lineage | every asset | Asset-event `extra` JSON (2.10+) in the events list | Partial — raw JSON, no rendered tables or history plots |
201
201
| Asset checks — non-blocking WARN, attached to an asset, dedicated Checks view (`power_data_is_fresh`, `nwp_has_no_unexpected_nulls`) | power ingest, `ecmwf_ens`| Data-quality as ordinary tasks (`common.sql` check operators; Great Expectations / Soda / dbt-test); no first-class check primitive or Checks UI, blocking by default (as of 3.3.0) | Partial — the capability exists as tasks; the non-blocking severity and check-status surface do not |
202
202
|`EcsRunLauncher` (laptop = subprocess, cloud = Fargate, switched by `dagster.yaml`) | control plane | ECS executor (Amazon provider, Fargate launch type) | Exists; per-*task* rather than per-run granularity |
|Data-arrival sensors (planned, [#324](https://github.com/openclimatefix/nged-substation-forecast/issues/324)) |firing the *ingest* jobs only when there is new data to fetch, to avoid booting Fargate for a no-op| Asset-triggered DAGs, event-driven scheduling | Parity, arguably cleaner in Airflow |
204
204
205
205
The asset-checks row is worth one extra sentence, because the gap there is architectural rather
206
206
than cosmetic: non-blocking WARN checks are the *mechanism* by which this service stays
0 commit comments