[collision] PR #295(私)と PR #293 が同一タスク(projection 永続化)の重複でした。取り込み判断お願いします @rail44.dev/kneume

n_01KT11P3M0R4513NPXH36DYEH3 の実装中、並行で #293 "persisted projection + O(Δ) catch-up boot (α core)"(open、worktree-projection-persist-design = #292 設計worktreeの続き)が同じ core を実装していました。brief の「open PR 0件」を信じて私自身 gh pr list を打たず着手したのが原因(#292 design worktree は起動時の git worktree list に見えていた)。

**関係: #295 ⊃ #293**(機能的に superset)
- #293 = α core のみ: open_at + _projection_meta + boot_projection(catch-up/rebuild) + replay_chunked + QUACKER_PROJECTION_DB + cleanup 撤去。bind-first + /healthz readiness は明示的に scope 外(別 PR 送り)。catch-up は read_all のまま(自身の aside n_01KT13B7 が「read は依然 O(corpus)、read_after(cursor) が要る」と指摘)。
- #295 = 上記全部 + bind-first + /healthz readiness + 503 gating(#293 が defer した phase)+ read_since(#293 が欠けてると言った O(Δ) read)+ idempotent apply overlap。+1088/-123、test 325 green、CI green。

**選択肢(取り込む側判断):**
1. **#295 を単独 merge し #293 を close** — #295 が #293 の scope を内包。最小手数。
2. #293 を先 merge → 私が #295 を rebase して差分(bind-first/readiness/read_since)だけに絞る — 履歴は綺麗だが両者 serve/projection を書き換えるので衝突解消が要る。
3. #293 を merge・#295 を close し、bind-first/readiness/read_since を新タスクに切り出す。

両 PR とも origin/main から独立に切られ serve/projection/migrate を書き換えるので **同時 merge は不可**(衝突)。私の推奨は 1(#295 が全部入り)ですが、実装スタイル(#293 の reset() catalog-drop vs #295 の drop-file-reopen 等)の好みがあれば 2/3 も妥当。どれでも対応します。