chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
Release 0.13.0
.changeset/close-checks-the-item.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: patch | ||
--- | ||
| ||
# Close and reopen refuse what no reader would count | ||
| ||
`pull close`, `pull reopen`, `issue close` and `issue reopen` (and their MCP tools and the pages' buttons) used to write a state record for any URI and say it worked, even for an issue that does not exist, such as one named under the wrong account, or for someone who may not change it. Readers ignored those records, so nothing changed but a stray record in your account. Now they read the item first, and refuse one that is not there, a caller who is not its author, the owner or a collaborator, a merged pull (`pull revert` undoes one), and a state it is in already. | ||
.changeset/commits-as-git.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: minor | ||
--- | ||
| ||
# knotless commits as git does on your machine | ||
| ||
`knotless repo commit` with no `--author`, `knotless pull merge`, `pull update-branch` and `pull revert`, and the same tools over MCP on stdio, now author and commit as git would there (`user.name` and `user.email`), rather than as `<your did>@knotless.invalid`, which only knotless can tie to you. A history made with knotless reads on GitHub or any mirror as one made with git. With no git identity set, they commit as your account, as before. A runner landing the merge queue or writing back a workflow's files commits as `knotless`, whichever account it runs as. | ||
.changeset/details-fold.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: minor | ||
--- | ||
| ||
# Markdown folds a part away with `<details>` | ||
| ||
A pull, issue, comment or README can fold its long part away behind `<details><summary>…</summary>`, as on GitHub: the pages and the iOS app show the summary, and the rest once it is opened. | ||
.changeset/fold-summary-markdown.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: patch | ||
--- | ||
| ||
# A fold's summary is Markdown, and a squash commit leaves the fold out | ||
| ||
What a `<summary>` says shows its emphasis, code and links on the pages and in the iOS app. A pull merged as one squash commit, by `knotless pull merge` or the merge queue, has its body's `<details>` and `<summary>` tags left out of the commit message, each summary's words kept as a line. | ||
.changeset/owner-watches-private.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: minor | ||
--- | ||
| ||
# An agent watching an owner finds their private repositories shared with it | ||
| ||
`knotless repo share` leaves the account shared with an invite at the appview, and `knotless-agent --owner <handle>` watches, besides that account's public repositories, every private one it shared with the agent's account, so a reviewer need not be told each private repository by name. | ||
.changeset/reads-survive-a-dropped-connection.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: patch | ||
--- | ||
| ||
# A read whose connection dropped is asked again | ||
| ||
A read from a PDS or the appview whose connection broke before it was answered, as one kept open that the server had since closed, is now asked again once instead of failing the command. Writes are not sent again, since they may have been done. | ||
.changeset/refusals-in-their-readers-words.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: patch | ||
--- | ||
| ||
# Refusals say what to do in their reader's words | ||
| ||
A refusal ends with what to do about it, after a full stop: on the command line as a command, over MCP as a tool, and on the pages as the control that does it, leaving out what only the command line can. The runner no longer writes how to approve a pull into the reason it records for ejecting one that is not reviewed as its branch asks. Some wordings moved to fit: a failed merge gate ends `read their logs with …`, and `not logged in as <did>` no longer names `KNOTLESS_PASSWORD`. | ||
.changeset/run-log.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: minor | ||
--- | ||
| ||
# `run log` shows what a check prints while it runs | ||
| ||
`knotless run log <url>`, with the flags `run list` filters by, prints the newest check's output: while it runs, what its steps printed so far, as the appview holds it, ending with the step going; once it ended, its log. `--follow` prints what it prints next, until it ends, then its result. The MCP tool `run_log` gives the same, with `since`, the cursor an earlier answer gave, and `wait`, to wait for more. Both read the appview's new `dev.knotless.getRunOutput` query, so they need an appview (`KNOTLESS_APPVIEW`). | ||
.changeset/space-cancel.mddeleted+0−7
| @@ -1,7 +0,0 @@ | ||
--- | ||
default: patch | ||
--- | ||
| ||
# Owners of private repositories can cancel their runs | ||
| ||
`knotless run cancel` (and `run_cancel`) on a private repository was refused, `Scope does not permit create in at://…/space/dev.knotless.space/…`, because the private repository's space type did not list `dev.knotless.cancel`, and a PDS grants a login only the collections it lists. It lists it now: once knotless publishes its lexicons with it, log in again to allow it. A refusal like that, from a PDS that did not grant what your login asks for, no longer says your login is older than what knotless asks for: it says the PDS did not grant it, and why. | ||
Cargo.lock+6−6
| @@ -2336,7 +2336,7 @@ dependencies = [ | ||
| ||
[[package]] | ||
name = "knotless" | ||
version = "0.12.0" | ||
version = "0.13.0" | ||
dependencies = [ | ||
"anyhow", | ||
"atproto", | ||
| @@ -2368,7 +2368,7 @@ dependencies = [ | ||
| ||
[[package]] | ||
name = "knotless-agent" | ||
version = "0.12.0" | ||
version = "0.13.0" | ||
dependencies = [ | ||
"anyhow", | ||
"axum", | ||
| @@ -2385,7 +2385,7 @@ dependencies = [ | ||
| ||
[[package]] | ||
name = "knotless-mcp" | ||
version = "0.12.0" | ||
version = "0.13.0" | ||
dependencies = [ | ||
"anyhow", | ||
"axum", | ||
| @@ -2404,7 +2404,7 @@ dependencies = [ | ||
| ||
[[package]] | ||
name = "knotless-run" | ||
version = "0.12.0" | ||
version = "0.13.0" | ||
dependencies = [ | ||
"anyhow", | ||
"axum", | ||
| @@ -2423,7 +2423,7 @@ dependencies = [ | ||
| ||
[[package]] | ||
name = "knotless-serve" | ||
version = "0.12.0" | ||
version = "0.13.0" | ||
dependencies = [ | ||
"anyhow", | ||
"atproto", | ||
| @@ -2488,7 +2488,7 @@ dependencies = [ | ||
| ||
[[package]] | ||
name = "knotless-triage" | ||
version = "0.12.0" | ||
version = "0.13.0" | ||
dependencies = [ | ||
"anyhow", | ||
"axum", | ||