parts.page.mention.search

page.parts

Schema Diff

+67 -0

From

CID
bafyreigvmpjpf3e...
Indexed At
2026-03-28 18:39 UTC
View this version

To

CID
bafyreie6zl537fb...
Indexed At
2026-04-10 20:10 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 23 non-breaking changes.

Breaking Changes (1)
  • ConstraintAdded ConstraintAdded { vertex_id: "parts.page.mention.search#subscopeInfo.label", sort: "maxLength", value: "100" }
Non-Breaking Changes (23)
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#aspectRatio" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#aspectRatio.height" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#aspectRatio.width" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#embedInfo.aspectRatio" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#mentionLabel" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#mentionLabel.text" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#result.description" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#result.labels" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#result.labels:items" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#result.subscope" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#subscopeInfo" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#subscopeInfo.label" }
  • AddedVertex AddedVertex { vertex_id: "parts.page.mention.search#subscopeInfo.scope" }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#aspectRatio", tgt: "parts.page.mention.search#aspectRatio.height", kind: "prop", name: Some("height") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#aspectRatio", tgt: "parts.page.mention.search#aspectRatio.width", kind: "prop", name: Some("width") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#embedInfo", tgt: "parts.page.mention.search#embedInfo.aspectRatio", kind: "prop", name: Some("aspectRatio") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#mentionLabel", tgt: "parts.page.mention.search#mentionLabel.text", kind: "prop", name: Some("text") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#result", tgt: "parts.page.mention.search#result.description", kind: "prop", name: Some("description") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#result", tgt: "parts.page.mention.search#result.labels", kind: "prop", name: Some("labels") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#result", tgt: "parts.page.mention.search#result.subscope", kind: "prop", name: Some("subscope") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#result.labels", tgt: "parts.page.mention.search#result.labels:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#subscopeInfo", tgt: "parts.page.mention.search#subscopeInfo.label", kind: "prop", name: Some("label") }
  • AddedEdge AddedEdge { src: "parts.page.mention.search#subscopeInfo", tgt: "parts.page.mention.search#subscopeInfo.scope", kind: "prop", name: Some("scope") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "parts.page.mention.search#aspectRatio" }
  • AddedVertex { vertex_id: "parts.page.mention.search#aspectRatio.height" }
  • AddedVertex { vertex_id: "parts.page.mention.search#aspectRatio.width" }
  • AddedVertex { vertex_id: "parts.page.mention.search#embedInfo.aspectRatio" }
  • AddedVertex { vertex_id: "parts.page.mention.search#mentionLabel" }
  • AddedVertex { vertex_id: "parts.page.mention.search#mentionLabel.text" }
  • AddedVertex { vertex_id: "parts.page.mention.search#result.description" }
  • AddedVertex { vertex_id: "parts.page.mention.search#result.labels" }
  • AddedVertex { vertex_id: "parts.page.mention.search#result.labels:items" }
  • AddedVertex { vertex_id: "parts.page.mention.search#result.subscope" }
  • AddedVertex { vertex_id: "parts.page.mention.search#subscopeInfo" }
  • AddedVertex { vertex_id: "parts.page.mention.search#subscopeInfo.label" }
  • AddedVertex { vertex_id: "parts.page.mention.search#subscopeInfo.scope" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "parts.page.mention.search#subscopeInfo.label", sort: "maxLength", value: "100" }

