Verify it yourself
The sample pipeline is generated with four problems planted at exact, documented sizes. This page lines each one up with the finding this deployment produced, the test that proves the agents catch it, and what the checks and the model each wrote about it. Then ask the model anything and read the trace.
Four planted anomalies, four findingsseed 42, 85 files, 8,461 rows over 21 days
Planted by the generator
Key drift
LOC-0517 also reports as OUT-1071 (canonical OUT-1017): 251 of 8,373 rows, 3%.
expected: reconciliation agent, S2
Finding on this deployment
Test that proves it
test_each_anomaly_is_caught_by_the_right_agent[key_drift]Plants this anomaly alone into a fresh database and fails unless the right agent reports it at the right severity. Runs in CI on every push.
Planted by the generator
Duplicate submission
S1002_20260612_1120_ECOMM.txt resends S1002_20260612_0304_ECOMM.txt: 88 duplicate keys, 3 with changed values, landed after the nightly DAG.
expected: reconciliation agent, S2
Finding on this deployment
Test that proves it
test_each_anomaly_is_caught_by_the_right_agent[duplicate_submission]Plants this anomaly alone into a fresh database and fails unless the right agent reports it at the right severity. Runs in CI on every push.
Planted by the generator
Schema drift
S1003_20260616_0216_MOBILE.txt renames channel_basket_id to basket_ref: 82 rows, and validate_schema fails.
expected: data-quality agent, S1
Finding on this deployment
Test that proves it
test_each_anomaly_is_caught_by_the_right_agent[schema_drift]Plants this anomaly alone into a fresh database and fails unless the right agent reports it at the right severity. Runs in CI on every push.
Planted by the generator
Volume anomaly
S1001_20260618_0638_POSFEED.txt has 110 rows against a trailing average of 182.6 (39.7% below) and lands 161 minutes late.
expected: data-quality agent, S2
Finding on this deployment
Test that proves it
test_each_anomaly_is_caught_by_the_right_agent[volume_anomaly]Plants this anomaly alone into a fresh database and fails unless the right agent reports it at the right severity. Runs in CI on every push.
Prove the model is real
Ask your own question about the pipeline. It goes through the same agent graph as everything else: the answer names the provider and model that wrote it, says so plainly if it fell back to an extractive answer, and links to the trace of every step.
Retrieval and answer quality (RAGAS)
The latest scores for each way the 46-question golden set has been run, straight from evals/history.csv. extractive answers need no model and gate CI on every push; model rows name the provider that answered and judged.
| Retriever | Answers by | Judged by | Faithfulness | Relevancy | Ctx precision | Ctx recall | Gate |
|---|---|---|---|---|---|---|---|
| hybrid | groq/openai/gpt-oss-120b | llm:groq/qwen/qwen3.8-27b | 0.935 | 0.720 | 0.830 | 0.922 | fail |
| hybrid | groq/openai/gpt-oss-120b | offline | 0.566 | 0.943 | 0.830 | 0.922 | fail |
| hybrid | ollama/qwen2.5:1.5b | offline | 0.427 | 0.624 | 0.830 | 0.922 | fail |
| hybrid | extractive | offline | 0.911 | 0.862 | 0.830 | 0.922 | pass |
| dense | extractive | offline | 0.920 | 0.863 | 0.661 | 0.844 | fail |