MD: Relatedly, I don't understand why MC_ANNOUNCE and MC_JOIN have to be different frames. There could be a super-frame that has all of this (in addition to MC_KEY information, though that frame also has to have a separate incarnation for re-keying), which would streamline the client state machine considerably. Put differently, I don't see the value of the "unjoined" state.
MD: Relatedly, I don't understand why MC_ANNOUNCE and MC_JOIN have to be different frames. There could be a super-frame that has all of this (in addition to MC_KEY information, though that frame also has to have a separate incarnation for re-keying), which would streamline the client state machine considerably. Put differently, I don't see the value of the "unjoined" state.