# social.wips.update

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

✓ This is the authoritative definition for this NSID.

## Description

A project update with optional text, ordered mixed media, ordered links, and optional rich-text facets. Application validators require at least one of non-empty text, known image/video media, or links (media union stays open; unknown variants alone do not satisfy content). Optional allowComments defaults to true when omitted (enforced by application/comment semantics). Protocol ceilings are generous and non-product-shaped while keeping worst-case DAG-CBOR size under the explicit record budget.

## Links

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

## Definitions

### `social.wips.update`

**Type**: `record`

Update posted to one project. project.uri is a weak AT URI ref so it survives project edits.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `text` | `string` | No | Optional caption / body text. Required by application semantics when facets are present. |
| `links` | `array` | No | Ordered user-authored links. App View may derive previews separately. Protocol ceiling is generous; operational UI limits belong in the app. |
| `media` | `array` | No | Ordered media items. May freely mix images and videos using shared social.wips.defs media objects. Operational upload limits and safe MIME policy belong in the app, not as tiny product-shaped protocol caps. |
| `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 is sized so max text + 50 media + 50 links + max facets stay under the explicit DAG-CBOR record budget. |
| `project` | `ref` → `social.wips.defs#uriRef` | Yes | Stable AT URI of the social.wips.project record this update belongs to. |
| `createdAt` | `string` (datetime) | Yes | Client-declared timestamp when the update was originally created. |
| `allowComments` | `boolean` | No | When false, wips.social application/comment semantics reject new comments on this update. Omitted means true. Not a PDS-enforced lock. |

## Raw Schema

```json
{
  "id": "social.wips.update",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "project",
          "createdAt"
        ],
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 80000,
            "description": "Optional caption / body text. Required by application semantics when facets are present.",
            "maxGraphemes": 8000
          },
          "links": {
            "type": "array",
            "items": {
              "ref": "social.wips.defs#titledLink",
              "type": "ref"
            },
            "maxLength": 50,
            "description": "Ordered user-authored links. App View may derive previews separately. Protocol ceiling is generous; operational UI limits belong in the app."
          },
          "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. Operational upload limits and safe MIME policy belong in the app, not as tiny product-shaped protocol caps."
          },
          "facets": {
            "type": "array",
            "items": {
              "ref": "app.bsky.richtext.facet",
              "type": "ref"
            },
            "maxLength": 20,
            "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 is sized so max text + 50 media + 50 links + max facets stay under the explicit DAG-CBOR record budget."
          },
          "project": {
            "ref": "social.wips.defs#uriRef",
            "type": "ref",
            "description": "Stable AT URI of the social.wips.project record this update belongs to."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Client-declared timestamp when the update was originally created."
          },
          "allowComments": {
            "type": "boolean",
            "description": "When false, wips.social application/comment semantics reject new comments on this update. Omitted means true. Not a PDS-enforced lock."
          }
        }
      },
      "description": "Update posted to one project. project.uri is a weak AT URI ref so it survives project edits."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "description": "A project update with optional text, ordered mixed media, ordered links, and optional rich-text facets. Application validators require at least one of non-empty text, known image/video media, or links (media union stays open; unknown variants alone do not satisfy content). Optional allowComments defaults to true when omitted (enforced by application/comment semantics). Protocol ceilings are generous and non-product-shaped while keeping worst-case DAG-CBOR size under the explicit record budget."
}
```
