From
bafyreicyonphvzvhnaaoajop2k2gspwasswgg7qte6jgclf5r5tsoa2vn4
indexed 2026-08-26 08:57 UTC
View this version
To
bafyreifhzf4nanbpwwdfwalvh7krbmpa2krvoub6zsoq54daprpksl3fhm
indexed 2026-08-26 13:09 UTC
View this version
Compatibility
breaking 3 breaking changes, 2 non-breaking changes.
Breaking changes (3)
- RemovedVertex RemovedVertex { vertex_id: "dev.roe.defs#aspectRatio" }
- RemovedEdge RemovedEdge { src: "dev.roe.ama:body.imageDimensions", tgt: "dev.roe.defs#aspectRatio", kind: "ref", name: None }
- ConstraintTightened ConstraintTightened { vertex_id: "dev.roe.ama:body.imageDimensions", sort: "ref", old_value: "dev.roe.defs#aspectRatio", new_value: "community.lexicon.app.defs#aspectRatio" }
Non-breaking changes (2)
- AddedVertex AddedVertex { vertex_id: "community.lexicon.app.defs#aspectRatio" }
- AddedEdge AddedEdge { src: "dev.roe.ama:body.imageDimensions", tgt: "community.lexicon.app.defs#aspectRatio", kind: "ref", name: None }
Migration guidance
Removed
RemovedVertex { vertex_id: "dev.roe.defs#aspectRatio" }
Added
AddedVertex { vertex_id: "community.lexicon.app.defs#aspectRatio" }
Constraint changes
- ConstraintTightened ConstraintTightened { vertex_id: "dev.roe.ama:body.imageDimensions", sort: "ref", old_value: "dev.roe.defs#aspectRatio", new_value: "community.lexicon.app.defs#aspectRatio" }
Notes
- Breaking: RemovedEdge { src: "dev.roe.ama:body.imageDimensions", tgt: "dev.roe.defs#aspectRatio", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "dev.roe.ama:body.imageDimensions", tgt: "community.lexicon.app.defs#aspectRatio", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "An anonymous question, optionally with a published answer. While unanswered the question text is encrypted server-side (private to roe.dev). Once published, the question is rewritten in plaintext alongside the answer and per-platform URLs.",66
"key": "tid",77
"record": {88
"properties": {99
"answeredAt": {1010
"format": "datetime",1111
"type": "string"1212
},1313
"backgroundStyle": {1414
"description": "ID of the background style used to render the image, either a preset name or a serialised custom emoji-and-gradient id. The set of styles is internal to roe.dev.",1515
"maxLength": 128,1616
"type": "string"1717
},1818
"createdAt": {1919
"format": "datetime",2020
"type": "string"2121
},2222
"encryptedQuestion": {2323
"description": "AES-256-GCM envelope holding the raw question text. Present iff status=unanswered.",2424
"maxLength": 500000,2525
"type": "string"2626
},2727
"image": {2828
"accept": [2929
"image/*"3030
],3131
"maxSize": 5000000,3232
"type": "blob"3333
},3434
"imageDimensions": {3535
"description": "Pixel dimensions of `image`. Stored alongside because PDS blobs don't carry intrinsic dimensions and Bluesky's image embed needs `aspectRatio`.",36
"ref": "dev.roe.defs#aspectRatio",36
"ref": "community.lexicon.app.defs#aspectRatio",3737
"type": "ref"3838
},3939
"platforms": {4040
"description": "Which platforms the editor enabled when publishing.",4141
"ref": "#platforms",4242
"type": "ref"4343
},4444
"posts": {4545
"description": "Thread of response posts. Each post is the body of one Bluesky-thread item (and one Mastodon status, one LinkedIn comment chain entry, etc).",4646
"items": {4747
"ref": "#post",4848
"type": "ref"4949
},5050
"maxLength": 16,5151
"type": "array"5252
},5353
"publishedLinks": {5454
"description": "Resolved per-platform URLs after publish.",5555
"ref": "#publishedLinks",5656
"type": "ref"5757
},5858
"question": {5959
"description": "Plaintext question. Present iff status=answered; the editor decrypts encryptedQuestion at publish time and writes it here so the record is self-contained going forward.",6060
"maxGraphemes": 50000,6161
"maxLength": 500000,6262
"type": "string"6363
},6464
"status": {6565
"knownValues": [6666
"unanswered",6767
"answered"6868
],6969
"type": "string"7070
}7171
},7272
"required": [7373
"status",7474
"createdAt"7575
],7676
"type": "object"7777
},7878
"type": "record"7979
},8080
"platforms": {8181
"properties": {8282
"bluesky": {8383
"default": true,8484
"type": "boolean"8585
},8686
"linkedin": {8787
"default": true,8888
"type": "boolean"8989
},9090
"mastodon": {9191
"default": true,9292
"type": "boolean"9393
},9494
"youtubeShorts": {9595
"default": false,9696
"type": "boolean"9797
}9898
},9999
"type": "object"100100
},101101
"post": {102102
"description": "One post in the response thread. Mentions reference dev.roe.entity records by AT URI so the publisher can rewrite per-platform handles at publish time.",103103
"properties": {104104
"mentions": {105105
"description": "Strong-refs to dev.roe.entity records. The rkey of each referenced record is the placeholder token used in `text`.",106106
"items": {107107
"ref": "com.atproto.repo.strongRef",108108
"type": "ref"109109
},110110
"maxLength": 32,111111
"type": "array"112112
},113113
"text": {114114
"description": "Body text. Plain text with `@<entity-rkey>` placeholders for entity mentions (e.g. `Thanks @abc123def456 for the help`). The placeholder syntax is internal; the publisher swaps them for the right per-platform handle.",115115
"maxGraphemes": 50000,116116
"maxLength": 500000,117117
"type": "string"118118
}119119
},120120
"required": [121121
"text"122122
],123123
"type": "object"124124
},125125
"publishedLinks": {126126
"properties": {127127
"bluesky": {128128
"format": "uri",129129
"type": "string"130130
},131131
"linkedin": {132132
"format": "uri",133133
"type": "string"134134
},135135
"mastodon": {136136
"format": "uri",137137
"type": "string"138138
},139139
"youtubeShorts": {140140
"format": "uri",141141
"type": "string"142142
}143143
},144144
"type": "object"145145
}146146
},147147
"id": "dev.roe.ama",148148
"lexicon": 1149149
}