openThread (create-or-join), send (idempotent, bumps other participants' unread, message.sent outbox event, traceId DB->event), markRead (READ receipt + unread reset), contentRef attachment placeholder. Adds messageSent to contracts events. 5 DB-backed tests green; 24 total. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fakes for all 7 IiosPlatformPorts (deny/timeout/ambiguous controls), portal + unknown-email fixtures, replayTwice idempotency oracle. Adds ingest request contract. Vitest alias resolves workspace packages to source. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Verbatim IiosPlatformPorts from the bottom-up atlas; orgId/appId required scope (KG-02); PolicyDeniedError for fail-closed. Vitest as workspace test runner. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>