AI offers this explanation...
"In Crescendo, D.S. and similar jump commands are attached to a barline/position in time, not to the “end of bar” concept that human performers use, so playback often needs a dummy bar to give the engine a clean, unambiguous jump point.
A bit more detail:
Internally, Crescendo treats D.S. as an event that must occur at a specific encoded time location (usually right before or on a barline), rather than “whenever you finish this bar.”
If your last real bar is full of notes up to its final tick, there is no separate time slot after those notes but before the next system object for the jump to be encoded.
By inserting a dummy bar (often an empty bar or a bar with a hidden rest), you create a distinct final time position where Crescendo can place and trigger the D.S. event cleanly, without conflicting with note playback or other repeats.
Many notation programs employ a similar workaround: they need a dedicated measure or at least a distinct temporal anchor for complex navigation (D.S., D.C., To Coda, Fine) so the playback engine can resolve the order deterministically rather than “guessing” at the end of a measure.
Practically, that dummy bar is just a technical anchor so the playback engine knows exactly when to jump back to the sign, instead of trying to interpret an abstract “end of this bar” instruction that is obvious to a human but ambiguous to the software"