# dev.knotless.defs

> Published by [lexicons.knotless.dev](https://lexicon.garden/identity/did:plc:yqsg7znbbhfmj3a2nrpnaerk)

✓ This is the authoritative definition for this NSID.

## Description

Definitions shared by the knotless lexicons.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:yqsg7znbbhfmj3a2nrpnaerk/dev.knotless.defs)
- [Documentation](https://lexicon.garden/lexicon/did:plc:yqsg7znbbhfmj3a2nrpnaerk/dev.knotless.defs/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:yqsg7znbbhfmj3a2nrpnaerk/dev.knotless.defs/examples)

## Definitions

### `dev.knotless.defs#actorView`

**Type**: `object`

An account, as an appview shows it beside what it did.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `avatar` | `string` (uri) | No | The account's picture, as in dev.knotless.getProfile#profileView. |
| `did` | `string` (did) | Yes |  |
| `handle` | `string` | Yes | The handle the account claims, when it resolves back to it; else the DID. |

### `dev.knotless.defs#actorViewerState`

**Type**: `object`

What the account asking a query has to do with an account.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `blocking` | `string` (at-uri) | No | Its dev.knotless.block record keeping the account out of all its repositories, if it has one. |
| `following` | `string` (at-uri) | No | Its dev.knotless.follow record naming the account, if it follows it. |

### `dev.knotless.defs#byteSlice`

**Type**: `object`

A span of a text, by its UTF-8 bytes, counted from zero: the start inclusive, the end exclusive.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `byteEnd` | `integer` | Yes |  |
| `byteStart` | `integer` | Yes |  |

### `dev.knotless.defs#changesView`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `commits` | `array` | Yes | Oldest first. |
| `files` | `array` | Yes |  |
| `head` | `string` | No | For an open pull, the hex object ID of the commit its branch is at: what its checks and reviews are of. |
| `repo` | `ref` → `#repoViewBasic` | Yes | The repository whose commit pages show its commits. |

### `dev.knotless.defs#checkImageView`

**Type**: `object`

A picture a check made: screenshots of the pages a change moved, say.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `alt` | `string` | Yes | What it shows. |
| `url` | `string` | Yes | Where this appview serves it, as a path. |

### `dev.knotless.defs#checkView`

**Type**: `object`

The newest run of a workflow, as a runner the repository names in its record reported it.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `commit` | `string` | Yes | The commit it ran at, in hex. |
| `error` | `string` | No | Why it could not run. |
| `finishedAt` | `string` (datetime) | No |  |
| `images` | `array` | Yes | The pictures it made to be looked at, in order. |
| `repo` | `ref` → `#repoViewBasic` | Yes | The repository it is of, whose pages show it. |
| `skipped` | `string` | No | For a `success` that ran nothing, as the change touched none of the paths its workflow names: why. |
| `startedAt` | `string` (datetime) | Yes |  |
| `status` | `string` | Yes | `queued` is a run filed and waiting for a job on its runner, no step started yet. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.check record. |
| `workflow` | `string` | Yes |  |

### `dev.knotless.defs#commentView`

**Type**: `object`

Something said on a pull or an issue.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `author` | `ref` → `#actorView` | Yes |  |
| `body` | `string` | No | What it says, as its author wrote it, in Markdown. |
| `commit` | `string` | No | 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. |
| `createdAt` | `string` (datetime) | Yes |  |
| `html` | `string` | Yes | What it says, its Markdown made into HTML: raw HTML shown as text, and links made relative to the repository. |
| `line` | `ref` → `#lineView` | No | For a comment on a pull's lines, which, as they stand now. |
| `reactions` | `array` | No | How accounts reacted to it, by content, in the order dev.knotless.defs#reactionContent lists them. Absent when none did. |
| `reply` | `string` (at-uri) | No | The comment starting the thread on a pull's lines that this answers. |
| `resolved` | `boolean` | No | For a comment starting a thread on a pull's lines, whether the thread is resolved. |
| `review` | `string` (at-uri) | No | The review this was sent with, as one of its line comments. |
| `updatedAt` | `string` (datetime) | No | When its author last changed it, if they have. |
| `uri` | `string` (at-uri) | No | Its dev.knotless.comment record. |
| `verdict` | `string` | No | For a review, what it found. |

### `dev.knotless.defs#commitAuthorView`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `actor` | `ref` → `#actorView` | No |  |
| `agent` | `string` | No | The coding agent whose address it is, when it is one the pages know the face of. |
| `name` | `string` | Yes | The name git records. |

### `dev.knotless.defs#commitRefView`

**Type**: `object`

A commit, by its object name.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `sha` | `string` | Yes | In hex. |

### `dev.knotless.defs#commitView`

**Type**: `object`

A commit, with the accounts that wrote it where the repository's pages believe their claims (dev.knotless.emails).

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `author` | `ref` → `#commitAuthorView` | Yes |  |
| `coauthors` | `array` | Yes | Who its message's `Co-authored-by` trailers name. |
| `committedAt` | `string` (datetime) | No | When it was committed: what history runs in, as its author's date need not. |
| `committer` | `ref` → `#commitAuthorView` | No | Who committed it, when someone other than its author did. |
| `date` | `string` (datetime) | Yes | When its author made it, which a rebase or a squash keeps. |
| `message` | `string` | Yes | Its message, less the last line naming the pull it merged, if it did. |
| `parents` | `array` | Yes |  |
| `pull` | `ref` → `#itemViewBasic` | No | The pull its message's last line names, as a squash merge records it, when that is a pull on this repository. |
| `sha` | `string` | Yes | Its object name, in hex. |

### `dev.knotless.defs#diffRowView`

**Type**: `object`

One row of a file's diff: a hunk header, a note, or a line with its old and new numbers.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `kind` | `string` | Yes | `h` for a hunk header, `x` for a note, `a` for a line added, `d` for one removed, or empty for context. |
| `line` | `boolean` | Yes | Whether it is a line of the file. |
| `new` | `integer` | No | Its number after. |
| `old` | `integer` | No | Its number before. |
| `text` | `string` | Yes |  |

### `dev.knotless.defs#facet`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `features` | `array` | Yes | What the span is. Kinds unknown to a reader are passed over. |
| `index` | `ref` → `#byteSlice` | Yes |  |

### `dev.knotless.defs#fileDiffView`

**Type**: `object`

One file of a diff, or why its rows are not shown.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `added` | `integer` | Yes | Lines added. |
| `hunkCount` | `integer` | No | Of those rows, how many are hunk headers, which a page may draw taller than a line. |
| `new` | `string` | Yes | Its path after. |
| `note` | `string` | No | Why its rows are not shown, when they are not. |
| `old` | `string` | Yes | Its path before. |
| `ranges` | `string` | No | The ranges its highlighting paints, encoded as the pages read them. |
| `removed` | `integer` | Yes | Lines removed. |
| `rowCount` | `integer` | No | 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. |
| `rows` | `array` | Yes |  |
| `status` | `string` | Yes |  |

### `dev.knotless.defs#followState`

**Type**: `object`

An account's followers, as following or unfollowing it leaves them.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `followersCount` | `integer` | Yes | How many accounts follow it now. |
| `following` | `string` (at-uri) | No | The asker's dev.knotless.follow record naming it; absent once unfollowed. |

### `dev.knotless.defs#image`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `image` | `blob` | Yes |  |

### `dev.knotless.defs#itemView`

**Type**: `object`

A pull or an issue in a list of them.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `author` | `ref` → `#actorView` | Yes | Who opened it. |
| `comments` | `integer` | Yes | How many comments are on it, its own body aside. |
| `createdAt` | `string` (datetime) | Yes |  |
| `draft` | `boolean` | No | A pull its author has not marked ready to merge. Not, when absent. |
| `kind` | `string` | Yes |  |
| `labels` | `array` | No | The labels it carries, as the repository defines them, in the order it does. Absent when it carries none. |
| `reviewers` | `array` | No | Those a pull's author asks to review it, in the order asked. Absent when it asks no one. |
| `state` | `string` | Yes | A merged pull is merged; a closed one, or an issue, closed. |
| `title` | `string` | Yes |  |
| `updatedAt` | `string` (datetime) | No | When its author last changed its title or body, if they have. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.pull or dev.knotless.issue record. |

### `dev.knotless.defs#itemViewBasic`

**Type**: `object`

A pull or an issue, by its record and its title.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | `string` | Yes |  |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.pull or dev.knotless.issue record. |

### `dev.knotless.defs#languageView`

**Type**: `object`

One language a repository is written in.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `bytes` | `integer` | Yes |  |
| `color` | `string` | Yes | Its color, as linguist has it. |
| `name` | `string` | Yes | Its name, or `Other` for the languages each under one percent. |
| `permille` | `integer` | Yes | Its share of all the bytes counted, in tenths of a percent. |

### `dev.knotless.defs#lineTextView`

**Type**: `object`

One line of a file.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `number` | `integer` | Yes | Counting from 1. |
| `text` | `string` | Yes |  |

### `dev.knotless.defs#lineView`

**Type**: `object`

The lines of a pull's diff a comment is on.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `line` | `integer` | Yes | The last line. |
| `lines` | `array` | No | 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. |
| `outdated` | `boolean` | Yes | Whether that side of the file has changed since the comment's commit, so its lines may no longer be where they were. |
| `path` | `string` | Yes | The file's path on that side. |
| `side` | `string` | No | `old` for the side the pull leaves; absent, `new`. |
| `startLine` | `integer` | No | The first, for more than one. |

### `dev.knotless.defs#link`

**Type**: `object`

A link shown on an account's profile or a repository's pages.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `title` | `string` | No | What to call it. Readers fall back to the address's host. |
| `url` | `string` (uri) | Yes | Where it goes: an http or https address. |

### `dev.knotless.defs#mention`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` (did) | Yes |  |

### `dev.knotless.defs#minutesView`

**Type**: `object`

The minutes a runner the repository names counts for its owner's public repositories, from its dev.knotless.minutes record.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `allowance` | `integer` | No | The minutes in 30 days it gives the owner's runs before they go one at a time. Absent when there is no limit. |
| `freeing` | `array` | No | When minutes counted now stop counting, soonest first. |
| `minutes` | `integer` | Yes | The minutes steps took in the 30 days up to `updatedAt`. |
| `runner` | `ref` → `#actorView` | Yes | The runner's account. |
| `updatedAt` | `string` (datetime) | Yes | When the runner last counted. |

### `dev.knotless.defs#packageView`

**Type**: `object`

One package a repository publishes.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `image` | `boolean` | No | True when its latest version, or its newest when none is latest, is a container image. |
| `latest` | `string` | No | Its latest version: the highest with no pre-release part. Absent when it has only pre-releases. |
| `name` | `string` | Yes | The package's name. |
| `releaseCount` | `integer` | No | How many versions of it are published. |

### `dev.knotless.defs#pullHeadView`

**Type**: `object`

What a pull brings in: a branch of a repository.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `branch` | `string` | Yes |  |
| `repo` | `ref` → `#repoViewBasic` | No | The repository the branch is on, if the index knows it. |

### `dev.knotless.defs#queueStateView`

**Type**: `object`

Where an open pull stands in its target branch's merge queue.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `checks` | `array` | Yes | While its batch is being checked or landing, the batch's checks; once ejected by checks that failed, those. |
| `createdAt` | `string` (datetime) | Yes | When it was queued or ejected. |
| `reason` | `string` | No | Why it was ejected, as the runner said. |
| `said` | `string` | Yes | Where it stands, in words: `Queued, 3rd of 5`, `In a batch of 4 being checked`, `Landing`, or why it was ejected. |
| `state` | `string` | Yes |  |

### `dev.knotless.defs#reactionContent`

**Type**: `string`

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.

**Known Values**:
- `+1`
- `-1`
- `laugh`
- `hooray`
- `confused`
- `heart`
- `rocket`
- `eyes`

**Constraints**: maxLength: 32

### `dev.knotless.defs#reactionCountView`

**Type**: `object`

How many accounts reacted to something with one content.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `content` | `ref` → `#reactionContent` | Yes |  |
| `count` | `integer` | Yes | How many accounts reacted so, each once. |
| `reaction` | `string` (at-uri) | No | The asker's dev.knotless.reaction record of this content on it, if they reacted so. |

### `dev.knotless.defs#reactionState`

**Type**: `object`

The reactions to a pull, an issue or a comment.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `reactions` | `array` | Yes | By content, in the order dev.knotless.defs#reactionContent lists them; a content no account reacted with is left out. |
| `subject` | `string` (at-uri) | Yes | The pull, issue or comment. |

### `dev.knotless.defs#releaseFileView`

**Type**: `object`

One file of a release.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | `string` | Yes | Its name, as it is downloaded. |
| `sha256` | `string` | Yes | The lowercase hex SHA-256 of the file, which a reader checks it against. |
| `size` | `integer` | Yes | Bytes in the file. |

### `dev.knotless.defs#releaseView`

**Type**: `object`

One version of a package a repository publishes, from its dev.knotless.release record, with its files and notes.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `check` | `string` (at-uri) | No | The dev.knotless.check of the run that built it, if its record names one. |
| `commit` | `string` | No | The hex object ID of the commit its files were built from, if its record names one. |
| `createdAt` | `string` (datetime) | Yes | As its record says. |
| `files` | `array` | Yes | What it publishes, in its record's order. |
| `html` | `string` | No | `notes` made into HTML, as dev.knotless.getThread's comments are: raw HTML shown as text, and links made relative to the repository. |
| `image` | `boolean` | No | 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. |
| `latest` | `boolean` | No | True for its package's latest version: the highest with no pre-release part. |
| `notes` | `string` | No | What changed since the version before, in Markdown, as its record says. |
| `package` | `string` | Yes | The package's name. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.release record. |
| `version` | `string` | Yes | Its Semantic Versioning 2.0 version. |

### `dev.knotless.defs#releaseViewBasic`

**Type**: `object`

One version of a package a repository publishes, from its dev.knotless.release record: which, and when.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `createdAt` | `string` (datetime) | Yes | As its record says. |
| `image` | `boolean` | No | True when its files are a container image's OCI layout, pulled by `docker pull` rather than downloaded. |
| `latest` | `boolean` | No | True for its package's latest version: the highest with no pre-release part. |
| `package` | `string` | Yes | The package's name. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.release record. |
| `version` | `string` | Yes | Its Semantic Versioning 2.0 version. |

### `dev.knotless.defs#releasesView`

**Type**: `object`

What a repository publishes, in brief, for its pages to show under its name.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `count` | `integer` | Yes | How many releases it has published, of all its packages. |
| `packages` | `array` | Yes | Each package it publishes, by name. |
| `release` | `ref` → `#releaseViewBasic` | Yes | 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. |

### `dev.knotless.defs#repoMade`

**Type**: `object`

A repository the pages made: created, forked, renamed or taken up.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | `string` | Yes | Its name, the record key. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.repo record, by its owner's DID. |

### `dev.knotless.defs#repoRef`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `key` | `string` (tid) | Yes | The repository's `key`. |
| `uri` | `string` (at-uri) | Yes | The dev.knotless.repo record, as it was named when this was written. |

### `dev.knotless.defs#repoView`

**Type**: `object`

A repository among others, from its dev.knotless.repo record.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `createdAt` | `string` (datetime) | Yes | As its record says. |
| `description` | `string` | No |  |
| `forkCount` | `integer` | No | 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. |
| `forkOf` | `ref` → `#repoViewBasic` | No | The repository it was forked from, if the appview knows it. |
| `language` | `ref` → `#languageView` | No | 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. |
| `name` | `string` | Yes | The repository's name: its record key. |
| `owner` | `ref` → `#actorView` | Yes |  |
| `private` | `boolean` | No | Whether it is private, in a space: listed only to its owner, asking. |
| `starCount` | `integer` | No | How many accounts starred it, as the appview has indexed. Given only where a list shows it, as an account's stars do. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.repo record, under the name it has now. |

### `dev.knotless.defs#repoViewBasic`

**Type**: `object`

A repository, under the name it has now.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `did` | `string` (did) | Yes | The repository's owner. |
| `handle` | `string` | Yes | The owner's handle, as in #actorView. |
| `name` | `string` | Yes | The repository's name: its record key. |

### `dev.knotless.defs#repoViewDetailed`

**Type**: `object`

A repository, with what its pages show above themselves.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `card` | `string` | Yes | The path, on this appview, of the picture a link to its pages unfurls into: a new one whenever the picture changes. |
| `defaultBranch` | `string` | Yes | The branch its HEAD names: empty, for a repository never pushed. |
| `description` | `string` | No |  |
| `forkOf` | `ref` → `#repoViewBasic` | No | The repository it was forked from, if the appview knows it. |
| `links` | `array` | No | Links its pages show, in display order, as its record names them: its website first. Only http and https addresses. |
| `name` | `string` | Yes | The repository's name: its record key. |
| `openIssues` | `integer` | Yes |  |
| `openPulls` | `integer` | Yes |  |
| `owner` | `ref` → `#actorView` | Yes |  |
| `private` | `boolean` | No | Whether it is private, in a space: shown only to its members, each logged in to this appview. |
| `releases` | `ref` → `#releasesView` | No | 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. |
| `starCount` | `integer` | No | 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. |
| `uri` | `string` (at-uri) | Yes | Its dev.knotless.repo record, under the name it has now. |
| `viewer` | `ref` → `#repoViewerState` | No | What the account asking has to do with it; absent when no one asks. |

### `dev.knotless.defs#repoViewerState`

**Type**: `object`

What the account asking a query has to do with a repository.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `star` | `string` (at-uri) | No | Its dev.knotless.star record naming the repository, if it starred it. |
| `transfer` | `ref` → `#repoViewBasic` | No | 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). |

