com.suibari.nagi.getPreferences

suibari.com

Schema Diff

+8 -0

From

CID
bafyreicl3hijasn...
Indexed At
2026-09-02 11:47 UTC
View this version

To

CID
bafyreif4urfilfk...
Indexed At
2026-09-25 02:44 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 6 non-breaking changes.

Non-Breaking Changes (6)
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.chronicleReadYears" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.chronicleReadYears:items" }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.getPreferences:output.chronicleReadYears:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.chronicleReadYears" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.chronicleReadYears:items" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.getPreferences:output.chronicleReadYears:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "customFavorite": {
5 5
      "description": "Bluemoji のスナップショット。url などは表示のたびに再解決されるので、権威は uri のみ。",
6 6
      "properties": {
7 7
        "emoji": {
8 8
          "type": "unknown"
9 9
        },
10 10
        "kind": {
11 11
          "const": "custom",
12 12
          "type": "string"
13 13
        }
14 14
      },
15 15
      "required": [
16 16
        "kind",
17 17
        "emoji"
18 18
      ],
19 19
      "type": "object"
20 20
    },
21 21
    "feedTab": {
22 22
      "description": "フィードのタブ1枚。必要なフィールドは kind ごとに異なる(list / custom は source、channel は uri、search は query)。",
23 23
      "properties": {
24 24
        "id": {
25 25
          "maxLength": 64,
26 26
          "type": "string"
27 27
        },
28 28
        "kind": {
29 29
          "knownValues": [
30 30
            "list",
31 31
            "global",
32 32
            "custom",
33 33
            "channel",
34 34
            "search"
35 35
          ],
36 36
          "maxLength": 32,
37 37
          "type": "string"
38 38
        },
39 39
        "label": {
40 40
          "description": "表示名のスナップショット。権威は uri / query 側。",
41 41
          "maxLength": 64,
42 42
          "type": "string"
43 43
        },
44 44
        "query": {
45 45
          "description": "kind が search のときの保存クエリ。",
46 46
          "maxLength": 128,
47 47
          "type": "string"
48 48
        },
49 49
        "queryKind": {
50 50
          "knownValues": [
51 51
            "keyword",
52 52
            "tag"
53 53
          ],
54 54
          "maxLength": 32,
55 55
          "type": "string"
56 56
        },
57 57
        "source": {
58 58
          "description": "kind が list / custom のときの参照先(list=home, custom=affirmation)。将来のユーザー定義フィードは uri で指す。",
59 59
          "knownValues": [
60 60
            "home",
61 61
            "affirmation"
62 62
          ],
63 63
          "maxLength": 32,
64 64
          "type": "string"
65 65
        },
66 66
        "uri": {
67 67
          "description": "kind が channel のときのチャンネル。",
68 68
          "format": "at-uri",
69 69
          "maxLength": 2048,
70 70
          "type": "string"
71 71
        }
72 72
      },
73 73
      "required": [
74 74
        "id",
75 75
        "kind"
76 76
      ],
77 77
      "type": "object"
78 78
    },
79 79
    "languagePreferences": {
80 80
      "properties": {
81 81
        "autoTranslate": {
82 82
          "type": "boolean"
83 83
        },
84 84
        "post": {
85 85
          "maxLength": 16,
86 86
          "type": "string"
87 87
        },
88 88
        "provider": {
89 89
          "knownValues": [
90 90
            "kagi",
91 91
            "deepl",
92 92
            "google"
93 93
          ],
94 94
          "type": "string"
95 95
        },
96 96
        "translation": {
97 97
          "maxLength": 16,
98 98
          "type": "string"
99 99
        }
100 100
      },
101 101
      "required": [
102 102
        "post",
103 103
        "translation",
104 104
        "provider",
105 105
        "autoTranslate"
106 106
      ],
107 107
      "type": "object"
108 108
    },
