Software engineers don't ship code without tests, but most data teams ship transformations on faith. Limen brings CI to the pipeline: every contract is an executable test that runs on pull requests, scheduled jobs, and post-deploy checks.
fulfilled_at to orders_factFour mechanical steps. No new dashboard for anyone to ignore.
Schema, freshness, null bounds, distribution shape, referential keys, business invariants. Lives next to the table definition, in code.
contract orders_fact {
cols: 14
fulfilled_at.nullity <= 1%
row_count.delta ±5%
fresh_by 09:00 UTC
}
PRs trigger contract tests against a staging materialization. Scheduled jobs run the same tests against production. Same tests, same verdict logic, three trigger surfaces.
A contract failure blocks the merge or the deploy. The boundary is the contract, not the dashboard the next morning. No silent regressions reach downstream consumers.
Each contract has an owning team. Failures route there directly, not to the on-call who happened to notice. Owners see the failing assertion and the certificate of the last known-good run.
Most pipeline regressions fall into the same handful of patterns. Contracts express each one as an assertion that the build can fail on, not a condition humans have to notice.
A column type changes upstream. The build catches the shape mismatch before any model that depends on the column gets refreshed.
A field that's been 99.7% populated for two years drops to 78% overnight. Limen flags the deviation against the historical contract bound.
A foreign key starts producing orphans. Referential contracts assert against both sides of the join, so the build goes red the first run that hits it.
The freshness deadline is part of the contract. A late table breaks the build for the consumers that depend on it, not for everyone in the company.
We'll connect to a single schema, generate baseline contracts from your historical data, and walk through how recent PRs would have been checked, so you can see where CI would flag breaking changes in your own pipeline.