Audit chain¶
audit_outboxis transactional with the ledger write — no decision reaches the wire without a row pending.outbox-forwarderpollspending_forward=TRUEand pushes to canonical_ingest via mTLS gRPC.canonical_eventsis partition-immutable; only thepending_forward/forwarded_atcolumns are mutable post-insert.
Recovery: a sidecar crash before the SP commits leaves nothing on
disk. After commit, outbox-forwarder retries push indefinitely until
APPENDED or DEDUPED.
See docs/stage2-poc-topology-spec-v1alpha1.md §11.3.