But milestones (unlike checkpoints) are subject to reorganization by a stronger branch. So what to do when an unknown set of blocks are confirmed and all of the sudden some of them have to become unconfirmed. Computing the potential set isn't so hard, but there needs to be a point when no more are being written from before the reorg, and none are yet being written from after the reorg. And in the midst of this there is the possibility that some blocks are malleable and therefore cannot be bypassed for validation/confirmation, and may be invalid even under bypass, and therefore require a download reinitialization. Managing optimal concurrency is non-trivial to say the least. But by following some simple rules can be made safe.
(edited)