From
bafyreid4hdmilhur5ijnzvgjd5w5shr3gymgr5p57dnvktozddhtajkd5a
indexed 2026-10-08 18:10 UTC
View this version
To
bafyreihzqnt6xznl32hvsyoh7herkfdczqaojjznpjm5747kcgdu6wr73u
indexed 2026-11-05 16:25 UTC
View this version
Compatibility
breaking 21 breaking changes, 12 non-breaking changes.
Breaking changes (21)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.createSpace:input", src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.access", kind: "prop", name: Some("access") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.createSpace:output", src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.access", kind: "prop", name: Some("access") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.createSpace:output", src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.space", kind: "prop", name: Some("space") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "fyi.opensocial.createSpace:output", src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.uri", kind: "prop", name: Some("uri") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "fyi.opensocial.createSpace:input", src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.readableBy", kind: "prop", name: Some("readableBy") }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.credentialScopes" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.credentialScopes:items" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.readableBy" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.readableBy:items" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.writableBy" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.writableBy:items" }
- RemovedVertex RemovedVertex { vertex_id: "fyi.opensocial.createSpace:output.uri" }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.credentialScopes", kind: "prop", name: Some("credentialScopes") }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.writableBy", kind: "prop", name: Some("writableBy") }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.createSpace:input.credentialScopes", tgt: "fyi.opensocial.createSpace:input.credentialScopes:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.createSpace:input.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.createSpace:input.readableBy", tgt: "fyi.opensocial.createSpace:input.readableBy:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "fyi.opensocial.createSpace:input.writableBy", tgt: "fyi.opensocial.createSpace:input.writableBy:items", kind: "items", name: None }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.createSpace:input.name", sort: "maxGraphemes", value: "64" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.createSpace:input.name", sort: "maxLength", value: "640" }
Non-breaking changes (12)
- AddedVertex AddedVertex { vertex_id: "com.atproto.repo.strongRef" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.createSpace:input.access" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.createSpace:input.index" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.createSpace:output.access" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.createSpace:output.index" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.createSpace:output.space" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.defs#accessConfig" }
- AddedEdge AddedEdge { src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.index", kind: "prop", name: Some("index") }
- AddedEdge AddedEdge { src: "fyi.opensocial.createSpace:input.access", tgt: "fyi.opensocial.defs#accessConfig", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.index", kind: "prop", name: Some("index") }
- AddedEdge AddedEdge { src: "fyi.opensocial.createSpace:output.access", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.createSpace:output.index", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
Migration guidance
Removed
RemovedVertex { vertex_id: "fyi.opensocial.access#roleScopes" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.credentialScopes" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.credentialScopes:items" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.readableBy" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.readableBy:items" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.writableBy" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:input.writableBy:items" }RemovedVertex { vertex_id: "fyi.opensocial.createSpace:output.uri" }
Added
AddedVertex { vertex_id: "com.atproto.repo.strongRef" }AddedVertex { vertex_id: "fyi.opensocial.createSpace:input.access" }AddedVertex { vertex_id: "fyi.opensocial.createSpace:input.index" }AddedVertex { vertex_id: "fyi.opensocial.createSpace:output.access" }AddedVertex { vertex_id: "fyi.opensocial.createSpace:output.index" }AddedVertex { vertex_id: "fyi.opensocial.createSpace:output.space" }AddedVertex { vertex_id: "fyi.opensocial.defs#accessConfig" }
Constraint changes
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.createSpace:input.name", sort: "maxLength", value: "640" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.opensocial.createSpace:input.name", sort: "maxGraphemes", value: "64" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.createSpace:input", src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.access", kind: "prop", name: Some("access") }
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.createSpace:output", src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.access", kind: "prop", name: Some("access") }
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.createSpace:output", src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.space", kind: "prop", name: Some("space") }
- Breaking: RequiredEdgeRemoved { vertex_id: "fyi.opensocial.createSpace:input", src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.readableBy", kind: "prop", name: Some("readableBy") }
- Breaking: RequiredEdgeRemoved { vertex_id: "fyi.opensocial.createSpace:output", src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.uri", kind: "prop", name: Some("uri") }
- Breaking: RemovedEdge { src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.credentialScopes", kind: "prop", name: Some("credentialScopes") }
- Breaking: RemovedEdge { src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.writableBy", kind: "prop", name: Some("writableBy") }
- Breaking: RemovedEdge { src: "fyi.opensocial.createSpace:input.credentialScopes", tgt: "fyi.opensocial.createSpace:input.credentialScopes:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "fyi.opensocial.createSpace:input.credentialScopes:items", tgt: "fyi.opensocial.access#roleScopes", kind: "ref", name: None }
- Breaking: RemovedEdge { src: "fyi.opensocial.createSpace:input.readableBy", tgt: "fyi.opensocial.createSpace:input.readableBy:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "fyi.opensocial.createSpace:input.writableBy", tgt: "fyi.opensocial.createSpace:input.writableBy:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.createSpace:input", tgt: "fyi.opensocial.createSpace:input.index", kind: "prop", name: Some("index") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.createSpace:input.access", tgt: "fyi.opensocial.defs#accessConfig", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.createSpace:output", tgt: "fyi.opensocial.createSpace:output.index", kind: "prop", name: Some("index") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.createSpace:output.access", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.createSpace:output.index", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {5
"description": "Add a modality space to the group. Requires space.create.",5
"description": "Create a space under the group with its access record and, unless index is false, an index entry. Requires space.create.",6
"errors": [7
{8
"description": "A space with this type and skey already exists.",9
"name": "SpaceAlreadyExists"10
},11
{12
"description": "The meta and members spaces can't be created or deleted.",13
"name": "ReservedSpace"14
},15
{16
"description": "A grant names a role that doesn't exist.",17
"name": "UnknownRole"18
},19
{20
"description": "A grant isn't a space scope.",21
"name": "InvalidScope"22
}23
],624
"input": {725
"encoding": "application/json",826
"schema": {927
"properties": {10
"credentialScopes": {11
"description": "Which collections each role may write as the group DID in this space. Copied into the space's access record.",12
"items": {13
"ref": "fyi.opensocial.access#roleScopes",14
"type": "ref"15
},16
"type": "array"28
"access": {29
"ref": "fyi.opensocial.defs#accessConfig",30
"type": "ref"1731
},1832
"group": {1933
"description": "The group DID. Every method is served by the group's host and authorized against that group's roles.",2034
"format": "did",2135
"type": "string"2236
},37
"index": {38
"default": true,39
"description": "Add the space to the group's index.",40
"type": "boolean"41
},2342
"name": {43
"description": "What the group calls it, kept in its index entry.",44
"maxGraphemes": 64,45
"maxLength": 640,2446
"type": "string"2547
},26
"readableBy": {27
"items": {28
"type": "string"29
},30
"type": "array"31
},3248
"skey": {49
"description": "Omit to generate a TID.",3350
"format": "record-key",3451
"type": "string"3552
},3653
"type": {3754
"format": "nsid",3855
"type": "string"39
},40
"writableBy": {41
"description": "Who may write into the space in their own name: role ids, or 'public' for anyone signed in. Absent is any member.",42
"items": {43
"type": "string"44
},45
"type": "array"4656
}4757
},4858
"required": [4959
"group",5060
"type",51
"readableBy"61
"access"5262
],5363
"type": "object"5464
}5565
},5666
"output": {5767
"encoding": "application/json",5868
"schema": {5969
"properties": {60
"uri": {70
"access": {71
"ref": "com.atproto.repo.strongRef",72
"type": "ref"73
},74
"index": {75
"description": "Present when the space was indexed.",76
"ref": "com.atproto.repo.strongRef",77
"type": "ref"78
},79
"space": {6180
"format": "space-ref",6281
"type": "string"6382
}6483
},6584
"required": [66
"uri"85
"space",86
"access"6787
],6888
"type": "object"6989
}7090
},7191
"type": "procedure"7292
}7393
},7494
"id": "fyi.opensocial.createSpace",7595
"lexicon": 17696
}