# ADR 0009 — SSE over WebSocket for the event stream

Status: accepted (2026-07-07) · Plan: rev 3, R3-14

## Context
Live updates (signals, executions, approvals) push server→client only.
Rev 2 specified WebSocket.

## Decision
Server-Sent Events at GET /api/v1/events/stream: plain HTTP (proxies
through Caddy without upgrade handling), native browser EventSource with
auto-reconnect, Last-Event-ID resume backed by the events table. Bounded
per-subscriber buffers with drop-oldest; heartbeat comments every 15s.
Delivery is best-effort — GET /events backfills. Transactional emission +
post-commit LISTEN/NOTIFY feed the stream.

## Consequences
- No bidirectional channel; if one is ever needed (interactive terminals),
  add WebSocket alongside — this ADR covers the event feed only.
