Published in openvibe-contracts v0.33.0 (docs/adr/ADR-004-durable-events.md), rendered as is.

ADR-004: Durable event store, outbox/inbox and delivery semantics

Status: Accepted 2026-09-22; implementation in progress (OpenVibe.Events)

Context and current evidence

Cross-service side effects are best-effort POSTs and HMAC webhooks; a consumer that is down misses them.

Decision

Delivery signatures and replay window (2026-09-23)

Redaction, payload contracts and the public replay window (2026-09-23)

Alternatives considered

Migration consequences

Migrate one existing family at a time (notifications, Media ready/failed, stream lifecycle), keeping the old direct call until the event path is proven, then deleting it.

Rollback

Producers can switch back to their direct calls; events already stored stay replayable.

Acceptance tests

Events tests: persistence before delivery, retry/backoff, DLQ, replay, crash-and-replay yields one effect, outbox commit/rollback, SSE visibility and resume. Signatures: v1 and v2 on every attempt, a fresh timestamp per retry, v2 refused outside ±300 s or with a changed body or timestamp, and (SDK) no v1 fallback when v2 is present, v1-only refused under requireV2.