dev.knotless.check

lexicons.knotless.dev

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "batched": {
      "description": "A pull in a merge queue's batch, as the run squashed it.",
      "properties": {
        "commit": {
          "description": "The hex object ID of the pull's own commit in the batch.",
          "maxLength": 64,
          "minLength": 40,
          "type": "string"
        },
        "head": {
          "description": "The hex object ID of the pull's head that was squashed.",
          "maxLength": 64,
          "minLength": 40,
          "type": "string"
        },
        "pull": {
          "description": "The dev.knotless.pull record.",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "pull",
        "commit"
      ],
      "type": "object"
    },
    "image": {
      "description": "A picture a run made, as an output.",
      "properties": {
        "alt": {
          "description": "What the picture shows, from its file's name, for whoever reads it without seeing it: a person or an agent.",
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        },
        "image": {
          "accept": [
            "image/png",
            "image/jpeg",
            "image/webp",
            "image/gif"
          ],
          "maxSize": 1000000,
          "type": "blob"
        }
      },
      "required": [
        "image",
        "alt"
      ],
      "type": "object"
    },
    "main": {
      "description": "Kept in the runner's account, keyed `<owner hash>.<repo key>.<ref hash>.<commit>.<workflow>`, where each hash is the first 26 characters of the lowercase unpadded base32 SHA-256 of the owner's DID or the full ref name (for a pull's run, the pull's AT-URI), so each commit keeps its own check of each workflow, replaced only when that commit runs again. A pull's run is keyed `<owner hash>.<repo key>.<pull hash>.<commit>.<baseCommit>.<workflow>`, so a run against a newer base is a check of its own. A runner may delete checks of no more use: a batch's, a closed pull's, ones superseded by a newer run of the same workflow, and the default branch's after a while. Readers trust only a runner the repository names.",
      "key": "any",
      "record": {
        "properties": {
          "baseCommit": {
            "description": "For a pull's run, the hex object ID of the tip of the branch the pull is into that its head was merged with: the run is of that merge, as merging the pull would make it, so it is current only while both the head and the base are where they were.",
            "maxLength": 64,
            "minLength": 40,
            "type": "string"
          },
          "batch": {
            "description": "For a run of a merge queue's batch (dev.knotless.queue): the pulls it would land, in order, each squashed as a commit of its own onto `baseCommit`, the tip of the branch `ref` names, and `commit` the last of them. Once every run of the batch passes, the branch moves to `commit`.",
            "items": {
              "ref": "#batched",
              "type": "ref"
            },
            "maxLength": 64,
            "type": "array"
          },
          "commit": {
            "description": "The hex object ID the ref pointed at.",
            "maxLength": 64,
            "minLength": 40,
            "type": "string"
          },
          "error": {
            "description": "Why the workflow did not run: for `error`, or for a `failure` of a pull that does not merge, the paths that conflict.",
            "maxLength": 4096,
            "type": "string"
          },
          "finishedAt": {
            "format": "datetime",
            "type": "string"
          },
          "generation": {
            "description": "The ref's generation at that commit.",
            "minimum": 1,
            "type": "integer"
          },
          "log": {
            "accept": [
              "text/plain"
            ],
            "description": "Every step's output, interleaved as it was written; the tail, when there was more.",
            "maxSize": 1000000,
            "type": "blob"
          },
          "outputs": {
            "description": "What the run made to be looked at, such as screenshots of the pages a change moved, in the order of their names. Kinds unknown to a reader are passed over.",
            "items": {
              "refs": [
                "#image"
              ],
              "type": "union"
            },
            "maxLength": 32,
            "type": "array"
          },
          "pull": {
            "description": "The dev.knotless.pull record, for a run of the pull's head.",
            "format": "at-uri",
            "type": "string"
          },
          "queue": {
            "description": "For a pull's run, where its workflow runs in the merge queue, when not only on each batch: `first`, as the workflow's `queue: first` asks, is a pre-flight, which a queued pull must pass at its head before it goes into a batch.",
            "knownValues": [
              "first"
            ],
            "maxLength": 64,
            "type": "string"
          },
          "ref": {
            "description": "The full ref name the run was for, such as refs/heads/main; for a pull's run, its head branch in the repository the pull brings it from.",
            "maxLength": 1024,
            "type": "string"
          },
          "repo": {
            "description": "The repository whose ref moved, or the target of the pull.",
            "ref": "dev.knotless.defs#repoRef",
            "type": "ref"
          },
          "skipped": {
            "description": "For a `success` that ran no step: why, as people read it, such as the paths its workflow names, none of which the change touched. Its steps are then each `skipped`.",
            "maxGraphemes": 1000,
            "maxLength": 4000,
            "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: it is filed `running` once it starts, its `startedAt` then. `failure` is a step that exited non-zero or ran out of time, or a pull's head that conflicts with its base; `error` is the runner failing to run the workflow at all; `cancelled` is a run stopped for a newer commit's run of the workflow on the same ref or pull. A `success` with `skipped` ran no step, as the change touched none of the paths the workflow names, and passes as any `success` does.",
            "knownValues": [
              "queued",
              "running",
              "success",
              "failure",
              "error",
              "cancelled"
            ],
            "maxLength": 64,
            "type": "string"
          },
          "steps": {
            "description": "Each step the workflow has, in order. Absent for `error`.",
            "items": {
              "ref": "#step",
              "type": "ref"
            },
            "maxLength": 256,
            "type": "array"
          },
          "workflow": {
            "description": "The workflow's name, which is also the last part of the record key.",
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "repo",
          "ref",
          "commit",
          "workflow",
          "status",
          "startedAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "step": {
      "properties": {
        "durationMs": {
          "description": "How long the step ran, in milliseconds.",
          "minimum": 0,
          "type": "integer"
        },
        "exitCode": {
          "description": "Absent when the step was killed for running out of time.",
          "type": "integer"
        },
        "name": {
          "description": "The step's name in the workflow, or `step <n>` for one with none.",
          "maxLength": 256,
          "type": "string"
        },
        "status": {
          "description": "`cancelled` is the step running when its run was cancelled.",
          "knownValues": [
            "success",
            "failure",
            "skipped",
            "cancelled"
          ],
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "name",
        "status"
      ],
      "type": "object"
    }
  },
  "description": "What a workflow did at a commit a ref pointed at, or at the head of a pull, as the runner that ran it reports.",
  "id": "dev.knotless.check",
  "lexicon": 1
}

Validate Record

Validate a record against dev.knotless.check

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

Metadata

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

Referenced Schemas (1)

Similar Lexicons

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

  • A pull put in the merge queue of the branch it targets, taken out of it, or turned away by the runner that lands the queue.

  • A check of one of a repository's workflows.

  • What a repository's runners ran: every run of its workflows, and the workflows themselves.

  • A repository's merge queues.

  • A repository owner's request that its runners run a ref's or a pull's workflows again.

Lexicon Garden

@