GIT-006: migration & crash recovery — recompact each shard into one OFS-only stream, truncate-and-reindex on torn append

Input

Context

Child of GIT-001; depends on GIT-002/GIT-003; gates GIT-004. Existing stores hold mixed OFS/REF logs across many NNNNN.keeper files; they must become one OFS-only stream per shard before the REF reader can be deleted. Reuse the PackLog epoch-recompaction mechanism (copy the reachable closure into a fresh project id) as the migration: the closure is re-emitted through the GIT-002 writer, so the output is OFS-only, dedup'd, and single-stream by construction. Separately, object-by-object append changes the crash story from "drop the whole torn pack" to "truncate the log to the last indexed offset and re-UNPK the unindexed tail". See PackLog, Keeper, CLAUDE.

Goals

Constraints

WIP

Design decisions

TODOs

Blockers and bummers

Outcome