com.suibari.nagi.putPreferences

suibari.com

Schema Diff

+83 -1

From

CID
bafyreifljdacxoc...
Indexed At
2026-08-05 09:00 UTC
View this version

To

CID
bafyreid7xn7cdqj...
Indexed At
2026-08-27 00:10 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 42 non-breaking changes.

Non-Breaking Changes (42)
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.feedTabs" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.feedTabs:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.feedTabsUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.preferredName" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.replyFreq" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.feedTabs" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.feedTabs:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.feedTabsUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.preferredName" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.replyFreq" }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.feedTabs", kind: "prop", name: Some("feedTabs") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.preferredName", kind: "prop", name: Some("preferredName") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.replyFreq", kind: "prop", name: Some("replyFreq") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.feedTabs", tgt: "com.suibari.nagi.putPreferences:input.feedTabs:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.feedTabs", tgt: "com.suibari.nagi.putPreferences:output.feedTabs:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.feedTabs" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.feedTabs:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.feedTabsUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.preferredName" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.replyFreq" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.feedTabs" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.feedTabs:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.feedTabsUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.preferredName" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.replyFreq" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.feedTabs", kind: "prop", name: Some("feedTabs") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.preferredName", kind: "prop", name: Some("preferredName") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.replyFreq", kind: "prop", name: Some("replyFreq") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.feedTabs", tgt: "com.suibari.nagi.putPreferences:input.feedTabs:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.feedTabs", tgt: "com.suibari.nagi.putPreferences:output.feedTabs:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
1 1
{
2 2
  "id": "com.suibari.nagi.putPreferences",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "procedure",
6 6
      "input": {
7 7
        "schema": {
8 8
          "type": "object",
9 9
          "properties": {
10 +
            "feedTabs": {
11 +
              "type": "array",
12 +
              "items": {
13 +
                "ref": "com.suibari.nagi.getPreferences#feedTab",
14 +
                "type": "ref"
15 +
              },
16 +
              "maxLength": 16
17 +
            },
18 +
            "replyFreq": {
19 +
              "type": "integer",
20 +
              "maximum": 100,
21 +
              "minimum": 0,
22 +
              "description": "botたんからの返信確率(0〜100%)。送らなければ変更しない。"
23 +
            },
24 +
            "preferredName": {
25 +
              "type": "string",
26 +
              "maxLength": 120,
27 +
              "description": "botたんに呼んでほしい名前。空文字を送ると登録を解除し、表示名に戻す。送らなければ変更しない。",
28 +
              "maxGraphemes": 40
29 +
            },
10 30
            "readPositions": {
11 31
              "type": "array",
12 32
              "items": {
13 33
                "ref": "com.suibari.nagi.getPreferences#readPosition",
14 34
                "type": "ref"
15 35
              },
16 36
              "maxLength": 16
17 37
            },
18 38
            "emojiFavorites": {
19 39
              "type": "array",
20 40
              "items": {
21 41
                "type": "unknown"
22 42
              },
23 43
              "maxLength": 32
24 44
            },
45 +
            "feedTabsUpdatedAt": {
46 +
              "type": "string",
47 +
              "format": "datetime",
48 +
              "description": "feedTabs を送るときは必須。保存済みより古ければ書き込まない。"
49 +
            },
50 +
            "languagePreferences": {
51 +
              "ref": "com.suibari.nagi.getPreferences#languagePreferences",
52 +
              "type": "ref"
53 +
            },
54 +
            "lastBookmarkFolderId": {
55 +
              "type": "string",
56 +
              "nullable": true,
57 +
              "maxLength": 64
58 +
            },
25 59
            "emojiFavoritesUpdatedAt": {
26 60
              "type": "string",
27 61
              "format": "datetime",
28 62
              "description": "emojiFavorites を送るときは必須。保存済みより古ければ書き込まない。"
63 +
            },
64 +
            "lastBookmarkFolderUpdatedAt": {
65 +
              "type": "string",
66 +
              "format": "datetime"
67 +
            },
68 +
            "languagePreferencesUpdatedAt": {
69 +
              "type": "string",
70 +
              "format": "datetime"
29 71
            }
30 72
          }
31 73
        },
32 74
        "encoding": "application/json"
33 75
      },
34 76
      "errors": [
35 77
        {
36 78
          "name": "AuthRequired"
37 79
        },
38 80
        {
39 81
          "name": "InvalidRequest"
40 82
        }
41 83
      ],
42 84
      "output": {
43 85
        "schema": {
44 86
          "type": "object",
45 87
          "required": [
46 88
            "readPositions",
47 89
            "emojiFavorites"
48 90
          ],
49 91
          "properties": {
92 +
            "feedTabs": {
93 +
              "type": "array",
94 +
              "items": {
95 +
                "ref": "com.suibari.nagi.getPreferences#feedTab",
96 +
                "type": "ref"
97 +
              },
98 +
              "maxLength": 16
99 +
            },
100 +
            "replyFreq": {
101 +
              "type": "integer",
102 +
              "maximum": 100,
103 +
              "minimum": 0,
104 +
              "description": "botたんからの返信確率(0〜100%)。"
105 +
            },
106 +
            "preferredName": {
107 +
              "type": "string",
108 +
              "maxLength": 120,
109 +
              "description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
110 +
              "maxGraphemes": 40
111 +
            },
50 112
            "readPositions": {
51 113
              "type": "array",
52 114
              "items": {
53 115
                "ref": "com.suibari.nagi.getPreferences#readPosition",
54 116
                "type": "ref"
55 117
              },
56 118
              "description": "マージ後の確定値。送った位置が負けた場合は保存済みの方が返る。"
57 119
            },
58 120
            "emojiFavorites": {
59 121
              "type": "array",
60 122
              "items": {
61 123
                "type": "unknown"
62 124
              },
63 125
              "maxLength": 32
64 126
            },
127 +
            "feedTabsUpdatedAt": {
128 +
              "type": "string",
129 +
              "format": "datetime"
130 +
            },
131 +
            "languagePreferences": {
132 +
              "ref": "com.suibari.nagi.getPreferences#languagePreferences",
133 +
              "type": "ref"
134 +
            },
135 +
            "lastBookmarkFolderId": {
136 +
              "type": "string",
137 +
              "maxLength": 64
138 +
            },
65 139
            "emojiFavoritesUpdatedAt": {
66 140
              "type": "string",
67 141
              "format": "datetime"
142 +
            },
143 +
            "lastBookmarkFolderUpdatedAt": {
144 +
              "type": "string",
145 +
              "format": "datetime"
146 +
            },
147 +
            "languagePreferencesUpdatedAt": {
148 +
              "type": "string",
149 +
              "format": "datetime"
68 150
            }
69 151
          }
70 152
        },
71 153
        "encoding": "application/json"
72 154
      },
73 -
      "description": "同期対象の設定を書き込む。既読位置は (indexedAt, uri) が進むときだけ更新する単調マージ、お気に入りは updatedAt による後勝ち。どちらも省略でき、送った分だけが更新される。"
155 +
      "description": "同期対象の本人設定を書き込む。既読位置は単調マージ、配列・言語設定・最後のブックマークフォルダは updatedAt による後勝ち。各項目は省略でき、送った分だけを更新する。"
74 156
    }
75 157
  },
76 158
  "$type": "com.atproto.lexicon.schema",
77 159
  "lexicon": 1
78 160
}

Compare Other Versions

Lexicon Garden

@