Sub-behaviour for adapters that support the append-only event log. No update or delete callbacks — events are immutable once written.
Audit trail preservation
Events are intentionally NOT deleted when a conversation is deleted. The event log is an audit trail that persists beyond the lifecycle of individual conversations. This is by design — if a conversation is soft-deleted or hard-deleted, its associated events remain queryable for compliance, debugging, and cost attribution purposes.
Summary
Callbacks
@callback count_events( filters :: keyword(), keyword() ) :: {:ok, non_neg_integer()}
@callback list_events( filters :: keyword(), keyword() ) :: {:ok, %{ events: [PhoenixAI.Store.EventLog.Event.t()], next_cursor: String.t() | nil }}
@callback log_event( PhoenixAI.Store.EventLog.Event.t(), keyword() ) :: {:ok, PhoenixAI.Store.EventLog.Event.t()} | {:error, term()}