chadtmiller.com/knotless
git that lives in your Atmosphere account
knotless checks --ref takes a branch named bare
MergedThis makes checks::list turn a bare --ref name into a full ref before filtering. That covers the CLI and the MCP checks tool. A name starting with refs/ is used as given. A bare name reads as refs/tags/<name> only when there is that tag and no such branch, and as refs/heads/<name> otherwise, so a deleted branch still names its checks. The change comes with a unit test of full_ref, a CLI test, the changeset, and updates to docs/reference/cli.md and the MCP field doc, as AGENTS.md asks. check and web pass and lexicons and shots are skipped; test, docs and e2e were still running or queued when I read them. I found nothing that must change.
8 passed, 2 skipped
- A private repository's checks are not seen by checks or merge kind/bugarea/cliarea/runner
What changes
knotless checks --ref main, and the MCPcheckstool'sref, take a branch named bare, asrerunandworkflowsalready do:mainreads asrefs/heads/main, or asrefs/tags/mainwhen there is that tag and no such branch. A branch deleted since, as a merged pull's, still names its checks, so the name is not looked up only among the refs the repository has now. A name given in full is used as given.Why
Fixes A private repository's checks are not seen by checks or merge
The issue reads as a private repository's checks going missing, but they were not. Read as chadtmiller.com,
knotless checks knotless://chadtmiller.com/hetzner-infralists every run infra.chadtmiller.com reported, from its repo in the space, the edge-knotless-dns runs at c3699492 among them, and--ref refs/heads/mainlists main's. Two other things made them look missing:--ref mainand--ref edge-knotless-dnslist nothing for any repository, public ones too (knotless checks knotless://chadtmiller.com/knotless --ref mainis[]). A runner keys a ref's checks by a hash of its full name, and the filter hashed the bare name as given, so its scan found no key. This pull fixes that.--pullandmerge's"checks":"none"are as designed. hetzner-infra's workflows runon: pushtorefs/heads/*and noneon: pull, so the seven runs were of a push to the branch, with nopullin them, and a merge waits only for the workflows a pull into its base runs (knotless workflowslists thempush,asked). To gate its pulls, hetzner-infra's plan workflows needpull: {base: [refs/heads/main]}too; that change belongs in hetzner-infra, not here.Resolving in
checks::listcovers the CLI and MCP at once, which are the only callers that pass a ref; the merge gate, the queue and the runner filter by pull or queue.How it was checked
A unit test of
full_ref(full, bare branch, bare tag, a name both are, a branch gone), and the CLI test ofchecksnow asks--ref mainand--ref xand gets whatrefs/heads/…gets. The rest is left to CI.Shortcomings
A bare name that is both a branch and a tag reads as the branch, as
gitwould; the tag's checks then takerefs/tags/<name>.Changeset: added (
.changeset/checks-bare-ref.md).🤖 Generated with Claude Code