Closes gap-analysis v2 §7.3 and §10.3.
- New services/eventBusBroker.ts: per-process singleton with unique
instanceId; subscribes to a Redis pub/sub channel (default
ccombo:events) and re-emits inbound records on the in-process
EventEmitter. Outbound envelopes carry the instanceId so the
originating replica drops its own echo.
- eventBus.publish() hands every persisted record to the broker after
the local emit, so same-process SSE subscribers see zero change
while remote-replica subscribers now receive every event.
- When REDIS_URL is unset the broker is strictly inert (no connect,
no publish) — single-process behaviour is preserved byte-for-byte.
- 3 unit tests for feature-flag semantics; full suite 83/83 green.
- Live Redis behaviour will be covered by the Testcontainers suite
in PR Q.