net.atchan.richtext.facet

atchan.net

Schema Diff

+81 -1

From

CID
bafyreif3dj6l3ol...
Indexed At
2026-07-18 07:29 UTC
View this version

To

CID
bafyreigyzjg7i6m...
Indexed At
2026-08-15 17:10 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

6 breaking changes, 38 non-breaking changes.

Breaking Changes (6)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#color", src: "net.atchan.richtext.facet#color", tgt: "net.atchan.richtext.facet#color.value", kind: "prop", name: Some("value") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#ref", src: "net.atchan.richtext.facet#ref", tgt: "net.atchan.richtext.facet#ref.rkey", kind: "prop", name: Some("rkey") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#size", src: "net.atchan.richtext.facet#size", tgt: "net.atchan.richtext.facet#size.value", kind: "prop", name: Some("value") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#link", src: "net.atchan.richtext.facet#link", tgt: "net.atchan.richtext.facet#link.uri", kind: "prop", name: Some("uri") }
  • RemovedEdge RemovedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#font") }
  • RemovedEdge RemovedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
Non-Breaking Changes (38)
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#aa" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#code" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#color" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#color.value" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#kaomoji" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#link" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#link.uri" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#pre" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#ref" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#ref.rkey" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#size" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet#size.value" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant10" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant11" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant12" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant13" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant6" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant7" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant8" }
  • AddedVertex AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant9" }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant10", kind: "variant", name: Some("#code") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant11", kind: "variant", name: Some("#pre") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant12", kind: "variant", name: Some("#link") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant13", kind: "variant", name: Some("#ref") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#color") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant6", kind: "variant", name: Some("#size") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant7", kind: "variant", name: Some("#font") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant8", kind: "variant", name: Some("#kaomoji") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant9", kind: "variant", name: Some("#aa") }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant10", tgt: "net.atchan.richtext.facet#code", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant11", tgt: "net.atchan.richtext.facet#pre", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant12", tgt: "net.atchan.richtext.facet#link", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant13", tgt: "net.atchan.richtext.facet#ref", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#color", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant6", tgt: "net.atchan.richtext.facet#size", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant7", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant8", tgt: "net.atchan.richtext.facet#kaomoji", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "net.atchan.richtext.facet.features:items:variant9", tgt: "net.atchan.richtext.facet#aa", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "net.atchan.richtext.facet#aa" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#code" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#color" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#color.value" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#kaomoji" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#link" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#link.uri" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#pre" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#ref" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#ref.rkey" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#size" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet#size.value" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant10" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant11" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant12" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant13" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant6" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant7" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant8" }
  • AddedVertex { vertex_id: "net.atchan.richtext.facet.features:items:variant9" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#color", src: "net.atchan.richtext.facet#color", tgt: "net.atchan.richtext.facet#color.value", kind: "prop", name: Some("value") }
  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#ref", src: "net.atchan.richtext.facet#ref", tgt: "net.atchan.richtext.facet#ref.rkey", kind: "prop", name: Some("rkey") }
  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#size", src: "net.atchan.richtext.facet#size", tgt: "net.atchan.richtext.facet#size.value", kind: "prop", name: Some("value") }
  • Breaking: RequiredEdgeAdded { vertex_id: "net.atchan.richtext.facet#link", src: "net.atchan.richtext.facet#link", tgt: "net.atchan.richtext.facet#link.uri", kind: "prop", name: Some("uri") }
  • Breaking: RemovedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#font") }
  • Breaking: RemovedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant10", kind: "variant", name: Some("#code") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant11", kind: "variant", name: Some("#pre") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant12", kind: "variant", name: Some("#link") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant13", kind: "variant", name: Some("#ref") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant5", kind: "variant", name: Some("#color") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant6", kind: "variant", name: Some("#size") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant7", kind: "variant", name: Some("#font") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant8", kind: "variant", name: Some("#kaomoji") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items", tgt: "net.atchan.richtext.facet.features:items:variant9", kind: "variant", name: Some("#aa") }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant10", tgt: "net.atchan.richtext.facet#code", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant11", tgt: "net.atchan.richtext.facet#pre", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant12", tgt: "net.atchan.richtext.facet#link", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant13", tgt: "net.atchan.richtext.facet#ref", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant5", tgt: "net.atchan.richtext.facet#color", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant6", tgt: "net.atchan.richtext.facet#size", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant7", tgt: "net.atchan.richtext.facet#font", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant8", tgt: "net.atchan.richtext.facet#kaomoji", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "net.atchan.richtext.facet.features:items:variant9", tgt: "net.atchan.richtext.facet#aa", kind: "ref", name: None }
1 1
{
2 2
  "id": "net.atchan.richtext.facet",
3 3
  "defs": {
4 +
    "aa": {
5 +
      "type": "object",
6 +
      "properties": {},
7 +
      "description": "Facet feature rendering the range in a Shift_JIS art font, as a block with whitespace preserved. This is a choice of typeface, not a claim about what the range says: it is the font ASCII art (AA) is drawn against, and only in it does the art keep its intended proportions. No other facet is valid inside it."
8 +
    },
9 +
    "pre": {
10 +
      "type": "object",
11 +
      "properties": {},
12 +
      "description": "Facet feature marking the range as preformatted text, rendered as a block in a monospace font with whitespace preserved. No other facet is valid inside it."
13 +
    },
14 +
    "ref": {
15 +
      "type": "object",
16 +
      "required": [
17 +
        "rkey"
18 +
      ],
19 +
      "properties": {
20 +
        "rkey": {
21 +
          "type": "string",
22 +
          "format": "record-key"
23 +
        }
24 +
      },
25 +
      "description": "Facet feature marking the range as a quote-link to another post, given by its record key. The range covers the \">>rkey\" the author typed."
26 +
    },
4 27
    "bold": {
5 28
      "type": "object",
6 29
      "properties": {},
7 30
      "description": "Facet feature marking the range as bold."
8 31
    },
32 +
    "code": {
33 +
      "type": "object",
34 +
      "properties": {},
35 +
      "description": "Facet feature marking the range as inline code, rendered in a monospace font. No other facet is valid inside it."
36 +
    },
9 37
    "font": {
10 38
      "type": "object",
11 39
      "required": [
12 40
        "name"
13 41
      ],
14 42
      "properties": {
15 43
        "name": {
16 44
          "type": "string"
17 45
        }
18 46
      },
19 47
      "description": "Facet feature rendering the range in a named font"
20 48
    },
49 +
    "link": {
50 +
      "type": "object",
51 +
      "required": [
52 +
        "uri"
53 +
      ],
54 +
      "properties": {
55 +
        "uri": {
56 +
          "type": "string",
57 +
          "format": "uri"
58 +
        }
59 +
      },
60 +
      "description": "Facet feature marking the range as a link to a uri"
61 +
    },
21 62
    "main": {
22 63
      "type": "object",
23 64
      "required": [
24 65
        "index",
25 66
        "features"
26 67
      ],
27 68
      "properties": {
28 69
        "index": {
29 70
          "ref": "#byteSlice",
30 71
          "type": "ref"
31 72
        },
32 73
        "features": {
33 74
          "type": "array",
34 75
          "items": {
35 76
            "refs": [
36 77
              "#bold",
37 78
              "#italic",
38 79
              "#underline",
39 80
              "#strikethrough",
40 81
              "#spoiler",
41 -
              "#font"
82 +
              "#color",
83 +
              "#size",
84 +
              "#font",
85 +
              "#kaomoji",
86 +
              "#aa",
87 +
              "#code",
88 +
              "#pre",
89 +
              "#link",
90 +
              "#ref"
42 91
            ],
43 92
            "type": "union"
44 93
          },
45 94
          "minLength": 1
46 95
        }
47 96
      },
48 97
      "description": "A facet defines a range of rich text within a larger string."
49 98
    },
99 +
    "size": {
100 +
      "type": "object",
101 +
      "required": [
102 +
        "value"
103 +
      ],
104 +
      "properties": {
105 +
        "value": {
106 +
          "type": "integer",
107 +
          "maximum": 5,
108 +
          "minimum": 1
109 +
        }
110 +
      },
111 +
      "description": "Facet feature rendering the range at a relative text size from 1 (smallest) to 5 (largest), with 3 being the default."
112 +
    },
113 +
    "color": {
114 +
      "type": "object",
115 +
      "required": [
116 +
        "value"
117 +
      ],
118 +
      "properties": {
119 +
        "value": {
120 +
          "type": "string"
121 +
        }
122 +
      },
123 +
      "description": "Facet feature rendering the range in a color, given as a CSS hex color such as \"#ff0000\"."
124 +
    },
50 125
    "italic": {
51 126
      "type": "object",
52 127
      "properties": {},
53 128
      "description": "Facet feature marking the range as italic."
54 129
    },
130 +
    "kaomoji": {
131 +
      "type": "object",
132 +
      "properties": {},
133 +
      "description": "Facet feature marking the range as a kaomoji, ideally rendered in a Shift-JIS font."
134 +
    },
55 135
    "spoiler": {
56 136
      "type": "object",
57 137
      "properties": {},
58 138
      "description": "Facet feature marking the range as a spoiler, hidden until the reader interacts with it."
59 139
    },
60 140
    "byteSlice": {
61 141
      "type": "object",
62 142
      "required": [
63 143
        "byteStart",
64 144
        "byteEnd"
65 145
      ],
66 146
      "properties": {
67 147
        "byteEnd": {
68 148
          "type": "integer",
69 149
          "minimum": 0
70 150
        },
71 151
        "byteStart": {
72 152
          "type": "integer",
73 153
          "minimum": 0
74 154
        }
75 155
      },
76 156
      "description": "Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets."
77 157
    },
78 158
    "underline": {
79 159
      "type": "object",
80 160
      "properties": {},
81 161
      "description": "Facet feature marking the range as underlined."
82 162
    },
83 163
    "strikethrough": {
84 164
      "type": "object",
85 165
      "properties": {},
86 166
      "description": "Facet feature marking the range as struck through."
87 167
    }
88 168
  },
89 169
  "$type": "com.atproto.lexicon.schema",
90 170
  "lexicon": 1
91 171
}

Compare Other Versions

Lexicon Garden

@