···129129130130All AT Protocol record types are defined as Lexicon JSON files:
131131132132-| Lexicon ID | Published by | Purpose |
133133-| ------------------------------------------ | ------------ | ------------------------------------------------------------------------ |
134134-| `site.exosphere.sphere` | Sphere owner | Sphere declaration (name, slug, visibility, modules) — enables discovery |
135135-| `site.exosphere.sphereMember` | Member | "I am a member of this Sphere" — member-side of bilateral membership |
136136-| `site.exosphere.sphereMemberApproval` | Owner/admin | "This user is an approved member" — admin-side of bilateral membership |
137137-| `site.exosphere.featureRequest` | Author | Feature request content |
138138-| `site.exosphere.featureRequestVote` | Voter | Upvote on a feature request |
139139-| `site.exosphere.featureRequestComment` | Commenter | Comment on a feature request |
140140-| `site.exosphere.featureRequestCommentVote` | Voter | Upvote on a comment |
141141-| `site.exosphere.featureRequestStatus` | Admin/owner | Status change on a feature request |
142142-| `site.exosphere.moderation` | Admin/owner | Moderation action on any content (e.g. comment removal) |
132132+| Lexicon ID | Published by | Purpose |
133133+| ------------------------------------------- | ------------ | ------------------------------------------------------------------------ |
134134+| `site.exosphere.sphere` | Sphere owner | Sphere declaration (name, slug, visibility, modules) — enables discovery |
135135+| `site.exosphere.sphere.member` | Member | "I am a member of this Sphere" — member-side of bilateral membership |
136136+| `site.exosphere.sphere.memberApproval` | Owner/admin | "This user is an approved member" — admin-side of bilateral membership |
137137+| `site.exosphere.sphere.permissions` | Sphere owner | Permission overrides for core Sphere actions |
138138+| `site.exosphere.featureRequest` | Author | Feature request content |
139139+| `site.exosphere.featureRequest.vote` | Voter | Upvote on a feature request |
140140+| `site.exosphere.featureRequest.comment` | Commenter | Comment on a feature request |
141141+| `site.exosphere.featureRequest.commentVote` | Voter | Upvote on a comment |
142142+| `site.exosphere.featureRequest.status` | Admin/owner | Status change on a feature request |
143143+| `site.exosphere.featureRequest.permissions` | Sphere owner | Permission overrides for the feature-requests module |
144144+| `site.exosphere.moderation` | Admin/owner | Moderation action on any content (e.g. comment removal) |
143145144146## Data Ownership
145147···277279278280Membership is represented by two complementary AT Protocol records:
279281280280-1. **`site.exosphere.sphereMemberApproval`** — published on the **owner/admin's PDS** when they invite or approve a member. Contains the Sphere AT URI, the member's DID, and their role.
281281-2. **`site.exosphere.sphereMember`** — published on the **member's PDS** when they accept the invitation. Contains the Sphere AT URI.
282282+1. **`site.exosphere.sphere.memberApproval`** — published on the **owner/admin's PDS** when they invite or approve a member. Contains the Sphere AT URI, the member's DID, and their role.
283283+2. **`site.exosphere.sphere.member`** — published on the **member's PDS** when they accept the invitation. Contains the Sphere AT URI.
282284283285Both records must exist for a membership to be considered fully established. This mirrors how AT Protocol handles social relationships (e.g. follows) and enables third-party indexers to reconstruct the full membership graph from PDS data alone.
284286···2983002993011. A Sphere admin invites a user by their AT Protocol handle or DID.
3003022. The handle is resolved to a DID (if needed).
301301-3. The admin publishes a `sphereMemberApproval` record on their PDS.
303303+3. The admin publishes a `sphere.memberApproval` record on their PDS.
3023044. An invitation record is created in the local membership table (status: invited).
3033055. The invited user accepts via the Sphere UI.
304304-6. On acceptance, the user publishes a `sphereMember` record on their PDS.
306306+6. On acceptance, the user publishes a `sphere.member` record on their PDS.
3053077. Local status is set to active and the user can participate according to the Sphere's write access mode.
306308307309### Private Spheres and membership privacy
+5
CLAUDE.md
···34343535See `ARCHITECTURE.md` for full details on data flow, AT Protocol integration, membership model, and access modes.
36363737+### Lexicons
3838+3939+The project lexicons are located in `../landing` and hosted on tnagled:
4040+https://tangled.org/exosphere.site/landing.
4141+3742## TS/TSX coding style
38433944- Strong typing and type safety
···4545 indexer?: ModuleIndexer;
4646 /** Named actions and their default minimum role, displayed in the admin panel */
4747 permissions?: Record<string, ModulePermission>;
4848- /** AT Protocol collection ID for this module's permission overrides record (e.g. "site.exosphere.featureRequestPermissions") */
4848+ /** AT Protocol collection ID for this module's permission overrides record (e.g. "site.exosphere.featureRequest.permissions") */
4949 permissionsCollection?: string;
5050}
5151