From
bafyreibfewerefrwewxyracwtjo7iohbxulwx4cigitgskqnfmjp5imti4
indexed 2026-10-08 18:10 UTC
View this version
To
bafyreidigyuyubfxgyuqjhlpx63djdv25ycklmp3ofb7xa24rb4yjftsoi
indexed 2026-11-05 16:25 UTC
View this version
Compatibility
breaking 16 breaking changes, 6 non-breaking changes.
Breaking changes (16)
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.credentialScopes" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.credentialScopes:items" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.readableBy" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.readableBy:items" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.writableBy" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.writableBy:items" }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.credentialScopes", kind: "prop", name: Some("credentialScopes") }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.readableBy", kind: "prop", name: Some("readableBy") }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.writableBy", kind: "prop", name: Some("writableBy") }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input.credentialScopes", tgt: "fyi.opensocial.updateSpace:input.credentialScopes:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input.readableBy", tgt: "fyi.opensocial.updateSpace:input.readableBy:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.updateSpace:input.writableBy", tgt: "fyi.opensocial.updateSpace:input.writableBy:items", kind: "items", name: None }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.updateSpace:input.name", sort: "maxGraphemes", value: "64" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.updateSpace:input.name", sort: "maxLength", value: "640" }
Non-breaking changes (6)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#accessConfig" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.updateSpace:input.access" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.updateSpace:output" }
- AddedEdge AddedEdge { src: "fyi.opensocial.updateSpace", tgt: "fyi.opensocial.updateSpace:output", kind: "prop", name: Some("output") }
- AddedEdge AddedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.access", kind: "prop", name: Some("access") }
- AddedEdge AddedEdge { src: "fyi.opensocial.updateSpace:input.access", tgt: "fyi.opensocial.defs#accessConfig", kind: "ref", name: None }
Migration guidance
Removed
RemovedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.credentialScopes" }RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.credentialScopes:items" }RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.readableBy" }RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.readableBy:items" }RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.writableBy" }RemovedVertex { vertex_id: "fyi.opensocial.updateSpace:input.writableBy:items" }
Added
AddedVertex { vertex_id: "fyi.opensocial.defs#accessConfig" }AddedVertex { vertex_id: "fyi.opensocial.updateSpace:input.access" }AddedVertex { vertex_id: "fyi.opensocial.updateSpace:output" }
Constraint changes
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.updateSpace:input.name", sort: "maxLength", value: "640" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.updateSpace:input.name", sort: "maxGraphemes", value: "64" }
Notes
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.credentialScopes", kind: "prop", name: Some("credentialScopes") }
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.readableBy", kind: "prop", name: Some("readableBy") }
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.writableBy", kind: "prop", name: Some("writableBy") }
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input.credentialScopes", tgt: "fyi.opensocial.updateSpace:input.credentialScopes:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input.readableBy", tgt: "fyi.opensocial.updateSpace:input.readableBy:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "fyi.opensocial.updateSpace:input.writableBy", tgt: "fyi.opensocial.updateSpace:input.writableBy:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.updateSpace", tgt: "fyi.opensocial.updateSpace:output", kind: "prop", name: Some("output") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.updateSpace:input", tgt: "fyi.opensocial.updateSpace:input.access", kind: "prop", name: Some("access") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.updateSpace:input.access", tgt: "fyi.opensocial.defs#accessConfig", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {5
"description": "Change a space's config: its name, who can read it, and which roles may act as the group in it. Requires space.configure.",5
"description": "Change a space: its name in the group's index, and its access record, replaced whole. Requires space.configure.",6
"errors": [7
{8
"description": "The group has no such space, or, to name it, none in its index.",9
"name": "SpaceNotFound"10
},11
{12
"description": "A grant names a role that doesn't exist.",13
"name": "UnknownRole"14
},15
{16
"description": "A grant isn't a space scope.",17
"name": "InvalidScope"18
}19
],620
"input": {721
"encoding": "application/json",822
"schema": {923
"properties": {10
"credentialScopes": {11
"description": "Replace which roles may act as the group in this space, and for which collections. Omitted means unchanged.",12
"items": {13
"ref": "fyi.opensocial.access#roleScopes",14
"type": "ref"15
},16
"type": "array"24
"access": {25
"description": "The access record the space has now. Omitted means unchanged.",26
"ref": "fyi.opensocial.defs#accessConfig",27
"type": "ref"1728
},1829
"group": {1930
"description": "The group DID. Every method is served by the group's host and authorized against that group's roles.",2031
"format": "did",2132
"type": "string"2233
},2334
"name": {35
"description": "What the group calls it, kept in its index entry.",36
"maxGraphemes": 64,37
"maxLength": 640,2438
"type": "string"2539
},26
"readableBy": {27
"items": {28
"type": "string"29
},30
"type": "array"31
},3240
"space": {3341
"format": "space-ref",3442
"type": "string"35
},36
"writableBy": {37
"description": "Who may write into the space in their own name: role ids, or 'public' for anyone signed in. Absent is any member. Empty puts it back to any member.",38
"items": {39
"type": "string"40
},41
"type": "array"4243
}4344
},4445
"required": [4546
"group",4647
"space"4748
],4849
"type": "object"4950
}5051
},52
"output": {53
"encoding": "application/json",54
"schema": {55
"properties": {},56
"type": "object"57
}58
},5159
"type": "procedure"5260
}5361
},5462
"id": "fyi.opensocial.updateSpace",5563
"lexicon": 15664
}