c56eb97046
Adds end-to-end tests that exercise the behavior added in the prior compliance commit, rather than just the TLS round-trips and parsing. - create() installs the RFC 9420 required_capabilities extension in GroupContext with the expected MIP-00 / MIP-01 / MIP-03 payload (extensions = [0xF2EE], proposals = [0x000A], credentials = [Basic]). - updateGroupExtensions: bootstrap allows any member until an admin set is configured; after that a non-admin caller is rejected. - MlsGroup.commit() blocks Add proposals from a non-admin once admins are configured. - MlsGroup.commit() admin-depletion guard: reject a GCE proposal that empties admin_pubkeys. Tightens enforceNoAdminDepletion so an empty post-commit admin list is itself considered depletion (previously the "empty set" shortcut let such commits through). - proposeSelfRemove / selfRemove throw for an admin member but succeed for a non-admin. - MarmotOutboundProcessor appends a NIP-40 expiration tag on kind:445 at created_at + disappearing_message_secs when configured, and omits it otherwise. - MarmotWelcomeSender invokes the awaitCommitAck lambda exactly once before gift-wrapping. - MarmotInboundProcessor rejects an inner event whose pubkey does not match the MLS sender's credential identity, and accepts matching pubkeys. All 11 new tests pass on :quartz:jvmTest alongside the existing suite. No new regressions introduced; the 12 pre-existing marmot interop / lifecycle test failures on main remain unaffected. https://claude.ai/code/session_014N7vG2TPgEeh7sQTpyHjJZ