pics.2bit.feed.photo
Schema Diff
+11 -64
Compatibility Analysis
Breaking Changes Detected
24 breaking changes, 4 non-breaking changes.
Breaking Changes (24)
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.captureMethod" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.device" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.notes" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.software" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.transferTool" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.alt" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.caption" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.capturedAt" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.gear" }
- RemovedVertex RemovedVertex { vertex_id: "pics.2bit.feed.photo:body.metadata" }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.captureMethod", kind: "prop", name: Some("captureMethod") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.device", kind: "prop", name: Some("device") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.notes", kind: "prop", name: Some("notes") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.software", kind: "prop", name: Some("software") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.transferTool", kind: "prop", name: Some("transferTool") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.alt", kind: "prop", name: Some("alt") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.caption", kind: "prop", name: Some("caption") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.capturedAt", kind: "prop", name: Some("capturedAt") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.gear", kind: "prop", name: Some("gear") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo#metadata.gear", tgt: "pics.2bit.feed.photo#gear", kind: "ref", name: None }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.metadata", kind: "prop", name: Some("metadata") }
- RemovedEdge RemovedEdge { src: "pics.2bit.feed.photo:body.metadata", tgt: "pics.2bit.feed.photo#metadata", kind: "ref", name: None }
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "pics.2bit.feed.photo:body.alt" }
- AddedVertex AddedVertex { vertex_id: "pics.2bit.feed.photo:body.caption" }
- AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.alt", kind: "prop", name: Some("alt") }
- AddedEdge AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.caption", kind: "prop", name: Some("caption") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.captureMethod" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.device" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.notes" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.software" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#gear.transferTool" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.alt" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.caption" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.capturedAt" }RemovedVertex { vertex_id: "pics.2bit.feed.photo#metadata.gear" }RemovedVertex { vertex_id: "pics.2bit.feed.photo:body.metadata" }
Added Elements
AddedVertex { vertex_id: "pics.2bit.feed.photo:body.alt" }AddedVertex { vertex_id: "pics.2bit.feed.photo:body.caption" }
Additional Notes
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.captureMethod", kind: "prop", name: Some("captureMethod") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.device", kind: "prop", name: Some("device") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.notes", kind: "prop", name: Some("notes") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.software", kind: "prop", name: Some("software") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#gear", tgt: "pics.2bit.feed.photo#gear.transferTool", kind: "prop", name: Some("transferTool") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.alt", kind: "prop", name: Some("alt") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.caption", kind: "prop", name: Some("caption") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.capturedAt", kind: "prop", name: Some("capturedAt") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata", tgt: "pics.2bit.feed.photo#metadata.gear", kind: "prop", name: Some("gear") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo#metadata.gear", tgt: "pics.2bit.feed.photo#gear", kind: "ref", name: None }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.metadata", kind: "prop", name: Some("metadata") }
- Breaking: RemovedEdge { src: "pics.2bit.feed.photo:body.metadata", tgt: "pics.2bit.feed.photo#metadata", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.alt", kind: "prop", name: Some("alt") }
- Non-breaking: AddedEdge { src: "pics.2bit.feed.photo:body", tgt: "pics.2bit.feed.photo:body.caption", kind: "prop", name: Some("caption") }
1
1
{
2
2
"id": "pics.2bit.feed.photo",
3
3
"defs": {
4
-
"gear": {
5
-
"type": "object",
6
-
"properties": {
7
-
"notes": {
8
-
"type": "string",
9
-
"maxLength": 300
10
-
},
11
-
"device": {
12
-
"type": "string",
13
-
"maxLength": 100,
14
-
"description": "e.g. 'Game Boy Camera (1998)', 'Analogue Pocket + GB Camera', 'Game Boy Pocket'"
15
-
},
16
-
"software": {
17
-
"type": "string",
18
-
"maxLength": 100,
19
-
"description": "e.g. emulator name, dithering tool/algorithm name"
20
-
},
21
-
"transferTool": {
22
-
"type": "string",
23
-
"maxLength": 100,
24
-
"description": "e.g. 'GB Camera Capture Cable', 'BennVenn cart reader'"
25
-
},
26
-
"captureMethod": {
27
-
"enum": [
28
-
"cartridge",
29
-
"emulator",
30
-
"software",
31
-
"other"
32
-
],
33
-
"type": "string"
34
-
}
35
-
},
36
-
"description": "Self-reported capture equipment/method. Optional, but encouraged - this is the whole hobby."
37
-
},
38
4
"main": {
39
5
"key": "tid",
40
6
"type": "record",
41
7
"record": {
42
8
"type": "object",
43
9
"required": [
44
10
"image",
45
11
"colors",
46
12
"createdAt"
47
13
],
48
14
"properties": {
15
+
"alt": {
16
+
"type": "string",
17
+
"maxLength": 3000,
18
+
"description": "Alt text for accessibility.",
19
+
"maxGraphemes": 300
20
+
},
49
21
"image": {
50
22
"type": "bytes",
51
23
"maxLength": 3584,
52
24
"minLength": 3584,
53
25
"description": "128x112 2bpp Game Boy Camera tile data: 16x14 tiles in row-major order, 16 bytes per tile (8 rows of low+high bit-plane bytes, MSB-first)."
54
26
},
55
27
"colors": {
56
28
"type": "array",
57
29
"items": {
58
30
"type": "integer",
59
31
"maximum": 16777215,
60
32
"minimum": 0
61
33
},
62
34
"maxLength": 4,
63
35
"minLength": 4,
64
36
"description": "Four 24-bit RGB colors (0 to 0xFFFFFF) corresponding to 2bpp pixel values 0 through 3, where 0 is lightest and 3 is darkest."
65
37
},
66
-
"metadata": {
67
-
"ref": "#metadata",
68
-
"type": "ref"
38
+
"caption": {
39
+
"type": "string",
40
+
"maxLength": 5000,
41
+
"description": "Free-text caption.",
42
+
"maxGraphemes": 500
69
43
},
70
44
"createdAt": {
71
45
"type": "string",
72
46
"format": "datetime",
73
47
"description": "When this photo record was published."
74
48
}
75
49
}
76
50
},
77
51
"description": "A single 4-shade, low-resolution photo. The core record of 2bit.pics."
78
-
},
79
-
"metadata": {
80
-
"type": "object",
81
-
"properties": {
82
-
"alt": {
83
-
"type": "string",
84
-
"maxLength": 3000,
85
-
"description": "Alt text for accessibility.",
86
-
"maxGraphemes": 300
87
-
},
88
-
"gear": {
89
-
"ref": "#gear",
90
-
"type": "ref"
91
-
},
92
-
"caption": {
93
-
"type": "string",
94
-
"maxLength": 5000,
95
-
"description": "Free-text caption.",
96
-
"maxGraphemes": 500
97
-
},
98
-
"capturedAt": {
99
-
"type": "string",
100
-
"format": "datetime",
101
-
"description": "When the photograph was captured, if known."
102
-
}
103
-
},
104
-
"description": "Optional descriptive and capture metadata for the photo."
105
52
}
106
53
},
107
54
"$type": "com.atproto.lexicon.schema",
108
55
"lexicon": 1
109
56
}