# social.wips.comment

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

✓ This is the authoritative definition for this NSID.

## Description

Comment on a wips.social update. Top-level comments omit parent; replies set parent to the immediate comment being answered. subject always points at the root update. Body may be text, ordered media, or both (application validators require at least one of non-whitespace text or known image/video media; unknown open-union media variants do not satisfy content alone). Optional rich-text facets (app.bsky.richtext.facet), langs, and labels (open union; current app policy requires selfLabels). Comments are not edited through wips.social (create/delete only) — that is App View/write policy, not a Lexicon/PDS immutability guarantee. Protocol ceilings stay generous while keeping worst-case DAG-CBOR size under the explicit budget.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:sodoi37wr44i3ypdwwlqqeup/social.wips.comment)
- [Documentation](https://lexicon.garden/lexicon/did:plc:sodoi37wr44i3ypdwwlqqeup/social.wips.comment/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:sodoi37wr44i3ypdwwlqqeup/social.wips.comment/examples)

## Definitions

### `social.wips.comment`

**Type**: `record`

Native wips.social comment / reply record.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `text` | `string` | No | Optional comment body text. Required by application semantics when facets are present; at least one of non-whitespace text or known image/video media is required overall. |
| `langs` | `array` | No | Indicates human language(s) of the comment primary text content (BCP 47). |
| `media` | `array` | No | Ordered media items. May freely mix images and videos using shared social.wips.defs media objects. Same app media safety policy as updates. |
| `facets` | `array` | No | Rich-text annotations (mentions, links, tags) over text, using official app.bsky.richtext.facet. Application validators enforce UTF-8 codepoint-aligned byte ranges, per-facet feature caps, and http(s) link URIs. Ceiling keeps worst-case DAG-CBOR under the explicit record budget. |
| `labels` | `union` | No | Open union for forward compatibility. Current app authoring/validation requires com.atproto.label.defs#selfLabels when present; unknown variants are not treated as self-labels. External moderation labels stay out of the record. |
| `parent` | `ref` → `social.wips.defs#uriRef` | No | When present, AT URI of the immediate parent social.wips.comment. Omitted for top-level comments. |
| `subject` | `ref` → `social.wips.defs#uriRef` | Yes | AT URI of the root social.wips.update. |
| `createdAt` | `string` (datetime) | Yes | Client-declared timestamp when the comment was originally created. |

## Raw Schema

```json
{
  "id": "social.wips.comment",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "subject",
          "createdAt"
        ],
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 80000,
            "description": "Optional comment body text. Required by application semantics when facets are present; at least one of non-whitespace text or known image/video media is required overall.",
            "maxGraphemes": 8000
          },
          "langs": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "language"
            },
            "maxLength": 3,
            "description": "Indicates human language(s) of the comment primary text content (BCP 47)."
          },
          "media": {
            "type": "array",
            "items": {
              "refs": [
                "social.wips.defs#image",
                "social.wips.defs#video"
              ],
              "type": "union"
            },
            "maxLength": 50,
            "description": "Ordered media items. May freely mix images and videos using shared social.wips.defs media objects. Same app media safety policy as updates."
          },
          "facets": {
            "type": "array",
            "items": {
              "ref": "app.bsky.richtext.facet",
              "type": "ref"
            },
            "maxLength": 30,
            "description": "Rich-text annotations (mentions, links, tags) over text, using official app.bsky.richtext.facet. Application validators enforce UTF-8 codepoint-aligned byte ranges, per-facet feature caps, and http(s) link URIs. Ceiling keeps worst-case DAG-CBOR under the explicit record budget."
          },
          "labels": {
            "refs": [
              "com.atproto.label.defs#selfLabels"
            ],
            "type": "union",
            "description": "Open union for forward compatibility. Current app authoring/validation requires com.atproto.label.defs#selfLabels when present; unknown variants are not treated as self-labels. External moderation labels stay out of the record."
          },
          "parent": {
            "ref": "social.wips.defs#uriRef",
            "type": "ref",
            "description": "When present, AT URI of the immediate parent social.wips.comment. Omitted for top-level comments."
          },
          "subject": {
            "ref": "social.wips.defs#uriRef",
            "type": "ref",
            "description": "AT URI of the root social.wips.update."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Client-declared timestamp when the comment was originally created."
          }
        }
      },
      "description": "Native wips.social comment / reply record."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "description": "Comment on a wips.social update. Top-level comments omit parent; replies set parent to the immediate comment being answered. subject always points at the root update. Body may be text, ordered media, or both (application validators require at least one of non-whitespace text or known image/video media; unknown open-union media variants do not satisfy content alone). Optional rich-text facets (app.bsky.richtext.facet), langs, and labels (open union; current app policy requires selfLabels). Comments are not edited through wips.social (create/delete only) — that is App View/write policy, not a Lexicon/PDS immutability guarantee. Protocol ceilings stay generous while keeping worst-case DAG-CBOR size under the explicit budget."
}
```
