Package rotate is a single-use realm shipped at test-13 genesis whose sole purpose is to swap the gnoland1 sole T1 (`oldT1`) for the test-13 sole T1 (`newT1`) after historical replay completes.
The proposal-flow rotation pattern (manfred proposes self-withdraw → new-T1 votes + executes) is unworkable at genesis-mode replay because gov/dao exposes no API to discover the latest proposal ID across MsgRun txs — and the post-replay proposal counter depends on how many proposals manfred opened on gnoland1, which we can't determine statically without re-executing the replay. This realm sidesteps the problem entirely: a single genesis-mode MsgCall to Rotate does the transfer through direct memberstore writes, no proposals involved.
Phase-1 bootstrap (`transactions/base/bootstrap/govdao_prop1_test13.gno`) wires this package into `dao.UpdateImpl(...AllowedDAOs)` at lock time, so memberstore.Get() works from inside Rotate. Once Rotate runs it self-ejects from AllowedDAOs, leaving the membership-mutation surface back at `gno.land/r/gov/dao/v3/impl` alone.
Single-use is enforced by the `runtime.ChainHeight() != 0` gate. Migration txs run with BlockHeight=0 (forced by `gnogenesis fork generate`'s readMigrationTxs), so during genesis replay ChainHeight()==0 and Rotate proceeds; post-genesis any caller gets a panic.