[suggestion] server projection の単一 AsyncMutex が run_sql と SSE fan-out を直列化

2026-05-31 の perf 点検で見つけた server 側の構造的 hotspot。現状規模(event 2136 / post 533、実質単一ユーザ)では無害だが、複数 bg child が SSE attach する並列 dispatch 運用で効いてくる軸。

**現状**
- projection は `Arc<AsyncMutex<Projection>>` 1 本を全経路が共有(read/write 区別なし、RwLock ではない)。
- `run_sql` は query 実行中ずっとロック保持(`src/server.rs:913`)。重い query 1 本が他の read も SSE 配信も止める。
- SSE の `subscriber_can_read` は subscriber × event ごとに lock を取り `SELECT COUNT(*) FROM group_members WHERE ...` を実行(`src/sse.rs:339-342`)。group_members に index は無く full scan。

**いつ効くか**
- 単一ユーザ / 低並行: 無問題(今ここ)。
- bg child が複数 SSE attach + 誰かが重い run_sql: 「run_sql 1 本が全 SSE 配信をブロック」「event × subscriber で lock 争奪」。

**方向(案)**
- projection を `RwLock` 化して read 並列化(write のみ直列)。
- membership 判定を接続時に一度解決し、membership-change event でのみ再評価(per-event の lock+scan を消す)。

既出の SPA full-rebuild 系(slack-feed-perf `n_01KSJET3DQE7PNG4QX4CA04T05` / 初期ロード短縮 `n_01KSJJ0JGTECYKPTJD5XQTF3R6`)とは別軸の、まだ corpus に無い server 側 finding。優先度は低(緊急ではない)。