SESSION 8 PLAN (2026-03-01):
Keyrings are the Phase 3 feature. Architectural decisions confirmed:
CRYPTO MODEL:
RECORD TYPE (already in lexicon):
EXISTING CODE:
SUBISSUES:
SEQUENCING within this session: 1. Fix the failing crypto test — implement wrap_content_key_to_group_key / unwrap_content_key_from_group_key 2. #17 keyring create (core + CLI) 3. #20 keyring ls (core + CLI, trivial with list_collection) 4. #18 keyring add-member 5. #21 upload --keyring 6. #19 keyring remove-member with rotation (most complex)
Phase 3: Keyrings. Named groups with a shared symmetric group key (GK), wrapped to each member's DID pubkey. Documents encrypted under a keyring have their content key wrapped under GK instead of individual pubkeys. Adding a member = wrap GK to their pubkey. Removing a member = rotate GK, re-wrap to remaining members, increment rotation counter. Documents reference the rotation epoch they were encrypted under (keyringRef.rotation field added in lexicon defs).