Deterministic authorization
The policy engine is a pure function with no I/O, no randomness, no clock of its own and no model. Its inputs are snapshotted alongside the decision, so any past decision can be re-explained exactly.
No reusable credentials
An agent never receives a private key, a card number or a reusable payment credential. It receives a decision. There is nothing for an injection to exfiltrate.
No dynamic code from policies
A policy is a closed set of named rules stored as columns. There is no expression language, so a policy cannot loop, cannot fail to terminate and cannot execute.
Tenant isolation
Every query is scoped by organization. Another tenant’s record is reported as not found, with the same status and the same message as one that does not exist.
Idempotent execution
Four independent mechanisms refuse a second payment: the state machine, a row lock, a database unique index and the rail’s own replay memory.
Kill switch
An Owner or Admin can stop every execution in the organization immediately, without revoking anything. Approvals survive; execution does not resume until the switch does.
Append-only audit
Audit events are written in the same transaction as the change they describe. UPDATE, DELETE and TRUNCATE are refused by a database trigger — for the application too.
Sanitised records
Audit metadata and logs pass through a redaction layer that strips anything credential-shaped and bounds the size. Raw request bodies are never stored.