The channel to rotate (mutated in place, new object returned).
A NEW Channel object with epoch+1 and fresh internals (fresh replay window — the sequence space restarts). The object is brand-validated (D1) and frozen (D2). The old channel object is immediately invalidated (internals dropped).
Rotates the channel root key: epoch+1, fresh root material, sequence reset.
───────────────────────────────────────────────────────────── What rotation achieves ─────────────────────────────────────────────────────────────
Derivation: newRoot = HKDF(oldRoot, salt='rotate', info=epoch+1) The old root material is wiped. Messages from previous epochs become undecryptable — that is the point.