Semantics worth reading before you build
The parts that surprise people.
None of these is a preference. They are the behaviour you will observe, so they are documented as contract.
Idempotency and replay
Same request_id with the same semantic content is a retry and returns the original operation. Same request_id with different content is an idempotency-reuse conflict. Idempotency records outlive every retry, webhook and dispute window.
Per-subject arrival order
Each accepted request is processed on its own snapshot, in arrival order per subject, to completion. Regent does not arbitrate between your own concurrent pushes — the published rate limits are the contract. Multiple accepted pushes for one subject inside a short window raise an anomaly flag that surfaces as information and never blocks.
subject_sequence is informational only
subject_sequence is informational only — it is echoed in the audit record and never enforced.
The receive clock
Regent's freshness guarantee begins when Regent receives the push. The snapshot timestamp inside the request is tenant-asserted metadata and is never the basis of that guarantee; data age before the push is the tenant's pipeline responsibility.
Unknown provider acceptance
When the provider send response is lost, no provider-backed correlation exists. Matching on recipient and timestamp is a heuristic that can support investigation, and it never establishes acceptance. The state stays unknown until a provider-supported identifier resolves it, or an operator resolves it manually.
Dossier and delivery are separate
The decision dossier the judgment engine sees and the delivery envelope that carries the recipient are different objects. Raw addresses never enter the judgment runtime; every dispatch audit row records the recipient as asserted by you, against the pushing request.