dev.knotless.defs

lexicons.knotless.dev

Schema Diff

+151 -1

From

CID
bafyreifmrcakod5...
Indexed At
2026-10-29 04:27 UTC
View this version

To

CID
bafyreic7gmox6tq...
Indexed At
2026-10-29 06:54 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

10 breaking changes, 46 non-breaking changes.

Breaking Changes (10)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#mention", src: "dev.knotless.defs#mention", tgt: "dev.knotless.defs#mention.did", kind: "prop", name: Some("did") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineView", src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.outdated", kind: "prop", name: Some("outdated") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineView", src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.line", kind: "prop", name: Some("line") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineView", src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.path", kind: "prop", name: Some("path") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#byteSlice", src: "dev.knotless.defs#byteSlice", tgt: "dev.knotless.defs#byteSlice.byteEnd", kind: "prop", name: Some("byteEnd") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#byteSlice", src: "dev.knotless.defs#byteSlice", tgt: "dev.knotless.defs#byteSlice.byteStart", kind: "prop", name: Some("byteStart") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#facet", src: "dev.knotless.defs#facet", tgt: "dev.knotless.defs#facet.features", kind: "prop", name: Some("features") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#facet", src: "dev.knotless.defs#facet", tgt: "dev.knotless.defs#facet.index", kind: "prop", name: Some("index") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineTextView", src: "dev.knotless.defs#lineTextView", tgt: "dev.knotless.defs#lineTextView.text", kind: "prop", name: Some("text") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineTextView", src: "dev.knotless.defs#lineTextView", tgt: "dev.knotless.defs#lineTextView.number", kind: "prop", name: Some("number") }
Non-Breaking Changes (46)
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#byteSlice" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#byteSlice.byteEnd" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#byteSlice.byteStart" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#commentView.line" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#commentView.reply" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#commentView.resolved" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#commentView.review" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#facet" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#facet.features" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#facet.features:items" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#facet.features:items:variant0" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#facet.index" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#itemView.draft" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#itemView.reviewers" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#itemView.reviewers:items" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineTextView" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineTextView.number" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineTextView.text" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.line" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.lines" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.lines:items" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.outdated" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.path" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.side" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#lineView.startLine" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#mention" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#mention.did" }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.line", kind: "prop", name: Some("line") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.reply", kind: "prop", name: Some("reply") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.resolved", kind: "prop", name: Some("resolved") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.review", kind: "prop", name: Some("review") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#commentView.line", tgt: "dev.knotless.defs#lineView", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#facet.features", tgt: "dev.knotless.defs#facet.features:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#facet.features:items", tgt: "dev.knotless.defs#facet.features:items:variant0", kind: "variant", name: Some("#mention") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#facet.features:items:variant0", tgt: "dev.knotless.defs#mention", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#facet.index", tgt: "dev.knotless.defs#byteSlice", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#itemView", tgt: "dev.knotless.defs#itemView.draft", kind: "prop", name: Some("draft") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#itemView", tgt: "dev.knotless.defs#itemView.reviewers", kind: "prop", name: Some("reviewers") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#itemView.reviewers", tgt: "dev.knotless.defs#itemView.reviewers:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#itemView.reviewers:items", tgt: "dev.knotless.defs#actorView", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.lines", kind: "prop", name: Some("lines") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.side", kind: "prop", name: Some("side") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.startLine", kind: "prop", name: Some("startLine") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#lineView.lines", tgt: "dev.knotless.defs#lineView.lines:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#lineView.lines:items", tgt: "dev.knotless.defs#lineTextView", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "dev.knotless.defs#byteSlice" }
  • AddedVertex { vertex_id: "dev.knotless.defs#byteSlice.byteEnd" }
  • AddedVertex { vertex_id: "dev.knotless.defs#byteSlice.byteStart" }
  • AddedVertex { vertex_id: "dev.knotless.defs#commentView.line" }
  • AddedVertex { vertex_id: "dev.knotless.defs#commentView.reply" }
  • AddedVertex { vertex_id: "dev.knotless.defs#commentView.resolved" }
  • AddedVertex { vertex_id: "dev.knotless.defs#commentView.review" }
  • AddedVertex { vertex_id: "dev.knotless.defs#facet" }
  • AddedVertex { vertex_id: "dev.knotless.defs#facet.features" }
  • AddedVertex { vertex_id: "dev.knotless.defs#facet.features:items" }
  • AddedVertex { vertex_id: "dev.knotless.defs#facet.features:items:variant0" }
  • AddedVertex { vertex_id: "dev.knotless.defs#facet.index" }
  • AddedVertex { vertex_id: "dev.knotless.defs#itemView.draft" }
  • AddedVertex { vertex_id: "dev.knotless.defs#itemView.reviewers" }
  • AddedVertex { vertex_id: "dev.knotless.defs#itemView.reviewers:items" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineTextView" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineTextView.number" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineTextView.text" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.line" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.lines" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.lines:items" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.outdated" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.path" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.side" }
  • AddedVertex { vertex_id: "dev.knotless.defs#lineView.startLine" }
  • AddedVertex { vertex_id: "dev.knotless.defs#mention" }
  • AddedVertex { vertex_id: "dev.knotless.defs#mention.did" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#byteSlice", src: "dev.knotless.defs#byteSlice", tgt: "dev.knotless.defs#byteSlice.byteEnd", kind: "prop", name: Some("byteEnd") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#byteSlice", src: "dev.knotless.defs#byteSlice", tgt: "dev.knotless.defs#byteSlice.byteStart", kind: "prop", name: Some("byteStart") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#facet", src: "dev.knotless.defs#facet", tgt: "dev.knotless.defs#facet.features", kind: "prop", name: Some("features") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#facet", src: "dev.knotless.defs#facet", tgt: "dev.knotless.defs#facet.index", kind: "prop", name: Some("index") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#mention", src: "dev.knotless.defs#mention", tgt: "dev.knotless.defs#mention.did", kind: "prop", name: Some("did") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineTextView", src: "dev.knotless.defs#lineTextView", tgt: "dev.knotless.defs#lineTextView.text", kind: "prop", name: Some("text") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineTextView", src: "dev.knotless.defs#lineTextView", tgt: "dev.knotless.defs#lineTextView.number", kind: "prop", name: Some("number") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineView", src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.outdated", kind: "prop", name: Some("outdated") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineView", src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.line", kind: "prop", name: Some("line") }
  • Breaking: RequiredEdgeAdded { vertex_id: "dev.knotless.defs#lineView", src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.path", kind: "prop", name: Some("path") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.line", kind: "prop", name: Some("line") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.reply", kind: "prop", name: Some("reply") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.resolved", kind: "prop", name: Some("resolved") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.review", kind: "prop", name: Some("review") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#commentView.line", tgt: "dev.knotless.defs#lineView", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#facet.features", tgt: "dev.knotless.defs#facet.features:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#facet.features:items", tgt: "dev.knotless.defs#facet.features:items:variant0", kind: "variant", name: Some("#mention") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#facet.features:items:variant0", tgt: "dev.knotless.defs#mention", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#facet.index", tgt: "dev.knotless.defs#byteSlice", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#itemView", tgt: "dev.knotless.defs#itemView.draft", kind: "prop", name: Some("draft") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#itemView", tgt: "dev.knotless.defs#itemView.reviewers", kind: "prop", name: Some("reviewers") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#itemView.reviewers", tgt: "dev.knotless.defs#itemView.reviewers:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#itemView.reviewers:items", tgt: "dev.knotless.defs#actorView", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.lines", kind: "prop", name: Some("lines") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.side", kind: "prop", name: Some("side") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#lineView", tgt: "dev.knotless.defs#lineView.startLine", kind: "prop", name: Some("startLine") }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#lineView.lines", tgt: "dev.knotless.defs#lineView.lines:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "dev.knotless.defs#lineView.lines:items", tgt: "dev.knotless.defs#lineTextView", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "actorView": {
5 5
      "description": "An account, as an appview shows it beside what it did.",
6 6
      "properties": {
7 7
        "avatar": {
8 8
          "description": "The account's picture, as in dev.knotless.getProfile#profileView.",
9 9
          "format": "uri",
10 10
          "type": "string"
11 11
        },
12 12
        "did": {
13 13
          "format": "did",
14 14
          "type": "string"
15 15
        },
16 16
        "handle": {
17 17
          "description": "The handle the account claims, when it resolves back to it; else the DID.",
18 18
          "type": "string"
19 19
        }
20 20
      },
21 21
      "required": [
22 22
        "did",
23 23
        "handle"
24 24
      ],
25 25
      "type": "object"
26 26
    },
27 27
    "actorViewerState": {
28 28
      "description": "What the account asking a query has to do with an account.",
29 29
      "properties": {
30 30
        "blocking": {
31 31
          "description": "Its dev.knotless.block record keeping the account out of all its repositories, if it has one.",
32 32
          "format": "at-uri",
33 33
          "type": "string"
34 34
        },
35 35
        "following": {
36 36
          "description": "Its dev.knotless.follow record naming the account, if it follows it.",
37 37
          "format": "at-uri",
38 38
          "type": "string"
39 39
        }
40 40
      },
41 41
      "type": "object"
42 42
    },
43 +
    "byteSlice": {
44 +
      "description": "A span of a text, by its UTF-8 bytes, counted from zero: the start inclusive, the end exclusive.",
45 +
      "properties": {
46 +
        "byteEnd": {
47 +
          "minimum": 0,
48 +
          "type": "integer"
49 +
        },
50 +
        "byteStart": {
51 +
          "minimum": 0,
52 +
          "type": "integer"
53 +
        }
54 +
      },
55 +
      "required": [
56 +
        "byteStart",
57 +
        "byteEnd"
58 +
      ],
59 +
      "type": "object"
60 +
    },
43 61
    "changesView": {
44 62
      "description": "What a pull brings in: for a merged one, what its merge brought into the base; otherwise what its branch has since it left the base.",
45 63
      "properties": {
46 64
        "commits": {
47 65
          "description": "Oldest first.",
48 66
          "items": {
49 67
            "ref": "#commitView",
50 68
            "type": "ref"
51 69
          },
52 70
          "type": "array"
53 71
        },
54 72
        "files": {
55 73
          "items": {
56 74
            "ref": "#fileDiffView",
57 75
            "type": "ref"
58 76
          },
59 77
          "type": "array"
60 78
        },
61 79
        "head": {
62 80
          "description": "For an open pull, the hex object ID of the commit its branch is at: what its checks and reviews are of.",
63 81
          "type": "string"
64 82
        },
65 83
        "repo": {
66 84
          "description": "The repository whose commit pages show its commits.",
67 85
          "ref": "#repoViewBasic",
68 86
          "type": "ref"
69 87
        }
70 88
      },
71 89
      "required": [
72 90
        "repo",
73 91
        "commits",
74 92
        "files"
75 93
      ],
76 94
      "type": "object"
77 95
    },
78 96
    "checkImageView": {
79 97
      "description": "A picture a check made: screenshots of the pages a change moved, say.",
80 98
      "properties": {
81 99
        "alt": {
82 100
          "description": "What it shows.",
83 101
          "type": "string"
84 102
        },
85 103
        "url": {
86 104
          "description": "Where this appview serves it, as a path.",
87 105
          "type": "string"
88 106
        }
89 107
      },
90 108
      "required": [
91 109
        "alt",
92 110
        "url"
93 111
      ],
94 112
      "type": "object"
95 113
    },
96 114
    "checkView": {
97 115
      "description": "The newest run of a workflow, as a runner the repository names in its record reported it.",
98 116
      "properties": {
99 117
        "commit": {
100 118
          "description": "The commit it ran at, in hex.",
101 119
          "type": "string"
102 120
        },
103 121
        "error": {
104 122
          "description": "Why it could not run.",
105 123
          "type": "string"
106 124
        },
107 125
        "finishedAt": {
108 126
          "format": "datetime",
109 127
          "type": "string"
110 128
        },
111 129
        "images": {
112 130
          "description": "The pictures it made to be looked at, in order.",
113 131
          "items": {
114 132
            "ref": "#checkImageView",
115 133
            "type": "ref"
116 134
          },
117 135
          "type": "array"
118 136
        },
119 137
        "repo": {
120 138
          "description": "The repository it is of, whose pages show it.",
121 139
          "ref": "#repoViewBasic",
122 140
          "type": "ref"
123 141
        },
124 142
        "skipped": {
125 143
          "description": "For a `success` that ran nothing, as the change touched none of the paths its workflow names: why.",
126 144
          "type": "string"
127 145
        },
128 146
        "startedAt": {
129 147
          "format": "datetime",
130 148
          "type": "string"
131 149
        },
132 150
        "status": {
133 151
          "description": "`queued` is a run filed and waiting for a job on its runner, no step started yet.",
134 152
          "knownValues": [
135 153
            "queued",
136 154
            "running",
137 155
            "success",
138 156
            "failure",
139 157
            "error",
140 158
            "cancelled"
141 159
          ],
142 160
          "type": "string"
143 161
        },
144 162
        "uri": {
145 163
          "description": "Its dev.knotless.check record.",
146 164
          "format": "at-uri",
147 165
          "type": "string"
148 166
        },
149 167
        "workflow": {
150 168
          "type": "string"
151 169
        }
152 170
      },
153 171
      "required": [
154 172
        "uri",
155 173
        "repo",
156 174
        "workflow",
157 175
        "status",
158 176
        "commit",
159 177
        "startedAt",
160 178
        "images"
161 179
      ],
162 180
      "type": "object"
163 181
    },
164 182
    "commentView": {
165 183
      "description": "Something said on a pull or an issue.",
166 184
      "properties": {
167 185
        "author": {
168 186
          "ref": "#actorView",
169 187
          "type": "ref"
170 188
        },
171 189
        "body": {
172 190
          "description": "What it says, as its author wrote it, in Markdown.",
173 191
          "type": "string"
174 192
        },
175 193
        "commit": {
176 -
          "description": "For a review of a pull, the hex object ID of the head it looked at.",
194 +
          "description": "For a review of a pull, the hex object ID of the head it looked at; for a comment on its lines, the commit they are in.",
177 195
          "type": "string"
178 196
        },
179 197
        "createdAt": {
180 198
          "format": "datetime",
181 199
          "type": "string"
182 200
        },
183 201
        "html": {
184 202
          "description": "What it says, its Markdown made into HTML: raw HTML shown as text, and links made relative to the repository.",
185 203
          "type": "string"
186 204
        },
205 +
        "line": {
206 +
          "description": "For a comment on a pull's lines, which, as they stand now.",
207 +
          "ref": "#lineView",
208 +
          "type": "ref"
209 +
        },
187 210
        "reactions": {
188 211
          "description": "How accounts reacted to it, by content, in the order dev.knotless.defs#reactionContent lists them. Absent when none did.",
189 212
          "items": {
190 213
            "ref": "#reactionCountView",
191 214
            "type": "ref"
192 215
          },
193 216
          "type": "array"
194 217
        },
218 +
        "reply": {
219 +
          "description": "The comment starting the thread on a pull's lines that this answers.",
220 +
          "format": "at-uri",
221 +
          "type": "string"
222 +
        },
223 +
        "resolved": {
224 +
          "description": "For a comment starting a thread on a pull's lines, whether the thread is resolved.",
225 +
          "type": "boolean"
226 +
        },
227 +
        "review": {
228 +
          "description": "The review this was sent with, as one of its line comments.",
229 +
          "format": "at-uri",
230 +
          "type": "string"
231 +
        },
195 232
        "updatedAt": {
196 233
          "description": "When its author last changed it, if they have.",
197 234
          "format": "datetime",
198 235
          "type": "string"
199 236
        },
200 237
        "uri": {
201 238
          "description": "Its dev.knotless.comment record.",
202 239
          "format": "at-uri",
203 240
          "type": "string"
204 241
        },
205 242
        "verdict": {
206 243
          "description": "For a review, what it found.",
207 244
          "knownValues": [
208 245
            "approve",
209 246
            "changes"
210 247
          ],
211 248
          "type": "string"
212 249
        }
213 250
      },
214 251
      "required": [
215 252
        "author",
216 253
        "createdAt",
217 254
        "html"
218 255
      ],
219 256
      "type": "object"
220 257
    },
221 258
    "commitAuthorView": {
222 259
      "description": "Who wrote a commit or helped to: by the name git gives, and by account when that is one of the repository's people whose address it is.",
223 260
      "properties": {
224 261
        "actor": {
225 262
          "ref": "#actorView",
226 263
          "type": "ref"
227 264
        },
228 265
        "agent": {
229 266
          "description": "The coding agent whose address it is, when it is one the pages know the face of.",
230 267
          "knownValues": [
231 268
            "claude"
232 269
          ],
233 270
          "type": "string"
234 271
        },
235 272
        "name": {
236 273
          "description": "The name git records.",
237 274
          "type": "string"
238 275
        }
239 276
      },
240 277
      "required": [
241 278
        "name"
242 279
      ],
243 280
      "type": "object"
244 281
    },
245 282
    "commitRefView": {
246 283
      "description": "A commit, by its object name.",
247 284
      "properties": {
248 285
        "sha": {
249 286
          "description": "In hex.",
250 287
          "type": "string"
251 288
        }
252 289
      },
253 290
      "required": [
254 291
        "sha"
255 292
      ],
256 293
      "type": "object"
257 294
    },
258 295
    "commitView": {
259 296
      "description": "A commit, with the accounts that wrote it where the repository's pages believe their claims (dev.knotless.emails).",
260 297
      "properties": {
261 298
        "author": {
262 299
          "ref": "#commitAuthorView",
263 300
          "type": "ref"
264 301
        },
265 302
        "coauthors": {
266 303
          "description": "Who its message's `Co-authored-by` trailers name.",
267 304
          "items": {
268 305
            "ref": "#commitAuthorView",
269 306
            "type": "ref"
270 307
          },
271 308
          "type": "array"
272 309
        },
273 310
        "committedAt": {
274 311
          "description": "When it was committed: what history runs in, as its author's date need not.",
275 312
          "format": "datetime",
276 313
          "type": "string"
277 314
        },
278 315
        "committer": {
279 316
          "description": "Who committed it, when someone other than its author did.",
280 317
          "ref": "#commitAuthorView",
281 318
          "type": "ref"
282 319
        },
283 320
        "date": {
284 321
          "description": "When its author made it, which a rebase or a squash keeps.",
285 322
          "format": "datetime",
286 323
          "type": "string"
287 324
        },
288 325
        "message": {
289 326
          "description": "Its message, less the last line naming the pull it merged, if it did.",
290 327
          "type": "string"
291 328
        },
292 329
        "parents": {
293 330
          "items": {
294 331
            "ref": "#commitRefView",
295 332
            "type": "ref"
296 333
          },
297 334
          "type": "array"
298 335
        },
299 336
        "pull": {
300 337
          "description": "The pull its message's last line names, as a squash merge records it, when that is a pull on this repository.",
301 338
          "ref": "#itemViewBasic",
302 339
          "type": "ref"
303 340
        },
304 341
        "sha": {
305 342
          "description": "Its object name, in hex.",
306 343
          "type": "string"
307 344
        }
308 345
      },
309 346
      "required": [
310 347
        "sha",
311 348
        "parents",
312 349
        "author",
313 350
        "coauthors",
314 351
        "date",
315 352
        "message"
316 353
      ],
317 354
      "type": "object"
318 355
    },
319 356
    "diffRowView": {
320 357
      "description": "One row of a file's diff: a hunk header, a note, or a line with its old and new numbers.",
321 358
      "properties": {
322 359
        "kind": {
323 360
          "description": "`h` for a hunk header, `x` for a note, `a` for a line added, `d` for one removed, or empty for context.",
324 361
          "type": "string"
325 362
        },
326 363
        "line": {
327 364
          "description": "Whether it is a line of the file.",
328 365
          "type": "boolean"
329 366
        },
330 367
        "new": {
331 368
          "description": "Its number after.",
332 369
          "minimum": 0,
333 370
          "type": "integer"
334 371
        },
335 372
        "old": {
336 373
          "description": "Its number before.",
337 374
          "minimum": 0,
338 375
          "type": "integer"
339 376
        },
340 377
        "text": {
341 378
          "type": "string"
342 379
        }
343 380
      },
344 381
      "required": [
345 382
        "kind",
346 383
        "line",
347 384
        "text"
348 385
      ],
349 386
      "type": "object"
350 387
    },
388 +
    "facet": {
389 +
      "description": "Where a text says more than its words, shaped as app.bsky.richtext.facet: the span it covers and what that span is. A pull's, an issue's or a comment's body has its own, and a pull's or an issue's title its own.",
390 +
      "properties": {
391 +
        "features": {
392 +
          "description": "What the span is. Kinds unknown to a reader are passed over.",
393 +
          "items": {
394 +
            "refs": [
395 +
              "#mention"
396 +
            ],
397 +
            "type": "union"
398 +
          },
399 +
          "maxLength": 8,
400 +
          "type": "array"
401 +
        },
402 +
        "index": {
403 +
          "ref": "#byteSlice",
404 +
          "type": "ref"
405 +
        }
406 +
      },
407 +
      "required": [
408 +
        "index",
409 +
        "features"
410 +
      ],
411 +
      "type": "object"
412 +
    },
351 413
    "fileDiffView": {
352 414
      "description": "One file of a diff, or why its rows are not shown.",
353 415
      "properties": {
354 416
        "added": {
355 417
          "description": "Lines added.",
356 418
          "minimum": 0,
357 419
          "type": "integer"
358 420
        },
359 421
        "hunkCount": {
360 422
          "description": "Of those rows, how many are hunk headers, which a page may draw taller than a line.",
361 423
          "minimum": 0,
362 424
          "type": "integer"
363 425
        },
364 426
        "new": {
365 427
          "description": "Its path after.",
366 428
          "type": "string"
367 429
        },
368 430
        "note": {
369 431
          "description": "Why its rows are not shown, when they are not.",
370 432
          "type": "string"
371 433
        },
372 434
        "old": {
373 435
          "description": "Its path before.",
374 436
          "type": "string"
375 437
        },
376 438
        "ranges": {
377 439
          "description": "The ranges its highlighting paints, encoded as the pages read them.",
378 440
          "type": "string"
379 441
        },
380 442
        "removed": {
381 443
          "description": "Lines removed.",
382 444
          "minimum": 0,
383 445
          "type": "integer"
384 446
        },
385 447
        "rowCount": {
386 448
          "description": "Where its rows are left out but would be shown, as dev.knotless.getThread's filesOnly leaves them, how many there are: the room a page keeps for them until they come.",
387 449
          "minimum": 0,
388 450
          "type": "integer"
389 451
        },
390 452
        "rows": {
391 453
          "items": {
392 454
            "ref": "#diffRowView",
393 455
            "type": "ref"
394 456
          },
395 457
          "type": "array"
396 458
        },
397 459
        "status": {
398 460
          "knownValues": [
399 461
            "added",
400 462
            "deleted",
401 463
            "renamed",
402 464
            "modified"
403 465
          ],
404 466
          "type": "string"
405 467
        }
406 468
      },
407 469
      "required": [
408 470
        "old",
409 471
        "new",
410 472
        "status",
411 473
        "added",
412 474
        "removed",
413 475
        "rows"
414 476
      ],
415 477
      "type": "object"
416 478
    },
417 479
    "followState": {
418 480
      "description": "An account's followers, as following or unfollowing it leaves them.",
419 481
      "properties": {
420 482
        "followersCount": {
421 483
          "description": "How many accounts follow it now.",
422 484
          "minimum": 0,
423 485
          "type": "integer"
424 486
        },
425 487
        "following": {
426 488
          "description": "The asker's dev.knotless.follow record naming it; absent once unfollowed.",
427 489
          "format": "at-uri",
428 490
          "type": "string"
429 491
        }
430 492
      },
431 493
      "required": [
432 494
        "followersCount"
433 495
      ],
434 496
      "type": "object"
435 497
    },
436 498
    "image": {
437 499
      "description": "A picture a pull's, an issue's or a comment's body shows, attached so its author's PDS keeps it. The body links to it on that PDS, as `com.atproto.sync.getBlob` serves it, saying what it shows as Markdown's alt text; readers may show it from elsewhere, as dev.knotless.getAttachment does.",
438 500
      "properties": {
439 501
        "image": {
440 502
          "accept": [
441 503
            "image/png",
442 504
            "image/jpeg",
443 505
            "image/webp",
444 506
            "image/gif"
445 507
          ],
446 508
          "maxSize": 1000000,
447 509
          "type": "blob"
448 510
        }
449 511
      },
450 512
      "required": [
451 513
        "image"
452 514
      ],
453 515
      "type": "object"
454 516
    },
455 517
    "itemView": {
456 518
      "description": "A pull or an issue in a list of them.",
457 519
      "properties": {
458 520
        "author": {
459 521
          "description": "Who opened it.",
460 522
          "ref": "#actorView",
461 523
          "type": "ref"
462 524
        },
463 525
        "comments": {
464 526
          "description": "How many comments are on it, its own body aside.",
465 527
          "minimum": 0,
466 528
          "type": "integer"
467 529
        },
468 530
        "createdAt": {
469 531
          "format": "datetime",
470 532
          "type": "string"
471 533
        },
534 +
        "draft": {
535 +
          "description": "A pull its author has not marked ready to merge. Not, when absent.",
536 +
          "type": "boolean"
537 +
        },
472 538
        "kind": {
473 539
          "knownValues": [
474 540
            "pull",
475 541
            "issue"
476 542
          ],
477 543
          "type": "string"
478 544
        },
479 545
        "labels": {
480 546
          "description": "The labels it carries, as the repository defines them, in the order it does. Absent when it carries none.",
481 547
          "items": {
482 548
            "ref": "dev.knotless.repo#label",
483 549
            "type": "ref"
484 550
          },
485 551
          "type": "array"
486 552
        },
553 +
        "reviewers": {
554 +
          "description": "Those a pull's author asks to review it, in the order asked. Absent when it asks no one.",
555 +
          "items": {
556 +
            "ref": "#actorView",
557 +
            "type": "ref"
558 +
          },
559 +
          "type": "array"
560 +
        },
487 561
        "state": {
488 562
          "description": "A merged pull is merged; a closed one, or an issue, closed.",
489 563
          "knownValues": [
490 564
            "open",
491 565
            "closed",
492 566
            "merged"
493 567
          ],
494 568
          "type": "string"
495 569
        },
496 570
        "title": {
497 571
          "type": "string"
498 572
        },
499 573
        "updatedAt": {
500 574
          "description": "When its author last changed its title or body, if they have.",
501 575
          "format": "datetime",
502 576
          "type": "string"
503 577
        },
504 578
        "uri": {
505 579
          "description": "Its dev.knotless.pull or dev.knotless.issue record.",
506 580
          "format": "at-uri",
507 581
          "type": "string"
508 582
        }
509 583
      },
510 584
      "required": [
511 585
        "uri",
512 586
        "kind",
513 587
        "title",
514 588
        "state",
515 589
        "author",
516 590
        "createdAt",
517 591
        "comments"
518 592
      ],
519 593
      "type": "object"
520 594
    },
521 595
    "itemViewBasic": {
522 596
      "description": "A pull or an issue, by its record and its title.",
523 597
      "properties": {
524 598
        "title": {
525 599
          "type": "string"
526 600
        },
527 601
        "uri": {
528 602
          "description": "Its dev.knotless.pull or dev.knotless.issue record.",
529 603
          "format": "at-uri",
530 604
          "type": "string"
531 605
        }
532 606
      },
533 607
      "required": [
534 608
        "uri",
535 609
        "title"
536 610
      ],
537 611
      "type": "object"
538 612
    },
539 613
    "languageView": {
540 614
      "description": "One language a repository is written in.",
541 615
      "properties": {
542 616
        "bytes": {
543 617
          "minimum": 0,
544 618
          "type": "integer"
545 619
        },
546 620
        "color": {
547 621
          "description": "Its color, as linguist has it.",
548 622
          "type": "string"
549 623
        },
550 624
        "name": {
551 625
          "description": "Its name, or `Other` for the languages each under one percent.",
552 626
          "type": "string"
553 627
        },
554 628
        "permille": {
555 629
          "description": "Its share of all the bytes counted, in tenths of a percent.",
556 630
          "maximum": 1000,
557 631
          "minimum": 0,
558 632
          "type": "integer"
559 633
        }
560 634
      },
561 635
      "required": [
562 636
        "name",
563 637
        "color",
564 638
        "bytes",
565 639
        "permille"
566 640
      ],
567 641
      "type": "object"
568 642
    },
643 +
    "lineTextView": {
644 +
      "description": "One line of a file.",
645 +
      "properties": {
646 +
        "number": {
647 +
          "description": "Counting from 1.",
648 +
          "minimum": 1,
649 +
          "type": "integer"
650 +
        },
651 +
        "text": {
652 +
          "type": "string"
653 +
        }
654 +
      },
655 +
      "required": [
656 +
        "number",
657 +
        "text"
658 +
      ],
659 +
      "type": "object"
660 +
    },
661 +
    "lineView": {
662 +
      "description": "The lines of a pull's diff a comment is on.",
663 +
      "properties": {
664 +
        "line": {
665 +
          "description": "The last line.",
666 +
          "minimum": 1,
667 +
          "type": "integer"
668 +
        },
669 +
        "lines": {
670 +
          "description": "The lines as they were at the comment's commit, and for one alone a few before it; absent when that commit can no longer be read.",
671 +
          "items": {
672 +
            "ref": "#lineTextView",
673 +
            "type": "ref"
674 +
          },
675 +
          "type": "array"
676 +
        },
677 +
        "outdated": {
678 +
          "description": "Whether that side of the file has changed since the comment's commit, so its lines may no longer be where they were.",
679 +
          "type": "boolean"
680 +
        },
681 +
        "path": {
682 +
          "description": "The file's path on that side.",
683 +
          "type": "string"
684 +
        },
685 +
        "side": {
686 +
          "description": "`old` for the side the pull leaves; absent, `new`.",
687 +
          "knownValues": [
688 +
            "old",
689 +
            "new"
690 +
          ],
691 +
          "type": "string"
692 +
        },
693 +
        "startLine": {
694 +
          "description": "The first, for more than one.",
695 +
          "minimum": 1,
696 +
          "type": "integer"
697 +
        }
698 +
      },
699 +
      "required": [
700 +
        "path",
701 +
        "line",
702 +
        "outdated"
703 +
      ],
704 +
      "type": "object"
705 +
    },
569 706
    "link": {
570 707
      "description": "A link shown on an account's profile or a repository's pages.",
571 708
      "properties": {
572 709
        "title": {
573 710
          "description": "What to call it. Readers fall back to the address's host.",
574 711
          "maxGraphemes": 40,
575 712
          "maxLength": 320,
576 713
          "type": "string"
577 714
        },
578 715
        "url": {
579 716
          "description": "Where it goes: an http or https address.",
580 717
          "format": "uri",
581 718
          "type": "string"
582 719
        }
583 720
      },
584 721
      "required": [
585 722
        "url"
586 723
      ],
587 724
      "type": "object"
588 725
    },
726 +
    "mention": {
727 +
      "description": "An account the span, `@handle` in the text, mentions: kept by DID, so it names the account still after its handle changes. The account hears of it as a notification.",
728 +
      "properties": {
729 +
        "did": {
730 +
          "format": "did",
731 +
          "type": "string"
732 +
        }
733 +
      },
734 +
      "required": [
735 +
        "did"
736 +
      ],
737 +
      "type": "object"
738 +
    },
589 739
    "minutesView": {
590 740
      "description": "The minutes a runner the repository names counts for its owner's public repositories, from its dev.knotless.minutes record.",
591 741
      "properties": {
592 742
        "allowance": {
593 743
          "description": "The minutes in 30 days it gives the owner's runs before they go one at a time. Absent when there is no limit.",
594 744
          "minimum": 1,
595 745
          "type": "integer"
596 746
        },
597 747
        "freeing": {
598 748
          "description": "When minutes counted now stop counting, soonest first.",
599 749
          "items": {
600 750
            "ref": "dev.knotless.minutes#freeing",
601 751
            "type": "ref"
602 752
          },
603 753
          "type": "array"
604 754
        },
605 755
        "minutes": {
606 756
          "description": "The minutes steps took in the 30 days up to `updatedAt`.",
607 757
          "minimum": 0,
608 758
          "type": "integer"
609 759
        },
610 760
        "runner": {
611 761
          "description": "The runner's account.",
612 762
          "ref": "#actorView",
613 763
          "type": "ref"
614 764
        },
615 765
        "updatedAt": {
616 766
          "description": "When the runner last counted.",
617 767
          "format": "datetime",
618 768
          "type": "string"
619 769
        }
620 770
      },
621 771
      "required": [
622 772
        "runner",
623 773
        "minutes",
624 774
        "updatedAt"
625 775
      ],
626 776
      "type": "object"
627 777
    },
628 778
    "packageView": {
629 779
      "description": "One package a repository publishes.",
630 780
      "properties": {
631 781
        "image": {
632 782
          "description": "True when its latest version, or its newest when none is latest, is a container image.",
633 783
          "type": "boolean"
634 784
        },
635 785
        "latest": {
636 786
          "description": "Its latest version: the highest with no pre-release part. Absent when it has only pre-releases.",
637 787
          "type": "string"
638 788
        },
639 789
        "name": {
640 790
          "description": "The package's name.",
641 791
          "type": "string"
642 792
        },
643 793
        "releaseCount": {
644 794
          "description": "How many versions of it are published.",
645 795
          "minimum": 0,
646 796
          "type": "integer"
647 797
        }
648 798
      },
649 799
      "required": [
650 800
        "name"
651 801
      ],
652 802
      "type": "object"
653 803
    },
654 804
    "pullHeadView": {
655 805
      "description": "What a pull brings in: a branch of a repository.",
656 806
      "properties": {
657 807
        "branch": {
658 808
          "type": "string"
659 809
        },
660 810
        "repo": {
661 811
          "description": "The repository the branch is on, if the index knows it.",
662 812
          "ref": "#repoViewBasic",
663 813
          "type": "ref"
664 814
        }
665 815
      },
666 816
      "required": [
667 817
        "branch"
668 818
      ],
669 819
      "type": "object"
670 820
    },
671 821
    "queueStateView": {
672 822
      "description": "Where an open pull stands in its target branch's merge queue.",
673 823
      "properties": {
674 824
        "checks": {
675 825
          "description": "While its batch is being checked or landing, the batch's checks; once ejected by checks that failed, those.",
676 826
          "items": {
677 827
            "ref": "#checkView",
678 828
            "type": "ref"
679 829
          },
680 830
          "type": "array"
681 831
        },
682 832
        "createdAt": {
683 833
          "description": "When it was queued or ejected.",
684 834
          "format": "datetime",
685 835
          "type": "string"
686 836
        },
687 837
        "reason": {
688 838
          "description": "Why it was ejected, as the runner said.",
689 839
          "type": "string"
690 840
        },
691 841
        "said": {
692 842
          "description": "Where it stands, in words: `Queued, 3rd of 5`, `In a batch of 4 being checked`, `Landing`, or why it was ejected.",
693 843
          "type": "string"
694 844
        },
695 845
        "state": {
696 846
          "knownValues": [
697 847
            "queued",
698 848
            "ejected"
699 849
          ],
700 850
          "type": "string"
701 851
        }
702 852
      },
703 853
      "required": [
704 854
        "state",
705 855
        "createdAt",
706 856
        "said",
707 857
        "checks"
708 858
      ],
709 859
      "type": "object"
710 860
    },
711 861
    "reactionContent": {
712 862
      "description": "What a reaction says, as GitHub's eight: a thumbs up, a thumbs down, a laugh, a party popper, a confused face, a heart, a rocket and eyes.",
713 863
      "knownValues": [
714 864
        "+1",
715 865
        "-1",
716 866
        "laugh",
717 867
        "hooray",
718 868
        "confused",
719 869
        "heart",
720 870
        "rocket",
721 871
        "eyes"
722 872
      ],
723 873
      "maxLength": 32,
724 874
      "type": "string"
725 875
    },
726 876
    "reactionCountView": {
727 877
      "description": "How many accounts reacted to something with one content.",
728 878
      "properties": {
729 879
        "content": {
730 880
          "ref": "#reactionContent",
731 881
          "type": "ref"
732 882
        },
733 883
        "count": {
734 884
          "description": "How many accounts reacted so, each once.",
735 885
          "minimum": 0,
736 886
          "type": "integer"
737 887
        },
738 888
        "reaction": {
739 889
          "description": "The asker's dev.knotless.reaction record of this content on it, if they reacted so.",
740 890
          "format": "at-uri",
741 891
          "type": "string"
742 892
        }
743 893
      },
744 894
      "required": [
745 895
        "content",
746 896
        "count"
747 897
      ],
748 898
      "type": "object"
749 899
    },
750 900
    "reactionState": {
751 901
      "description": "The reactions to a pull, an issue or a comment.",
752 902
      "properties": {
753 903
        "reactions": {
754 904
          "description": "By content, in the order dev.knotless.defs#reactionContent lists them; a content no account reacted with is left out.",
755 905
          "items": {
756 906
            "ref": "#reactionCountView",
757 907
            "type": "ref"
758 908
          },
759 909
          "type": "array"
760 910
        },
761 911
        "subject": {
762 912
          "description": "The pull, issue or comment.",
763 913
          "format": "at-uri",
764 914
          "type": "string"
765 915
        }
766 916
      },
767 917
      "required": [
768 918
        "subject",
769 919
        "reactions"
770 920
      ],
771 921
      "type": "object"
772 922
    },
773 923
    "releaseFileView": {
774 924
      "description": "One file of a release.",
775 925
      "properties": {
776 926
        "name": {
777 927
          "description": "Its name, as it is downloaded.",
778 928
          "type": "string"
779 929
        },
780 930
        "sha256": {
781 931
          "description": "The lowercase hex SHA-256 of the file, which a reader checks it against.",
782 932
          "type": "string"
783 933
        },
784 934
        "size": {
785 935
          "description": "Bytes in the file.",
786 936
          "minimum": 1,
787 937
          "type": "integer"
788 938
        }
789 939
      },
790 940
      "required": [
791 941
        "name",
792 942
        "size",
793 943
        "sha256"
794 944
      ],
795 945
      "type": "object"
796 946
    },
797 947
    "releaseView": {
798 948
      "description": "One version of a package a repository publishes, from its dev.knotless.release record, with its files and notes.",
799 949
      "properties": {
800 950
        "check": {
801 951
          "description": "The dev.knotless.check of the run that built it, if its record names one.",
802 952
          "format": "at-uri",
803 953
          "type": "string"
804 954
        },
805 955
        "commit": {
806 956
          "description": "The hex object ID of the commit its files were built from, if its record names one.",
807 957
          "type": "string"
808 958
        },
809 959
        "createdAt": {
810 960
          "description": "As its record says.",
811 961
          "format": "datetime",
812 962
          "type": "string"
813 963
        },
814 964
        "files": {
815 965
          "description": "What it publishes, in its record's order.",
816 966
          "items": {
817 967
            "ref": "#releaseFileView",
818 968
            "type": "ref"
819 969
          },
820 970
          "type": "array"
821 971
        },
822 972
        "html": {
823 973
          "description": "`notes` made into HTML, as dev.knotless.getThread's comments are: raw HTML shown as text, and links made relative to the repository.",
824 974
          "type": "string"
825 975
        },
826 976
        "image": {
827 977
          "description": "True when its files are a container image's OCI layout: an `index.json` beside blobs named `sha256-<hex>`, pulled by `docker pull` rather than downloaded.",
828 978
          "type": "boolean"
829 979
        },
830 980
        "latest": {
831 981
          "description": "True for its package's latest version: the highest with no pre-release part.",
832 982
          "type": "boolean"
833 983
        },
834 984
        "notes": {
835 985
          "description": "What changed since the version before, in Markdown, as its record says.",
836 986
          "type": "string"
837 987
        },
838 988
        "package": {
839 989
          "description": "The package's name.",
840 990
          "type": "string"
841 991
        },
842 992
        "uri": {
843 993
          "description": "Its dev.knotless.release record.",
844 994
          "format": "at-uri",
845 995
          "type": "string"
846 996
        },
847 997
        "version": {
848 998
          "description": "Its Semantic Versioning 2.0 version.",
849 999
          "type": "string"
850 1000
        }
851 1001
      },
852 1002
      "required": [
853 1003
        "uri",
854 1004
        "package",
855 1005
        "version",
856 1006
        "files",
857 1007
        "createdAt"
858 1008
      ],
859 1009
      "type": "object"
860 1010
    },
861 1011
    "releaseViewBasic": {
862 1012
      "description": "One version of a package a repository publishes, from its dev.knotless.release record: which, and when.",
863 1013
      "properties": {
864 1014
        "createdAt": {
865 1015
          "description": "As its record says.",
866 1016
          "format": "datetime",
867 1017
          "type": "string"
868 1018
        },
869 1019
        "image": {
870 1020
          "description": "True when its files are a container image's OCI layout, pulled by `docker pull` rather than downloaded.",
871 1021
          "type": "boolean"
872 1022
        },
873 1023
        "latest": {
874 1024
          "description": "True for its package's latest version: the highest with no pre-release part.",
875 1025
          "type": "boolean"
876 1026
        },
877 1027
        "package": {
878 1028
          "description": "The package's name.",
879 1029
          "type": "string"
880 1030
        },
881 1031
        "uri": {
882 1032
          "description": "Its dev.knotless.release record.",
883 1033
          "format": "at-uri",
884 1034
          "type": "string"
885 1035
        },
886 1036
        "version": {
887 1037
          "description": "Its Semantic Versioning 2.0 version.",
888 1038
          "type": "string"
889 1039
        }
890 1040
      },
891 1041
      "required": [
892 1042
        "uri",
893 1043
        "package",
894 1044
        "version",
895 1045
        "createdAt"
896 1046
      ],
897 1047
      "type": "object"
898 1048
    },
899 1049
    "releasesView": {
900 1050
      "description": "What a repository publishes, in brief, for its pages to show under its name.",
901 1051
      "properties": {
902 1052
        "count": {
903 1053
          "description": "How many releases it has published, of all its packages.",
904 1054
          "minimum": 0,
905 1055
          "type": "integer"
906 1056
        },
907 1057
        "packages": {
908 1058
          "description": "Each package it publishes, by name.",
909 1059
          "items": {
910 1060
            "ref": "#packageView",
911 1061
            "type": "ref"
912 1062
          },
913 1063
          "type": "array"
914 1064
        },
915 1065
        "release": {
916 1066
          "description": "The release to show for it: the latest of the package named as the repository, else the newest that is its package's latest, or the newest of all when each is a pre-release.",
917 1067
          "ref": "#releaseViewBasic",
918 1068
          "type": "ref"
919 1069
        }
920 1070
      },
921 1071
      "required": [
922 1072
        "count",
923 1073
        "release",
924 1074
        "packages"
925 1075
      ],
926 1076
      "type": "object"
927 1077
    },
928 1078
    "repoMade": {
929 1079
      "description": "A repository the pages made: created, forked, renamed or taken up.",
930 1080
      "properties": {
931 1081
        "name": {
932 1082
          "description": "Its name, the record key.",
933 1083
          "maxLength": 100,
934 1084
          "type": "string"
935 1085
        },
936 1086
        "uri": {
937 1087
          "description": "Its dev.knotless.repo record, by its owner's DID.",
938 1088
          "format": "at-uri",
939 1089
          "type": "string"
940 1090
        }
941 1091
      },
942 1092
      "required": [
943 1093
        "uri",
944 1094
        "name"
945 1095
      ],
946 1096
      "type": "object"
947 1097
    },
948 1098
    "repoRef": {
949 1099
      "description": "A repository, as another record names it. The URI's name is the one the repository had when the record was written; a rename changes it, and a later repository can take it. The owner in the URI and `key` stay the repository's own, and are what a reader matches on.",
950 1100
      "properties": {
951 1101
        "key": {
952 1102
          "description": "The repository's `key`.",
953 1103
          "format": "tid",
954 1104
          "type": "string"
955 1105
        },
956 1106
        "uri": {
957 1107
          "description": "The dev.knotless.repo record, as it was named when this was written.",
958 1108
          "format": "at-uri",
959 1109
          "type": "string"
960 1110
        }
961 1111
      },
962 1112
      "required": [
963 1113
        "uri",
964 1114
        "key"
965 1115
      ],
966 1116
      "type": "object"
967 1117
    },
968 1118
    "repoView": {
969 1119
      "description": "A repository among others, from its dev.knotless.repo record.",
970 1120
      "properties": {
971 1121
        "createdAt": {
972 1122
          "description": "As its record says.",
973 1123
          "format": "datetime",
974 1124
          "type": "string"
975 1125
        },
976 1126
        "description": {
977 1127
          "type": "string"
978 1128
        },
979 1129
        "forkCount": {
980 1130
          "description": "How many forks of it there are, as the appview has indexed. Given only where a list shows it, as an account's stars do.",
981 1131
          "minimum": 0,
982 1132
          "type": "integer"
983 1133
        },
984 1134
        "forkOf": {
985 1135
          "description": "The repository it was forked from, if the appview knows it.",
986 1136
          "ref": "#repoViewBasic",
987 1137
          "type": "ref"
988 1138
        },
989 1139
        "language": {
990 1140
          "description": "The language most of its default branch is written in, as its file listing counts them. Absent when none is counted, or the appview could not read it.",
991 1141
          "ref": "#languageView",
992 1142
          "type": "ref"
993 1143
        },
994 1144
        "name": {
995 1145
          "description": "The repository's name: its record key.",
996 1146
          "type": "string"
997 1147
        },
998 1148
        "owner": {
999 1149
          "ref": "#actorView",
1000 1150
          "type": "ref"
1001 1151
        },
1002 1152
        "private": {
1003 1153
          "description": "Whether it is private, in a space: listed only to its owner, asking.",
1004 1154
          "type": "boolean"
1005 1155
        },
1006 1156
        "starCount": {
1007 1157
          "description": "How many accounts starred it, as the appview has indexed. Given only where a list shows it, as an account's stars do.",
1008 1158
          "minimum": 0,
1009 1159
          "type": "integer"
1010 1160
        },
1011 1161
        "uri": {
1012 1162
          "description": "Its dev.knotless.repo record, under the name it has now.",
1013 1163
          "format": "at-uri",
1014 1164
          "type": "string"
1015 1165
        }
1016 1166
      },
1017 1167
      "required": [
1018 1168
        "uri",
1019 1169
        "owner",
1020 1170
        "name",
1021 1171
        "createdAt"
1022 1172
      ],
1023 1173
      "type": "object"
1024 1174
    },
1025 1175
    "repoViewBasic": {
1026 1176
      "description": "A repository, under the name it has now.",
1027 1177
      "properties": {
1028 1178
        "did": {
1029 1179
          "description": "The repository's owner.",
1030 1180
          "format": "did",
1031 1181
          "type": "string"
1032 1182
        },
1033 1183
        "handle": {
1034 1184
          "description": "The owner's handle, as in #actorView.",
1035 1185
          "type": "string"
1036 1186
        },
1037 1187
        "name": {
1038 1188
          "description": "The repository's name: its record key.",
1039 1189
          "type": "string"
1040 1190
        }
1041 1191
      },
1042 1192
      "required": [
1043 1193
        "did",
1044 1194
        "handle",
1045 1195
        "name"
1046 1196
      ],
1047 1197
      "type": "object"
1048 1198
    },
1049 1199
    "repoViewDetailed": {
1050 1200
      "description": "A repository, with what its pages show above themselves.",
1051 1201
      "properties": {
1052 1202
        "card": {
1053 1203
          "description": "The path, on this appview, of the picture a link to its pages unfurls into: a new one whenever the picture changes.",
1054 1204
          "type": "string"
1055 1205
        },
1056 1206
        "defaultBranch": {
1057 1207
          "description": "The branch its HEAD names: empty, for a repository never pushed.",
1058 1208
          "type": "string"
1059 1209
        },
1060 1210
        "description": {
1061 1211
          "type": "string"
1062 1212
        },
1063 1213
        "forkOf": {
1064 1214
          "description": "The repository it was forked from, if the appview knows it.",
1065 1215
          "ref": "#repoViewBasic",
1066 1216
          "type": "ref"
1067 1217
        },
1068 1218
        "links": {
1069 1219
          "description": "Links its pages show, in display order, as its record names them: its website first. Only http and https addresses.",
1070 1220
          "items": {
1071 1221
            "ref": "#link",
1072 1222
            "type": "ref"
1073 1223
          },
1074 1224
          "type": "array"
1075 1225
        },
1076 1226
        "name": {
1077 1227
          "description": "The repository's name: its record key.",
1078 1228
          "type": "string"
1079 1229
        },
1080 1230
        "openIssues": {
1081 1231
          "minimum": 0,
1082 1232
          "type": "integer"
1083 1233
        },
1084 1234
        "openPulls": {
1085 1235
          "minimum": 0,
1086 1236
          "type": "integer"
1087 1237
        },
1088 1238
        "owner": {
1089 1239
          "ref": "#actorView",
1090 1240
          "type": "ref"
1091 1241
        },
1092 1242
        "private": {
1093 1243
          "description": "Whether it is private, in a space: shown only to its members, each logged in to this appview.",
1094 1244
          "type": "boolean"
1095 1245
        },
1096 1246
        "releases": {
1097 1247
          "description": "What it publishes, in brief, as the appview has indexed. Absent when it has published nothing, for a private repository, which cannot publish, and from an appview that keeps no index.",
1098 1248
          "ref": "#releasesView",
1099 1249
          "type": "ref"
1100 1250
        },
1101 1251
        "starCount": {
1102 1252
          "description": "How many accounts starred it, as the appview has indexed. Absent for a private repository, which cannot be starred, and from an appview that keeps no index.",
1103 1253
          "minimum": 0,
1104 1254
          "type": "integer"
1105 1255
        },
1106 1256
        "uri": {
1107 1257
          "description": "Its dev.knotless.repo record, under the name it has now.",
1108 1258
          "format": "at-uri",
1109 1259
          "type": "string"
1110 1260
        },
1111 1261
        "viewer": {
1112 1262
          "description": "What the account asking has to do with it; absent when no one asks.",
1113 1263
          "ref": "#repoViewerState",
1114 1264
          "type": "ref"
1115 1265
        }
1116 1266
      },
1117 1267
      "required": [
1118 1268
        "uri",
1119 1269
        "owner",
1120 1270
        "name",
1121 1271
        "defaultBranch",
1122 1272
        "openPulls",
1123 1273
        "openIssues",
1124 1274
        "card"
1125 1275
      ],
1126 1276
      "type": "object"
1127 1277
    },
1128 1278
    "repoViewerState": {
1129 1279
      "description": "What the account asking a query has to do with a repository.",
1130 1280
      "properties": {
1131 1281
        "star": {
1132 1282
          "description": "Its dev.knotless.star record naming the repository, if it starred it.",
1133 1283
          "format": "at-uri",
1134 1284
          "type": "string"
1135 1285
        },
1136 1286
        "transfer": {
1137 1287
          "description": "Where the owner has offered to move the repository, when it is offered to the account asking, which can take it up (dev.knotless.acceptTransfer).",
1138 1288
          "ref": "#repoViewBasic",
1139 1289
          "type": "ref"
1140 1290
        }
1141 1291
      },
1142 1292
      "type": "object"
1143 1293
    },
1144 1294
    "reviewView": {
1145 1295
      "description": "Where one reviewer stands on a pull: their latest comment with a verdict. A comment without one leaves it as it was, and a pull's author reviews nothing of their own.",
1146 1296
      "properties": {
1147 1297
        "commit": {
1148 1298
          "description": "The hex object ID of the head it looked at.",
1149 1299
          "type": "string"
1150 1300
        },
1151 1301
        "maintainer": {
1152 1302
          "description": "Whether the reviewer is the repository's owner or a collaborator.",
1153 1303
          "type": "boolean"
1154 1304
        },
1155 1305
        "outdated": {
1156 1306
          "description": "Whether the open pull has moved past the head it looked at: an approval then stands for what the pull was, not what it is.",
1157 1307
          "type": "boolean"
1158 1308
        },
1159 1309
        "reviewer": {
1160 1310
          "ref": "#actorView",
1161 1311
          "type": "ref"
1162 1312
        },
1163 1313
        "uri": {
1164 1314
          "description": "The dev.knotless.comment that reviewed it.",
1165 1315
          "format": "at-uri",
1166 1316
          "type": "string"
1167 1317
        },
1168 1318
        "verdict": {
1169 1319
          "description": "`approve`, or `changes` for one that asked for changes.",
1170 1320
          "knownValues": [
1171 1321
            "approve",
1172 1322
            "changes"
1173 1323
          ],
1174 1324
          "type": "string"
1175 1325
        }
1176 1326
      },
1177 1327
      "required": [
1178 1328
        "reviewer",
1179 1329
        "verdict",
1180 1330
        "uri",
1181 1331
        "outdated",
1182 1332
        "maintainer"
1183 1333
      ],
1184 1334
      "type": "object"
1185 1335
    },
1186 1336
    "starState": {
1187 1337
      "description": "A repository's stars, as starring or unstarring it leaves them.",
1188 1338
      "properties": {
1189 1339
        "star": {
1190 1340
          "description": "The asker's dev.knotless.star record naming it; absent once unstarred.",
1191 1341
          "format": "at-uri",
1192 1342
          "type": "string"
1193 1343
        },
1194 1344
        "starCount": {
1195 1345
          "description": "How many accounts starred it now.",
1196 1346
          "minimum": 0,
1197 1347
          "type": "integer"
1198 1348
        }
1199 1349
      },
1200 1350
      "required": [
1201 1351
        "starCount"
1202 1352
      ],
1203 1353
      "type": "object"
1204 1354
    }
1205 1355
  },
1206 1356
  "description": "Definitions shared by the knotless lexicons.",
1207 1357
  "id": "dev.knotless.defs",
1208 1358
  "lexicon": 1
1209 1359
}

Compare Other Versions

Lexicon Garden

@