> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ctrlrun.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# EventSink

> Somewhere a copy of every `Event` and `Receipt` goes (SPEC-v0.2 §4.1).

`ctrlrun.EventSink` — class, defined at `src/ctrlrun/receipt.py:410`

```python theme={null}
class EventSink(Protocol)
```

Somewhere a copy of every `Event` and `Receipt` goes (SPEC-v0.2 §4.1).

`Control` calls a sink *after* the authoritative store write for that record has
succeeded, in registration order, with the `event_id` the store assigned. A sink is the
interface for the copies; it is not the interface for the record — the store's own
`events` and `receipts` tables are written inside the store, in its transaction, before
any sink runs (§4.3).

Sinks are not transactional, not ordered across processes, and not retried. A sink that
must not lose records buffers and retries inside itself. And a sink never raises into the
kernel: `Control` catches every `Exception` and carries on (§4.2).

## Next

* [Python API index](/reference/api/index).
* [Get started](/get-started/quickstart) · [Why](/why).


## Related topics

- [JSONLEventSink](/reference/api/JSONLEventSink.md)
- [Roadmap](/ROADMAP.md)
- [Python API](/reference/api/index.md)
- [OTelEventSink](/reference/api/otel-OTelEventSink.md)
- [Receipt and event schemas](/reference/receipt-and-event-schemas.md)
