{
"id": "social.wips.defs",
"defs": {
"wip": {
"type": "token",
"description": "Project is actively in progress."
},
"done": {
"type": "token",
"description": "Project is marked done. It may still receive updates and can return to wip."
},
"link": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"description": "Destination URI. Clients should initially accept http:// and https:// only (enforced outside Lexicon shape)."
},
"label": {
"type": "string",
"maxLength": 2000,
"maxGraphemes": 200
}
},
"description": "Ordered generic destination link with a required URI and optional label. Application validators initially require http:// or https:// schemes."
},
"image": {
"type": "object",
"required": [
"blob"
],
"properties": {
"alt": {
"type": "string",
"maxLength": 3000,
"description": "Alt text for accessibility.",
"maxGraphemes": 1000
},
"blob": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 10000000,
"description": "Original image blob stored on the author's PDS."
},
"aspectRatio": {
"ref": "#aspectRatio",
"type": "ref"
}
},
"description": "Image media item referenced as a PDS blob. Shared by social.wips.update and social.wips.comment. accept remains broad for forward compatibility; concrete safe MIME enforcement is application policy."
},
"video": {
"type": "object",
"required": [
"blob"
],
"properties": {
"alt": {
"type": "string",
"maxLength": 3000,
"description": "Alt text for accessibility.",
"maxGraphemes": 1000
},
"blob": {
"type": "blob",
"accept": [
"video/*"
],
"maxSize": 100000000,
"description": "Original video blob stored on the author's PDS."
},
"durationMs": {
"type": "integer",
"maximum": 86400000,
"minimum": 0,
"description": "Optional media duration in milliseconds."
},
"aspectRatio": {
"ref": "#aspectRatio",
"type": "ref"
}
},
"description": "Video media item referenced as a PDS blob. Shared by social.wips.update and social.wips.comment. accept remains broad for forward compatibility; concrete safe MIME enforcement is application policy."
},
"uriRef": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri",
"maxLength": 2600
}
},
"description": "Weak reference to a record by AT URI only (not pinned to a CID), so relationships survive edits. Application validators require a full record AT URI (repo + collection + rkey) with DID authority. maxLength is a justified ceiling (~2600) for max DID (2048) + fixed short social.wips.* collection NSID + max rkey (512) + separators, not the general 8 KiB AT URI syntax limit."
},
"titledLink": {
"type": "object",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"description": "Destination URI. Clients should initially accept http:// and https:// only (enforced outside Lexicon shape)."
},
"title": {
"type": "string",
"maxLength": 1000,
"maxGraphemes": 200
}
},
"description": "Ordered user-authored link with optional title (used on updates). Application validators initially require http:// or https:// schemes."
},
"aspectRatio": {
"type": "object",
"required": [
"width",
"height"
],
"properties": {
"width": {
"type": "integer",
"minimum": 1
},
"height": {
"type": "integer",
"minimum": 1
}
},
"description": "width:height represents an aspect ratio. It may be approximate."
},
"projectStatus": {
"type": "string",
"description": "Product status for a project. Extensible known values rather than a closed enum.",
"knownValues": [
"social.wips.defs#wip",
"social.wips.defs#done"
]
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "Shared definitions for wips.social records, including project status tokens, weak URI refs, links, aspect ratio, and ordered image/video media objects reused by updates and comments."
}