Every Check You Run Compares the PR to the Last Commit
Here is a two-minute experiment worth doing on a branch before you read further.
Read the full story →Delete an accepted_values test and CI goes green — because the test is gone. Nothing compares the PR to what you agreed.
Start with this recipe →No warehouse credential. No dbt Cloud token. Read-only.
For agents, no sign-in: /recipe/ci-contract-gate.json · /recipe/ci-contract-gate.md
Try it on a branch: remove an accepted_values test from a model and open a PR. Every check passes. dbt tests what is in the branch, so a removed test is simply a test that no longer runs, and branch-versus-main tooling compares the PR to the previous commit — which also no longer has it once merged. The thing nobody compares against is what the team actually agreed the column means. This gate does that: on every PR, the compiled manifest is checked against the governed model, and a removed permitted-value set, a widened enum, a type that quietly changed or a dataset that vanished each come back as a named finding with a stable code. Set it to fail on errors and the PR that would have slipped through stops. The report comes back as markdown you can post as the PR comment, every run feeds a history trail, and the badge shows the current state — because unknown and passing are different claims.
Here is a two-minute experiment worth doing on a branch before you read further.
Read the full story →How it works: the import, the API, the MCP tools, the CI loop.