### `dev.knotless.defs#reviewView`

**Type**: `object`

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.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `commit` | `string` | No | The hex object ID of the head it looked at. |
| `maintainer` | `boolean` | Yes | Whether the reviewer is the repository's owner or a collaborator. |
| `outdated` | `boolean` | Yes | 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. |
| `reviewer` | `ref` → `#actorView` | Yes |  |
| `uri` | `string` (at-uri) | Yes | The dev.knotless.comment that reviewed it. |
| `verdict` | `string` | Yes | `approve`, or `changes` for one that asked for changes. |

### `dev.knotless.defs#starState`

**Type**: `object`

A repository's stars, as starring or unstarring it leaves them.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `star` | `string` (at-uri) | No | The asker's dev.knotless.star record naming it; absent once unstarred. |
| `starCount` | `integer` | Yes | How many accounts starred it now. |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "actorView": {
      "description": "An account, as an appview shows it beside what it did.",
      "properties": {
        "avatar": {
          "description": "The account's picture, as in dev.knotless.getProfile#profileView.",
          "format": "uri",
          "type": "string"
        },
        "did": {
          "format": "did",
          "type": "string"
        },
        "handle": {
          "description": "The handle the account claims, when it resolves back to it; else the DID.",
          "type": "string"
        }
      },
      "required": [
        "did",
        "handle"
      ],
      "type": "object"
    },
    "actorViewerState": {
      "description": "What the account asking a query has to do with an account.",
      "properties": {
        "blocking": {
          "description": "Its dev.knotless.block record keeping the account out of all its repositories, if it has one.",
          "format": "at-uri",
          "type": "string"
        },
        "following": {
          "description": "Its dev.knotless.follow record naming the account, if it follows it.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "byteSlice": {
      "description": "A span of a text, by its UTF-8 bytes, counted from zero: the start inclusive, the end exclusive.",
      "properties": {
        "byteEnd": {
          "minimum": 0,
          "type": "integer"
        },
        "byteStart": {
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "byteStart",
        "byteEnd"
      ],
      "type": "object"
    },
    "changesView": {
      "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.",
      "properties": {
        "commits": {
          "description": "Oldest first.",
          "items": {
            "ref": "#commitView",
            "type": "ref"
          },
          "type": "array"
        },
        "files": {
          "items": {
            "ref": "#fileDiffView",
            "type": "ref"
          },
          "type": "array"
        },
        "head": {
          "description": "For an open pull, the hex object ID of the commit its branch is at: what its checks and reviews are of.",
          "type": "string"
        },
        "repo": {
          "description": "The repository whose commit pages show its commits.",
          "ref": "#repoViewBasic",
          "type": "ref"
        }
      },
      "required": [
        "repo",
        "commits",
        "files"
      ],
      "type": "object"
    },
    "checkImageView": {
      "description": "A picture a check made: screenshots of the pages a change moved, say.",
      "properties": {
        "alt": {
          "description": "What it shows.",
          "type": "string"
        },
        "url": {
          "description": "Where this appview serves it, as a path.",
          "type": "string"
        }
      },
      "required": [
        "alt",
        "url"
      ],
      "type": "object"
    },
    "checkView": {
      "description": "The newest run of a workflow, as a runner the repository names in its record reported it.",
      "properties": {
        "commit": {
          "description": "The commit it ran at, in hex.",
          "type": "string"
        },
        "error": {
          "description": "Why it could not run.",
          "type": "string"
        },
        "finishedAt": {
          "format": "datetime",
          "type": "string"
        },
        "images": {
          "description": "The pictures it made to be looked at, in order.",
          "items": {
            "ref": "#checkImageView",
            "type": "ref"
          },
          "type": "array"
        },
        "repo": {
          "description": "The repository it is of, whose pages show it.",
          "ref": "#repoViewBasic",
          "type": "ref"
        },
        "skipped": {
          "description": "For a `success` that ran nothing, as the change touched none of the paths its workflow names: why.",
          "type": "string"
        },
        "startedAt": {
          "format": "datetime",
          "type": "string"
        },
        "status": {
          "description": "`queued` is a run filed and waiting for a job on its runner, no step started yet.",
          "knownValues": [
            "queued",
            "running",
            "success",
            "failure",
            "error",
            "cancelled"
          ],
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.check record.",
          "format": "at-uri",
          "type": "string"
        },
        "workflow": {
          "type": "string"
        }
      },
      "required": [
        "uri",
        "repo",
        "workflow",
        "status",
        "commit",
        "startedAt",
        "images"
      ],
      "type": "object"
    },
    "commentView": {
      "description": "Something said on a pull or an issue.",
      "properties": {
        "author": {
          "ref": "#actorView",
          "type": "ref"
        },
        "body": {
          "description": "What it says, as its author wrote it, in Markdown.",
          "type": "string"
        },
        "commit": {
          "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.",
          "type": "string"
        },
        "createdAt": {
          "format": "datetime",
          "type": "string"
        },
        "html": {
          "description": "What it says, its Markdown made into HTML: raw HTML shown as text, and links made relative to the repository.",
          "type": "string"
        },
        "line": {
          "description": "For a comment on a pull's lines, which, as they stand now.",
          "ref": "#lineView",
          "type": "ref"
        },
        "reactions": {
          "description": "How accounts reacted to it, by content, in the order dev.knotless.defs#reactionContent lists them. Absent when none did.",
          "items": {
            "ref": "#reactionCountView",
            "type": "ref"
          },
          "type": "array"
        },
        "reply": {
          "description": "The comment starting the thread on a pull's lines that this answers.",
          "format": "at-uri",
          "type": "string"
        },
        "resolved": {
          "description": "For a comment starting a thread on a pull's lines, whether the thread is resolved.",
          "type": "boolean"
        },
        "review": {
          "description": "The review this was sent with, as one of its line comments.",
          "format": "at-uri",
          "type": "string"
        },
        "updatedAt": {
          "description": "When its author last changed it, if they have.",
          "format": "datetime",
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.comment record.",
          "format": "at-uri",
          "type": "string"
        },
        "verdict": {
          "description": "For a review, what it found.",
          "knownValues": [
            "approve",
            "changes"
          ],
          "type": "string"
        }
      },
      "required": [
        "author",
        "createdAt",
        "html"
      ],
      "type": "object"
    },
    "commitAuthorView": {
      "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.",
      "properties": {
        "actor": {
          "ref": "#actorView",
          "type": "ref"
        },
        "agent": {
          "description": "The coding agent whose address it is, when it is one the pages know the face of.",
          "knownValues": [
            "claude"
          ],
          "type": "string"
        },
        "name": {
          "description": "The name git records.",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "commitRefView": {
      "description": "A commit, by its object name.",
      "properties": {
        "sha": {
          "description": "In hex.",
          "type": "string"
        }
      },
      "required": [
        "sha"
      ],
      "type": "object"
    },
    "commitView": {
      "description": "A commit, with the accounts that wrote it where the repository's pages believe their claims (dev.knotless.emails).",
      "properties": {
        "author": {
          "ref": "#commitAuthorView",
          "type": "ref"
        },
        "coauthors": {
          "description": "Who its message's `Co-authored-by` trailers name.",
          "items": {
            "ref": "#commitAuthorView",
            "type": "ref"
          },
          "type": "array"
        },
        "committedAt": {
          "description": "When it was committed: what history runs in, as its author's date need not.",
          "format": "datetime",
          "type": "string"
        },
        "committer": {
          "description": "Who committed it, when someone other than its author did.",
          "ref": "#commitAuthorView",
          "type": "ref"
        },
        "date": {
          "description": "When its author made it, which a rebase or a squash keeps.",
          "format": "datetime",
          "type": "string"
        },
        "message": {
          "description": "Its message, less the last line naming the pull it merged, if it did.",
          "type": "string"
        },
        "parents": {
          "items": {
            "ref": "#commitRefView",
            "type": "ref"
          },
          "type": "array"
        },
        "pull": {
          "description": "The pull its message's last line names, as a squash merge records it, when that is a pull on this repository.",
          "ref": "#itemViewBasic",
          "type": "ref"
        },
        "sha": {
          "description": "Its object name, in hex.",
          "type": "string"
        }
      },
      "required": [
        "sha",
        "parents",
        "author",
        "coauthors",
        "date",
        "message"
      ],
      "type": "object"
    },
    "diffRowView": {
      "description": "One row of a file's diff: a hunk header, a note, or a line with its old and new numbers.",
      "properties": {
        "kind": {
          "description": "`h` for a hunk header, `x` for a note, `a` for a line added, `d` for one removed, or empty for context.",
          "type": "string"
        },
        "line": {
          "description": "Whether it is a line of the file.",
          "type": "boolean"
        },
        "new": {
          "description": "Its number after.",
          "minimum": 0,
          "type": "integer"
        },
        "old": {
          "description": "Its number before.",
          "minimum": 0,
          "type": "integer"
        },
        "text": {
          "type": "string"
        }
      },
      "required": [
        "kind",
        "line",
        "text"
      ],
      "type": "object"
    },
    "facet": {
      "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.",
      "properties": {
        "features": {
          "description": "What the span is. Kinds unknown to a reader are passed over.",
          "items": {
            "refs": [
              "#mention"
            ],
            "type": "union"
          },
          "maxLength": 8,
          "type": "array"
        },
        "index": {
          "ref": "#byteSlice",
          "type": "ref"
        }
      },
      "required": [
        "index",
        "features"
      ],
      "type": "object"
    },
    "fileDiffView": {
      "description": "One file of a diff, or why its rows are not shown.",
      "properties": {
        "added": {
          "description": "Lines added.",
          "minimum": 0,
          "type": "integer"
        },
        "hunkCount": {
          "description": "Of those rows, how many are hunk headers, which a page may draw taller than a line.",
          "minimum": 0,
          "type": "integer"
        },
        "new": {
          "description": "Its path after.",
          "type": "string"
        },
        "note": {
          "description": "Why its rows are not shown, when they are not.",
          "type": "string"
        },
        "old": {
          "description": "Its path before.",
          "type": "string"
        },
        "ranges": {
          "description": "The ranges its highlighting paints, encoded as the pages read them.",
          "type": "string"
        },
        "removed": {
          "description": "Lines removed.",
          "minimum": 0,
          "type": "integer"
        },
        "rowCount": {
          "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.",
          "minimum": 0,
          "type": "integer"
        },
        "rows": {
          "items": {
            "ref": "#diffRowView",
            "type": "ref"
          },
          "type": "array"
        },
        "status": {
          "knownValues": [
            "added",
            "deleted",
            "renamed",
            "modified"
          ],
          "type": "string"
        }
      },
      "required": [
        "old",
        "new",
        "status",
        "added",
        "removed",
        "rows"
      ],
      "type": "object"
    },
    "followState": {
      "description": "An account's followers, as following or unfollowing it leaves them.",
      "properties": {
        "followersCount": {
          "description": "How many accounts follow it now.",
          "minimum": 0,
          "type": "integer"
        },
        "following": {
          "description": "The asker's dev.knotless.follow record naming it; absent once unfollowed.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "followersCount"
      ],
      "type": "object"
    },
    "image": {
      "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.",
      "properties": {
        "image": {
          "accept": [
            "image/png",
            "image/jpeg",
            "image/webp",
            "image/gif"
          ],
          "maxSize": 1000000,
          "type": "blob"
        }
      },
      "required": [
        "image"
      ],
      "type": "object"
    },
    "itemView": {
      "description": "A pull or an issue in a list of them.",
      "properties": {
        "author": {
          "description": "Who opened it.",
          "ref": "#actorView",
          "type": "ref"
        },
        "comments": {
          "description": "How many comments are on it, its own body aside.",
          "minimum": 0,
          "type": "integer"
        },
        "createdAt": {
          "format": "datetime",
          "type": "string"
        },
        "draft": {
          "description": "A pull its author has not marked ready to merge. Not, when absent.",
          "type": "boolean"
        },
        "kind": {
          "knownValues": [
            "pull",
            "issue"
          ],
          "type": "string"
        },
        "labels": {
          "description": "The labels it carries, as the repository defines them, in the order it does. Absent when it carries none.",
          "items": {
            "ref": "dev.knotless.repo#label",
            "type": "ref"
          },
          "type": "array"
        },
        "reviewers": {
          "description": "Those a pull's author asks to review it, in the order asked. Absent when it asks no one.",
          "items": {
            "ref": "#actorView",
            "type": "ref"
          },
          "type": "array"
        },
        "state": {
          "description": "A merged pull is merged; a closed one, or an issue, closed.",
          "knownValues": [
            "open",
            "closed",
            "merged"
          ],
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "updatedAt": {
          "description": "When its author last changed its title or body, if they have.",
          "format": "datetime",
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.pull or dev.knotless.issue record.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "kind",
        "title",
        "state",
        "author",
        "createdAt",
        "comments"
      ],
      "type": "object"
    },
    "itemViewBasic": {
      "description": "A pull or an issue, by its record and its title.",
      "properties": {
        "title": {
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.pull or dev.knotless.issue record.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "title"
      ],
      "type": "object"
    },
    "languageView": {
      "description": "One language a repository is written in.",
      "properties": {
        "bytes": {
          "minimum": 0,
          "type": "integer"
        },
        "color": {
          "description": "Its color, as linguist has it.",
          "type": "string"
        },
        "name": {
          "description": "Its name, or `Other` for the languages each under one percent.",
          "type": "string"
        },
        "permille": {
          "description": "Its share of all the bytes counted, in tenths of a percent.",
          "maximum": 1000,
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "name",
        "color",
        "bytes",
        "permille"
      ],
      "type": "object"
    },
    "lineTextView": {
      "description": "One line of a file.",
      "properties": {
        "number": {
          "description": "Counting from 1.",
          "minimum": 1,
          "type": "integer"
        },
        "text": {
          "type": "string"
        }
      },
      "required": [
        "number",
        "text"
      ],
      "type": "object"
    },
    "lineView": {
      "description": "The lines of a pull's diff a comment is on.",
      "properties": {
        "line": {
          "description": "The last line.",
          "minimum": 1,
          "type": "integer"
        },
        "lines": {
          "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.",
          "items": {
            "ref": "#lineTextView",
            "type": "ref"
          },
          "type": "array"
        },
        "outdated": {
          "description": "Whether that side of the file has changed since the comment's commit, so its lines may no longer be where they were.",
          "type": "boolean"
        },
        "path": {
          "description": "The file's path on that side.",
          "type": "string"
        },
        "side": {
          "description": "`old` for the side the pull leaves; absent, `new`.",
          "knownValues": [
            "old",
            "new"
          ],
          "type": "string"
        },
        "startLine": {
          "description": "The first, for more than one.",
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "path",
        "line",
        "outdated"
      ],
      "type": "object"
    },
    "link": {
      "description": "A link shown on an account's profile or a repository's pages.",
      "properties": {
        "title": {
          "description": "What to call it. Readers fall back to the address's host.",
          "maxGraphemes": 40,
          "maxLength": 320,
          "type": "string"
        },
        "url": {
          "description": "Where it goes: an http or https address.",
          "format": "uri",
          "type": "string"
        }
      },
      "required": [
        "url"
      ],
      "type": "object"
    },
    "mention": {
      "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.",
      "properties": {
        "did": {
          "format": "did",
          "type": "string"
        }
      },
      "required": [
        "did"
      ],
      "type": "object"
    },
    "minutesView": {
      "description": "The minutes a runner the repository names counts for its owner's public repositories, from its dev.knotless.minutes record.",
      "properties": {
        "allowance": {
          "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.",
          "minimum": 1,
          "type": "integer"
        },
        "freeing": {
          "description": "When minutes counted now stop counting, soonest first.",
          "items": {
            "ref": "dev.knotless.minutes#freeing",
            "type": "ref"
          },
          "type": "array"
        },
        "minutes": {
          "description": "The minutes steps took in the 30 days up to `updatedAt`.",
          "minimum": 0,
          "type": "integer"
        },
        "runner": {
          "description": "The runner's account.",
          "ref": "#actorView",
          "type": "ref"
        },
        "updatedAt": {
          "description": "When the runner last counted.",
          "format": "datetime",
          "type": "string"
        }
      },
      "required": [
        "runner",
        "minutes",
        "updatedAt"
      ],
      "type": "object"
    },
    "packageView": {
      "description": "One package a repository publishes.",
      "properties": {
        "image": {
          "description": "True when its latest version, or its newest when none is latest, is a container image.",
          "type": "boolean"
        },
        "latest": {
          "description": "Its latest version: the highest with no pre-release part. Absent when it has only pre-releases.",
          "type": "string"
        },
        "name": {
          "description": "The package's name.",
          "type": "string"
        },
        "releaseCount": {
          "description": "How many versions of it are published.",
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "pullHeadView": {
      "description": "What a pull brings in: a branch of a repository.",
      "properties": {
        "branch": {
          "type": "string"
        },
        "repo": {
          "description": "The repository the branch is on, if the index knows it.",
          "ref": "#repoViewBasic",
          "type": "ref"
        }
      },
      "required": [
        "branch"
      ],
      "type": "object"
    },
    "queueStateView": {
      "description": "Where an open pull stands in its target branch's merge queue.",
      "properties": {
        "checks": {
          "description": "While its batch is being checked or landing, the batch's checks; once ejected by checks that failed, those.",
          "items": {
            "ref": "#checkView",
            "type": "ref"
          },
          "type": "array"
        },
        "createdAt": {
          "description": "When it was queued or ejected.",
          "format": "datetime",
          "type": "string"
        },
        "reason": {
          "description": "Why it was ejected, as the runner said.",
          "type": "string"
        },
        "said": {
          "description": "Where it stands, in words: `Queued, 3rd of 5`, `In a batch of 4 being checked`, `Landing`, or why it was ejected.",
          "type": "string"
        },
        "state": {
          "knownValues": [
            "queued",
            "ejected"
          ],
          "type": "string"
        }
      },
      "required": [
        "state",
        "createdAt",
        "said",
        "checks"
      ],
      "type": "object"
    },
    "reactionContent": {
      "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.",
      "knownValues": [
        "+1",
        "-1",
        "laugh",
        "hooray",
        "confused",
        "heart",
        "rocket",
        "eyes"
      ],
      "maxLength": 32,
      "type": "string"
    },
    "reactionCountView": {
      "description": "How many accounts reacted to something with one content.",
      "properties": {
        "content": {
          "ref": "#reactionContent",
          "type": "ref"
        },
        "count": {
          "description": "How many accounts reacted so, each once.",
          "minimum": 0,
          "type": "integer"
        },
        "reaction": {
          "description": "The asker's dev.knotless.reaction record of this content on it, if they reacted so.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "content",
        "count"
      ],
      "type": "object"
    },
    "reactionState": {
      "description": "The reactions to a pull, an issue or a comment.",
      "properties": {
        "reactions": {
          "description": "By content, in the order dev.knotless.defs#reactionContent lists them; a content no account reacted with is left out.",
          "items": {
            "ref": "#reactionCountView",
            "type": "ref"
          },
          "type": "array"
        },
        "subject": {
          "description": "The pull, issue or comment.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "subject",
        "reactions"
      ],
      "type": "object"
    },
    "releaseFileView": {
      "description": "One file of a release.",
      "properties": {
        "name": {
          "description": "Its name, as it is downloaded.",
          "type": "string"
        },
        "sha256": {
          "description": "The lowercase hex SHA-256 of the file, which a reader checks it against.",
          "type": "string"
        },
        "size": {
          "description": "Bytes in the file.",
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "name",
        "size",
        "sha256"
      ],
      "type": "object"
    },
    "releaseView": {
      "description": "One version of a package a repository publishes, from its dev.knotless.release record, with its files and notes.",
      "properties": {
        "check": {
          "description": "The dev.knotless.check of the run that built it, if its record names one.",
          "format": "at-uri",
          "type": "string"
        },
        "commit": {
          "description": "The hex object ID of the commit its files were built from, if its record names one.",
          "type": "string"
        },
        "createdAt": {
          "description": "As its record says.",
          "format": "datetime",
          "type": "string"
        },
        "files": {
          "description": "What it publishes, in its record's order.",
          "items": {
            "ref": "#releaseFileView",
            "type": "ref"
          },
          "type": "array"
        },
        "html": {
          "description": "`notes` made into HTML, as dev.knotless.getThread's comments are: raw HTML shown as text, and links made relative to the repository.",
          "type": "string"
        },
        "image": {
          "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.",
          "type": "boolean"
        },
        "latest": {
          "description": "True for its package's latest version: the highest with no pre-release part.",
          "type": "boolean"
        },
        "notes": {
          "description": "What changed since the version before, in Markdown, as its record says.",
          "type": "string"
        },
        "package": {
          "description": "The package's name.",
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.release record.",
          "format": "at-uri",
          "type": "string"
        },
        "version": {
          "description": "Its Semantic Versioning 2.0 version.",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "package",
        "version",
        "files",
        "createdAt"
      ],
      "type": "object"
    },
    "releaseViewBasic": {
      "description": "One version of a package a repository publishes, from its dev.knotless.release record: which, and when.",
      "properties": {
        "createdAt": {
          "description": "As its record says.",
          "format": "datetime",
          "type": "string"
        },
        "image": {
          "description": "True when its files are a container image's OCI layout, pulled by `docker pull` rather than downloaded.",
          "type": "boolean"
        },
        "latest": {
          "description": "True for its package's latest version: the highest with no pre-release part.",
          "type": "boolean"
        },
        "package": {
          "description": "The package's name.",
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.release record.",
          "format": "at-uri",
          "type": "string"
        },
        "version": {
          "description": "Its Semantic Versioning 2.0 version.",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "package",
        "version",
        "createdAt"
      ],
      "type": "object"
    },
    "releasesView": {
      "description": "What a repository publishes, in brief, for its pages to show under its name.",
      "properties": {
        "count": {
          "description": "How many releases it has published, of all its packages.",
          "minimum": 0,
          "type": "integer"
        },
        "packages": {
          "description": "Each package it publishes, by name.",
          "items": {
            "ref": "#packageView",
            "type": "ref"
          },
          "type": "array"
        },
        "release": {
          "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.",
          "ref": "#releaseViewBasic",
          "type": "ref"
        }
      },
      "required": [
        "count",
        "release",
        "packages"
      ],
      "type": "object"
    },
    "repoMade": {
      "description": "A repository the pages made: created, forked, renamed or taken up.",
      "properties": {
        "name": {
          "description": "Its name, the record key.",
          "maxLength": 100,
          "type": "string"
        },
        "uri": {
          "description": "Its dev.knotless.repo record, by its owner's DID.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "name"
      ],
      "type": "object"
    },
    "repoRef": {
      "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.",
      "properties": {
        "key": {
          "description": "The repository's `key`.",
          "format": "tid",
          "type": "string"
        },
        "uri": {
          "description": "The dev.knotless.repo record, as it was named when this was written.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "key"
      ],
      "type": "object"
    },
    "repoView": {
      "description": "A repository among others, from its dev.knotless.repo record.",
      "properties": {
        "createdAt": {
          "description": "As its record says.",
          "format": "datetime",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "forkCount": {
          "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.",
          "minimum": 0,
          "type": "integer"
        },
        "forkOf": {
          "description": "The repository it was forked from, if the appview knows it.",
          "ref": "#repoViewBasic",
          "type": "ref"
        },
        "language": {
          "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.",
          "ref": "#languageView",
          "type": "ref"
        },
        "name": {
          "description": "The repository's name: its record key.",
          "type": "string"
        },
        "owner": {
          "ref": "#actorView",
          "type": "ref"
        },
        "private": {
          "description": "Whether it is private, in a space: listed only to its owner, asking.",
          "type": "boolean"
        },
        "starCount": {
          "description": "How many accounts starred it, as the appview has indexed. Given only where a list shows it, as an account's stars do.",
          "minimum": 0,
          "type": "integer"
        },
        "uri": {
          "description": "Its dev.knotless.repo record, under the name it has now.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "owner",
        "name",
        "createdAt"
      ],
      "type": "object"
    },
    "repoViewBasic": {
      "description": "A repository, under the name it has now.",
      "properties": {
        "did": {
          "description": "The repository's owner.",
          "format": "did",
          "type": "string"
        },
        "handle": {
          "description": "The owner's handle, as in #actorView.",
          "type": "string"
        },
        "name": {
          "description": "The repository's name: its record key.",
          "type": "string"
        }
      },
      "required": [
        "did",
        "handle",
        "name"
      ],
      "type": "object"
    },
    "repoViewDetailed": {
      "description": "A repository, with what its pages show above themselves.",
      "properties": {
        "card": {
          "description": "The path, on this appview, of the picture a link to its pages unfurls into: a new one whenever the picture changes.",
          "type": "string"
        },
        "defaultBranch": {
          "description": "The branch its HEAD names: empty, for a repository never pushed.",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "forkOf": {
          "description": "The repository it was forked from, if the appview knows it.",
          "ref": "#repoViewBasic",
          "type": "ref"
        },
        "links": {
          "description": "Links its pages show, in display order, as its record names them: its website first. Only http and https addresses.",
          "items": {
            "ref": "#link",
            "type": "ref"
          },
          "type": "array"
        },
        "name": {
          "description": "The repository's name: its record key.",
          "type": "string"
        },
        "openIssues": {
          "minimum": 0,
          "type": "integer"
        },
        "openPulls": {
          "minimum": 0,
          "type": "integer"
        },
        "owner": {
          "ref": "#actorView",
          "type": "ref"
        },
        "private": {
          "description": "Whether it is private, in a space: shown only to its members, each logged in to this appview.",
          "type": "boolean"
        },
        "releases": {
          "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.",
          "ref": "#releasesView",
          "type": "ref"
        },
        "starCount": {
          "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.",
          "minimum": 0,
          "type": "integer"
        },
        "uri": {
          "description": "Its dev.knotless.repo record, under the name it has now.",
          "format": "at-uri",
          "type": "string"
        },
        "viewer": {
          "description": "What the account asking has to do with it; absent when no one asks.",
          "ref": "#repoViewerState",
          "type": "ref"
        }
      },
      "required": [
        "uri",
        "owner",
        "name",
        "defaultBranch",
        "openPulls",
        "openIssues",
        "card"
      ],
      "type": "object"
    },
    "repoViewerState": {
      "description": "What the account asking a query has to do with a repository.",
      "properties": {
        "star": {
          "description": "Its dev.knotless.star record naming the repository, if it starred it.",
          "format": "at-uri",
          "type": "string"
        },
        "transfer": {
          "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).",
          "ref": "#repoViewBasic",
          "type": "ref"
        }
      },
      "type": "object"
    },
    "reviewView": {
      "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.",
      "properties": {
        "commit": {
          "description": "The hex object ID of the head it looked at.",
          "type": "string"
        },
        "maintainer": {
          "description": "Whether the reviewer is the repository's owner or a collaborator.",
          "type": "boolean"
        },
        "outdated": {
          "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.",
          "type": "boolean"
        },
        "reviewer": {
          "ref": "#actorView",
          "type": "ref"
        },
        "uri": {
          "description": "The dev.knotless.comment that reviewed it.",
          "format": "at-uri",
          "type": "string"
        },
        "verdict": {
          "description": "`approve`, or `changes` for one that asked for changes.",
          "knownValues": [
            "approve",
            "changes"
          ],
          "type": "string"
        }
      },
      "required": [
        "reviewer",
        "verdict",
        "uri",
        "outdated",
        "maintainer"
      ],
      "type": "object"
    },
    "starState": {
      "description": "A repository's stars, as starring or unstarring it leaves them.",
      "properties": {
        "star": {
          "description": "The asker's dev.knotless.star record naming it; absent once unstarred.",
          "format": "at-uri",
          "type": "string"
        },
        "starCount": {
          "description": "How many accounts starred it now.",
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "starCount"
      ],
      "type": "object"
    }
  },
  "description": "Definitions shared by the knotless lexicons.",
  "id": "dev.knotless.defs",
  "lexicon": 1
}
```
