com.pimstash.carcare.vehicle
Schema Diff
+71 -3
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 24 non-breaking changes.
Breaking Changes (3)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.pimstash.carcare.vehicle:body", src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.odometerMeters", kind: "prop", name: Some("odometerMeters") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.pimstash.carcare.vehicle#link", src: "com.pimstash.carcare.vehicle#link", tgt: "com.pimstash.carcare.vehicle#link.url", kind: "prop", name: Some("url") }
- ConstraintAdded ConstraintAdded { vertex_id: "com.pimstash.carcare.vehicle:body.name", sort: "minLength", value: "1" }
Non-Breaking Changes (24)
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle#link" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle#link.label" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle#link.url" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.cover" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.engine" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.links" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.links:items" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.notes" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.odometerAt" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.odometerMeters" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.updatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.vin" }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle#link", tgt: "com.pimstash.carcare.vehicle#link.label", kind: "prop", name: Some("label") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.cover", kind: "prop", name: Some("cover") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.engine", kind: "prop", name: Some("engine") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.links", kind: "prop", name: Some("links") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.notes", kind: "prop", name: Some("notes") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.odometerAt", kind: "prop", name: Some("odometerAt") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.vin", kind: "prop", name: Some("vin") }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body.links", tgt: "com.pimstash.carcare.vehicle:body.links:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.pimstash.carcare.vehicle:body.links:items", tgt: "com.pimstash.carcare.vehicle#link", kind: "ref", name: None }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "com.pimstash.carcare.vehicle:body.year", sort: "maximum", old_value: "3000", new_value: "9999" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "com.pimstash.carcare.vehicle:body.year", sort: "minimum", old_value: "1886", new_value: "1" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.pimstash.carcare.vehicle#link" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle#link.label" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle#link.url" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.cover" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.engine" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.links" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.links:items" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.notes" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.odometerAt" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.odometerMeters" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.updatedAt" }AddedVertex { vertex_id: "com.pimstash.carcare.vehicle:body.vin" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "com.pimstash.carcare.vehicle:body.name", sort: "minLength", value: "1" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "com.pimstash.carcare.vehicle:body.year", sort: "minimum", old_value: "1886", new_value: "1" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "com.pimstash.carcare.vehicle:body.year", sort: "maximum", old_value: "3000", new_value: "9999" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.pimstash.carcare.vehicle#link", src: "com.pimstash.carcare.vehicle#link", tgt: "com.pimstash.carcare.vehicle#link.url", kind: "prop", name: Some("url") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.pimstash.carcare.vehicle:body", src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.odometerMeters", kind: "prop", name: Some("odometerMeters") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle#link", tgt: "com.pimstash.carcare.vehicle#link.label", kind: "prop", name: Some("label") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.cover", kind: "prop", name: Some("cover") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.engine", kind: "prop", name: Some("engine") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.links", kind: "prop", name: Some("links") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.notes", kind: "prop", name: Some("notes") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.odometerAt", kind: "prop", name: Some("odometerAt") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body", tgt: "com.pimstash.carcare.vehicle:body.vin", kind: "prop", name: Some("vin") }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body.links", tgt: "com.pimstash.carcare.vehicle:body.links:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.pimstash.carcare.vehicle:body.links:items", tgt: "com.pimstash.carcare.vehicle#link", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"link": {
5
+
"description": "A labelled link: a manual, a parts page, a forum thread.",
6
+
"properties": {
7
+
"label": {
8
+
"maxGraphemes": 100,
9
+
"maxLength": 1000,
10
+
"type": "string"
11
+
},
12
+
"url": {
13
+
"format": "uri",
14
+
"maxLength": 3000,
15
+
"type": "string"
16
+
}
17
+
},
18
+
"required": [
19
+
"url"
20
+
],
21
+
"type": "object"
22
+
},
4
23
"main": {
24
+
"description": "A Vehicle in Car Care: one car, truck or bike whose maintenance is tracked. Its Service Items reference it by at-uri.",
5
25
"key": "any",
6
26
"record": {
7
27
"properties": {
28
+
"cover": {
29
+
"accept": [
30
+
"image/jpeg",
31
+
"image/webp",
32
+
"image/avif"
33
+
],
34
+
"maxSize": 1000000,
35
+
"type": "blob"
36
+
},
8
37
"createdAt": {
9
38
"format": "datetime",
10
39
"type": "string"
11
40
},
41
+
"engine": {
42
+
"maxGraphemes": 100,
43
+
"maxLength": 1000,
44
+
"type": "string"
45
+
},
46
+
"links": {
47
+
"items": {
48
+
"ref": "#link",
49
+
"type": "ref"
50
+
},
51
+
"maxLength": 100,
52
+
"type": "array"
53
+
},
12
54
"make": {
13
55
"maxGraphemes": 100,
14
56
"maxLength": 1000,
15
57
"type": "string"
16
58
},
17
59
"model": {
18
60
"maxGraphemes": 100,
19
61
"maxLength": 1000,
20
62
"type": "string"
21
63
},
22
64
"name": {
23
65
"maxGraphemes": 100,
24
66
"maxLength": 1000,
67
+
"minLength": 1,
25
68
"type": "string"
26
69
},
70
+
"notes": {
71
+
"maxGraphemes": 1000,
72
+
"maxLength": 10000,
73
+
"type": "string"
74
+
},
75
+
"odometerAt": {
76
+
"description": "The calendar date of the reading, as a datetime at UTC midnight read in UTC.",
77
+
"format": "datetime",
78
+
"type": "string"
79
+
},
80
+
"odometerMeters": {
81
+
"description": "Latest odometer reading, in whole meters.",
82
+
"minimum": 0,
83
+
"type": "integer"
84
+
},
85
+
"updatedAt": {
86
+
"format": "datetime",
87
+
"type": "string"
88
+
},
89
+
"vin": {
90
+
"description": "Vehicle identification number. The Car Care App keeps it on the device and never writes it here; a reader should expect it absent.",
91
+
"maxGraphemes": 100,
92
+
"maxLength": 1000,
93
+
"type": "string"
94
+
},
27
95
"year": {
28
-
"maximum": 3000,
29
-
"minimum": 1886,
96
+
"maximum": 9999,
97
+
"minimum": 1,
30
98
"type": "integer"
31
99
}
32
100
},
33
101
"required": [
34
102
"name",
103
+
"odometerMeters",
35
104
"createdAt"
36
105
],
37
106
"type": "object"
38
107
},
39
108
"type": "record"
40
109
}
41
110
},
42
-
"description": "DRAFT (spike, 2026-10-15). A Vehicle in a Car Care garage. Shape will change before launch.",
43
111
"id": "com.pimstash.carcare.vehicle",
44
112
"lexicon": 1
45
113
}