[plan] server projection の恒久対策 — 永続 projection + O(Δ) boot(α)を実装する。

設計は合意済、`docs/design.md` § "Projection persistence and boot"(PR #292)に記録。狙い = 毎 boot の from-genesis 全 replay(scale-to-zero の cold-wake ごとに O(corpus)、#279 障害の構造的根)を、永続 `projection.duckdb` + tail 差分 catch-up で **O(差分) boot** に変える。

実装スコープ:

- projection を `:memory:` → volume 上の **disk-backed `projection.duckdb`** に。
- `_projection_meta`(projection_version / migration_version / last_applied_ev_id)で boot 時 **catch-up / full-rebuild 判定**(粗く安全:version ズレ → 全 rebuild fallback)。cursor は overlap + 冪等 apply で cross-partition ULID 境界を吸収。
- **bind 先行 + `/healthz`=readiness**(503-until-ready)で hung-build を #286 同様に可視化。data 経路(`/mcp` run_sql / `/events*`)も ready まで 503。
- **`cleanup_legacy_on_disk_projection` を撤去**(毎 boot で projection.duckdb を消すので永続化と衝突)。
- 実装前確認:Fly が check fail 時に de-route か restart か(restart なら liveness=`/healthz` と readiness=`/readyz` を分離)。

関連 aside(今 session で残した):cleanup_legacy 衝突 / grace_period 過検知。