Curbi / Promises
Six rules the gate runs.
Each one with its proof.
A promise is live only while the tests that prove it pass on main. Everything else ships with its label.
| Promise | Status | Proof | Limits |
|---|---|---|---|
| Every mutation is checked against an exact grant (agent, tenant, operation, resource, amount limit) before it is signed for execution. | Limited Merged reference module on main; not integrated with production provider/ledger | revenue-engine/attest/test/attest.test.mjs (PR #124) | Prevention applies only where the target system runs the verifier. |
| An unknown or negative cost blocks signing, and an estimate over the remaining budget is refused. | Limited Merged reference module on main; not integrated with production provider/ledger | revenue-engine/attest/test/attest.test.mjs (PR #124) | Budget bounds run cost; savings are the customer's math. |
| A reply that says "I booked" or "you're refunded" fails unless the record you supply shows that operation DONE. | Live public Check API, /check/ playground, local MCP server | revenue-engine/claimcheck-web-v14/v15/check-api.test.cjsrevenue-engine/claimcheck-web-v14/v15/receipts.test.cjs | Records are supplied by the caller and unverified unless they are Curbi-signed receipts. Curbi does not query providers. |
| Curbi publishes receipt verification keys and their validity windows. Production signing is off. Unsigned caller records remain labeled caller_supplied_unverified. | Live Receipt verification keys: /.well-known/curbi-receipt-keys.json | revenue-engine/claimcheck-web-v14/v15/receipts.test.cjs | Proof covers operation and subject (and amount for completion receipts), not facts or authorization. |
| The control-plane ledger design is append-only: database triggers reject updates and deletes. | Limited control-plane prototype (caio/control-plane, PR #88 lineage, latest reviewed PR #103); not in any deployed service | caio/control-plane/migrations/0001_control_plane.sql (PR #103) | Describes the schema and its tests, not a third-party audit; the reference attestation ledger is in-memory. |
| The checker is deterministic and uses no model inference: the same input always gives the same findings. | Live Check API, playground, MCP server (same checker bytes) | revenue-engine/claimcheck-web-v14/v15/determinism.test.cjs | Rule-based: it catches what the policy describes. A pass is not authorization to act. |
Source of truth: the claims registry, checked by scripts/check-claims.mjs before copy ships.
Security & disclosure.
Report a vulnerability to hello@curbi.io with “SECURITY” in the subject. Please don’t open a public issue. Every fix ships with an attack test that fails without it.
Public endpoints are bounded (size, items, rate) and stateless. Private signing keys never live in source, issues or chat. Production signing remains off. Published public keys and their validity windows are available in the current key set; publication alone does not enable signing.
Run a check. Keep the result.
Check a reply Connect your agent →A pass means no configured rule fired. It grants no execution authority or provider-completion proof.