blue.atroom.room.layout

atroom.blue

Schema Diff

+147 -40

From

CID
bafyreihouv4a25l...
Indexed At
2026-03-19 20:25 UTC
View this version

To

CID
bafyreiahskndzny...
Indexed At
2026-03-30 04:54 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

27 breaking changes, 57 non-breaking changes.

Breaking Changes (27)
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.createdAt" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.model" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.name" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs:items" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs:items.lang" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs:items.value" }
  • RemovedVertex RemovedVertex { vertex_id: "blue.atroom.room.object:body.scale" }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object", tgt: "blue.atroom.room.object:body", kind: "record-schema", name: None }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.createdAt", kind: "prop", name: Some("createdAt") }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.model", kind: "prop", name: Some("model") }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.name", kind: "prop", name: Some("name") }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.nameLangs", kind: "prop", name: Some("nameLangs") }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.scale", kind: "prop", name: Some("scale") }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body.nameLangs", tgt: "blue.atroom.room.object:body.nameLangs:items", kind: "items", name: None }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body.nameLangs:items", tgt: "blue.atroom.room.object:body.nameLangs:items.lang", kind: "prop", name: Some("lang") }
  • RemovedEdge RemovedEdge { src: "blue.atroom.room.object:body.nameLangs:items", tgt: "blue.atroom.room.object:body.nameLangs:items.value", kind: "prop", name: Some("value") }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.green", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.green", sort: "maximum", value: "255" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.red", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.red", sort: "maximum", value: "255" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.blue", sort: "maximum", value: "255" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.blue", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout:body.size", sort: "minimum", value: "1000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout:body.size", sort: "maximum", value: "20000" }
Non-Breaking Changes (57)
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#color" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#color.blue" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#color.green" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#color.red" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#floor" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#floor.surface" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.object" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.position" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.position:items" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.rotation" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.rotation:items" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#surface" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#surface.color" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#surface.texture" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#surface.textureTiling" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#surface.textureTiling:items" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#wall" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#wall.height" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#wall.surface" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout#wall.thickness" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body.createdAt" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body.floor" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body.furnishings" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body.furnishings:items" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body.size" }
  • AddedVertex AddedVertex { vertex_id: "blue.atroom.room.layout:body.wall" }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout", tgt: "blue.atroom.room.layout:body", kind: "record-schema", name: None }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#color", tgt: "blue.atroom.room.layout#color.blue", kind: "prop", name: Some("blue") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#color", tgt: "blue.atroom.room.layout#color.green", kind: "prop", name: Some("green") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#color", tgt: "blue.atroom.room.layout#color.red", kind: "prop", name: Some("red") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#floor", tgt: "blue.atroom.room.layout#floor.surface", kind: "prop", name: Some("surface") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#furnishing", tgt: "blue.atroom.room.layout#furnishing.object", kind: "prop", name: Some("object") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#furnishing", tgt: "blue.atroom.room.layout#furnishing.position", kind: "prop", name: Some("position") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#furnishing", tgt: "blue.atroom.room.layout#furnishing.rotation", kind: "prop", name: Some("rotation") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#furnishing.position", tgt: "blue.atroom.room.layout#furnishing.position:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#furnishing.rotation", tgt: "blue.atroom.room.layout#furnishing.rotation:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#surface", tgt: "blue.atroom.room.layout#surface.color", kind: "prop", name: Some("color") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#surface", tgt: "blue.atroom.room.layout#surface.texture", kind: "prop", name: Some("texture") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#surface", tgt: "blue.atroom.room.layout#surface.textureTiling", kind: "prop", name: Some("textureTiling") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#surface.textureTiling", tgt: "blue.atroom.room.layout#surface.textureTiling:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#wall", tgt: "blue.atroom.room.layout#wall.height", kind: "prop", name: Some("height") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#wall", tgt: "blue.atroom.room.layout#wall.surface", kind: "prop", name: Some("surface") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout#wall", tgt: "blue.atroom.room.layout#wall.thickness", kind: "prop", name: Some("thickness") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.createdAt", kind: "prop", name: Some("createdAt") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.floor", kind: "prop", name: Some("floor") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.furnishings", kind: "prop", name: Some("furnishings") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.size", kind: "prop", name: Some("size") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.wall", kind: "prop", name: Some("wall") }
  • AddedEdge AddedEdge { src: "blue.atroom.room.layout:body.furnishings", tgt: "blue.atroom.room.layout:body.furnishings:items", kind: "items", name: None }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.name", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.nameLangs:items.lang", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.scale", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.scale", sort: "maximum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.nameLangs:items.value", sort: "maxLength" }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "blue.atroom.room.object" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.createdAt" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.model" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.name" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs:items" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs:items.lang" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.nameLangs:items.value" }
  • RemovedVertex { vertex_id: "blue.atroom.room.object:body.scale" }

