dev.knotless.defs

lexicons.knotless.dev

Schema Diff

+215 -0

From

CID
bafyreih3zkw5oxw...
Indexed At
2026-10-28 23:15 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

15 breaking changes, 66 non-breaking changes.

Breaking Changes (15)
  • 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#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#mention", src: "dev.knotless.defs#mention", tgt: "dev.knotless.defs#mention.did", kind: "prop", name: Some("did") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#reviewView", src: "dev.knotless.defs#reviewView", tgt: "dev.knotless.defs#reviewView.reviewer", kind: "prop", name: Some("reviewer") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#reviewView", src: "dev.knotless.defs#reviewView", tgt: "dev.knotless.defs#reviewView.verdict", kind: "prop", name: Some("verdict") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#reviewView", src: "dev.knotless.defs#reviewView", tgt: "dev.knotless.defs#reviewView.maintainer", kind: "prop", name: Some("maintainer") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#reviewView", src: "dev.knotless.defs#reviewView", tgt: "dev.knotless.defs#reviewView.outdated", kind: "prop", name: Some("outdated") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "dev.knotless.defs#reviewView", src: "dev.knotless.defs#reviewView", tgt: "dev.knotless.defs#reviewView.uri", kind: "prop", name: Some("uri") }
  • 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") }
  • 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") }
Non-Breaking Changes (66)
  • 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#changesView.head" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#commentView.commit" }
  • 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" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#repoView.forkCount" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#repoView.language" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#repoView.starCount" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView.commit" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView.maintainer" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView.outdated" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView.reviewer" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView.uri" }
  • AddedVertex AddedVertex { vertex_id: "dev.knotless.defs#reviewView.verdict" }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#changesView", tgt: "dev.knotless.defs#changesView.head", kind: "prop", name: Some("head") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#commentView", tgt: "dev.knotless.defs#commentView.commit", kind: "prop", name: Some("commit") }
  • 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 }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#repoView", tgt: "dev.knotless.defs#repoView.forkCount", kind: "prop", name: Some("forkCount") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#repoView", tgt: "dev.knotless.defs#repoView.language", kind: "prop", name: Some("language") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#repoView", tgt: "dev.knotless.defs#repoView.starCount", kind: "prop", name: Some("starCount") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#repoView.language", tgt: "dev.knotless.defs#languageView", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#reviewView", tgt: "dev.knotless.defs#reviewView.commit", kind: "prop", name: Some("commit") }
  • AddedEdge AddedEdge { src: "dev.knotless.defs#reviewView.reviewer", tgt: "dev.knotless.defs#actorView", 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#changesView.head" }
  • AddedVertex { vertex_id: "dev.knotless.defs#commentView.commit" }
  • 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" }
  • AddedVertex { vertex_id: "dev.knotless.defs#repoView.forkCount" }
  • AddedVertex { vertex_id: "dev.knotless.defs#repoView.language" }
  • AddedVertex { vertex_id: "dev.knotless.defs#repoView.starCount" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView.commit" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView.maintainer" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView.outdated" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView.reviewer" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView.uri" }
  • AddedVertex { vertex_id: "dev.knotless.defs#reviewView.verdict" }

Additional Notes

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

Compare Other Versions

Lexicon Garden

@