full diff

com.suibari.nagi.putPreferences

suibari.com +22 −0
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": 1
193215}

Compare other versions