Here's my second repro done with as much detail as I can muster. Produced this (slightly more complex) mission earlier on and have since run three tests on it. Basically, it's the usual array of modules just with a larger number of objectives and an asymmetric OPCOM with all persistence options set to on. The mission files are included in the dropbox link at the bottom. It has no scripts, was built in a sterile environment with no other mods, and had no previous saved data. Mission entirely produced by me just now using latest versions of ALiVE, Arma 3 and CBA.
Test 1 (fresh mission name, no pre-existing data, no auto-init): Mission initialised at 12.23.19. Briefing screen appears at 12.24.23. Clicked continue and hint about player data loaded from ALiVE servers appears, everything works perfectly.
Actions taken: moved to new location, dropped primary weapon on ground, placed test marker, moved nearby vehicle, placed second test marker on top of profile e174 in Gravia. Then logged into admin, server saved and exited at 12.28.07, save completes at 12.29.06. Shut down server completely.
Stats:
Time between mission init and briefing screen: 1 min, 4 sec.
Data save duration: 59 sec.
Test 2 (pre-existing data from Test 1, no auto-init): Mission initialised at 12.37.44. Goes into loading screen. At roughly 12.39.15 (+/- 4 seconds), during the load screen, environmental sounds begin (including footsteps and some distant shooting). Server RPT suggests this is during data loading and just after Player Options starts loading (although I'd ask a dev to confirm this as I'm no RPT expert). At 12.39.36, the loading screen finishes, map briefing flashes for a millisecond, and the hint about player data loaded from ALiVE servers does not appear.
Observations: Markers are present at correct location, profile e174 is exactly where it should be, weapon left on ground is at correct position, the moved vehicle is at the place it was left at the end of Test 1. Time of day (I think) has persisted too. Player loadout and starting position however have failed and are the default for the character, despite these options being checked in the player options module. Essentially, all persistence has worked except for Player Persistence.
Actions taken: Server shut down without saving persistence.
Stats:
Time between mission initialised and environmental sounds: 1 min, 31 sec.
Time between mission init and loading screen ending: 1 min, 47 sec.
Test 3 (pre-existing data, "persistent battlefield" and "auto-init" options checked in TADST settings):
13.04.36: Read mission.
13.05.45: ALiVE Global Timer Complete.
13.06.21: Player joins.
13.06.27: Loading screen finishes.
Observations: Hint about player data loaded from ALiVE servers appears and everything works perfectly. Markers loaded, weapon left on ground, vehicle where it should be, e174 at exact position) however this time, the player has persisted too and is in the correct place and has no primary weapon as per the end of test 1.
Conclusions
I strongly suspect the persistence problem is caused by Player Persistence loading before the player is found in playable units. Previous tests I've run suggest that if player persistence doesn't load at the start, it won't save at the end, even if everything else does. So I could run Test 2 again, save and exit at the end, and then run Test 3, and the player persistence data that loads will be the original data from Test 1.
A further, less clinical test I ran suggests that the longer SYS_DATA takes to load, the more likely this behaviour is to appear. So, for people with slower internet connections (mine is about 2mb/sec) or internet connections that are bottlenecked in some way, this issue is more likely. Furthermore, the more data there is to load and therefore the longer that loading takes place, the more likely this issue is to persist.
Possible solutions:
1. Make player persistence wait until the player is found in playableunits before initialising.
2. Find a way to prevent the mission starting while the first player on server is still stuck in the loading screen. The best indicator of this is the first player on the server having to click "Continue" on the map screen before the mission starts.
Edit: I'll post this on GitHub.