Add CanvasEventBus with emit/subscribe/unsubscribe for cross-shape
communication. Events persisted in Automerge CRDT eventLog (ring buffer
100 entries), synced via WebSocket, with re-entrancy guard at depth 10.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>