~ knotless Search/
↑↓ move↵ open⇧↵ all results

chadtmiller.com/knotless

git that lives in your Atmosphere account

knotless.dev
1 collaborator

knotless 0.13.0 Latest 2 packages, 1 image

1
10

Pulls and states: small correctness gaps

Open
Open chadtmiller.com opened this issue 0 comments
kind/bugarea/cliarea/serve

Found by reading the code while rewriting the docs; not each reproduced.

  • A hidden pull can be merged: merging reads the pull fresh but its states through moderation, so a hidden pull's closed or merged states are dropped and it reads open.
  • set_state writes a state record even when the caller may not set it, and reports success; readers then ignore it. It also writes one for a pull or issue that does not exist: issue close on a URI with the wrong author DID answered closed and left a state record pointing at nothing.
  • reopen works on a merged pull, and readers then show it open with the merge cleared. (Both fixed by Close and reopen refuse what no reader would count: close and reopen read the item first and refuse these.)
  • Readers accept any state string from an allowed author, including merged on an issue.
  • rename_branch (the CLI's branch rename and the MCP tool) finds pulls through the moderated appview index, so hidden pulls, blocked authors' pulls and pulls not indexed yet keep pointing at the deleted branch.
  • Opening a pull and retarget accept a deleted branch, because its ref record stays without a target; branch() gets this right.
  • Approvals count every approve ever given, including at older heads, and a later 'changes' review does not cancel one. (Fixed by 5b914d29: each reviewer's latest review stands, a standing changes blocks, and dismissStale counts only reviews of the current head.)
  • MCP merge with queue silently ignores keep_branch, wait and force; the CLI refuses them.
  • Changing a pull's head drops record fields this client does not know, and does not stamp updatedAt.
  • The CLI delegate requires a gateway DID; the MCP tool defaults to the appview's. They could share the default.