Rewrite on every checkpoint. The manifest is small (a few hundred KB for a million pages), so a single PUT is fine. The PUT is the atomic commit point - old page groups become garbage, cleaned up later by gc(). The SQLite engine fetches updated pages from the WAL so turbolite doesn't have to manage manifest updates until checkpoint. If it's not in WAL mode, checkpoints happen on every write so consistency is still there.
How do you handle manifest consistency and updates—append-only or rewrite-heavy?