io.kich.recipe.defs
Schema Diff
+111 -0
Compatibility Analysis
Breaking Changes Detected
9 breaking changes, 36 non-breaking changes.
Breaking Changes (9)
- 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") }
- 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") }
Non-Breaking Changes (36)
- 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.createdAt" }
- 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.createdAt", kind: "prop", name: Some("createdAt") }
- 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.createdAt" }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#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") }
- 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") }
- 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.createdAt", kind: "prop", name: Some("createdAt") }
- 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
+
"createdAt": {
46
+
"description": "When the recipe was saved to this kitchen. Distinct from `updatedAt`, which moves every time somebody edits it — a reader sorting a cookbook by what is new wants the first, not the second.",
47
+
"format": "datetime",
48
+
"type": "string"
49
+
},
50
+
"description": {
51
+
"type": "string"
52
+
},
53
+
"id": {
54
+
"description": "Stable identifier for this recipe",
55
+
"type": "string"
56
+
},
57
+
"imageUrl": {
58
+
"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.",
59
+
"format": "uri",
60
+
"type": "string"
61
+
},
62
+
"missingCount": {
63
+
"description": "How many ingredients are not in the house. 0 means everything is in.",
64
+
"minimum": 0,
65
+
"type": "integer"
66
+
},
67
+
"name": {
68
+
"type": "string"
69
+
},
70
+
"prepTimeMinutes": {
71
+
"minimum": 0,
72
+
"type": "integer"
73
+
},
74
+
"servings": {
75
+
"description": "How many the recipe makes. A number; halves are real, so not an integer.",
76
+
"type": "unknown"
77
+
},
78
+
"tags": {
79
+
"items": {
80
+
"ref": "#tagRef",
81
+
"type": "ref"
82
+
},
83
+
"type": "array"
84
+
},
85
+
"updatedAt": {
86
+
"format": "datetime",
87
+
"type": "string"
88
+
},
89
+
"url": {
90
+
"description": "Where to open this recipe in kich",
91
+
"format": "uri",
92
+
"type": "string"
93
+
}
94
+
},
95
+
"required": [
96
+
"id",
97
+
"name",
98
+
"servings",
99
+
"completenessPercent",
100
+
"url"
101
+
],
102
+
"type": "object"
103
+
},
104
+
"tagRef": {
105
+
"description": "A tag, by id and display name.",
106
+
"properties": {
107
+
"id": {
108
+
"type": "string"
109
+
},
110
+
"name": {
111
+
"type": "string"
112
+
}
113
+
},
114
+
"required": [
115
+
"id",
116
+
"name"
117
+
],
118
+
"type": "object"
8
119
}
9
120
},
10
121
"description": "Shared definitions for the recipe namespace.",
11
122
"id": "io.kich.recipe.defs",
12
123
"lexicon": 1
13
124
}