Additional Notes

  • Non-breaking: AddedEdge { src: "parts.page.mention.search#aspectRatio", tgt: "parts.page.mention.search#aspectRatio.height", kind: "prop", name: Some("height") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#aspectRatio", tgt: "parts.page.mention.search#aspectRatio.width", kind: "prop", name: Some("width") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#embedInfo", tgt: "parts.page.mention.search#embedInfo.aspectRatio", kind: "prop", name: Some("aspectRatio") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#mentionLabel", tgt: "parts.page.mention.search#mentionLabel.text", kind: "prop", name: Some("text") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#result", tgt: "parts.page.mention.search#result.description", kind: "prop", name: Some("description") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#result", tgt: "parts.page.mention.search#result.labels", kind: "prop", name: Some("labels") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#result", tgt: "parts.page.mention.search#result.subscope", kind: "prop", name: Some("subscope") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#result.labels", tgt: "parts.page.mention.search#result.labels:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#subscopeInfo", tgt: "parts.page.mention.search#subscopeInfo.label", kind: "prop", name: Some("label") }
  • Non-breaking: AddedEdge { src: "parts.page.mention.search#subscopeInfo", tgt: "parts.page.mention.search#subscopeInfo.scope", kind: "prop", name: Some("scope") }
1 1
{
2 2
  "id": "parts.page.mention.search",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "query",
6 6
      "output": {
7 7
        "schema": {
8 8
          "type": "object",
9 9
          "required": [
10 10
            "results"
11 11
          ],
12 12
          "properties": {
13 13
            "results": {
14 14
              "type": "array",
15 15
              "items": {
16 16
                "ref": "#result",
17 17
                "type": "ref"
18 18
              },
19 19
              "maxLength": 50
20 20
            }
21 21
          }
22 22
        },
23 23
        "encoding": "application/json"
24 24
      },
25 25
      "parameters": {
26 26
        "type": "params",
27 27
        "required": [
28 28
          "service",
29 29
          "search"
30 30
        ],
31 31
        "properties": {
32 32
          "limit": {
33 33
            "type": "integer",
34 34
            "default": 20,
35 35
            "maximum": 50,
36 36
            "minimum": 1,
37 37
            "description": "Maximum number of results to return"
38 38
          },
39 +
          "scope": {
40 +
            "type": "string",
41 +
            "description": "Optional scope identifier to narrow results within a service, as returned by a previous result's subscope.scope field"
42 +
          },
39 43
          "search": {
40 44
            "type": "string",
41 45
            "description": "Search query string"
42 46
          },
43 47
          "service": {
44 48
            "type": "string",
45 49
            "format": "at-uri",
46 50
            "description": "AT URI of the parts.page.mention.service record identifying which service to query"
47 51
          }
48 52
        }
49 53
      },
50 54
      "description": "Search a mention service for matching results. A single XRPC host can serve multiple mention services, distinguished by the service AT URI."
51 55
    },
52 56
    "result": {
53 57
      "type": "object",
54 58
      "required": [
55 59
        "uri",
56 60
        "name"
57 61
      ],
58 62
      "properties": {
59 63
        "uri": {
60 64
          "type": "string",
61 65
          "description": "Identifier for the mentioned entity"
62 66
        },
63 67
        "href": {
64 68
          "type": "string",
65 69
          "format": "uri",
66 70
          "description": "Optional web URL for the mentioned entity"
67 71
        },
68 72
        "icon": {
69 73
          "type": "string",
70 74
          "format": "uri",
71 75
          "description": "Optional icon URL for the mentioned entity, displayed next to the mention"
72 76
        },
73 77
        "name": {
74 78
          "type": "string",
75 79
          "description": "Display name for the mentioned entity"
76 80
        },
77 81
        "embed": {
78 82
          "ref": "#embedInfo",
79 83
          "type": "ref",
80 84
          "description": "Optional embed info for creating an embed block instead of an inline mention"
85 +
        },
86 +
        "labels": {
87 +
          "type": "array",
88 +
          "items": {
89 +
            "ref": "#mentionLabel",
90 +
            "type": "ref"
91 +
          },
92 +
          "description": "A set of labels to be rendered with the mentionedEntity"
93 +
        },
94 +
        "subscope": {
95 +
          "ref": "#subscopeInfo",
96 +
          "type": "ref",
97 +
          "description": "Optional subscope info indicating this result can be scoped into for further searching"
98 +
        },
99 +
        "description": {
100 +
          "type": "string",
101 +
          "description": "A description for the mentioned entity"
81 102
        }
82 103
      }
83 104
    },
84 105
    "embedInfo": {
85 106
      "type": "object",
86 107
      "required": [
87 108
        "src"
88 109
      ],
89 110
      "properties": {
90 111
        "src": {
91 112
          "type": "string",
92 113
          "format": "uri",
93 114
          "description": "Source URL for the iframe embed"
94 115
        },
95 116
        "width": {
96 117
          "type": "integer",
97 118
          "maximum": 3200,
98 119
          "minimum": 16,
99 120
          "description": "Default width of the embed in pixels"
100 121
        },
101 122
        "height": {
102 123
          "type": "integer",
103 124
          "maximum": 3200,
104 125
          "minimum": 16,
105 126
          "description": "Default height of the embed in pixels"
127 +
        },
128 +
        "aspectRatio": {
129 +
          "ref": "#aspectRatio",
130 +
          "type": "ref",
131 +
          "description": "Aspect ratio of the embed. If provided, takes precedence over width/height for sizing."
132 +
        }
133 +
      }
134 +
    },
135 +
    "aspectRatio": {
136 +
      "type": "object",
137 +
      "required": [
138 +
        "width",
139 +
        "height"
140 +
      ],
141 +
      "properties": {
142 +
        "width": {
143 +
          "type": "integer"
144 +
        },
145 +
        "height": {
146 +
          "type": "integer"
147 +
        }
148 +
      }
149 +
    },
150 +
    "mentionLabel": {
151 +
      "type": "object",
152 +
      "properties": {
153 +
        "text": {
154 +
          "type": "string"
155 +
        }
156 +
      }
157 +
    },
158 +
    "subscopeInfo": {
159 +
      "type": "object",
160 +
      "required": [
161 +
        "scope",
162 +
        "label"
163 +
      ],
164 +
      "properties": {
165 +
        "label": {
166 +
          "type": "string",
167 +
          "maxLength": 100,
168 +
          "description": "Display label for the scope-down button (e.g. 'Posts', 'Tracks')"
169 +
        },
170 +
        "scope": {
171 +
          "type": "string",
172 +
          "description": "Scope identifier passed back to the service in subsequent search queries"
106 173
        }
107 174
      }
108 175
    }
109 176
  },
110 177
  "$type": "com.atproto.lexicon.schema",
111 178
  "lexicon": 1
112 179
}

Compare Other Versions

Lexicon Garden

@