109 109
    "main": {
110 110
      "description": "端末をまたいで同期する本人の設定(既読位置、お気に入り絵文字、フィードタブ、投稿・翻訳言語、コンテンツ表示、最後のブックマークフォルダ)を返す。他ユーザーからは参照できない。",
111 111
      "errors": [
112 112
        {
113 113
          "name": "AuthRequired"
114 114
        }
115 115
      ],
116 116
      "output": {
117 117
        "encoding": "application/json",
118 118
        "schema": {
119 119
          "properties": {
120 +
            "chronicleReadYears": {
121 +
              "description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
122 +
              "items": {
123 +
                "ref": "com.suibari.nagi.getChronicle#readYear",
124 +
                "type": "ref"
125 +
              },
126 +
              "type": "array"
127 +
            },
120 128
            "emojiFavorites": {
121 129
              "description": "お気に入り絵文字パレット。表示順そのまま。要素は #unicodeFavorite または #customFavorite。",
122 130
              "items": {
123 131
                "type": "unknown"
124 132
              },
125 133
              "maxLength": 32,
126 134
              "type": "array"
127 135
            },
128 136
            "emojiFavoritesUpdatedAt": {
129 137
              "description": "省略時は、この利用者のお気に入りがまだ一度も同期されていないことを表す。",
130 138
              "format": "datetime",
131 139
              "type": "string"
132 140
            },
133 141
            "feedTabs": {
134 142
              "description": "フィードのタブ。表示順そのまま。",
135 143
              "items": {
136 144
                "ref": "#feedTab",
137 145
                "type": "ref"
138 146
              },
139 147
              "maxLength": 16,
140 148
              "type": "array"
141 149
            },
142 150
            "feedTabsUpdatedAt": {
143 151
              "description": "省略時は、この利用者がまだ一度もタブをカスタムしていないことを表す(クライアントは既定タブを使う)。",
144 152
              "format": "datetime",
145 153
              "type": "string"
146 154
            },
147 155
            "languagePreferences": {
148 156
              "ref": "#languagePreferences",
149 157
              "type": "ref"
150 158
            },
151 159
            "languagePreferencesUpdatedAt": {
152 160
              "format": "datetime",
153 161
              "type": "string"
154 162
            },
155 163
            "lastBookmarkFolderId": {
156 164
              "maxLength": 64,
157 165
              "type": "string"
158 166
            },
159 167
            "lastBookmarkFolderUpdatedAt": {
160 168
              "format": "datetime",
161 169
              "type": "string"
162 170
            },
163 171
            "moderationPreferences": {
164 172
              "ref": "#moderationPreferences",
165 173
              "type": "ref"
166 174
            },
167 175
            "moderationPreferencesUpdatedAt": {
168 176
              "format": "datetime",
169 177
              "type": "string"
170 178
            },
171 179
            "preferredName": {
172 180
              "description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
173 181
              "maxGraphemes": 40,
174 182
              "maxLength": 120,
175 183
              "type": "string"
176 184
            },
177 185
            "readPositions": {
178 186
              "items": {
179 187
                "ref": "#readPosition",
180 188
                "type": "ref"
181 189
              },
182 190
              "type": "array"
183 191
            },
184 192
            "replyFreq": {
185 193
              "description": "botたんからの返信確率(0〜100%)。Bluesky側のfreq設定と共用。",
186 194
              "maximum": 100,
187 195
              "minimum": 0,
188 196
              "type": "integer"
189 197
            }
190 198
          },
191 199
          "required": [
192 200
            "readPositions",
193 201
            "emojiFavorites"
194 202
          ],
195 203
          "type": "object"
196 204
        }
197 205
      },
198 206
      "type": "query"
199 207
    },
200 208
    "moderationPreferences": {
201 209
      "properties": {
202 210
        "automatic": {
203 211
          "knownValues": [
204 212
            "warn",
205 213
            "hide",
206 214
            "ignore"
207 215
          ],
208 216
          "type": "string"
209 217
        },
210 218
        "selfAi": {
211 219
          "knownValues": [
212 220
            "warn",
213 221
            "hide",
214 222
            "ignore"
215 223
          ],
216 224
          "type": "string"
217 225
        },
218 226
        "selfNsfw": {
219 227
          "knownValues": [
220 228
            "warn",
221 229
            "hide",
222 230
            "ignore"
223 231
          ],
224 232
          "type": "string"
225 233
        }
226 234
      },
227 235
      "required": [
228 236
        "automatic",
229 237
        "selfAi",
230 238
        "selfNsfw"
231 239
      ],
232 240
      "type": "object"
233 241
    },
234 242
    "readPosition": {
235 243
      "description": "「ここまで読んだ」位置。新旧の比較は (indexedAt, uri) の辞書順で行う。",
236 244
      "properties": {
237 245
        "indexedAt": {
238 246
          "format": "datetime",
239 247
          "type": "string"
240 248
        },
241 249
        "section": {
242 250
          "knownValues": [
243 251
            "bot",
244 252
            "community",
245 253
            "list",
246 254
            "channels",
247 255
            "news"
248 256
          ],
249 257
          "maxLength": 32,
250 258
          "type": "string"
251 259
        },
252 260
        "uri": {
253 261
          "format": "at-uri",
254 262
          "maxLength": 2048,
255 263
          "type": "string"
256 264
        }
257 265
      },
258 266
      "required": [
259 267
        "section",
260 268
        "indexedAt",
261 269
        "uri"
262 270
      ],
263 271
      "type": "object"
264 272
    },
265 273
    "unicodeFavorite": {
266 274
      "properties": {
267 275
        "emoji": {
268 276
          "maxLength": 64,
269 277
          "type": "string"
270 278
        },
271 279
        "kind": {
272 280
          "const": "unicode",
273 281
          "type": "string"
274 282
        }
275 283
      },
276 284
      "required": [
277 285
        "kind",
278 286
        "emoji"
279 287
      ],
280 288
      "type": "object"
281 289
    }
282 290
  },
283 291
  "id": "com.suibari.nagi.getPreferences",
284 292
  "lexicon": 1
285 293
}

Compare Other Versions

Lexicon Garden

@