DataModel.outbox are consumed, ordered, and dispatched into execution. They are addressed by the (operation, input) pair for an OutboxInput and declared under Model.runtime.outboxes. An outbox runtime is deliberately its own semantic concept, not a subscription runtime with relabeled fields.
Outboxes are L0 entities declared inside a
DataModel. They carry no runtime facts of their own. All consumption semantics live in L1 under runtime.outboxes.OutboxRuntime shape
Delivery
Delivery vocabulary matches subscription runtime exactly:
Where
acknowledge_on_success = true on the input, a successful acknowledged invocation ends ordinary redelivery for that item for this consumer. Failure or uncertainty before acknowledgement may still admit another attempt under at_least_once.
Partitioning
Partition identity is the outbox’s one runtime grouping concept. It is the logical grouping identity used for runtime consumption.none: one undivided consumption domain for this consumer. Declares no physical singularity.keyed: maps each consumed schema into the common logical partition-key domain under the familiar tuple rules: per-schema field mappings, corresponding positions, one arity. Only schemas admitted through the targeted input need participate.
and nothing further. Not ordering, not serialization, not member assignment, not execution affinity.partition_key(A) = partition_key(B)impliespartition(A) = partition(B)
Ordering
A declared order neither implies that invocations cannot overlap nor establishes business causality between producing operations.
Dispatch
member_assignment is mandatory and carries the same semantics as for routers and subscriptions, including safe ownership transfer during reassignment. No polling primitive is prescribed: a conforming realization may poll a table, tail a CDC stream, or consume a broker without changing the model.
Dispatch preserves precedence and never invents it, including through failure-driven redelivery and ownership reassignment.
Batching
batching is an explicit declaration that this consumer may retrieve or dispatch several logical source items together. L0 is untouched: each item remains one logical per-message invocation.
The only semantic field is ordering, explicit with no default:
preserved: the opaque batch processing does not let a later message overtake an earlier one against an already-established ordering relation.unspecified: no evidence the order survives the stage.
Full example
OutboxRuntime example
Atomicity
A transaction that writes to an outbox commits atomically with its object mutations. If the transaction commits, the message is durably admitted. If the transaction aborts, neither mutations nor the message survive. The outbox write itself is performed via thewrite_outbox transaction step, which is the only legal site for outbox writes. See Effects for the OutboxWriteEffect contract and Data Models and Outboxes for the L0 declaration.