Riftless

// for the people who find out on Monday

CI passed.
The revenue dashboard didn't.

Riftless reads every pull request against the data your company runs on. When a change would break a report, or quietly change what a number means, it says so on the PR, before merge, with everyone downstream attached.

We're letting in a few teams at a time. Work email, please.

riftlessbotcommented on #482
Possible change in meaningorders · checkout-service

Does orders.amount still include tax?

  # services/orders/totals.py- amount = subtotal + tax_total+ amount = subtotal
The contract says

“Order total in cents, including tax.”

Downstream
orders.amount→fct_revenue→Revenue dashboard

Types unchanged. Every other check on this PR is green.

What we're building

Sentry, but for the data your producers ship.

01

Caught on the PR, not in the postmortem

A dropped column or a narrowed type is flagged in the pull request that causes it, next to the models and dashboards that read that field.

02

Meaning, not just types

amount stops including tax. Same column, same type, CI stays green, and finance finds out at month end. Riftless asks the question CI can't: does this change what the data means?

03

Issues, not noise

Findings are grouped the way Sentry groups errors: one issue per field and kind of change, with an owner, a history and a resolve button. Fixed ones reopen if they come back.

Not contracts everywhere. Contracts where it hurts.

Built for data teams at 50 to 500 person companies: a few producer repos, one warehouse, and the dozen numbers leadership actually looks at. Protect those boundaries with a few lines of YAML in the producer's repo. No six-month rollout, no governance council.

# riftless.yamlcontracts:  - asset: orders    owner: Checkout team    source_paths: [services/orders/]    fields:      - name: amount        type: INT64        meaning: Order total in cents, including tax
Riftless: know before your PR breaks a report