A data-quality workflow in Dock starts when Monte Carlo fires an anomaly, a dbt test fails, or a Snowflake freshness SLA slips. The analytics agent reads the alert, pulls the failing model lineage, drafts an incident brief, and waits for the on-call data lead to approve the remediation. Platforms keep telemetry. Dock keeps the interpretation, the decision, and the name attached.
Monte Carlo, dbt, and Snowflake stay the system of record for the raw data. Dock is the system of record for what the agent interprets. Each Dock row carries a pointer back to the platform record, agent identity, decision, reviewer, and timestamp. The agent re-fetches platform data via fresh API reads when it needs current state.
The Dock surface: Quality Incidents table
| Incident ID | Source alert | Failing asset | Agent brief | Proposed fix | Reviewer | Status |
|---|---|---|---|---|---|---|
| QI-2041 | Monte Carlo #MC-88421 (volume anomaly) | analytics.fct_orders |
Row count dropped 37% vs 7-day median; upstream Fivetran sync delayed 4h | Pause downstream Looker refresh; re-run sync; backfill | priya@ (data lead) | Approved 09:42 |
| QI-2042 | dbt test failure (uniqueness) | stg_stripe__charges.charge_id |
Two duplicate charge_ids from Stripe webhook retry; affects 14 downstream models | Add dedup CTE in staging; open Stripe ticket | priya@ | Pending review |
| QI-2043 | Snowflake freshness SLA breach | mart.kpi_daily_revenue |
Source raw.sf_opportunities last updated 26h ago; SLA is 24h |
Re-trigger Salesforce sync; notify RevOps; recompute KPIs | rohan@ (analytics eng) | Approved 11:08 |
Each row links back to the Monte Carlo incident URL, the dbt run artifact, and the Snowflake query history. The agent does not cache metric values. When Priya opens QI-2041, the agent re-queries Monte Carlo and Snowflake to confirm the gap before the reviewer commits.
A worked workflow
At 09:38 Monte Carlo posts MC-88421 to the agent's webhook. The agent fetches the payload, walks the lineage graph for downstream consumers (three Looker dashboards, one reverse-ETL sync), and pauses the Looker refresh through the dbt Cloud API. It writes QI-2041 with the proposed remediation and tags Priya, the on-call data lead. Priya opens Dock, clicks through to confirm the anomaly is still active, and approves at 09:42. The agent triggers the Fivetran re-sync, monitors completion, and updates QI-2041 with the new row count and resolution time. The audit trail shows: agent drafted, Priya approved, agent executed, Snowflake confirmed.
Why this matters
Monte Carlo's Data Quality Score weights incident response time as a core operational metric, alongside freshness adherence and ownership clarity. Gartner puts the average annual cost of poor data quality at $12.9 million per organization. Most of that cost compounds because alerts get acknowledged but not attributed. A shared Slack channel does not tell you which engineer approved the backfill, or whether the agent that ran the dedup checked downstream impact. Dock makes the chain of custody legible. The data analytics pillar covers the full surface set.
The same attribution model is what makes cloud 2.0 for engineering workable: agents act, humans approve, and the row is the receipt. Agent audit and compliance explains why the receipt has to live outside the alerting platform. Agent identity and agent identity lifecycle cover how the analytics agent gets its name in the first place. For the parallel infrastructure pattern, see Dock for IT operations.
Stand up a Quality Incidents table in your Dock workspace this week.
FAQ
Does Dock replace Monte Carlo or dbt? No. Monte Carlo detects anomalies, dbt runs tests, Snowflake stores data. Dock holds the agent's interpretation, the human approval, and the audit row.
What happens if the agent is wrong about the proposed fix? The data lead rejects the brief in Dock. The rejection is logged with reviewer identity and reason. The agent re-drafts. No remediation runs without an approved row.
How does the agent know which lineage to walk? It calls the dbt Cloud metadata API and the Monte Carlo lineage API at incident time. Dock stores the pointer, not a cached graph, so the lineage is always current.
Can multiple agents write to the same incidents table? Yes. Each row carries the agent identity that drafted it. A separate freshness agent and an anomaly agent can both file QI rows; the reviewer sees who proposed what.