When I ran your script a few times, I actually got 100 iterations most of the attempts. Whether you get exactly 100 iterations or 99 depends on minute timing differences in how k6 schedules these iterations. With your config, it will attempt to make one new iteration every 600ms, for up to 60 seconds. But for the hundredth iteration, due to a bit slower startup or something like that, it might try to start it at t=60s1ms, it’s a race between starting it at exactly t=60s and the scenario ending at exactly t=60s. Some times one “wins”, other times the other wins.
The second VU doesn’t matter, since it was never needed - even one VU is enough to run an empty iteration every 600ms
Try running this script, it will give you more clarity about what’s going on under the hood: