[aside] 永続 projection の catch-up boot(PR #293)は apply だけ O(差分)で、`store.read_all()` による**全ログ(全 month file)の read+parse は依然 O(corpus)**。apply が #279 の重い所だったので v1 はそこだけ潰した形。 真の O(差分) boot には cursor 以降の month file だけ読む `read_after(cursor)` が要る(ULID は ts prefix なので古い file は名前で skip 可能)。今回 PR の scope 外。トリガー = ログの read/parse IO が boot の支配項になったとき(storage-bloat-spike の log 肥大対策と合流余地あり)。