Resolve the ordered steps that carry version forward to targetVersion.
Exported because a host that persists envelopes needs to answer "can this
entry still be read?" without decoding it, and because the unreachable case —
a ladder whose chain dead-ends before the target — has to be provable rather
than assumed. The walk is bounded and cycle-safe: at most
MAX_MIGRATION_STEPS steps, and no version is visited twice.
Resolve the ordered steps that carry
versionforward totargetVersion.Exported because a host that persists envelopes needs to answer "can this entry still be read?" without decoding it, and because the unreachable case — a ladder whose chain dead-ends before the target — has to be provable rather than assumed. The walk is bounded and cycle-safe: at most MAX_MIGRATION_STEPS steps, and no version is visited twice.