Added Elements

  • AddedVertex { vertex_id: "blue.atroom.room.layout" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#color" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#color.blue" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#color.green" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#color.red" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#floor" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#floor.surface" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.object" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.position" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.position:items" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.rotation" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#furnishing.rotation:items" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#surface" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#surface.color" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#surface.texture" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#surface.textureTiling" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#surface.textureTiling:items" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#wall" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#wall.height" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#wall.surface" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout#wall.thickness" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body.createdAt" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body.floor" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body.furnishings" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body.furnishings:items" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body.size" }
  • AddedVertex { vertex_id: "blue.atroom.room.layout:body.wall" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.red", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.red", sort: "maximum", value: "255" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout:body.size", sort: "maximum", value: "20000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout:body.size", sort: "minimum", value: "1000" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.blue", sort: "maximum", value: "255" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.blue", sort: "minimum", value: "0" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.green", sort: "maximum", value: "255" }
  • ConstraintAdded ConstraintAdded { vertex_id: "blue.atroom.room.layout#color.green", sort: "minimum", value: "0" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.nameLangs:items.lang", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.scale", sort: "maximum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.scale", sort: "minimum" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.name", sort: "maxLength" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "blue.atroom.room.object:body.nameLangs:items.value", sort: "maxLength" }

Additional Notes

  • Breaking: RemovedEdge { src: "blue.atroom.room.object", tgt: "blue.atroom.room.object:body", kind: "record-schema", name: None }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.createdAt", kind: "prop", name: Some("createdAt") }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.model", kind: "prop", name: Some("model") }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.name", kind: "prop", name: Some("name") }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.nameLangs", kind: "prop", name: Some("nameLangs") }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body", tgt: "blue.atroom.room.object:body.scale", kind: "prop", name: Some("scale") }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body.nameLangs", tgt: "blue.atroom.room.object:body.nameLangs:items", kind: "items", name: None }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body.nameLangs:items", tgt: "blue.atroom.room.object:body.nameLangs:items.lang", kind: "prop", name: Some("lang") }
  • Breaking: RemovedEdge { src: "blue.atroom.room.object:body.nameLangs:items", tgt: "blue.atroom.room.object:body.nameLangs:items.value", kind: "prop", name: Some("value") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout", tgt: "blue.atroom.room.layout:body", kind: "record-schema", name: None }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#color", tgt: "blue.atroom.room.layout#color.blue", kind: "prop", name: Some("blue") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#color", tgt: "blue.atroom.room.layout#color.green", kind: "prop", name: Some("green") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#color", tgt: "blue.atroom.room.layout#color.red", kind: "prop", name: Some("red") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#floor", tgt: "blue.atroom.room.layout#floor.surface", kind: "prop", name: Some("surface") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#furnishing", tgt: "blue.atroom.room.layout#furnishing.object", kind: "prop", name: Some("object") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#furnishing", tgt: "blue.atroom.room.layout#furnishing.position", kind: "prop", name: Some("position") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#furnishing", tgt: "blue.atroom.room.layout#furnishing.rotation", kind: "prop", name: Some("rotation") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#furnishing.position", tgt: "blue.atroom.room.layout#furnishing.position:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#furnishing.rotation", tgt: "blue.atroom.room.layout#furnishing.rotation:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#surface", tgt: "blue.atroom.room.layout#surface.color", kind: "prop", name: Some("color") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#surface", tgt: "blue.atroom.room.layout#surface.texture", kind: "prop", name: Some("texture") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#surface", tgt: "blue.atroom.room.layout#surface.textureTiling", kind: "prop", name: Some("textureTiling") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#surface.textureTiling", tgt: "blue.atroom.room.layout#surface.textureTiling:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#wall", tgt: "blue.atroom.room.layout#wall.height", kind: "prop", name: Some("height") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#wall", tgt: "blue.atroom.room.layout#wall.surface", kind: "prop", name: Some("surface") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout#wall", tgt: "blue.atroom.room.layout#wall.thickness", kind: "prop", name: Some("thickness") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.createdAt", kind: "prop", name: Some("createdAt") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.floor", kind: "prop", name: Some("floor") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.furnishings", kind: "prop", name: Some("furnishings") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.size", kind: "prop", name: Some("size") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout:body", tgt: "blue.atroom.room.layout:body.wall", kind: "prop", name: Some("wall") }
  • Non-breaking: AddedEdge { src: "blue.atroom.room.layout:body.furnishings", tgt: "blue.atroom.room.layout:body.furnishings:items", kind: "items", name: None }
1 1
{
2 -
  "id": "blue.atroom.room.object",
2 +
  "id": "blue.atroom.room.layout",
3 3
  "defs": {
4 4
    "main": {
5 -
      "key": "tid",
5 +
      "key": "any",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 -
          "name",
11 -
          "model",
12 -
          "scale",
10 +
          "size",
11 +
          "floor",
12 +
          "wall",
13 +
          "furnishings",
13 14
          "createdAt"
14 15
        ],
15 16
        "properties": {
16 -
          "name": {
17 -
            "type": "string",
18 -
            "maxLength": 100,
19 -
            "description": "Display name of the object."
17 +
          "size": {
18 +
            "type": "integer",
19 +
            "maximum": 20000,
20 +
            "minimum": 1000,
21 +
            "description": "Room size in millimeters (square room)."
20 22
          },
21 -
          "model": {
22 -
            "type": "blob",
23 -
            "accept": [
24 -
              "model/gltf-binary"
25 -
            ],
26 -
            "maxSize": 10485760,
27 -
            "description": "GLB (glTF Binary) model file."
23 +
          "wall": {
24 +
            "ref": "#wall",
25 +
            "type": "ref"
28 26
          },
29 -
          "scale": {
30 -
            "type": "integer",
31 -
            "maximum": 1000,
32 -
            "minimum": 1,
33 -
            "description": "Scale factor in percent (100 = 1.0x)."
27 +
          "floor": {
28 +
            "ref": "#floor",
29 +
            "type": "ref"
34 30
          },
35 31
          "createdAt": {
36 32
            "type": "string",
37 33
            "format": "datetime"
38 34
          },
39 -
          "nameLangs": {
35 +
          "furnishings": {
40 36
            "type": "array",
41 37
            "items": {
42 -
              "type": "object",
43 -
              "required": [
44 -
                "lang",
45 -
                "value"
46 -
              ],
47 -
              "properties": {
48 -
                "lang": {
49 -
                  "type": "string",
50 -
                  "maxLength": 16,
51 -
                  "description": "BCP-47 language tag."
52 -
                },
53 -
                "value": {
54 -
                  "type": "string",
55 -
                  "maxLength": 100
56 -
                }
57 -
              }
38 +
              "ref": "#furnishing",
39 +
              "type": "ref"
58 40
            },
59 -
            "description": "Localized display names."
41 +
            "maxLength": 100
60 42
          }
61 43
        }
62 44
      },
63 -
      "description": "A 3D object that can be placed in a room."
45 +
      "description": "A room layout with placed objects."
46 +
    },
47 +
    "wall": {
48 +
      "type": "object",
49 +
      "required": [
50 +
        "height",
51 +
        "thickness",
52 +
        "surface"
53 +
      ],
54 +
      "properties": {
55 +
        "height": {
56 +
          "type": "integer",
57 +
          "description": "Wall height in millimeters."
58 +
        },
59 +
        "surface": {
60 +
          "ref": "#surface",
61 +
          "type": "ref"
62 +
        },
63 +
        "thickness": {
64 +
          "type": "integer",
65 +
          "description": "Wall thickness in millimeters."
66 +
        }
67 +
      },
68 +
      "description": "Wall configuration."
69 +
    },
70 +
    "color": {
71 +
      "type": "object",
72 +
      "required": [
73 +
        "red",
74 +
        "green",
75 +
        "blue"
76 +
      ],
77 +
      "properties": {
78 +
        "red": {
79 +
          "type": "integer",
80 +
          "maximum": 255,
81 +
          "minimum": 0
82 +
        },
83 +
        "blue": {
84 +
          "type": "integer",
85 +
          "maximum": 255,
86 +
          "minimum": 0
87 +
        },
88 +
        "green": {
89 +
          "type": "integer",
90 +
          "maximum": 255,
91 +
          "minimum": 0
92 +
        }
93 +
      },
94 +
      "description": "RGB color with 8-bit channels."
95 +
    },
96 +
    "floor": {
97 +
      "type": "object",
98 +
      "required": [
99 +
        "surface"
100 +
      ],
101 +
      "properties": {
102 +
        "surface": {
103 +
          "ref": "#surface",
104 +
          "type": "ref"
105 +
        }
106 +
      }
107 +
    },
108 +
    "surface": {
109 +
      "type": "object",
110 +
      "required": [
111 +
        "color"
112 +
      ],
113 +
      "properties": {
114 +
        "color": {
115 +
          "ref": "#color",
116 +
          "type": "ref"
117 +
        },
118 +
        "texture": {
119 +
          "type": "blob",
120 +
          "accept": [
121 +
            "image/png",
122 +
            "image/jpeg"
123 +
          ],
124 +
          "maxSize": 1048576,
125 +
          "description": "Texture image."
126 +
        },
127 +
        "textureTiling": {
128 +
          "type": "array",
129 +
          "items": {
130 +
            "type": "integer"
131 +
          },
132 +
          "maxLength": 2,
133 +
          "minLength": 2,
134 +
          "description": "Texture tiling [u, v]."
135 +
        }
136 +
      }
137 +
    },
138 +
    "furnishing": {
139 +
      "type": "object",
140 +
      "required": [
141 +
        "object",
142 +
        "position",
143 +
        "rotation"
144 +
      ],
145 +
      "properties": {
146 +
        "object": {
147 +
          "ref": "com.atproto.repo.strongRef",
148 +
          "type": "ref",
149 +
          "description": "Strong reference to a blue.atroom.room.object record."
150 +
        },
151 +
        "position": {
152 +
          "type": "array",
153 +
          "items": {
154 +
            "type": "integer"
155 +
          },
156 +
          "maxLength": 3,
157 +
          "minLength": 3,
158 +
          "description": "Position [x, y, z] in millimeters."
159 +
        },
160 +
        "rotation": {
161 +
          "type": "array",
162 +
          "items": {
163 +
            "type": "integer"
164 +
          },
165 +
          "maxLength": 3,
166 +
          "minLength": 3,
167 +
          "description": "Euler rotation [x, y, z] in degrees."
168 +
        }
169 +
      },
170 +
      "description": "A placed object in the room."
64 171
    }
65 172
  },
66 173
  "$type": "com.atproto.lexicon.schema",
67 174
  "lexicon": 1
68 175
}

Compare Other Versions

Lexicon Garden

@