com.suibari.nagi.getChronicle
Schema Diff
+30 -2
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 5 non-breaking changes.
Breaking Changes (4)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle#readYear", src: "com.suibari.nagi.getChronicle#readYear", tgt: "com.suibari.nagi.getChronicle#readYear.revision", kind: "prop", name: Some("revision") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle#readYear", src: "com.suibari.nagi.getChronicle#readYear", tgt: "com.suibari.nagi.getChronicle#readYear.year", kind: "prop", name: Some("year") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle:output", src: "com.suibari.nagi.getChronicle:output", tgt: "com.suibari.nagi.getChronicle:output.revision", kind: "prop", name: Some("revision") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle:output", src: "com.suibari.nagi.getChronicle:output", tgt: "com.suibari.nagi.getChronicle:output.year", kind: "prop", name: Some("year") }
Non-Breaking Changes (5)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear.revision" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear.year" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle:output.revision" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle:output.year" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear.revision" }AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear.year" }AddedVertex { vertex_id: "com.suibari.nagi.getChronicle:output.revision" }AddedVertex { vertex_id: "com.suibari.nagi.getChronicle:output.year" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle:output", src: "com.suibari.nagi.getChronicle:output", tgt: "com.suibari.nagi.getChronicle:output.revision", kind: "prop", name: Some("revision") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle:output", src: "com.suibari.nagi.getChronicle:output", tgt: "com.suibari.nagi.getChronicle:output.year", kind: "prop", name: Some("year") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle#readYear", src: "com.suibari.nagi.getChronicle#readYear", tgt: "com.suibari.nagi.getChronicle#readYear.revision", kind: "prop", name: Some("revision") }
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getChronicle#readYear", src: "com.suibari.nagi.getChronicle#readYear", tgt: "com.suibari.nagi.getChronicle#readYear.year", kind: "prop", name: Some("year") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "自分年表。Nagi にやってきた日・botたんと出会った日・記念日カード・「はじめて」の記録・日記から抜いた出来事・そのころのニュースを、1本の時系列で返す。日記と同じく**本人だけが読む**ので、actor が認証した DID と一致しなければ 403(件数も日付も返さない)。",
6
6
"output": {
7
7
"encoding": "application/json",
8
8
"schema": {
9
9
"properties": {
10
10
"cursor": {
11
11
"description": "次の年。これ以上さかのぼれないときは省略する。",
12
12
"type": "string"
13
13
},
14
14
"hasMore": {
15
15
"type": "boolean"
16
16
},
17
17
"items": {
18
18
"description": "その年の節目。新しい順。同じ日に複数あるときは kind の固定優先度で決定論的に並ぶ。",
19
19
"items": {
20
20
"type": "unknown"
21
21
},
22
22
"type": "array"
23
+
},
24
+
"revision": {
25
+
"description": "その年の全内容のSHA-256。表示言語や取得順序には依存しない。",
26
+
"maxLength": 64,
27
+
"type": "string"
28
+
},
29
+
"year": {
30
+
"minimum": 2020,
31
+
"type": "integer"
23
32
}
24
33
},
25
34
"required": [
26
35
"items",
27
-
"hasMore"
36
+
"hasMore",
37
+
"year",
38
+
"revision"
28
39
],
29
40
"type": "object"
30
41
}
31
42
},
32
43
"parameters": {
33
44
"properties": {
34
45
"actor": {
35
46
"description": "年表の持ち主。認証した DID と一致しなければならない。",
36
47
"format": "did",
37
48
"type": "string"
38
49
},
39
50
"cursor": {
40
51
"description": "次に返す年(\"2025\")。年表は年見出しでまとまるので、ページ境界を見出し境界に一致させている。将来1年の件数が有界でなくなったら、日付とイベントIDの複合カーソルへ移すこと。",
41
52
"type": "string"
42
53
},
43
54
"lang": {
44
55
"default": "ja",
45
56
"description": "ニュースの表示言語。en は英訳が揃っているものだけ英語になる。",
46
57
"enum": [
47
58
"ja",
48
59
"en"
49
60
],
50
61
"type": "string"
51
62
},
52
63
"limit": {
53
64
"default": 50,
54
-
"description": "1ページの上限。年チャンクなので通常は効かず、1年が想定外に膨らんだときの安全弁として働く。",
65
+
"description": "互換性のため受理するが適用しない。既読は年単位なので必ずその年の全項目を返す。",
55
66
"maximum": 100,
56
67
"minimum": 1,
57
68
"type": "integer"
58
69
}
59
70
},
60
71
"required": [
61
72
"actor"
62
73
],
63
74
"type": "params"
64
75
},
65
76
"type": "query"
77
+
},
78
+
"readYear": {
79
+
"properties": {
80
+
"revision": {
81
+
"maxLength": 64,
82
+
"type": "string"
83
+
},
84
+
"year": {
85
+
"minimum": 2020,
86
+
"type": "integer"
87
+
}
88
+
},
89
+
"required": [
90
+
"year",
91
+
"revision"
92
+
],
93
+
"type": "object"
66
94
}
67
95
},
68
96
"id": "com.suibari.nagi.getChronicle",
69
97
"lexicon": 1
70
98
}