From
bafyreihovx253b6xszbo5m4t4styf4ps7rtozasljhbydvgpjy6km5wymq
indexed 2026-09-25 02:44 UTC
View this version
To
bafyreigxmuciixj7xe4gyqwzqca2ftn2xw3plfwbl5laopwofek5jfo34m
indexed 2026-11-06 11:06 UTC
View this version
Compatibility
backward compatible Backward compatible. 8 non-breaking changes.
Non-breaking changes (8)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.detectedTimezone" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.diaryDay" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.diaryDay.startHour" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.diaryDay.timezone" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.detectedTimezone", kind: "prop", name: Some("detectedTimezone") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.diaryDay", kind: "prop", name: Some("diaryDay") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.diaryDay", tgt: "com.suibari.nagi.putPreferences:input.diaryDay.startHour", kind: "prop", name: Some("startHour") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.diaryDay", tgt: "com.suibari.nagi.putPreferences:input.diaryDay.timezone", kind: "prop", name: Some("timezone") }
Migration guidance
Added
AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.detectedTimezone" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.diaryDay" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.diaryDay.startHour" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.diaryDay.timezone" }
Notes
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.detectedTimezone", kind: "prop", name: Some("detectedTimezone") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.diaryDay", kind: "prop", name: Some("diaryDay") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.diaryDay", tgt: "com.suibari.nagi.putPreferences:input.diaryDay.startHour", kind: "prop", name: Some("startHour") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.diaryDay", tgt: "com.suibari.nagi.putPreferences:input.diaryDay.timezone", kind: "prop", name: Some("timezone") }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "同期対象の本人設定を書き込む。既読位置は単調マージ、配列・言語・コンテンツ表示設定・最後のブックマークフォルダは updatedAt による後勝ち。各項目は省略でき、送った分だけを更新する。",66
"errors": [77
{88
"name": "AuthRequired"99
},1010
{1111
"name": "InvalidRequest"1212
}1313
],1414
"input": {1515
"encoding": "application/json",1616
"schema": {1717
"properties": {1818
"chronicleReadYears": {1919
"description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",2020
"items": {2121
"ref": "com.suibari.nagi.getChronicle#readYear",2222
"type": "ref"2323
},2424
"maxLength": 100,2525
"type": "array"2626
},27
"detectedTimezone": {28
"description": "Nagi を開いたときにブラウザが検出したタイムゾーン(IANA 名)。手動で選んでいる間は送らない。UTC や Etc/* は受け取っても使わない。",29
"maxLength": 64,30
"type": "string"31
},32
"diaryDay": {33
"description": "日記の1日の区切り。送った項目だけを変える。",34
"properties": {35
"startHour": {36
"description": "区切りの時刻(18〜23, 0〜6)。",37
"maximum": 23,38
"minimum": 0,39
"type": "integer"40
},41
"timezone": {42
"description": "手動のタイムゾーン。null を送ると自動検出に戻す。",43
"maxLength": 64,44
"type": "string"45
}46
},47
"type": "object"48
},2749
"emojiFavorites": {2850
"items": {2951
"type": "unknown"3052
},3153
"maxLength": 32,3254
"type": "array"3355
},3456
"emojiFavoritesUpdatedAt": {3557
"description": "emojiFavorites を送るときは必須。保存済みより古ければ書き込まない。",3658
"format": "datetime",3759
"type": "string"3860
},3961
"feedTabs": {4062
"items": {4163
"ref": "com.suibari.nagi.getPreferences#feedTab",4264
"type": "ref"4365
},4466
"maxLength": 16,4567
"type": "array"4668
},4769
"feedTabsUpdatedAt": {4870
"description": "feedTabs を送るときは必須。保存済みより古ければ書き込まない。",4971
"format": "datetime",5072
"type": "string"5173
},5274
"languagePreferences": {5375
"ref": "com.suibari.nagi.getPreferences#languagePreferences",5476
"type": "ref"5577
},5678
"languagePreferencesUpdatedAt": {5779
"format": "datetime",5880
"type": "string"5981
},6082
"lastBookmarkFolderId": {6183
"maxLength": 64,6284
"nullable": true,6385
"type": "string"6486
},6587
"lastBookmarkFolderUpdatedAt": {6688
"format": "datetime",6789
"type": "string"6890
},6991
"moderationPreferences": {7092
"ref": "com.suibari.nagi.getPreferences#moderationPreferences",7193
"type": "ref"7294
},7395
"moderationPreferencesUpdatedAt": {7496
"format": "datetime",7597
"type": "string"7698
},7799
"preferredName": {78100
"description": "botたんに呼んでほしい名前。空文字を送ると登録を解除し、表示名に戻す。送らなければ変更しない。",79101
"maxGraphemes": 40,80102
"maxLength": 120,81103
"type": "string"82104
},83105
"readPositions": {84106
"items": {85107
"ref": "com.suibari.nagi.getPreferences#readPosition",86108
"type": "ref"87109
},88110
"maxLength": 16,89111
"type": "array"90112
},91113
"replyFreq": {92114
"description": "botたんからの返信確率(0〜100%)。送らなければ変更しない。",93115
"maximum": 100,94116
"minimum": 0,95117
"type": "integer"96118
}97119
},98120
"type": "object"99121
}100122
},101123
"output": {102124
"encoding": "application/json",103125
"schema": {104126
"properties": {105127
"chronicleReadYears": {106128
"description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",107129
"items": {108130
"ref": "com.suibari.nagi.getChronicle#readYear",109131
"type": "ref"110132
},111133
"type": "array"112134
},113135
"emojiFavorites": {114136
"items": {115137
"type": "unknown"116138
},117139
"maxLength": 32,118140
"type": "array"119141
},120142
"emojiFavoritesUpdatedAt": {121143
"format": "datetime",122144
"type": "string"123145
},124146
"feedTabs": {125147
"items": {126148
"ref": "com.suibari.nagi.getPreferences#feedTab",127149
"type": "ref"128150
},129151
"maxLength": 16,130152
"type": "array"131153
},132154
"feedTabsUpdatedAt": {133155
"format": "datetime",134156
"type": "string"135157
},136158
"languagePreferences": {137159
"ref": "com.suibari.nagi.getPreferences#languagePreferences",138160
"type": "ref"139161
},140162
"languagePreferencesUpdatedAt": {141163
"format": "datetime",142164
"type": "string"143165
},144166
"lastBookmarkFolderId": {145167
"maxLength": 64,146168
"type": "string"147169
},148170
"lastBookmarkFolderUpdatedAt": {149171
"format": "datetime",150172
"type": "string"151173
},152174
"moderationPreferences": {153175
"ref": "com.suibari.nagi.getPreferences#moderationPreferences",154176
"type": "ref"155177
},156178
"moderationPreferencesUpdatedAt": {157179
"format": "datetime",158180
"type": "string"159181
},160182
"preferredName": {161183
"description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",162184
"maxGraphemes": 40,163185
"maxLength": 120,164186
"type": "string"165187
},166188
"readPositions": {167189
"description": "マージ後の確定値。送った位置が負けた場合は保存済みの方が返る。",168190
"items": {169191
"ref": "com.suibari.nagi.getPreferences#readPosition",170192
"type": "ref"171193
},172194
"type": "array"173195
},174196
"replyFreq": {175197
"description": "botたんからの返信確率(0〜100%)。",176198
"maximum": 100,177199
"minimum": 0,178200
"type": "integer"179201
}180202
},181203
"required": [182204
"readPositions",183205
"emojiFavorites"184206
],185207
"type": "object"186208
}187209
},188210
"type": "procedure"189211
}190212
},191213
"id": "com.suibari.nagi.putPreferences",192214
"lexicon": 1193215
}