# social.colibri.beta.sync.defs

> Published by [colibri.social](https://lexicon.garden/identity/did:plc:mprdjqjluoswa7awzggaggj3)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:mprdjqjluoswa7awzggaggj3/social.colibri.beta.sync.defs)
- [Documentation](https://lexicon.garden/lexicon/did:plc:mprdjqjluoswa7awzggaggj3/social.colibri.beta.sync.defs/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:mprdjqjluoswa7awzggaggj3/social.colibri.beta.sync.defs/examples)

## Definitions

### `social.colibri.beta.sync.defs#ack`

**Type**: `object`

Answers a heartbeat.

| Property | Type | Required | Description |
|----------|------|----------|-------------|

### `social.colibri.beta.sync.defs#error`

**Type**: `object`

Something the client sent could not be acted on.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `error` | `string` | Yes | Error name. |
| `message` | `string` | No | Human-readable detail. |

### `social.colibri.beta.sync.defs#typing`

**Type**: `object`

Reports that the user is typing in a channel.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `channel` | `string` (space-ref) | Yes | The channel being typed in. |

### `social.colibri.beta.sync.defs#heartbeat`

**Type**: `object`

Keeps the connection alive and tells the AppView the user is still present. The server answers with an ack.

| Property | Type | Required | Description |
|----------|------|----------|-------------|

### `social.colibri.beta.sync.defs#roleEvent`

**Type**: `object`

A role was created, changed, or deleted.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `rkey` | `string` (record-key) | No | Which role, for deletes. |
| `role` | `ref` → `social.colibri.beta.community.defs#roleView` | No | The role. Absent on delete. |
| `event` | `string` | Yes | What happened. |
| `community` | `string` (did) | Yes | The community it belongs to. |

### `social.colibri.beta.sync.defs#seenEvent`

**Type**: `object`

The connected user marked notifications seen somewhere else, so this client should clear the same badges.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `seenAt` | `string` (datetime) | No | The point everything was marked seen up to. |
| `unread` | `integer` | Yes | The user's remaining unread count. |
| `channel` | `string` (space-ref) | No | The channel that was marked seen, when it was a single channel. |

### `social.colibri.beta.sync.defs#subscribe`

**Type**: `object`

Adds communities and channels to what this connection receives. Subscription is explicit: a connection is sent nothing it did not ask for.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `channels` | `array` | No | Channels to start receiving messages for. |
| `communities` | `array` | No | Communities to start receiving events for. |

### `social.colibri.beta.sync.defs#labelEvent`

**Type**: `object`

A label was applied or retracted on a record in a subscribed space.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `src` | `string` (did) | Yes | The labeler. |
| `val` | `string` | Yes | The label value. |
| `event` | `string` | Yes | What happened. |
| `space` | `string` (space-ref) | Yes | The space the labelled record lives in. |
| `subject` | `ref` → `social.colibri.beta.label#subject` | Yes | The labelled record. |

### `social.colibri.beta.sync.defs#subscribed`

**Type**: `object`

Confirms what this connection is now receiving, after a subscribe or unsubscribe. Anything the user is not entitled to read is silently absent.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `channels` | `array` | Yes | Channels being received. |
| `communities` | `array` | Yes | Communities being received. |

### `social.colibri.beta.sync.defs#voiceEvent`

**Type**: `object`

A voice channel's participants changed.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` (did) | Yes | Who. |
| `event` | `string` | Yes | What happened. |
| `voice` | `ref` → `social.colibri.beta.actor.defs#voiceState` | No | Their voice state. Absent on leave. |
| `channel` | `string` (space-ref) | Yes | The voice channel. |
| `speaking` | `boolean` | No | Whether they are currently speaking, on speaking events. |

### `social.colibri.beta.sync.defs#memberEvent`

**Type**: `object`

Someone joined, left, or had their roles changed.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `event` | `string` | Yes | What happened. A kick or a ban arrives as a leave. |
| `member` | `ref` → `social.colibri.beta.community.defs#memberView` | No | The member. Absent on leave. |
| `subject` | `string` (did) | No | Who, for leaves. |
| `community` | `string` (did) | Yes | The community. |

### `social.colibri.beta.sync.defs#setPresence`

**Type**: `object`

Updates the user's own presence over the socket.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `voice` | `ref` → `#voiceSelfState` | No | The user's own voice state, when connected to a voice channel. |
| `onlineState` | `string` | No | Requested online state. |

### `social.colibri.beta.sync.defs#typingEvent`

**Type**: `object`

Someone is typing in a subscribed channel.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` (did) | Yes | Who is typing. |
| `channel` | `string` (space-ref) | Yes | Where. |

### `social.colibri.beta.sync.defs#unsubscribe`

**Type**: `object`

Removes communities and channels from what this connection receives.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `channels` | `array` | No | Channels to stop receiving messages for. |
| `communities` | `array` | No | Communities to stop receiving events for. |

### `social.colibri.beta.sync.defs#viewChannel`

**Type**: `object`

Reports which channel the user is looking at, which drives read state and away detection. An absent channel means they are looking at none.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `channel` | `string` (space-ref) | No | The channel now in view. |

### `social.colibri.beta.sync.defs#channelEvent`

**Type**: `object`

A channel was created, changed, or deleted.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `event` | `string` | Yes | What happened. |
| `space` | `string` (space-ref) | No | Which channel, for deletes. |
| `channel` | `ref` → `social.colibri.beta.community.defs#channelView` | No | The channel. Absent on delete. |
| `community` | `string` (did) | Yes | The community it belongs to. |

### `social.colibri.beta.sync.defs#messageEvent`

**Type**: `object`

A message was written, edited, or deleted in a subscribed channel.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `event` | `string` | Yes | What happened. |
| `channel` | `string` (space-ref) | Yes | The channel it happened in. |
| `message` | `ref` → `social.colibri.beta.channel.defs#messageView` | No | The message. Absent on delete, where the reference alone identifies it. |
| `subject` | `ref` → `social.colibri.beta.defs#recordRef` | No | Which message, for deletes. |

### `social.colibri.beta.sync.defs#categoryEvent`

**Type**: `object`

A category was created, changed, or deleted.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `rkey` | `string` (record-key) | No | Which category, for deletes. |
| `event` | `string` | Yes | What happened. |
| `category` | `ref` → `social.colibri.beta.community.defs#categoryView` | No | The category. Absent on delete. |
| `community` | `string` (did) | Yes | The community it belongs to. |

### `social.colibri.beta.sync.defs#presenceEvent`

**Type**: `object`

Someone's presence changed.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` (did) | Yes | Whose presence changed. |
| `presence` | `ref` → `social.colibri.beta.actor.defs#presence` | Yes | Their new presence. |

### `social.colibri.beta.sync.defs#reactionEvent`

**Type**: `object`

A reaction was added or removed in a subscribed channel.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `actor` | `string` (did) | Yes | Who reacted. |
| `emoji` | `string` | Yes | The emoji or custom shortcode. |
| `event` | `string` | Yes | What happened. |
| `target` | `ref` → `social.colibri.beta.defs#recordRef` | Yes | The message reacted to. |
| `channel` | `string` (space-ref) | Yes | The channel it happened in. |

### `social.colibri.beta.sync.defs#communityEvent`

**Type**: `object`

A community's profile or settings changed.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `view` | `ref` → `social.colibri.beta.community.defs#communityView` | No | The community. Absent on delete. |
| `event` | `string` | Yes | What happened. |
| `community` | `string` (did) | Yes | The community. |

### `social.colibri.beta.sync.defs#voiceSelfState`

**Type**: `object`

A user's own voice state.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `muted` | `boolean` | No | Whether the microphone is muted. |
| `channel` | `string` (space-ref) | Yes | The voice channel. |
| `deafened` | `boolean` | No | Whether the user has deafened themselves. |

### `social.colibri.beta.sync.defs#moderationEvent`

**Type**: `object`

A moderation action was logged. Only sent to members who can read the log.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `entry` | `ref` → `social.colibri.beta.community.defs#moderationView` | Yes | The log entry. |
| `community` | `string` (did) | Yes | The community. |

### `social.colibri.beta.sync.defs#applicationEvent`

**Type**: `object`

The pending-application queue changed. Only sent to members who can manage approvals.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `event` | `string` | Yes | What happened. |
| `subject` | `string` (did) | Yes | The applicant. |
| `community` | `string` (did) | Yes | The community. |
| `application` | `ref` → `social.colibri.beta.community.defs#applicationView` | No | The application. Absent on approve. |

### `social.colibri.beta.sync.defs#preferencesEvent`

**Type**: `object`

The connected user changed their own preferences somewhere else.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `preferences` | `ref` → `social.colibri.beta.actor.defs#preferences` | Yes | Their preferences as they now stand. |

### `social.colibri.beta.sync.defs#notificationEvent`

**Type**: `object`

A notification was raised for the connected user.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `notification` | `ref` → `social.colibri.beta.notification.defs#notificationView` | Yes | The notification. |

### `social.colibri.beta.sync.defs#communityProgressEvent`

**Type**: `object`

Progress while a community is being created, which takes several PDS round-trips.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `step` | `string` | Yes | What the AppView is doing now. |
| `total` | `integer` | Yes | Steps in total. |
| `message` | `string` | No | Human-readable detail, set on failure. |
| `community` | `string` (did) | No | The community, once its account exists. |
| `completed` | `integer` | Yes | Steps finished. |

## Raw Schema

```json
{
  "id": "social.colibri.beta.sync.defs",
  "defs": {
    "ack": {
      "type": "object",
      "required": [],
      "properties": {},
      "description": "Answers a heartbeat."
    },
    "error": {
      "type": "object",
      "required": [
        "error"
      ],
      "properties": {
        "error": {
          "type": "string",
          "description": "Error name.",
          "knownValues": [
            "InvalidFrame",
            "Forbidden",
            "NotFound",
            "RateLimited"
          ]
        },
        "message": {
          "type": "string",
          "description": "Human-readable detail."
        }
      },
      "description": "Something the client sent could not be acted on."
    },
    "typing": {
      "type": "object",
      "required": [
        "channel"
      ],
      "properties": {
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The channel being typed in."
        }
      },
      "description": "Reports that the user is typing in a channel."
    },
    "heartbeat": {
      "type": "object",
      "required": [],
      "properties": {},
      "description": "Keeps the connection alive and tells the AppView the user is still present. The server answers with an ack."
    },
    "roleEvent": {
      "type": "object",
      "required": [
        "event",
        "community"
      ],
      "properties": {
        "rkey": {
          "type": "string",
          "format": "record-key",
          "description": "Which role, for deletes."
        },
        "role": {
          "ref": "social.colibri.beta.community.defs#roleView",
          "type": "ref",
          "description": "The role. Absent on delete."
        },
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "update",
            "delete"
          ]
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community it belongs to."
        }
      },
      "description": "A role was created, changed, or deleted."
    },
    "seenEvent": {
      "type": "object",
      "required": [
        "unread"
      ],
      "properties": {
        "seenAt": {
          "type": "string",
          "format": "datetime",
          "description": "The point everything was marked seen up to."
        },
        "unread": {
          "type": "integer",
          "description": "The user's remaining unread count."
        },
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The channel that was marked seen, when it was a single channel."
        }
      },
      "description": "The connected user marked notifications seen somewhere else, so this client should clear the same badges."
    },
    "subscribe": {
      "type": "object",
      "required": [],
      "properties": {
        "channels": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "space-ref",
            "description": "A channel."
          },
          "description": "Channels to start receiving messages for."
        },
        "communities": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "did",
            "description": "A community."
          },
          "description": "Communities to start receiving events for."
        }
      },
      "description": "Adds communities and channels to what this connection receives. Subscription is explicit: a connection is sent nothing it did not ask for."
    },
    "labelEvent": {
      "type": "object",
      "required": [
        "event",
        "space",
        "subject",
        "val",
        "src"
      ],
      "properties": {
        "src": {
          "type": "string",
          "format": "did",
          "description": "The labeler."
        },
        "val": {
          "type": "string",
          "description": "The label value."
        },
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "negate"
          ]
        },
        "space": {
          "type": "string",
          "format": "space-ref",
          "description": "The space the labelled record lives in."
        },
        "subject": {
          "ref": "social.colibri.beta.label#subject",
          "type": "ref",
          "description": "The labelled record."
        }
      },
      "description": "A label was applied or retracted on a record in a subscribed space."
    },
    "subscribed": {
      "type": "object",
      "required": [
        "communities",
        "channels"
      ],
      "properties": {
        "channels": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "space-ref",
            "description": "A channel."
          },
          "description": "Channels being received."
        },
        "communities": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "did",
            "description": "A community."
          },
          "description": "Communities being received."
        }
      },
      "description": "Confirms what this connection is now receiving, after a subscribe or unsubscribe. Anything the user is not entitled to read is silently absent."
    },
    "voiceEvent": {
      "type": "object",
      "required": [
        "event",
        "channel",
        "did"
      ],
      "properties": {
        "did": {
          "type": "string",
          "format": "did",
          "description": "Who."
        },
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "join",
            "leave",
            "update",
            "speaking"
          ]
        },
        "voice": {
          "ref": "social.colibri.beta.actor.defs#voiceState",
          "type": "ref",
          "description": "Their voice state. Absent on leave."
        },
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The voice channel."
        },
        "speaking": {
          "type": "boolean",
          "description": "Whether they are currently speaking, on speaking events."
        }
      },
      "description": "A voice channel's participants changed."
    },
    "memberEvent": {
      "type": "object",
      "required": [
        "event",
        "community"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "What happened. A kick or a ban arrives as a leave.",
          "knownValues": [
            "join",
            "leave",
            "update"
          ]
        },
        "member": {
          "ref": "social.colibri.beta.community.defs#memberView",
          "type": "ref",
          "description": "The member. Absent on leave."
        },
        "subject": {
          "type": "string",
          "format": "did",
          "description": "Who, for leaves."
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community."
        }
      },
      "description": "Someone joined, left, or had their roles changed."
    },
    "setPresence": {
      "type": "object",
      "required": [],
      "properties": {
        "voice": {
          "ref": "#voiceSelfState",
          "type": "ref",
          "description": "The user's own voice state, when connected to a voice channel."
        },
        "onlineState": {
          "type": "string",
          "description": "Requested online state.",
          "knownValues": [
            "online",
            "away",
            "dnd",
            "offline"
          ]
        }
      },
      "description": "Updates the user's own presence over the socket."
    },
    "typingEvent": {
      "type": "object",
      "required": [
        "did",
        "channel"
      ],
      "properties": {
        "did": {
          "type": "string",
          "format": "did",
          "description": "Who is typing."
        },
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "Where."
        }
      },
      "description": "Someone is typing in a subscribed channel."
    },
    "unsubscribe": {
      "type": "object",
      "required": [],
      "properties": {
        "channels": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "space-ref",
            "description": "A channel."
          },
          "description": "Channels to stop receiving messages for."
        },
        "communities": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "did",
            "description": "A community."
          },
          "description": "Communities to stop receiving events for."
        }
      },
      "description": "Removes communities and channels from what this connection receives."
    },
    "viewChannel": {
      "type": "object",
      "required": [],
      "properties": {
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The channel now in view."
        }
      },
      "description": "Reports which channel the user is looking at, which drives read state and away detection. An absent channel means they are looking at none."
    },
    "channelEvent": {
      "type": "object",
      "required": [
        "event",
        "community"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "update",
            "delete"
          ]
        },
        "space": {
          "type": "string",
          "format": "space-ref",
          "description": "Which channel, for deletes."
        },
        "channel": {
          "ref": "social.colibri.beta.community.defs#channelView",
          "type": "ref",
          "description": "The channel. Absent on delete."
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community it belongs to."
        }
      },
      "description": "A channel was created, changed, or deleted."
    },
    "messageEvent": {
      "type": "object",
      "required": [
        "event",
        "channel"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "update",
            "delete"
          ]
        },
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The channel it happened in."
        },
        "message": {
          "ref": "social.colibri.beta.channel.defs#messageView",
          "type": "ref",
          "description": "The message. Absent on delete, where the reference alone identifies it."
        },
        "subject": {
          "ref": "social.colibri.beta.defs#recordRef",
          "type": "ref",
          "description": "Which message, for deletes."
        }
      },
      "description": "A message was written, edited, or deleted in a subscribed channel."
    },
    "categoryEvent": {
      "type": "object",
      "required": [
        "event",
        "community"
      ],
      "properties": {
        "rkey": {
          "type": "string",
          "format": "record-key",
          "description": "Which category, for deletes."
        },
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "update",
            "delete"
          ]
        },
        "category": {
          "ref": "social.colibri.beta.community.defs#categoryView",
          "type": "ref",
          "description": "The category. Absent on delete."
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community it belongs to."
        }
      },
      "description": "A category was created, changed, or deleted."
    },
    "presenceEvent": {
      "type": "object",
      "required": [
        "did",
        "presence"
      ],
      "properties": {
        "did": {
          "type": "string",
          "format": "did",
          "description": "Whose presence changed."
        },
        "presence": {
          "ref": "social.colibri.beta.actor.defs#presence",
          "type": "ref",
          "description": "Their new presence."
        }
      },
      "description": "Someone's presence changed."
    },
    "reactionEvent": {
      "type": "object",
      "required": [
        "event",
        "channel",
        "target",
        "emoji",
        "actor"
      ],
      "properties": {
        "actor": {
          "type": "string",
          "format": "did",
          "description": "Who reacted."
        },
        "emoji": {
          "type": "string",
          "description": "The emoji or custom shortcode."
        },
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "delete"
          ]
        },
        "target": {
          "ref": "social.colibri.beta.defs#recordRef",
          "type": "ref",
          "description": "The message reacted to."
        },
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The channel it happened in."
        }
      },
      "description": "A reaction was added or removed in a subscribed channel."
    },
    "communityEvent": {
      "type": "object",
      "required": [
        "event",
        "community"
      ],
      "properties": {
        "view": {
          "ref": "social.colibri.beta.community.defs#communityView",
          "type": "ref",
          "description": "The community. Absent on delete."
        },
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "update",
            "delete"
          ]
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community."
        }
      },
      "description": "A community's profile or settings changed."
    },
    "voiceSelfState": {
      "type": "object",
      "required": [
        "channel"
      ],
      "properties": {
        "muted": {
          "type": "boolean",
          "description": "Whether the microphone is muted."
        },
        "channel": {
          "type": "string",
          "format": "space-ref",
          "description": "The voice channel."
        },
        "deafened": {
          "type": "boolean",
          "description": "Whether the user has deafened themselves."
        }
      },
      "description": "A user's own voice state."
    },
    "moderationEvent": {
      "type": "object",
      "required": [
        "community",
        "entry"
      ],
      "properties": {
        "entry": {
          "ref": "social.colibri.beta.community.defs#moderationView",
          "type": "ref",
          "description": "The log entry."
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community."
        }
      },
      "description": "A moderation action was logged. Only sent to members who can read the log."
    },
    "applicationEvent": {
      "type": "object",
      "required": [
        "event",
        "community",
        "subject"
      ],
      "properties": {
        "event": {
          "type": "string",
          "description": "What happened.",
          "knownValues": [
            "create",
            "approve",
            "dismiss",
            "undismiss"
          ]
        },
        "subject": {
          "type": "string",
          "format": "did",
          "description": "The applicant."
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community."
        },
        "application": {
          "ref": "social.colibri.beta.community.defs#applicationView",
          "type": "ref",
          "description": "The application. Absent on approve."
        }
      },
      "description": "The pending-application queue changed. Only sent to members who can manage approvals."
    },
    "preferencesEvent": {
      "type": "object",
      "required": [
        "preferences"
      ],
      "properties": {
        "preferences": {
          "ref": "social.colibri.beta.actor.defs#preferences",
          "type": "ref",
          "description": "Their preferences as they now stand."
        }
      },
      "description": "The connected user changed their own preferences somewhere else."
    },
    "notificationEvent": {
      "type": "object",
      "required": [
        "notification"
      ],
      "properties": {
        "notification": {
          "ref": "social.colibri.beta.notification.defs#notificationView",
          "type": "ref",
          "description": "The notification."
        }
      },
      "description": "A notification was raised for the connected user."
    },
    "communityProgressEvent": {
      "type": "object",
      "required": [
        "step",
        "completed",
        "total"
      ],
      "properties": {
        "step": {
          "type": "string",
          "description": "What the AppView is doing now.",
          "knownValues": [
            "creatingAccount",
            "creatingSpaces",
            "writingProfile",
            "creatingOwnerRole",
            "creatingStarterChannels",
            "done",
            "failed"
          ]
        },
        "total": {
          "type": "integer",
          "description": "Steps in total."
        },
        "message": {
          "type": "string",
          "description": "Human-readable detail, set on failure."
        },
        "community": {
          "type": "string",
          "format": "did",
          "description": "The community, once its account exists."
        },
        "completed": {
          "type": "integer",
          "description": "Steps finished."
        }
      },
      "description": "Progress while a community is being created, which takes several PDS round-trips."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
