···
## Technical Decisions Log
393
+
### 2025-10-18: Moderator Lexicon Extensibility
394
+
**Decision:** Use `knownValues` instead of `enum` for moderator roles and permissions in `social.coves.community.moderator` record schema
397
+
- Moderator records are immutable once published (atProto record semantics)
398
+
- Closed `enum` values cannot be extended without breaking schema evolution rules
399
+
- Using `knownValues` allows adding new roles/permissions in Beta Phase 2 without requiring V2 schema migration
400
+
- Zero cost to fix during alpha planning; expensive to migrate once records exist in production
403
+
- `role` field: Changed from `enum: ["moderator", "admin"]` to `knownValues: ["moderator", "admin"]` with `maxLength: 64`
404
+
- `permissions` array items: Changed from closed enum to `knownValues` with `maxLength: 64`
406
+
**Future Extensibility Examples:**
407
+
- **New roles**: "owner" (full transfer rights), "trainee" (limited trial moderator), "emeritus" (honorary former moderator)
408
+
- **New permissions**: "manage_bots", "manage_flairs", "manage_automoderator", "manage_federation", "pin_posts"
409
+
- Can add these values during Phase 2 (Moderator Tiers & Permissions) without breaking existing moderator records
411
+
**atProto Style Guide Reference:**
412
+
Per [atproto#4245](https://github.com/bluesky-social/atproto/discussions/4245): "Enum sets are 'closed' and can not be updated or extended without breaking schema evolution rules. For this reason they should almost always be avoided. For strings, `knownValues` provides more flexible alternative."
414
+
**Implementation Status:** ✅ Fixed in lexicon before alpha launch
### 2025-10-11: Moderator Records Storage Location
**Decision:** Store moderator records in community's repository (`at://community_did/social.coves.community.moderator/{tid}`), not user's repository