OK, here's what I think is happening around the ChaosMonkeySafeLeaderTest failures I'm seeing.
The missing docs actually appear in the "startingVersions" (i.e. they are in the transaction log).
We peersync and don't request those versions because we already have them.
But I don't think we ever called UpdateLog.recoverFromLog() to actually apply them to the index!
In ZkController.register() recoverFromLog is only called if isLeader==true. Perhaps this is a holdover from when peersync was not done at startup and hence it didn't make sense to try and recover from your logs when you were just going to replicate the leader index anyway?