io.kich.recipe.defs
Schema Diff
+106 -0
Compatibility Analysis
Breaking Changes Detected
9 breaking changes, 34 non-breaking changes.
Breaking Changes (9)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.url", kind: "prop", name: Some("url") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.id", kind: "prop", name: Some("id") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.name", kind: "prop", name: Some("name") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.completenessPercent", kind: "prop", name: Some("completenessPercent") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.servings", kind: "prop", name: Some("servings") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#tagRef", src: "io.kich.recipe.defs#tagRef", tgt: "io.kich.recipe.defs#tagRef.name", kind: "prop", name: Some("name") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#tagRef", src: "io.kich.recipe.defs#tagRef", tgt: "io.kich.recipe.defs#tagRef.id", kind: "prop", name: Some("id") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#collectionRef", src: "io.kich.recipe.defs#collectionRef", tgt: "io.kich.recipe.defs#collectionRef.name", kind: "prop", name: Some("name") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#collectionRef", src: "io.kich.recipe.defs#collectionRef", tgt: "io.kich.recipe.defs#collectionRef.id", kind: "prop", name: Some("id") }
Non-Breaking Changes (34)
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#collectionRef" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#collectionRef.id" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#collectionRef.name" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.collections" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.collections:items" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.completenessPercent" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.cookTimeMinutes" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.description" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.id" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.imageUrl" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.missingCount" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.name" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.prepTimeMinutes" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.servings" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.tags" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.tags:items" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.updatedAt" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.url" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#tagRef" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#tagRef.id" }
- AddedVertex AddedVertex { vertex_id: "io.kich.recipe.defs#tagRef.name" }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.collections", kind: "prop", name: Some("collections") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.cookTimeMinutes", kind: "prop", name: Some("cookTimeMinutes") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.description", kind: "prop", name: Some("description") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.imageUrl", kind: "prop", name: Some("imageUrl") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.missingCount", kind: "prop", name: Some("missingCount") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.prepTimeMinutes", kind: "prop", name: Some("prepTimeMinutes") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.tags", kind: "prop", name: Some("tags") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.updatedAt", kind: "prop", name: Some("updatedAt") }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView.collections", tgt: "io.kich.recipe.defs#recipeView.collections:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView.collections:items", tgt: "io.kich.recipe.defs#collectionRef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView.tags", tgt: "io.kich.recipe.defs#recipeView.tags:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "io.kich.recipe.defs#recipeView.tags:items", tgt: "io.kich.recipe.defs#tagRef", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "io.kich.recipe.defs#collectionRef" }AddedVertex { vertex_id: "io.kich.recipe.defs#collectionRef.id" }AddedVertex { vertex_id: "io.kich.recipe.defs#collectionRef.name" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.collections" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.collections:items" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.completenessPercent" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.cookTimeMinutes" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.description" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.id" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.imageUrl" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.missingCount" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.name" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.prepTimeMinutes" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.servings" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.tags" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.tags:items" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.updatedAt" }AddedVertex { vertex_id: "io.kich.recipe.defs#recipeView.url" }AddedVertex { vertex_id: "io.kich.recipe.defs#tagRef" }AddedVertex { vertex_id: "io.kich.recipe.defs#tagRef.id" }AddedVertex { vertex_id: "io.kich.recipe.defs#tagRef.name" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.url", kind: "prop", name: Some("url") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.name", kind: "prop", name: Some("name") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.completenessPercent", kind: "prop", name: Some("completenessPercent") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#recipeView", src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.servings", kind: "prop", name: Some("servings") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#tagRef", src: "io.kich.recipe.defs#tagRef", tgt: "io.kich.recipe.defs#tagRef.name", kind: "prop", name: Some("name") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#tagRef", src: "io.kich.recipe.defs#tagRef", tgt: "io.kich.recipe.defs#tagRef.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#collectionRef", src: "io.kich.recipe.defs#collectionRef", tgt: "io.kich.recipe.defs#collectionRef.name", kind: "prop", name: Some("name") }
- Breaking: RequiredEdgeAdded { vertex_id: "io.kich.recipe.defs#collectionRef", src: "io.kich.recipe.defs#collectionRef", tgt: "io.kich.recipe.defs#collectionRef.id", kind: "prop", name: Some("id") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.collections", kind: "prop", name: Some("collections") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.cookTimeMinutes", kind: "prop", name: Some("cookTimeMinutes") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.description", kind: "prop", name: Some("description") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.imageUrl", kind: "prop", name: Some("imageUrl") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.missingCount", kind: "prop", name: Some("missingCount") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.prepTimeMinutes", kind: "prop", name: Some("prepTimeMinutes") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.tags", kind: "prop", name: Some("tags") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView", tgt: "io.kich.recipe.defs#recipeView.updatedAt", kind: "prop", name: Some("updatedAt") }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView.collections", tgt: "io.kich.recipe.defs#recipeView.collections:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView.collections:items", tgt: "io.kich.recipe.defs#collectionRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView.tags", tgt: "io.kich.recipe.defs#recipeView.tags:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "io.kich.recipe.defs#recipeView.tags:items", tgt: "io.kich.recipe.defs#tagRef", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"collectionRef": {
5
+
"description": "A collection this recipe belongs to, by id and display name.",
6
+
"properties": {
7
+
"id": {
8
+
"type": "string"
9
+
},
10
+
"name": {
11
+
"type": "string"
12
+
}
13
+
},
14
+
"required": [
15
+
"id",
16
+
"name"
17
+
],
18
+
"type": "object"
19
+
},
4
20
"main": {
5
21
"description": "Shared definitions for recipe-related lexicons",
6
22
"properties": {},
7
23
"type": "object"
24
+
},
25
+
"recipeView": {
26
+
"description": "A recipe as a list reader sees it: enough to choose one, not enough to cook it. Ingredients and instructions are deliberately absent — a caller that wants to cook follows `url`.",
27
+
"properties": {
28
+
"collections": {
29
+
"items": {
30
+
"ref": "#collectionRef",
31
+
"type": "ref"
32
+
},
33
+
"type": "array"
34
+
},
35
+
"completenessPercent": {
36
+
"description": "How much of this recipe the pantry already covers, 0–100. A whole number rather than the stored 0–1 fraction, because lexicons have no float type and no reader needs the precision.",
37
+
"maximum": 100,
38
+
"minimum": 0,
39
+
"type": "integer"
40
+
},
41
+
"cookTimeMinutes": {
42
+
"minimum": 0,
43
+
"type": "integer"
44
+
},
45
+
"description": {
46
+
"type": "string"
47
+
},
48
+
"id": {
49
+
"description": "Stable identifier for this recipe",
50
+
"type": "string"
51
+
},
52
+
"imageUrl": {
53
+
"description": "An absolute URL to a photograph, already resolved — whether the recipe is private (object storage) or published (a PDS blob on a CDN). Absent when the recipe has no image.",
54
+
"format": "uri",
55
+
"type": "string"
56
+
},
57
+
"missingCount": {
58
+
"description": "How many ingredients are not in the house. 0 means everything is in.",
59
+
"minimum": 0,
60
+
"type": "integer"
61
+
},
62
+
"name": {
63
+
"type": "string"
64
+
},
65
+
"prepTimeMinutes": {
66
+
"minimum": 0,
67
+
"type": "integer"
68
+
},
69
+
"servings": {
70
+
"description": "How many the recipe makes. A number; halves are real, so not an integer.",
71
+
"type": "unknown"
72
+
},
73
+
"tags": {
74
+
"items": {
75
+
"ref": "#tagRef",
76
+
"type": "ref"
77
+
},
78
+
"type": "array"
79
+
},
80
+
"updatedAt": {
81
+
"format": "datetime",
82
+
"type": "string"
83
+
},
84
+
"url": {
85
+
"description": "Where to open this recipe in kich",
86
+
"format": "uri",
87
+
"type": "string"
88
+
}
89
+
},
90
+
"required": [
91
+
"id",
92
+
"name",
93
+
"servings",
94
+
"completenessPercent",
95
+
"url"
96
+
],
97
+
"type": "object"
98
+
},
99
+
"tagRef": {
100
+
"description": "A tag, by id and display name.",
101
+
"properties": {
102
+
"id": {
103
+
"type": "string"
104
+
},
105
+
"name": {
106
+
"type": "string"
107
+
}
108
+
},
109
+
"required": [
110
+
"id",
111
+
"name"
112
+
],
113
+
"type": "object"
8
114
}
9
115
},
10
116
"description": "Shared definitions for the recipe namespace.",
11
117
"id": "io.kich.recipe.defs",
12
118
"lexicon": 1
13
119
}