Files
amethyst/quartz
Claude c56eb97046 test(marmot): add behavior tests for MIP compliance fixes
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
2026-04-17 22:07:59 +00:00
..