Analyst review queues stall because the reviewer cannot see why the query was written, what model it depends on, or what changed since the last run. Dock fixes the visibility gap. An agent reads Snowflake QUERY_HISTORY, pulls the matching dbt model, and drafts a review brief. A named analyst approves or rejects. Every decision carries an agent identity, a reviewer, and a pointer back to the query_id. No PR comment threads. No Slack receipts. One row per review.
The architecture
Snowflake and dbt 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.
That separation matters. Snowflake QUERY_HISTORY retains 365 days of execution metadata in ACCOUNT_USAGE, with up to 45 minutes of latency (Snowflake docs). Dock does not mirror those rows. It stores the agent's interpretation of them, with a query_id pointer for re-fetch.
The Dock surface: Query Review Queue
| query_id | model | author | agent draft | flag | analyst | decision | timestamp |
|---|---|---|---|---|---|---|---|
| 01b2b8e3-... | fct_orders |
jenna@ | Adds coupon_amount to grain. Backfill safe. |
low risk | priya@ | approved | 2026-05-29 14:02 |
| 01b2b91a-... | dim_customer |
marco@ | Drops legacy_segment column. 14 downstream models reference it. |
blocker | priya@ | rejected | 2026-05-29 14:18 |
| 01b2b94f-... | stg_stripe__charges |
agent-ved | Renames amt to amount_cents. Matches dbt SOAE style guide. |
low risk | sam@ | approved | 2026-05-29 15:40 |
Each row is one review. The agent draft column is the interpretation. The query_id is the pointer. The analyst column is the named approver.
The workflow
A dbt PR opens. The agent reads QUERY_HISTORY for the affected models over the last 7 days, pulls the dbt YAML, and drafts a one-paragraph brief: what changed, what downstream models reference it, what the dbt Semantic Layer governance file says about the metric (dbt MetricFlow docs). The brief lands in the Query Review Queue as a new row with flag = unreviewed.
A named analyst opens the row. If the flag is blocker, they reject and the agent posts the rejection reason back to the PR. If low risk, they approve and the agent merges. The decision, the reviewer email, and the timestamp persist in Dock. The query_id stays as the pointer for any future audit. No re-litigation, because the brief is the record.
Why this matters
Analyst time is the bottleneck. Most review delay is context-rebuild, not judgment. The agent rebuilds the context. The analyst applies the judgment. Dock holds the receipt. Pair this pattern with the broader data and analytics rail and the engineering rail to see how query review fits the wider review-queue model.
Approval rows are also the unit of agent audit and compliance. If a finance auditor asks who approved the fct_orders grain change in Q2, the answer is one Dock query: row, analyst, timestamp, query_id.
Try it
Pipe Snowflake QUERY_HISTORY into a Dock review queue this week. One agent, one analyst, one row per query.
FAQ
Q: Does Dock store the query SQL? A: No. Dock stores the agent's draft review and the query_id. The SQL stays in Snowflake. The agent re-fetches it on open. This keeps Dock small and avoids stale copies, which matters for agent identity traceability.
Q: What if the analyst disagrees with the agent draft? A: They reject and write a one-line reason. The agent learns from the rejection corpus. The rejected row stays in Dock as a record. This pattern is documented in the product rail for design review and applies identically here.
Q: Who is the named approver when an agent self-merges low-risk changes? A: The agent identity is the approver, and the row records it as such. Agents are first-class identities with their own credentials and review authority, governed by an agent identity lifecycle policy that scopes which models a given agent can sign off on.
Q: How does Dock handle dbt Semantic Layer metric changes? A: The agent reads the MetricFlow YAML, flags any metric whose definition changed, and routes those rows to a metric-owner analyst rather than the default reviewer. The dbt YAML stays the source of truth. Dock holds the review row.