A community based topic aggregation platform built on atproto

feat(lexicon): make visibility extensible across community schemas

- Change visibility from closed enum to knownValues
- Apply to community.profile (record), create, and update endpoints
- Add maxLength: 64 per atProto style guide

This enables future visibility modes without breaking changes:
- "followers-only" - Only subscribers can see
- "instance-only" - Only same-instance users
- "invite-only" - Requires invite code

Files changed:
- community/profile.json (record schema)
- community/create.json (procedure)
- community/update.json (procedure)

Per atProto style guide: closed enums block schema evolution.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

Changed files
+6 -4
internal
atproto
lexicon
social
coves
+3 -2
internal/atproto/lexicon/social/coves/community/create.json
···
"defs": {
"main": {
"type": "procedure",
-
"description": "Create a new community",
+
"description": "Create a new community. Requires authentication.",
"input": {
"encoding": "application/json",
"schema": {
···
},
"visibility": {
"type": "string",
-
"enum": ["public", "unlisted", "private"],
+
"knownValues": ["public", "unlisted", "private"],
"default": "public",
+
"maxLength": 64,
"description": "Community visibility level"
},
"allowExternalDiscovery": {
+3 -2
internal/atproto/lexicon/social/coves/community/update.json
···
"defs": {
"main": {
"type": "procedure",
-
"description": "Update community profile",
+
"description": "Update community profile. Requires authentication and moderator/admin permissions.",
"input": {
"encoding": "application/json",
"schema": {
···
},
"visibility": {
"type": "string",
-
"enum": ["public", "unlisted", "private"],
+
"knownValues": ["public", "unlisted", "private"],
+
"maxLength": 64,
"description": "Community visibility level"
},
"allowExternalDiscovery": {