---
title: "dbt models behind dashboards on fragile schedules | Metacenta"
description: "When the job that builds a dashboard's models has no retry or no failure alert, the dashboard pays. How we trace a job through dbt to what people read."
url: "https://metacenta.com/rules/consumer-model-fragile-schedule"
updated: "2026-10-14"
tokens: 637
---

Orchestration & reliability · rule consumer-model-fragile-schedule

# dbt models behind dashboards on fragile schedules

A Metacenta review checks this under the rule **Models behind dashboards are built by jobs that retry and alert**. Everything below applies whether or not you ever commission one.

## What this rule checks

We follow each job's dbt selection to the models it builds, then downstream to dbt exposures, Looker explores and Tableau views. The rule flags a job that feeds any of those and has no retries or no failure alert.

## Why it matters

A job with no alert that fails overnight leaves those dashboards showing yesterday's numbers as today's, and nobody is told. With no retries, one transient failure stops them until somebody reruns the job by hand.

## How to fix it

**Make the jobs behind dashboards retry and alert.** Set `retries` and `retry_delay` on the job, and wire `on_failure_callback` to wherever the team is paged. Start with the jobs whose models feed the most dashboards.

Before:

```python
DbtTaskGroup(
    group_id="marts",
    render_config=RenderConfig(select=["path:models/marts"]),
)
```

After:

```python
DbtTaskGroup(
    group_id="marts",
    render_config=RenderConfig(select=["path:models/marts"]),
    default_args={
        "retries": 3,
        "on_failure_callback": notify_on_call_rota,
    },
)
```

## When it is fine to leave

Alerting configured centrally covers the job without appearing in its file. A job that builds only non-idempotent loads may be right to skip retries. Tell us which applies, and the finding comes out of your report.

## What we need to check it

The job files you name to us, `manifest.json`, and exposures, a LookML project or a Tableau workbook. A selection built at runtime, `state:` selectors or a dbt Cloud job cannot be traced, so we report could not tell, never unscheduled.

[Ask about a review](https://metacenta.com/enquire?src=rule-consumer-model-fragile-schedule&via=md)

## Related pages

- [Airflow DAG owner: how to set it and what it does](https://metacenta.com/rules/dag-unowned)
- [Airflow DAGs with no retries](https://metacenta.com/rules/dag-no-retries)
- [Airflow DAGs with no failure alert](https://metacenta.com/rules/dag-no-failure-alert)
- [Airflow catchup: what it does and how to control it](https://metacenta.com/rules/dag-catchup-unbounded)
- [A sample review, as a client reads it](https://metacenta.com/sample)
- [All published rules](https://metacenta.com/rules)
- [How a review is assessed](https://metacenta.com/standard)
