WR-15: a leaf whose identity is not a valid 32-byte hex key is SKIPPED, not
thrown on. Filtering on credentialType alone is not enough — a basic
credential can still carry a malformed identity, and getCredentialPubkey
throws for one. marmotAuthService.validateCredential gates identities on
the inbound path, but a state hydrated from a Welcome or a ratchet_tree
extension is not covered by that gate. Callers here (notably
deriveStateNotifications, run per link of an applied rewind AFTER state
has already advanced) treat this as an enumeration, so one unparseable leaf
must not abort the whole enumeration — and such a leaf is not a valid
Marmot member in the first place.
Gets all the nostr pubkey keys in a group.
WR-15: a leaf whose identity is not a valid 32-byte hex key is SKIPPED, not thrown on. Filtering on
credentialTypealone is not enough — a basic credential can still carry a malformed identity, andgetCredentialPubkeythrows for one.marmotAuthService.validateCredentialgates identities on the inbound path, but a state hydrated from a Welcome or aratchet_treeextension is not covered by that gate. Callers here (notablyderiveStateNotifications, run per link of an applied rewind AFTER state has already advanced) treat this as an enumeration, so one unparseable leaf must not abort the whole enumeration — and such a leaf is not a valid Marmot member in the first place.