-
released this
2026-08-26 09:15:54 +00:00 | 46 commits to main since this releaseA session on
/channelcould only have its tool-approval dialogs answered at the terminal, so every gated Bash, Write or Edit stalled a fleet driven from a phone until somebody reached a keyboard./channelnow declaresclaude/channel/permission: each prompt is rendered into a Matrix message carrying the five-letter request id verbatim, which the terminal dialog never shows, and a reply ofyes <id>orno <id>answers it. Nothing retracts the Matrix message or cancels the terminal dialog, so both stay open, and from Matrix a request is answerable exactly once because the pending entry is retired by the delivery that carried the verdict. Which of two answers Claude Code acts on is its decision, not this server's.The verdict branch sits behind the same sender allowlist as message delivery, because anyone who can reply through the channel can approve tool use in the session. The destination is
permission_roomfromapp.matrix_mcp.channelaccount data, else the room an allowlisted sender last wrote in, recorded only after that gate passes. Neither known is a logged drop rather than a guess, since a guessed room hands the approval to whoever is standing in it.Four holes closed after review. Replay filtered on sender and msgtype only, so a verdict came back on the next attach as chat with nothing to refer to, the #107 shape in another costume.
deliver_verdictretired the request before knowing the send worked, so a repeated answer read as unissued; retirement is now conditional on a per-entry serial.client.get_room()returns Left, Invited, Knocked and Banned rooms, soSomewas not joined, the #113 trap. And thelive_peers(mxid) == 0early return dropped verdicts for dialogs still open, becauselive_peerscounts without evicting.replay_deliverableis lifted out ofreplay_room's closure, where none of replay's judgement was reachable: stubbing the verdict check left the suite of the time, 235 tests, green. Verified by removal, one at a time, with the verdict check, the sender gate and the budget each disabled and each going red. The three controls it added are part of why the suite now stands at 240.
Note on the tag annotation. The annotation on the
v0.10.5tag object is missing one line of the third paragraph.git tag -adefaults to--cleanup=strip, which removes any line beginning with#, and the paragraph happened to wrap so that#113 trap. And the live_peers...started one.#107survived only because it sits mid-line. Nothing in git's output reports a dropped line. This release note is the complete text; the tag was left alone because its image was already built and published, and rewriting a published ref to fix a wrapped line is the worse trade.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)