Incident drill: a broken upstream caught by freshness and lineage
The source job quietly changed from hourly to daily; the mart's 6h freshness SLA now fails by construction. Run the drill — confirm the breach from the diff, walk upstream with get_lineage, and report the impact set with owner, criticality and the earliest SLA that breaks.
At a glance
| When | A freshness alert fired and nobody knows which upstream moved; You are rehearsing incidents and want a drill with a provable paper trail |
|---|---|
| Where | Data Observability |
| Why | Freshness tells you something broke; lineage tells you what and who — the drill is the two in sequence. |
Learning objectives
- Confirm a freshness breach from a schedule diff in minutes
- Walk upstream with get_lineage to find the source that slowed
- Report the impact set — owner, criticality, earliest SLA — as the incident note
What you need
- [object Object]
- A lineage store reached through mcp-datahub or the lineage-graph plugin
Steps
- Confirm the trigger — a cron changed from hourly to daily, and a 6h freshness SLA will be violated. (from hook-freshness-pre-merge )
- Show the arithmetic — the check compares the schedule in the diff with the declared SLA and warns with the computed worst-case lag. (from hook-freshness-pre-merge )
- Name the guard that should have caught it — a hook that warns when a change would silently widen the freshness SLA of a source. (from hook-freshness-pre-merge )
- Walk upstream — get_lineage from the stale asset finds the source that stopped feeding on time. (from mcp-datahub )
- Walk downstream for impact — from the broken node to the published marts; report owner, criticality, and the earliest SLA that will break. (from skill-lineage-explainer )
- Ask the opening question out loud — "what breaks if I change this column?" is how the drill starts. (from skill-lineage-explainer )
- Run it from commands — /lineage-up to find the culprit, /impact to size the blast radius. (from plugin-lineage-graph )
Check yourself
- You can state the breach, the worst-case lag, the broken source and the first SLA that breaks — in that order, with evidence.
- The incident note names an owner and a criticality, not a dashboard link.
Worked example
The drill in four moves — from skill-lineage-explainer
1. breach: cron hourly→daily vs 6h SLA — worst-case lag 24h
2. source: get_lineage(stale mart) — the upstream source slowed
3. impact: walk downstream, stop at published marts —
owner, criticality, earliest SLA that breaks
4. page: owner + evidence (the diff), not a screenshot
The command pair for the drill — from plugin-lineage-graph
/lineage-up <stale asset> # find what feeds it, spot the slow source
/impact <broken column> # list downstream consumers a change breaks
Sourced from
Security scan
Last sweep 2026-10-24: 0 finding(s), 0 marked as examples.
Common gotchas
- The diff is evidence — the schedule change and the SLA it breaks are provable before anyone is paged.
- An upstream that slowed rather than stopped still breaches a tight SLA — worst-case lag catches it.
- Stop the walk at published marts — that is where owners and SLAs live, and where the walk ends.
Production considerations
- Wire the freshness-pre-merge check into CI so this incident class dies before merge.
- Keep the drill to four questions — breach, source, impact set, owner.
Diagram
incident drill
|
|- 1. breach: cron hourly→daily vs 6h SLA ──▶ worst-case lag 24h
|
|- 2. source: get_lineage(stale mart) ──▶ upstream source slowed
|
|- 3. impact: walk downstream ──▶ mart_revenue (published) ──▶ owner, criticality, earliest SLA
|
--> 4. page: owner + evidence (the diff), not a dashboard screenshot
Registry stats
| Verification | community · Oct 24, 2026 |
|---|---|
| Completeness | 81 |
| Trust multiplier | ×0.75 |
| Composite | 31.15 · adequate |
| Freshness | 0 days since last source check |
| Difficulty | intermediate |
| Version | 0.1.0 |
| License | CC-BY-4.0 |
| Security flags | 2 |
Did this solve your problem?
Incident drill: a broken upstream caught by freshness and lineage