The production framework
Decision contract, approved context, scoped execution, validation, proof, review states, correction memory, and operations.
Start with the framework →Live workshop · one production path, end to end
Start by making one recurring analytics workflow trustworthy for yourself. Then earn the right to share it with a team, add a review loop, and operate it in production.
Each module moves through the same three views. I will teach the production pattern, show how that choice appeared in systems I built, and then give you a safe way to create the artifact yourself. If your warehouse is unavailable, the practice case keeps the third spine fully runnable.
Decision contract, approved context, scoped execution, validation, proof, review states, correction memory, and operations.
Start with the framework →Acquisition War Room, Abandonment Intelligence, and the conversational data-agent front door—showing the product choices, controls, and operating loops behind each experience.
Open the case studies →Use an approved company source or run the same workflow on the included conversion lab. Every prompt produces a file you can take back to work.
Download the practice lab →You do not need an enterprise platform to get value from this course. Build the smallest version that solves your current problem, prove it works, and add shared infrastructure only when another person needs to reuse it.
Use one harness, one recurring decision, a local folder or private Git repository, approved context, a proof receipt, and a small eval set. Finish Modules 0–4. You do not need an MCP gateway, admin portal, or enterprise semantic layer.
Move on when: the workflow repeatedly returns a useful, verified result, catches a known failure, and saves enough effort to run again.
Put the contract, context, evals, and corrections in one versioned place. Ask another person to run the workflow without sitting beside you. Add a flagged-answer inbox and reviewed promotion path in Module 5.
Move on when: a second person can reproduce the result, report a miss, and reuse an approved correction in a fresh session.
Move common guarantees behind a client-neutral MCP or gateway. Add permissions, shared semantic context, deduped review queues, versions, telemetry, rollout controls, cost limits, and an incident path in Module 6.
Scale when: the pilot works across users and tools, review demand is sustainable, and an owner can monitor, stop, repair, and safely resume the route.
Do not solve tomorrow's coordination problem before one person has a workflow worth sharing. Solo proof earns a team pilot. A team pilot earns shared infrastructure. The lab lets one learner rehearse the team handoff with two fresh sessions, but a simulated handoff is practice—not proof of adoption.
Use Codex, Cursor, Claude Code, or the harness your team already trusts. For the live lab, start in a clean local session with real company tools disconnected.
README.md, verify.py, data/, context/, feedback/, evals.yaml, and work/ directly inside the open folder. Every course path starts here.context/. Treat both as approved inputs for the exercise, not as files the agent may overwrite.work/. If it cannot follow that boundary, stop before the first prompt.The kit contains two CSV files, the metric definition, a known business change, a seeded user report, an optional dependency-free Python 3.9+ verifier, and ten eval cases. It works locally with any file-capable harness.
Use the preview if your browser does not open CSV files directly. Every download keeps its original .csv filename.
Start a clean local harness session and disconnect ChatData, warehouse connections, company MCPs, and other real-data tools. If you cannot disconnect them, use a separate profile or observe a paired run. Do not use a live company workspace for this exercise.
1. Download and unzip the kit. Do not clone the repository for the live exercise. 2. Open the extracted folder, not the ZIP file, in your harness. Confirm that README.md, verify.py, data/, context/, feedback/, evals.yaml, and work/ sit directly inside it. 3. If Python is available, confirm python3 --version reports 3.9 or newer, then run python3 verify.py --readiness-only (Windows: py -3 --version, then py -3 verify.py --readiness-only). It should print READINESS: PASS without calculating the answer. If Python 3.9+ is unavailable, confirm the seven lab-root items and continue in the harness. Do not install a runtime during class.
funnel_segments.csvcalculation sourcewbr_benchmark.csvindependent tie-outmetric.yamlmeaning + limitsflagged_answer.yamlseeded user feedbackverify.pyoptional independent checkevals.yamlfailure casesAI Analyst implements this with setup state, an active dataset, a connection test, and session-start context loading. This workshop keeps the same sequence without requiring one specific coding tool.
“Your favorite harness does not decide whether the analysis is trustworthy. The active data, loaded context, permissions, and checks do.”
0–4 min: Ask students to open a clean local harness session and disconnect real company tools. Do not spend class time comparing harnesses.
4–8 min: Download and unzip the workshop kit. Open the extracted lab root; run the optional spoiler-free readiness check.
8–15 min: Run the readiness check: active source, visible tables or files, date range, one harmless read, and explicit access boundary.
15–20 min: Load the minimum business context, inspect work/00_readiness.md, and repair one missing item before moving on.
A connector shown in settings is not enough. Record what the agent successfully read in this session.
Saved locally on this device
Course sequence adapted from AI Analyst’s MIT-licensed setup guide, first-run routing, data connection, and knowledge bootstrap. AI Analyst uses Claude Code; the workshop readiness check is intentionally tool-neutral.
The course alternates between a short walkthrough, a worked example, and build time in your own harness. Two breaks and 30 protected minutes for questions are included in the five hours.
Use an approved local extract or read-only warehouse route for Modules 0–3. Keep sensitive data and credentials out of this page. After class, adapt the tested execution path to your source.
Everyone uses the included CSV lab for Modules 4–5 so the execution, proof, failures, and repair can be compared in the room. No warehouse, MCP connection, paid tool, or Python package install is required.
These examples show how I turned recurring business questions into products people could inspect, challenge, and use. We will return to the design choices inside the timed modules rather than add another lecture block.
The recurring question was simple: what changed, why, and where should the operating team focus next? The hard part was producing one briefing that combined quantitative movement, business context, operating signals, and an honest verification state.
Practice data: included course CSVs · focus: movement, contributors, caveats, validation, and the next decision
The War Room says what moved. Abandonment Intelligence goes underneath it and asks what specific rule, route, or product flow deserves investigation. It rejects “conversion is down” as an answer because a rate alone does not tell an engineer or operator what to do.
Practice data: included course CSVs · focus: ranked actions, known-good behavior, exceptions, and investigation depth
The chat interface routed direct questions, investigations, and recurring briefings. An early test returned a fluent but incorrect number after choosing the wrong source. That failure changed the design: source selection, semantic context, visible query evidence, validation, time windows, security, and PII controls became system responsibilities instead of prompt reminders.
What I would borrow: keep the client replaceable. Put the trust logic in the shared path every client calls.
The examples and the lab are not side stories. They map to the exact artifact you build in each module.
| Course step | Spine 01 · Framework | Spine 02 · What I built | Spine 03 · What you build |
|---|---|---|---|
| Choose | Start with a recurring decisionFrequency, repeatability, value, and risk. | War Room + Abandonment“What changed?” and “what deserves action?” were separate recurring jobs. | Use-case briefFrame the practice conversion question or your approved question. |
| Contract | Bound output and authorityDefine Answer, Clarify, Review, and Refuse. | Visible verification and action gatesA useful result could still require review; no autonomous budget or routing change. | Contract + architectureCreate `work/02_contract.yaml` and map the shared request path. |
| Context | Bind approved meaningMetric, source, business change, owner, freshness, and precedence. | Domain rules survived every runCorrect funnel order, time comparison, exclusions, known-good behavior, and prior corrections. | Metric proposalInspect `context/metric.yaml` and propose `work/03_metric_proposal.yaml`. |
| Prove | Execute and verify independentlyKeep source execution, validation, caveat, and decision together. | War Room proof layerCross-validation, freshness, decomposition, and verification state appeared in the briefing. | Proof receiptRun the lab, tie to the benchmark, and save `work/04_proof.yaml`. |
| Learn | Turn failures into shared contextFlag the answer, review it, promote the correction, then rerun from a fresh session. | The wrong-source failure changed the architectureFluent output was not accepted as proof. | Feedback + reuseHand off the seeded report, approve the narrow correction, and prove the next run uses it. |
| Operate | Own release, monitoring, cost, and incidentsShadow, canary, narrow production, rollback, and reapproval. | Replaceable client, shared controlsParallel workers and chat interfaces called the same governed path. | Operations + launch memoFinish the control sheet and make a Scale, Hold, or Stop ask. |
Start with the decision the user needs to make. Then inspect the context, calculation, validation, review state, and correction path that make the answer useful more than once.
Over the last year, I have been obsessed with one question: how do you spread agentic analytics across a company without giving up trust? I worked backward from a failure I kept seeing. The agent could choose the wrong definition and still sound polished. A user could spot the problem but had no way to fix the shared system.
The agent needs the metric, source, exclusions, and approved logic.
In my implementation, Snowflake Cortex provided this layer. Claude Code, Cursor, Gumloop, and other tools called it through MCP. Cube could fit here too; I chose to put more of the next investment into feedback and review.
Users need one easy way to flag an answer that is wrong or hard to validate.
We started in Slack. Later, we built a plug-in and MCP path that wrote back a concise summary of the question, answer, evidence gap, and user feedback.
Data owners review the edge case and settle the canonical definition or answer path. They publish the accepted change into the semantic layer.
We narrowed a sprawling dashboard catalog to a small set of approved paths stored as code. The agent could now compare its work with logic the team had reviewed.
The review burden started high. As self-checks and validations improved, routine cases stopped consuming the same human attention.
The goal is not zero human review. Each review should improve the shared path.
When the agent gets it wrong or the user cannot validate it, the user flags the gap. The data team defines the canonical answer and updates the semantic model and eval suite. The next run gets better. No single vendor has to own the whole loop; the interfaces between these three parts matter more.
These teams took different paths, but they converged on the same operating challenge: connect a question to the right meaning, prove the work, and make each correction improve the shared system. Each lesson below maps to an artifact you build in the course.
OpenAI layers usage metadata, expert annotations, code-derived definitions, institutional knowledge, memory, and live warehouse checks. Table shape is not meaning; the code that creates a table carries assumptions, freshness, and business intent.
Use it in the course: bind approved meaning in Module 3, save execution proof in Module 4, and promote corrections in Module 5. Their evals execute generated and golden SQL, then compare the resulting data. Read the OpenAI case
Anthropic treats those as three separate failure modes. Its answer is fewer canonical datasets, definitions enforced through tooling and CI, and maintained skills that route the agent to the right governed context.
Use it in the course: make the metric proposal canonical in Module 3, test each correction against an eval slice in Module 5, and gate launch by domain in Module 6. Read the Anthropic case
Meta narrows the search space with analyst query history, then adds documentation, warehouse metadata, pipeline code, and semantic models. Cookbooks package a domain, Recipes encode its analysis and validation, and Ingredients carry its definitions.
Use it in the course: separate procedure from meaning in Modules 2 and 3, then surface SQL and iterative evidence in Module 4 so a user can inspect the path. Read the Meta case
Ramp combines dbt, Looker, and Snowflake metadata with documentation written by domain owners. Stateful Slack threads let users clarify intent, while in-thread data previews make the result easier to inspect.
Use it in the course: save the source and calculation in Module 4, then turn failures into context fixes and regression cases in Module 5. Ramp’s tests check tool calls, table references, and query shape as well as the final answer. Read the Ramp case
A production agent earns its maintenance cost when the work recurs, the path can become reliable, the answer changes something, and the downside is understood.
The first three come from the build-first lesson. The fourth prevents a high-impact use case from quietly crossing a line the team has not designed for. Then make one more choice: if a fixed query or deterministic workflow can do the job reliably, use it. Add agent autonomy only where the steps genuinely require judgment or adaptation.
“If two dashboards disagree, adding a chatbot creates a faster disagreement.”
0–5 min: Ask everyone to put one recurring metric question in chat, then read three aloud without critiquing them yet.
5–12 min: Teach the matrix. “Same answer” means the definition, source, number or direction, main drivers, material caveat, and basic decision remain stable. The prose can change.
12–15 min: Place the practice conversion question on the matrix. Use the War Room / Abandonment distinction to separate “what changed?” from “what deserves investigation?” Move it to “fix the foundation” when tagging changes and no precedence rule exists.
15–25 min: Students use the prompt, approve the brief, and select the question they will carry forward.
Do not analyze yet. Help me frame the most recent complete period versus the prior comparable period. Return: - Goal - Decision this answer supports - Metric - Testable hypotheses - How often this work returns - Cost of a quietly wrong result - Success condition - Why this needs an agent instead of a fixed query, dashboard, or deterministic workflow Ask the smallest missing clarification. Then recommend Build, Fix the foundation, Assist, or Do not build. Prefer the simplest workable design and begin with one agent unless observed failures require a more complex workflow. Stop and wait for my approval. Save the approved brief as work/01_use_case.md.
Use this if you prefer the page to a file. Use approved material; do not paste company data, credentials, customer information, or proprietary code into the page.
Saved locally on this device
The contract forces one useful sentence: who needs what answer to make which decision, with what authority and human boundary.
Do not start with the tools. Start with the decision. Then specify the inputs, output, authority, and review trigger. The contract should fit on one screen and be readable by the business owner, data owner, and builder.
AI Analyst preflight: Goal → Decision → Metric → Hypothesis. If you cannot state all four, ask before touching the data. Add a concrete success condition so the analysis has a finish line.
Mark whether this session can (A) process untrusted input, (B) access sensitive systems or private data, and (C) change state or communicate externally. If all three are present, do not let the agent operate autonomously. Remove one capability, split the work into a fresh trusted session, or require a person to approve the action.
A prompt in Codex, Cursor, or Claude can remind the agent what to do. Shared guarantees belong in the common path the clients call. Label who owns permissions, versions, persistence, failure handling, and review.
For [user / decision forum], this agent answers [recurring question] so they can decide [specific action]. It may: [read / calculate / compare / draft / recommend]. It may not: [publish / spend / change source truth / take irreversible action]. It must return: what it did next, the answer or clarification, source, freshness, calculation path, assumptions, caveats, validation, and next action. It may answer only when: [required evidence and validation]. It must clarify, review, or refuse when: [risk, novelty, conflicting evidence, missing owner, failed validation, or action threshold]. Human owner: [role accountable for the decision and repair].
AI Analyst declares inputs, outputs, dependencies, context, and whether a failed step must stop the pipeline. Keep the business decision in the description so orchestration does not erase intent.
name: conversion-wbr-review
description: Explain weekly conversion movement so Growth can choose the next investigation.
inputs:
- name: QUESTION
type: str
source: user
required: true
- name: SOURCE_TIEOUT
type: file
source: agent:source-tieout
required: true
outputs:
- path: work/02_contract_example.md
type: markdown
depends_on: [source-tieout]
knowledge_context:
- context/metric.yaml
critical: true
Adapted from the MIT-licensed AI Analyst contract format.
Using the approved use-case brief, draft a seven-field contract: 1. user and decision forum 2. decision and action supported 3. required output 4. evidence required before answering 5. what the agent may do 6. when it must Clarify, Review, or Refuse 7. human owner Then try to break the contract with one vague request and one forbidden action. Revise it once. Also draw the request path from harness to tool/MCP contract, approved context, scoped source, validation, proof, human review, and correction memory. Label which component owns permissions, persistence, versioning, and each failure. List the minimum tools this path needs. For each tool, record its purpose, required inputs, read/write scope, risk tier, and overlap with other tools. Remove or rename any tool when it is unclear which one the agent should choose. Start with one agent unless an observed evaluation failure justifies another. Apply the Rule of Two to this session: - A: can it process untrusted input? - B: can it access sensitive systems or private data? - C: can it change state or communicate externally? If A, B, and C are all present, require human approval or redesign the session before granting autonomy. Save work/02_contract.yaml and work/02_architecture.md. Mark unknown owners instead of inventing them.
“If the contract says ‘help leaders understand the business,’ it is still a wish. Name the decision and the next action.”
0–7 min: Teach the seven fields. Contrast “Tell me how growth is doing” with “Explain last week’s qualified-signup conversion movement for the Growth WBR and recommend the next investigation.”
7–13 min: Map the client-neutral production path. Use the data agent’s wrong-source failure to ask where permissions, context versions, validation, proof, and review actually live. Apply the Rule of Two before granting autonomy.
13–28 min: Students run the prompt, inspect the two files, remove one ambiguous tool or boundary, and keep the design to one agent unless an eval shows why more are needed.
28–35 min: Peer test: a partner tries one ambiguous question and one high-impact action request.
If the authority or review boundary is vague, the agent is not ready to leave the builder’s hands.
Saved locally on this device
Bring source access, MCP, harness, permissions, use-case, or architecture questions. We will park deep company-specific design for the final Q&A.
Trust starts upstream: one definition, named owners, an approved source path, freshness, caveats, and precedence when sources disagree.
For each golden question, distinguish what must exist, what was available, what the agent retrieved, and what actually changed the answer. This makes a miss diagnosable instead of producing another document dump.
Narrowing a sprawling dashboard catalog to a small set of approved paths was not mainly a cleanup project. It forced the team to settle metric meaning, ownership, source precedence, and where trusted logic lived. That work made the analytics foundation easier for people and agents to reuse.
A metric name is not a metric definition. If the exclusion lives only in a wiki page or a BI filter, a model can write correct SQL and still return the wrong answer.
METRIC TRUST PACKET Metric + business question: Business owner / data owner: Definition + formula: Numerator / denominator: Grain / time zone: Required filters / exclusions: Approved source path: Freshness requirement: Known caveats / recent changes: Validation rule + tolerance: When to clarify, review, or refuse: Last reviewed / next review:
Treat the metric definition as a reviewed file, not a sentence buried in a prompt. The agent should get the same meaning, owner, source, filters, freshness, and caveats on every run.
lab_version: 1 metric_id: qualified_signup_conversion definition: eligible qualified signups divided by eligible qualified sessions numerator: qualified_signups denominator: qualified_sessions grain: complete Monday-to-Sunday reporting week timezone: America/Los_Angeles include: population: eligible exclude: - test - partner_assisted freshness: use_only: is_complete = true comparison: prior_week: 2026-08-03 current_week: 2026-08-10 source: calculation: data/funnel_segments.csv benchmark: data/wbr_benchmark.csv benchmark_tolerance_percentage_points: 0.2 known_caveats: - campaign tagging changed on 2026-08-07 - the current incomplete week must not be used decision: owner: Growth lead use: choose the next investigation before changing campaign routing authority: may: [read local lab files, calculate and validate, recommend the next investigation] may_not: [change campaign routing, move budget, modify source files] expected_response_for_causal_question: Review
The pattern follows the public AI+Data metric trust packet and nao’s semantic-layer template. Replace the practice metric with an approved metric from your team.
Read only the supplied metric, source, and business-change material. Draft work/03_metric_proposal.yaml with the definition, formula, owner placeholders, grain, timezone, filters, exclusions, source precedence, freshness, tolerance, caveats, review date, and stop conditions. Do not overwrite the approved context/metric.yaml. Do not invent missing values. List unresolved items. For this question, show: - required context - eligible approved context - context you actually retrieved - context that materially changed the path, result, caveat, or outcome For every retained context item, record its owner, retrieval trigger, freshness or expiry, and why it is needed. Keep lightweight identifiers in the working context and retrieve detailed material only when the question requires it. Remove context that does not change the route, result, caveat, or response state. Propose two context tests: one missing-required-context case and one conflicting-context case. State the expected outcome before running them. Show the proposed file diff and wait for approval before treating it as trusted.
“The model may be smart enough to find a number. The system has to know whether it found the right number for this decision.”
0–8 min: Build the practice metric packet: eligible qualified signups ÷ eligible qualified sessions, complete weekly grain, PT, excluding test and partner-assisted rows.
8–15 min: Reveal the tagging change and partial-week caveat. Connect it to the War Room’s visible verification state: the same raw number moves from Answer to Review when context is missing.
15–20 min: Teach Required / Eligible / Retrieved / Applied. Classify six failure layers: missing asset, retrieval miss, context conflict, application error, query error, source data error. Connect Anthropic’s high-signal context guidance with Ramp Research’s domain-owner documentation and context-layer tests.
20–40 min: Students run the prompt, inspect the diff, remove any field that does not affect the path, result, caveat, or outcome, and declare one missing-context and one conflict test.
Write enough that a capable colleague who does not know your data could select the right definition and source. They should also know when to stop.
Saved locally on this device
Choose what the agent should do before polishing the prose. A fluent answer never gets priority over the correct outcome.
From this point through Module 5, run the included CSV lab in your chosen harness. This gives the room one known result, one benchmark, and the same controlled failures. Your own-source design from Modules 0–3 remains the transfer case you adapt after the tested path works.
The approved path ran and the required validation passed. Return the answer with evidence and caveats.
All checks passThe question is missing the smallest detail needed to choose the metric, period, segment, grain, or comparison.
Missing scopeThe path is plausible, but ownership, business context, a novel join, benchmark, or decision risk needs a person.
Plausible, not provenThe source is unsafe, stale, contradictory, out of scope, restricted, or failed a blocking validation check.
Blocking check failedRun checks in dependency order: source tie-out and structure first, then logic, business rules, and statistical or segment-reversal checks. A failed source tie-out stops the analysis; more sophisticated validation cannot repair the wrong input.
The movement reconciles to the weekly export, but a tagging change overlaps the period. Do not call it purely a product issue yet.
funnel_segments.csv + independent WBR benchmark; source run confirmedOutcome: Refuse Failed check: [freshness / source mismatch / conflict / arithmetic / restricted input] Observed: [what the system can prove] Risk: [why answering would be unsafe] Next step: [smallest repair or narrower safe question]
Separate the visible answer from the evidence trail. A reviewer should be able to find the source, see what passed, understand the caveat, and know the next action.
title: Weekly conversion review metric_id: qualified_signup_conversion answer_state: needs_analyst_review source: data/funnel_segments.csv evidence_checked: - source execution confirmed - dashboard tie-out within 0.2 percentage points freshness: last complete week validation: arithmetic, exclusions, and grain passed business_context_check: campaign tagging changed during the period uncertainty: attribution is not yet isolated caveats: - do not call the movement purely a product issue next_action: compare pre- and post-tagging cohorts owner: growth_analytics
The fields follow the public AI+Data trusted-answer lifecycle.
Propose the exact source path, calculations, and validation checks for the approved question. Name the files or tables and the expected output. Run checks in dependency order: source and structure, logic, business rules, segment or statistical checks, then benchmark reconciliation. Return plan_only: true and source_executed: false. Save the plan as work/04a_plan.yaml. Do not execute until I approve.
For the live workshop, use the included CSV lab. Approved. Run the plan using read-only sources. 1. Calculate the last two complete weeks from the calculation source. 2. Reconcile them to the independent benchmark. 3. Show percentage-point and relative change separately. 4. Decompose by channel, device, and landing page; run an isolation check. 5. Run verify.py as a second method when Python is available. Compare every quantitative claim as Pass, Warning, or Fail. 6. Revise any failed claim before continuing. Return exactly one outcome: Answer, Clarify, Review, or Refuse. Include the question, source execution proof, context used, validations passed and failed, uncertainty, caveat, next action, and human owner. Save work/04_proof.yaml. Do not call an observed contributor a root cause unless the evidence isolates causality.
Overall: 840 / 10,000 = 8.4%; 690 / 10,000 = 6.9%; -1.5 percentage points and -17.86% relative.
Driver: paid search moved from 8.33% to 6.20%; mobile paid search moved from 8.0% to 5.6%; short-form share of mobile paid-search traffic rose from 50% to 75%. At prior segment rates, the current mix would have produced 830 signups; actual was 690. Paid search contributes 100 of the 140-signup segment-rate gap, or 71.4%.
Isolation: without paid search, conversion still falls from 8.43% to 7.60%. Call paid search the largest observed contributor, not the sole root cause.
“A useful refusal does not apologize for three paragraphs. It names the failed check and the repair path.”
0–8 min: Teach the four outcomes and why model confidence is not a correctness check.
8–13 min: Show the War Room proof receipt. Separate “planned route” from “source ran” and ask what is still uncertain.
13–20 min: Students run Turn 4A, inspect the exact CSV path and checks, and approve the plan.
20–38 min: Students run Turn 4B, calculate and reconcile the result, run the independent verifier when available, and correct any unsupported claim.
38–45 min: Save work/04_proof.yaml. Invite two people to read only their outcome, failed or review check, and next step.
Match the checks to the stakes. A board, finance, customer, or irreversible action needs a higher bar than an exploratory team question.
Saved locally on this device
We will work through source conflicts, calculations, validation order, response-state choices, and proof. The goal is to enter the failure lab with one defensible path.
You will run the tests, process one seeded user report, hand it to a data admin, promote the accepted correction into shared context, and prove that a fresh session reuses it.
Modules 0–4 make one operator's workflow useful and verifiable. Module 5 changes the test: can another person use the same artifacts, flag a miss, review the evidence, promote a narrow correction, and improve a fresh run? If you are working alone, use two fresh sessions to rehearse the roles. Before calling it a team system, repeat the handoff with another person.
Use real recurring questions and past mistakes from data you already know well. The first reviewer should be able to spot the wrong column, filter, or definition. Freeze the question, expected outcome, approved source, expected result or range, and the evidence needed to pass.
Live scope: run one routine case, one ambiguity, the causal-review case, the authority-boundary case, and the two deterministic injections. The remaining four cases stay in the take-home pack for extension.
EVAL CASE ID / risk tier: Business question: Decision supported: Expected outcome: Answer / Clarify / Review / Refuse Expected result or range: Approved source path: Required context: Checks that must pass: Known caveat that must appear: Failure layer if it misses: Reviewer / source snapshot date:
The lab’s verifier re-derives the answer without external packages. The eval file adds the expected outcome, required evidence, caveat, and authority checks around the numbers.
# Clean independent check python3 verify.py # Critical structural failure: must Refuse python3 verify.py --inject-impossible-row # Exit code 2 is expected; the refusal is the passing result. # Calculation-versus-benchmark conflict: must Review python3 verify.py --inject-benchmark-conflict
The row/value comparison pattern is informed by nao’s Apache-licensed context-test workflow. The course adds explicit response, evidence, caveat, and authority checks.
For the live workshop, continue with the included CSV lab. Read evals.yaml. Before execution, record the expected outcome and required evidence for these four live cases: routine_1, ambiguous_1, causal_claim, and authority_boundary. Run those four cases one at a time. For each, record expected versus observed outcome, evidence present or missing, quietly wrong yes/no, latency, tokens, source calls, and cost when available. Mark unavailable telemetry honestly. Do not average away a failed high-risk case. When quick reruns are available, run routine_1 twice and record each trial separately. Save the observable trace: tools selected, source path, validation results, final outcome, and artifact links. Do not ask for or store hidden reasoning. Use deterministic checks for numbers, source, and response state; use a short human rubric for usefulness and caveat quality. When Python 3.9+ is available, run: - python3 verify.py --inject-impossible-row - python3 verify.py --inject-benchmark-conflict The impossible-row command must Refuse and exit 2. The benchmark conflict must return Review. Do not choose a winning source when no approved precedence rule exists. Record the conflict, the decision it blocks, and the owner who must settle it. If Python 3.9+ is unavailable, run the four harness cases, predict both injected outcomes, observe Paras’s or a partner’s verifier run, record the observed results, and continue with the seeded feedback record below. Now operate one complete feedback loop. Open feedback/flagged_answer.yaml. Student A, or your first harness session, writes work/05_feedback.yaml with the question, reported answer, missing evidence, failed self-validation, decision risk, and requested review. Student B, acting as the data admin, or a second fresh harness session, reviews that record against context/metric.yaml, context/business_changes.md, and work/04_proof.yaml. Save work/05_admin_decision.yaml with Approve, Hold, or Reject; the evidence checked; the narrow correction; the owner; and what remains unresolved. Do not invent a source-precedence rule or causal proof. If approved, save the reusable correction as work/shared_context/correction-001.yaml and the affected test as work/05_regression_case.yaml. Do not modify the lab’s data/ or context/ files. Student A then starts a fresh session, reads the promoted correction, reruns causal_claim, and saves work/05_reuse_rerun.md with the before-and-after outcome, wording, evidence, and whether the bad causal claim was prevented. Save work/05_eval_results.csv and work/05_observed_operations.csv. The operations file must include case_id, outcome, elapsed_seconds, reviewer_minutes, source_calls, tokens, cost, correction_reused, and result_changed. Mark unavailable fields honestly. Stop if any high-risk case is quietly wrong. Keep the remaining four cases as the extension pack after class.
Admin decision: approve a narrow claim-boundary correction, not a new causal conclusion. The movement and largest observed contributor are supported; the tagging change and non-paid decline keep causal language in Review.
Promoted correction: replace “paid search caused the decline” with “paid search was the largest observed contributor.” Require the tagging caveat and block any spend action from this evidence alone.
Fresh-session result: the causal_claim case should return Review, cite the corrected boundary, and avoid the unsupported root-cause claim. Record actual elapsed time and reviewer minutes; leave unavailable token or cost fields blank rather than guessing.
“The best analytics-agent test includes a question the system should not answer.”
Do not blend the scores. One overall 92 can hide a high-risk case that the agent answered confidently and incorrectly.
0–8 min: Predict and run the four representative cases. Keep quietly wrong results separate from loud failures.
8–14 min: Run or observe the two deterministic drills. The source conflict stays in Review until an owner settles precedence.
14–25 min: Student A files the seeded report. Student B reviews it and records the admin decision. Solo students use two fresh harness sessions.
25–35 min: Promote the narrow correction under work/shared_context/. Start a fresh session, rerun the causal case, and compare before with after.
35–42 min: Record elapsed time, reviewer minutes, calls, tokens, and cost when available. Keep the sample size visible.
42–45 min: State the launch bar and the one case that would stop the release.
Use short descriptions; the expected outcome and proof matter more than perfect prose.
Saved locally on this device
A production plan needs owners, a review rhythm, monitoring, correction memory, cost, and a clear rule for stopping or narrowing the system. Use what you just observed—the rerun, review minutes, runtime, and missing telemetry—instead of planning from guesses.
Keep local files while one person is learning. Use a shared repository and lightweight review when a small team is iterating. Add a gateway, admin queue, deduplication, centralized permissions, and formal operations when usage crosses tools, teams, or risk boundaries. Each layer should remove an observed failure or coordination cost.
Classify allowed and prohibited data. Use read-only scope, source and table allowlists, row or byte limits, secret redaction, and row-level PII refusal. Apply the Rule of Two before enabling external action.
Set timeout, retry and backoff, idempotency, rate and concurrency limits, degraded-result rule, cached fallback, and circuit breaker.
Pin the route, context, metric, model, and threshold versions. Move through shadow, canary, and narrow production with rollback and a kill switch.
Log source snapshot, freshness, response outcome, validation stages, latency, tokens, cost, calls, fallback, reviewer label, feedback id, and correction id.
Give users one way to flag wrong or unverifiable answers. Let data admins review the edge case, change the canonical definition or answer path, and promote the accepted correction into context and regression tests.
Compare with the manual baseline. Track adoption, reuse, self-validated answers, review burden, cost per run and month, and whether the decision or team experience improved. Route models by observed task quality, latency, and cost.
Choose the question, contract, metric, owners, approved source, and risk tier.
Create the minimum context, proof receipt, eight cases, and predeclared launch bar.
Run beside the existing process. A person reviews every output before it affects work.
Move from suggestions to reviewed actions only after the tested scope earns it. Sample live outputs, publish the owner path, and set the next review.
AI Analyst saves per-step status so interrupted work can resume. The same principle applies here: chat history is a convenience, not the only record of state, proof, or correction.
# work/run_state.yaml
run_id: 2026-08-21_qualified-signup-conversion
question: Why did qualified-signup conversion fall in the latest complete week?
status: paused
steps:
source_tieout:
status: complete
output: work/source_tieout.md
validation:
status: failed
error: dashboard delta exceeded tolerance
next_runnable_step: repair_source_conflict
# work/shared_context/correction-001.yaml
- id: CORR-001
category: claim_boundary
description: Paid search was called the cause without isolated causal evidence.
fix: Call it the largest observed contributor and route causal language to Review.
prevented_by: causal_claim regression case
owner: growth_analytics
Adapted from AI Analyst’s pipeline state and the public AI+Data correction-memory pattern.
Read the approved contract, metric, proof, eval results, admin decision, promoted correction, fresh-session rerun, and observed operations file. Create work/06_operations.md with: - manual baseline and target, check date, and guardrail - five owner roles and who may change the metric, source, route, model, or thresholds - read-only scope, prohibited data, limits, timeout, retry, fallback, health check, and kill switch - Rule of Two classification for untrusted input, sensitive access, and external action - user-feedback intake, self-validation signal, review queue, data-admin approval, and promotion into semantic context and regression tests - observed run time, review minutes, source calls, tokens, and cost from work/05_observed_operations.csv; sample size and unavailable measures must stay visible - run-event fields, alert thresholds, audit sample, reviewer-capacity ceiling, and incident/resume owner - shadow → canary → narrow-production steps and rollback rule - model-routing rule based on task quality, latency, and cost; plus model, warehouse, and human-review cost per run and per month - expiry and reapproval triggers Then create work/07_launch_memo.md: business decision, pilot users and workflow, quality result, correction-reuse result, material risks, adoption and reuse measure, observed review burden, observed or unresolved runtime and cost, 30-day milestones, and the leadership decision requested: Scale, Hold, or Stop. Do not invent names, baselines, thresholds, or deployment evidence. Mark unresolved decisions and make Monday’s first move small enough to complete in 30 minutes.
“Agents count inputs because inputs are easy to prove. Your team has to measure the decision and the outcome.”
0–7 min: Return to the data-agent front door: teach shared ownership and runtime controls outside the client, then separate offline evals from sampled live correctness.
7–10 min: Walk the four-week plan. Keep Week 3 in shadow mode; no production action based only on an offline score.
10–22 min: Students run the operations prompt and fill only the unresolved decisions.
22–25 min: Write one Scale / Hold / Stop ask and one Monday action small enough to complete in 30 minutes.
Use roles if names are not known yet. A missing owner is a blocker to resolve, not a reason to invent one.
Saved locally on this device
Explain the plan in two minutes. Your partner asks the five questions. Spend the remaining time revising one blocker.
A good review targets the path and operating boundary. It does not rewrite the presentation.
Bring this question to the 60-minute follow-up review.
Saved locally on this device
Use this time for the questions that did not fit the checkpoints. Export the starter pack, then name the owner, meeting, or first artifact you will create.
You do not need these links during class. Use them later to inspect the patterns, code, and licenses behind the workshop.
Agentic Analytics in ProductionGitHub repositoryMIT-licensed repositoryGitHub repositoryIn-house data agentSelf-service data analyticsHome-grown analytics agentRamp ResearchA passing practice-data verifier, a tested build, a deployed pilot, sampled live correctness, and a measured business outcome are different levels of evidence. Say which one you have.
The final output is not “an agent.” It is a governed way to move from a recurring question to evidence, a decision, and a learning loop.