There are 4 files `a a.1 a.2 a.3`. Phase 1 (sync) - rename `a -> a.0` and write to newly created `a`. Phase 2 (async) - remove `a.3` and rename `a.1 a.2 -> a.2 a.3`. Potential problems: - Program exists unexpectedly. `rotate.File.Sync` must wait for phase 2.