Five gold models failed at once with Name nearest_port not found | The first end-to-end run. dbt never rebuilds a view that is only referenced, so a renamed Silver column left a stale staging view | A dbt_staging task before every model |
| A tile called “Bronze rejects” showed 56–80% | Sampling 3,000 raw messages: none failed validation. Docker showed the Bronze job OOMKilled | Renamed to “Bronze gap”; described as a lag symptom |
| Hot Alerts crashed on the second position of any vessel | The real-Spark smoke test; Spark hands state over as a tuple, which a fake had hidden | A namedtuple |
| Barcelona came out as Atlantic and New York as Pacific | Checking the 15 major ports by hand | First match wins, boxes corrected |
| The detector tables stayed empty after a green run: 0 speed anomalies in 390,000 positions | Running the model's SQL by hand found 938. An incremental cutoff of max(...) over an empty table is NULL, and x >= NULL keeps no row | A coalesce fallback in three models, and a test |
A dbt task failed once, then passed on retry: Partition keys should be invariant | Spark parks each task's files under _temporary/ for a few seconds, and the external tables matched /*. Reproduced 2 of 9 queries | Patterns end in partition_date=* (0 of 9 after) |
| Bronze wrote exactly 33 messages a second against a feed of about 95; BigQuery was 15 minutes stale | The topic offsets: the cap was 1000 rows per 30-second batch (1000 / 30) | 4000 by default, and a section on sizing it |
| A “speed 102.3 kn” sentinel produced false acceleration alerts | Hot path test | AIS “not available” values become null |