At this level
dk.raakode.lab.groups · 6- dk.raakode.lab.groups.group record The group's own description of itself, including whether it wants to be discoverable. Written by the group authority into its repo in the group's space, so it travels with the group when it changes app — a group that chose to be unlisted stays unlisted under a new operator.
- dk.raakode.lab.groups.membership record not from the namespace authority A member's role in the group. Written by the group authority into its repo in the space, never held as app database state — this is what makes a role survive the group changing app. The simplespace member list governs access; this record governs what the member may do once inside.
- dk.raakode.lab.groups.post record not from the namespace authority A post in a group. Written by its author into the author's own repo in the group's space; no other party can write or delete it.
- dk.raakode.lab.groups.profile record A person's name and pictures, in their own public repo, readable by any application. Deliberately NOT app.bsky.actor.profile, even though that is the obvious home and the shape is identical: asking for repo:app.bsky.actor.profile makes the authorization server classify the whole request as Bluesky-specific and silently drop the space permissions from the consent screen (see docs/evidence/S03.md). A consent screen that under-reports what is being granted is worse than a non-standard namespace. Re
- dk.raakode.lab.groups.space space A Theta group: a closed association, neighbourhood or volunteer group.
- dk.raakode.lab.groups.watch record An indexer's acknowledgement that it follows this space. Written by the indexer into its own repo in the space, for one reason: com.atproto.space.listSpaces returns the spaces an account holds a REPO in, not the spaces it is a member of. An indexer admitted to a group but never written to it is invisible to its own discovery. Writing this once makes the group discoverable forever after. See docs/evidence/S09.md.