dev.knotless.getThread

lexicons.knotless.dev

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A pull or an issue on a repository: what it says, what was said on it, and for a pull what it brings in, how its checks stand and where it is in the merge queue. No authentication; asked as an account, with a service token or the pages' session cookie, the answer says what that account may do with it, and which reactions are its own. A private repository is read for its members asking so.",
      "errors": [
        {
          "description": "No such repository or record on it; or this appview keeps no index, so it knows no pulls or issues.",
          "name": "NotFound"
        }
      ],
      "output": {
        "encoding": "application/json",
        "schema": {
          "properties": {
            "base": {
              "description": "A pull's target branch.",
              "type": "string"
            },
            "body": {
              "description": "What it says, as its author wrote it, in Markdown.",
              "type": "string"
            },
            "card": {
              "description": "The path of the picture its page unfurls into.",
              "type": "string"
            },
            "changes": {
              "description": "What a pull brings in; absent for an issue, or a pull whose branch is gone.",
              "ref": "dev.knotless.defs#changesView",
              "type": "ref"
            },
            "checks": {
              "description": "For a pull, the newest run of each workflow at its head: by the target's runners for the pull, and by those of the repository it comes from for its branch.",
              "items": {
                "ref": "dev.knotless.defs#checkView",
                "type": "ref"
              },
              "type": "array"
            },
            "closedBy": {
              "description": "For a closed issue, the pull whose merge closed it.",
              "ref": "dev.knotless.defs#itemViewBasic",
              "type": "ref"
            },
            "closes": {
              "description": "The issues on the repository a pull's title or body names to close as it merges into the default branch.",
              "items": {
                "ref": "dev.knotless.defs#itemView",
                "type": "ref"
              },
              "type": "array"
            },
            "comments": {
              "description": "Oldest first.",
              "items": {
                "ref": "dev.knotless.defs#commentView",
                "type": "ref"
              },
              "type": "array"
            },
            "head": {
              "description": "What a pull brings in.",
              "ref": "dev.knotless.defs#pullHeadView",
              "type": "ref"
            },
            "html": {
              "description": "Its body, made into HTML as a comment's is.",
              "type": "string"
            },
            "item": {
              "ref": "dev.knotless.defs#itemView",
              "type": "ref"
            },
            "merged": {
              "description": "For a merged pull, the commit it merged as.",
              "type": "string"
            },
            "minutes": {
              "description": "For a pull, the minutes each runner of the target counts for the target's owner, where it has counted any; none for a private repository.",
              "items": {
                "ref": "dev.knotless.defs#minutesView",
                "type": "ref"
              },
              "type": "array"
            },
            "queue": {
              "description": "Where an open pull stands in its branch's merge queue, if it was queued or ejected from it.",
              "ref": "dev.knotless.defs#queueStateView",
              "type": "ref"
            },
            "reactions": {
              "description": "How accounts reacted to the pull or issue itself, by content, as dev.knotless.getReactions counts them. Absent when none did.",
              "items": {
                "ref": "dev.knotless.defs#reactionCountView",
                "type": "ref"
              },
              "type": "array"
            },
            "viewer": {
              "description": "What the account asking may do with it; absent when no one asks.",
              "ref": "#viewerState",
              "type": "ref"
            }
          },
          "required": [
            "item",
            "comments",
            "closes",
            "checks",
            "card"
          ],
          "type": "object"
        }
      },
      "parameters": {
        "properties": {
          "filesOnly": {
            "default": false,
            "description": "A pull's changed files without their rows: what each is, how many lines it adds and removes, and a note where its rows would not be shown. dev.knotless.getPullDiff gives the rows of the files a reader comes to.",
            "type": "boolean"
          },
          "repo": {
            "description": "The repository's dev.knotless.repo record. Its authority may be a handle; a name the repository had before, or an owner it moved from with its agreement, finds it under the name it has now.",
            "format": "at-uri",
            "type": "string"
          },
          "uri": {
            "description": "The dev.knotless.pull or dev.knotless.issue record.",
            "format": "at-uri",
            "type": "string"
          }
        },
        "required": [
          "repo",
          "uri"
        ],
        "type": "params"
      },
      "type": "query"
    },
    "viewerState": {
      "description": "What the account asking may do with a pull or an issue, past commenting on it, editing what it wrote and reporting, which anyone may.",
      "properties": {
        "hide": {
          "description": "Whether it may hide it, or what is said on it: as the repository's owner.",
          "type": "boolean"
        },
        "labels": {
          "description": "The labels the repository defines that it may put on or take off, in the order the repository defines them.",
          "items": {
            "ref": "dev.knotless.repo#label",
            "type": "ref"
          },
          "type": "array"
        },
        "setState": {
          "description": "Whether it may close or reopen it: as who opened it, or the repository's owner or a collaborator.",
          "type": "boolean"
        }
      },
      "type": "object"
    }
  },
  "description": "A pull or an issue, and everything said on it.",
  "id": "dev.knotless.getThread",
  "lexicon": 1
}

Validate Record

Validate a record against dev.knotless.getThread

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:yqsg7znbbhfmj3a2nrpnaerk
CID
bafyreifjglryqdaqsxfbeqadpolnvth33ydvmkviir2fzk6jfzommoebia
Indexed At
2026-10-28 21:21 UTC
AT-URI
at://did:plc:yqsg7znbbhfmj3a2nrpnaerk/com.atproto.lexicon.schema/dev.knotless.getThread

Version History (3 versions)

Referenced Schemas (10)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • The reactions to a pull or an issue, and to each comment on it.

  • A pull or issue opened, closed or merged, or a pull pointed at another target branch; or a thread on a pull's lines resolved or opened again.

  • A repository's pulls or issues.

  • Some files of a pull's diff.

  • A comment on a pull or issue. With a verdict it is a review; with a line, a comment on lines of a pull's diff, starting a thread there; with a reply, an answer in such a thread.

Lexicon Garden

@