Write sink.
Where writes go, isolated from how routing is decided
(docs/decisions/008). The [Sink] trait is the seam: OpenSearchSink
writes directly to a cluster, and the future queue-based redundancy mode is a
QueueSink drop-in behind the same trait. Epoch stamping is carried on every
[WriteOp] at this boundary (docs/06 §2).
M1 ships the [Sink] trait, the [WriteBatch]/[WriteAck] vocabulary, an
in-memory [MemorySink] for tests and dry-run, and the [OpenSearchSink]
that writes directly to a cluster over a pooled HTTP connection. M2 adds the
[Reader] seam for get-by-id reads (kept separate because a read is always
direct-to-cluster, a redundancy QueueSink can absorb writes but cannot
answer a read); both MemorySink and OpenSearchSink implement it.