Problem
`fsm.GetAllFiles()` allocates a full O(N) snapshot copy of the manifest. For 1M+ files this causes ~50ms apply-path spikes and ~50MB transient memory.
Proposed Solution
Add a paginated or streaming variant for the catch-up walker and API handler. The FSM keeps the full map internally but exposes an iterator or cursor-based API.
Context
Deferred from Phase 3. Emergency kill-switch exists (`replication_catchup_enabled=false`).
Effort
Medium
Problem
`fsm.GetAllFiles()` allocates a full O(N) snapshot copy of the manifest. For 1M+ files this causes ~50ms apply-path spikes and ~50MB transient memory.
Proposed Solution
Add a paginated or streaming variant for the catch-up walker and API handler. The FSM keeps the full map internally but exposes an iterator or cursor-based API.
Context
Deferred from Phase 3. Emergency kill-switch exists (`replication_catchup_enabled=false`).
Effort
Medium