ADR-014: transactional outbox enqueue — outbox_enqueue_tx on TxHandle (OQ-13 resolved)

This commit is contained in:
glm-5.3-flash committed 2026-10-05 13:28:39 +00:00
1 parent d401908f13
commit 04a04651dc
8 files changed
+359 -122

No files matched your search

@@ -64,13 +64,17 @@ implement identically):
and `release`.
- outbox helper — `outbox(name)` with `enqueue` + `run_once` delivery
worker. *(Depth annotation 2026-10-05: the transactional *enqueue*
shape on the `TxHandle` seam is OQ-13's — the v1 method list has no
outbox enqueue method and the derived backing queue's reserved
prefix makes plain `enqueue_tx` illegal; see
[open-questions.md](../open-questions.md). `run_once` worker
semantics are pinned in core-contract.md's outbox section.)*
shape was OQ-13's — this §1/§2 method list had no outbox enqueue
method and the derived backing queue's reserved prefix made plain
`enqueue_tx` illegal; resolved by
[ADR-014](014-outbox-tx-enqueue.md) — `outbox_enqueue_tx` joins the
`TxHandle` trait. `run_once` worker semantics are pinned in
core-contract.md's outbox section.)*
- the tx seam — `begin_tx` / commit / rollback and the `*_tx` methods
([ADR-007](007-transactional-seam.md)).
([ADR-007](007-transactional-seam.md)). *(Amended 2026-10-05 by
[ADR-014](014-outbox-tx-enqueue.md):
`outbox_enqueue_tx(outbox, opts, payload)` added to the
`TxHandle` trait.)*
- `subscribe(consumer) -> Box<dyn EventReceiver>` — the durable
stream subscription handle, delivering `StreamEvent`s with an
explicit `save_offset` on the receiver (no auto-checkpoint;
@@ -113,6 +117,7 @@ trait TxHandle {
publish_tx(stream, payload) -> event_id
notify_tx(channel, payload)
save_offset_tx(stream, consumer, offset)
outbox_enqueue_tx(outbox, opts, payload) -> job_id // ADR-014
commit(self: Box<Self>) -> Result<()> // or rollback
}
```
@@ -195,7 +200,8 @@ struct Wake { channel: String }
- **Reserved prefix: `__alkstore_`** (leading double underscore). The
namespace exists per [ADR-006](006-wake-and-delivery-contract.md);
this pins its string. Engine-independent — applies to channel,
stream, queue, and lock names on every engine.
stream, queue, lock, and outbox names on every engine *(outbox names
added to the kinds list by [ADR-014](014-outbox-tx-enqueue.md))*.
- **The one v1-reserved string:**
`__alkstore_listener_reconnected__` — the Postgres forwarder's
synthetic reconnect-wake channel ([ADR-004](004-postgres-driver.md)).