com.suibari.nagi.appLinks
Schema Diff
+10 -11
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 2 non-breaking changes.
Breaking Changes (4)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "com.suibari.nagi.appLinks#field", src: "com.suibari.nagi.appLinks#field", tgt: "com.suibari.nagi.appLinks#field.role", kind: "prop", name: Some("role") }
- RemovedVertex RemovedVertex { vertex_id: "com.suibari.nagi.appLinks#field.label" }
- RemovedEdge RemovedEdge { src: "com.suibari.nagi.appLinks#field", tgt: "com.suibari.nagi.appLinks#field.label", kind: "prop", name: Some("label") }
- ConstraintTightened ConstraintTightened { vertex_id: "com.suibari.nagi.appLinks#field.role", sort: "knownValues", old_value: "[\"title\",\"value\",\"datetime\",\"url\"]", new_value: "[\"value\",\"datetime\",\"url\",\"image\"]" }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.appLinks#link.repeat" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.appLinks#link", tgt: "com.suibari.nagi.appLinks#link.repeat", kind: "prop", name: Some("repeat") }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "com.suibari.nagi.appLinks#field.label" }
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.appLinks#link.repeat" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "com.suibari.nagi.appLinks#field.role", sort: "knownValues", old_value: "[\"title\",\"value\",\"datetime\",\"url\"]", new_value: "[\"value\",\"datetime\",\"url\",\"image\"]" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "com.suibari.nagi.appLinks#field", src: "com.suibari.nagi.appLinks#field", tgt: "com.suibari.nagi.appLinks#field.role", kind: "prop", name: Some("role") }
- Breaking: RemovedEdge { src: "com.suibari.nagi.appLinks#field", tgt: "com.suibari.nagi.appLinks#field.label", kind: "prop", name: Some("label") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.appLinks#link", tgt: "com.suibari.nagi.appLinks#link.repeat", kind: "prop", name: Some("repeat") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"field": {
5
+
"description": "プロフィールに表示するフィールド。表示するキーパスの宣言のみを持ち、描画の役割(値/日時/リンク/画像)は表示側が値から自動判別する。",
5
6
"properties": {
6
-
"label": {
7
-
"description": "表示ラベル(省略時は path 末尾)。",
8
-
"maxGraphemes": 64,
9
-
"maxLength": 640,
10
-
"type": "string"
11
-
},
12
7
"path": {
13
8
"description": "レコード本体を flatten したキーパス(例 \"trackName\" / \"embed.title\" / \"items[0].name\")。",
14
9
"maxLength": 512,
15
10
"type": "string"
16
11
},
17
12
"role": {
18
-
"description": "描画ヒント。title=見出し、value=本文、datetime=日時、url=リンク。",
13
+
"description": "任意の描画ヒント。省略時は表示側が値から自動判別する。",
19
14
"knownValues": [
20
-
"title",
21
15
"value",
22
16
"datetime",
23
-
"url"
17
+
"url",
18
+
"image"
24
19
],
25
20
"type": "string"
26
21
}
27
22
},
28
23
"required": [
29
-
"path",
30
-
"role"
24
+
"path"
31
25
],
32
26
"type": "object"
33
27
},
34
28
"link": {
35
29
"properties": {
36
30
"appUri": {
37
31
"description": "アプリの Web サイト URL。favicon の取得元にもなる。",
38
32
"format": "uri",
39
33
"type": "string"
40
34
},
41
35
"collection": {
42
36
"description": "表示対象のレコード collection の NSID。",
43
37
"format": "nsid",
44
38
"type": "string"
45
39
},
46
40
"enabled": {
47
41
"default": true,
48
42
"description": "この連携をプロフィールに表示するか。",
49
43
"type": "boolean"
50
44
},
51
45
"fields": {
52
46
"items": {
53
47
"ref": "#field",
54
48
"type": "ref"
55
49
},
56
50
"maxLength": 10,
57
51
"type": "array"
58
52
},
59
53
"iconUrl": {
60
54
"description": "アプリのアイコン(favicon)URL。連携設定時に appUri から解決して保存する。",
61
55
"format": "uri",
62
56
"type": "string"
63
57
},
64
58
"label": {
65
59
"description": "カード見出し(アプリ名相当)。",
66
60
"maxGraphemes": 64,
67
61
"maxLength": 640,
68
62
"type": "string"
69
63
},
64
+
"repeat": {
65
+
"description": "1レコード内で、このキーパスが指す配列の各要素を1行として展開する(例 \"cards\")。省略時は単一表示。指定時、fields の path は配列の各要素からの相対パスになる。",
66
+
"maxLength": 512,
67
+
"type": "string"
68
+
},
70
69
"selection": {
71
70
"default": "latest",
72
71
"description": "表示するレコードの選び方。MVP は最新1件(latest)のみ。",
73
72
"knownValues": [
74
73
"latest"
75
74
],
76
75
"type": "string"
77
76
}
78
77
},
79
78
"required": [
80
79
"collection",
81
80
"label",
82
81
"selection",
83
82
"fields"
84
83
],
85
84
"type": "object"
86
85
},
87
86
"main": {
88
87
"description": "プロフィールカードに並べる、任意の Atmosphere アプリへの連携宣言リスト。所有者本人が curate し、どの collection のどのフィールドを表示するかを定義する。公開レコード。",
89
88
"key": "literal:self",
90
89
"record": {
91
90
"properties": {
92
91
"createdAt": {
93
92
"format": "datetime",
94
93
"type": "string"
95
94
},
96
95
"links": {
97
96
"items": {
98
97
"ref": "#link",
99
98
"type": "ref"
100
99
},
101
100
"maxLength": 20,
102
101
"type": "array"
103
102
}
104
103
},
105
104
"required": [
106
105
"links",
107
106
"createdAt"
108
107
],
109
108
"type": "object"
110
109
},
111
110
"type": "record"
112
111
}
113
112
},
114
113
"id": "com.suibari.nagi.appLinks",
115
114
"lexicon": 1
116
115
}