Repository navigation
ci(cmux-tui): skip docs-only publishes while preserving artifact lookup - #28214
Conversation
|
Found 6 test failures on Blacksmith runners: Failures
|
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Not verified: macOS jobs did not run: compile and app tests were skipped on CI passes on Written by web and size checks: green Shipped in:
|
|
Review (codex-review-box/gpt-6-astra high, lane-place): BLOCK at 915900a BLOCK
|
915900a to
dfbc350
Compare
dfbc350 to
05158b1
Compare
* test(ios): New Message to one agent forwards its images Red first: routing a New Message / Forward to one agent sends only the text, so images are dropped and an image-only message sends nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-e06379967aeecbaaded3 * fix(ios): New Message to one agent sends its images New Message and Forward addressed to one agent sent only the text as the agent's prompt: attached images were dropped, and an image-only message sent nothing after the sheet closed. The images now go as the prompt's image attachments, bytes and order kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-e06379967aeecbaaded3 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… checks (#28187) * test(setup): cover actionable harness auth reports Agent-Session: https://cmux.com/deeplink/agent?id=aid-252635b51d8eab1624f1 * fix(setup): expose actionable harness auth recovery Agent-Session: https://cmux.com/deeplink/agent?id=aid-252635b51d8eab1624f1 * docs(setup): clarify actionable verification failures Agent-Session: https://cmux.com/deeplink/agent?id=aid-252635b51d8eab1624f1 * fix(setup): preserve disabled profile check uncertainty Agent-Session: https://cmux.com/deeplink/agent?id=aid-252635b51d8eab1624f1 * test(setup): select custom profile among discovered harnesses Agent-Session: https://cmux.com/deeplink/agent?id=aid-252635b51d8eab1624f1 * fix(setup): an expired credential reports signed_out with the login recovery Base added acpmux::harness_health::Auth::Expired; setup already routes it to the login action, so its auth_status is signed_out (the match was non-exhaustive and cmux-tui did not compile). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f8805b2d0f3b1303441e --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* acpmux: leave superseded tool output out of open pages and sealed segments codex-acp re-sends a running command's whole output as the content of every tool_call_update, so a Codex chat's log grows with the square of its output and its open page holds a few snapshots of one command. A page a client bounds by bytes (maxBytes) now leaves out updates a newer update of the same call in the scan makes moot, and drops moot content from the rest. Each sealed segment of a live chat's log loses the content a later update of the same call in it supersedes, on a thread of its own; seq, deltas and each call's last content stay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux: supersede only within a prompt; fence the sealed rename Review findings on #27614: - A call id names a call within one prompt: a user_message or turn_started between two updates keeps both, in pages and on disk. A read cut at a prompt (a fork through a turn) sees every call as logged. - The copy goes in under the writers' lock a retention commit holds, and only over the very file it was read from (device, inode, length): a retention rewrite, a delete or a replacement is never overwritten. - A segment that changed stops the pass without moving the marker. - The copy is removed on any error, and a crash's copy by the next pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux: keep this PR to the open page; sealed-segment compaction moves to a follow-up Review found that rewriting sealed segments changes what a fork or export pinned mid-prompt reads, so this PR now changes only pages read newest first with a byte bound. A page of some kinds still resets at every prompt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux: touch only output-only updates, and keep the oldest of each call a page reads Review: dropping any covered update changed the fold where an update carries more than output (input keys merge, subagent _meta, a diff a hidden call shows), and the start time a page takes from the first update it reads. Now only an update of status and text content is touched, and the oldest of each call a page reads stays until an older record of the call makes it moot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux: scope superseded calls by subagent owner, keep content:null, honour stubs Review: a native subagent numbers its calls apart from its chat; an explicit content null clears output; a record a page stubs carries no output. Each now supersedes nothing it should not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux: fix superseded tests (clippy useless_vec, the clear test) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * acpmux: a params _meta of any other shape is never plain Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… a down machine reconnects on use (#26786) * feat(machines): one machine link state for the sidebar and the agent pane, reconnecting on use The sidebar machine header draws a spinner while a machine connects or reconnects and red when it is down; the agent pane gets the same word (machineLink) for its composer strip; opening or sending to a chat on a down machine reconnects it and goes on once its handshake finished. Sidebar-Look: Leo 2026-10-28 "you just get a little green dot ... as if you were working on your own computer, but now it's remote" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * test(sidebar): a still of the machine headers in each link state Sidebar-Look: Leo 2026-10-28 "you just get a little green dot ... as if you were working on your own computer, but now it's remote" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(machines): an optional update draws the connected dot; a cancelled send is not retried Sidebar-Look: Leo 2026-10-28 "you just get a little green dot ... as if you were working on your own computer, but now it's remote" Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(agent-pane): a send cancelled while its machine reconnects stops waiting at once Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(agent-pane): a cancelled send reconnects nothing Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(agent-pane): a send cancelled during its machine's reconnect is not retried Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(agent-pane): the strip's machine and its Reconnect are the machine the tab's chat runs on Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(agent-pane): a released tab's page leaves the machine link; the last one ends its observation Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(agent-pane): name the settings JSONValue the page event carries Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 (cherry picked from commit f354c69) * test(agent-pane): the Observable fake machine is not private (its macro's extension needs it) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * feat(sidebar): remote machines follow acpmux's peer state pushes from the app's own daemon The app's own acpmux watch now reads `_acpmux/peer_state_changed` and hands it to the remote machines' sidebar: a listed peer's header goes up or down at once, a repeat changes nothing, and an unknown or removed peer, or a reopened watch, reads `_acpmux/peers` again. A mirrored acpmux's (the Chief home's) pushes are ignored, so only this Mac's own links show. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(sidebar): a peer list read that a push overtook is read again A push that lands while `_acpmux/peers` is in flight (a separate socket, so its answer may be from before the push) drops that answer and reads the list once more; pushes come only on a state change, so a burst ends in one more read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * fix(sidebar): any peer push drops the list read it overtook, one that changes nothing shown too Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-4ba8980ae4e8eecb82d6 * cmux NEXT machine link: a send stops waiting on a link that needs a person, and a failed socket or handshake reconnects too Review findings at fbdd271: awaitLink waited the whole 45 s budget when the reconnect ended stuck (a refused sign-in, a required update); it now ends at once. The retry wrapped only the endpoint, so a socket or daemon handshake failing after the endpoint came back bypassed the reconnect; the attach client now asks the machine link (AgentSessionAttachClient.Reconnect) when any part of its connection fails, and tries once more. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5b0be570f0b96d2d4c7b * cmux NEXT machine link: the reconnect retry runs in the caller's task, and a failed first try ends no attachment Review findings at 703d820: a first try whose handshake failed closed its transport, whose onClose ended the page's attachment before the retry; and the reconnect wait ran in the shared unstructured connect task, so a cancelled call kept waiting. The retry now wraps the shared connection in the caller's task; a quiet first try tells its loss only when no retry follows or the retry fails too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-5b0be570f0b96d2d4c7b * Fix machine link event delivery and reconnect endpoint Agent-Session: aid-b12e655d1a89af187c5a * Pass empty scripts for machine link delivery Agent-Session: https://cmux.com/deeplink/agent?id=aid-16e16f9e7a55152abe76 * Report quiet attach loss after endpoint failure Agent-Session: https://cmux.com/deeplink/agent?id=aid-16e16f9e7a55152abe76 * Fix machine-link guard and lint findings Agent-Session: https://cmux.com/deeplink/agent?id=aid-16e16f9e7a55152abe76 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-bot[bot] <348531757+cmux-bot[bot]@users.noreply.github.com>
…er restore (#27840) * ci(cmux-tui): owned minis skip the Go and branch Rust caches that never restore On owned Mac minis, the macOS job's setup-go cache never restored: untarring it over the mini's own read-only ~/go/pkg/mod failed with Permission denied (8 of 8 sampled jobs), after a ~63 s download and before another save attempt. The rust-cache restored 0 of 8; its branch saves cost ~155 s each and filled most of the 10 GB GitHub cache store, evicting other entries. Owned minis now run setup-go without the Actions cache, and save the cargo cache only from feat-cmux-next. Blacksmith VMs keep both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-a7306ef145c005ad24ab * ci: keep cache regression out of guard workflow Agent-Session: https://cmux.com/deeplink/agent?id=aid-4777d4f75452817a742b --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…TRACE (#28122) #25857 made the swift test wrapper export SWIFT_BACKTRACE=enable=yes,... so a crash of the test process prints its stack. Every child inherited it: - An exit test's child traps on purpose. With the variable set, it spawned the backtracer to symbolicate the whole test binary, and the parent sat in wait4 until the stuck-test watchdog ended the run (BlockingCheckTests .aCheckedFileManagerCallOnTheMainThreadTraps, #26809 run 40999753339 shard 6, exit 143). - A privileged tool writes "swift runtime: backtrace-on-crash is not supported for privileged executables." to stderr first. A test reading the child's stderr took that line for the answer: ChromiumRuntimeInstaller failed with unsafeEntry and then stalled 303 s (same run, shard 5), as the python bridges #27981 fixed one by one did. The test bundle's load-time constructor now unsets the variable. The Swift runtime read it when libswiftCore loaded, before the bundle, so the test process keeps its own backtracer and no child gets one. Agent-Session: https://cmux.com/deeplink/agent?id=aid-1288bbb2b5d2f5c6b66a Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
- cargo fmt in cmux-tui Made again on e0f3350: it moved the inputs of a repair made at 941b7a4. scripts/cmux-next/base-autofix.sh: https://github.com/manaflow-ai/cmux/actions/runs/41038166183 Re-applied on 91e0204, which feat-cmux-next moved to after e0f3350.
…et (#28240) * ci(cmux-tui artifacts): short Linux jobs take the shared 32/16 vCPU set On 2026-10-30 every cmux-tui artifacts run on feat-cmux-next sat queued on blacksmith-4vcpu-ubuntu-2404 (run 41007923202: tree preflight waited 4 min, mark-tree-commits and point-feat-channel were still queued 15 min later), so nightly-next promotion stalled behind the tree marker. The 11 short Linux jobs now use the expression this workflow's publish jobs already use: a non-Blacksmith LINUX_RUNNER pool, else Blacksmith 32 vCPU, or 16 vCPU while the overflow switch has failed over. A new guard test evaluates every Linux runs-on of the workflow against each variable state. * Test the hosted LINUX_RUNNER and the Darwin cross override Codex review of #28240: the matrix lacked ubuntu-24.04, the value the overflow switch writes, and pinned LINUX_RUNNER_DARWIN_CROSS empty, so macos-cross-shadow's override was never exercised. Add both; a new test checks only that job reads the override.
… on any host; several are refused with each HOST/NAME command (#28000) * acpmux: a bare name names the one live session on this host or a peer; several are refused with each HOST/NAME command Every command that takes a session resolves a bare name or id prefix the same way, in the daemon (hub/key_route.rs, applied on the unix socket before any check reads the key): the one live session with that whole name (else id prefix) across this daemon and its peers. Closed sessions count only when no live one matches. Several live matches are refused (session_ambiguous, exit 2) with each choice, and the CLI prints the exact command for each. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux README: neutral host names in the ambiguity example Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux key_route: test hub is an Arc; the refusal list owns its strings Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux: red/green request test, a name shared by a session here and a peer's is refused on info and send Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux key_route: a whole name and an id prefix are one tier; every choice in the data; keep's exact id is not routed; the argv swap skips an option's value (review of #28000) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux key_route: a sub-session's whole name (parent/child) is routed across hosts too (review of #28000) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux key_route tests: neutral sample host names (fleet rule lint) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c * acpmux key_route: poisoned locks are read, never unwrapped (crash ratchet) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-fbbcdf857038daa63e0c --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…base red) (#28167) "String tables (21 languages)" failed on feat-cmux-next with 112 style errors against its warning cap of 100. The last 12 came from action.agentPane.continueAfterError (9e836df), which shipped in 9 of the 21 languages. Fill it and the seven older keys that made up the rest of the debt, so the check reports 0 errors: - ActionCatalog: action.agentPane.continueAfterError, action.palette.forkAgentConversation, action.palette.forkAgentConversationTo - PaneCreation: paneCreation.allCommands - Updater: updater.button.updateAvailable, updater.button.updateAvailableNamed - CmuxHome: home.plan.title, home.plan.activeCount (all 20 languages) Wording follows each table's neighbours (the Fork Conversation family, Continue In…, Update Available, detail.plan). State is "translated" where the key's other languages are, and "needs_review" in CmuxHome, as that table's other machine translations are. Agent-Session: https://cmux.com/deeplink/agent?id=aid-a98b158f6fd70b0eae26 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…unner set (#28209) #25935 (85628c0) moved build-nightly-remote-daemon and attest-nightly-remote-daemon off the Mac builder onto blacksmith-4vcpu-ubuntu-2404. That label is outside the trusted runner set of #27125 (9127e61, "Linux jobs take the runner set, not one small Blacksmith label"), so tests/test_nightly_trusted_routing.py test_every_linux_nightly_job_takes_a_runner_set_member is red on feat-cmux-next (20 failures, both jobs) and nightly-guards / release-notary is red on every feat PR. Both jobs now use the runner-set expression of the other Linux nightly jobs (16 vCPU when vars.LINUX_RUNNER names it, else 32). They stay off the Macs, which was the goal of #25935. tests/test_gh_budget_wait.py pinned the attest job to the 4 vCPU label; that one assertion conflicts with the trusted-routing rule, so it now checks that the job holds no Mac and takes the runner set. Its other assertions are unchanged. Test: python3 -I tests/test_nightly_trusted_routing.py (FAILED, failures=20 on 97133a4; OK on this commit); python3 -I tests/test_gh_budget_wait.py (OK on both).
- regenerated web/data/cmux-shortcuts.generated.json - regenerated schemas/defaults/cmux-next.json - cargo fmt in cmux-tui Made again on afe5e8d: it moved the inputs of a repair made at 4e5fe02. scripts/cmux-next/base-autofix.sh: https://github.com/manaflow-ai/cmux/actions/runs/41040753079
* test: reproduce silent environment save failure Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed6c50a2fcd43ba5fe7f * fix: surface failed Session Info environment saves Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed6c50a2fcd43ba5fe7f * style: format environment save fixtures Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed6c50a2fcd43ba5fe7f * test: assert actual gallery color scheme and reduced motion Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed6c50a2fcd43ba5fe7f * test: wait for Environment before checking gallery settings Agent-Session: https://cmux.com/deeplink/agent?id=aid-ed6c50a2fcd43ba5fe7f * fix(inspector): hide unsupported chat environment save Agent-Session: https://cmux.com/deeplink/agent?id=aid-aaebdf126bd73033484e
…essages there (#28141) * test(acpmux): a person's Stop of a peer's chat holds the agent messages there (red) On base the peer takes the forwarded Stop as a plain cancel: no queue_paused with reason stop on the peer, and the agent message runs. A fake peer checks that only a peer listing personStop gets the field, and that a non-person's Stop never carries it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3918eb692ec76bbeec6e * fix(acpmux): a person's Stop of a chat on a peer holds the agent messages there The peer daemon's link is never the person on the peer, so a Stop for a peer's chat was a plain cancel there: the stopped turn ended and the next agent message started a turn at once. This daemon now forwards the person's Stop with _meta.acpmux.personStop to a peer that lists the personStop feature, and a peer takes it only from a peer daemon's own link (PeerToken, held to the peer's rules, not via web or device) and runs the same person_stop as for its own person. An older peer gets the plain cancel. A client's own personStop field is dropped before the forward. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3918eb692ec76bbeec6e --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The line said ssh-tmux mirrored workspaces get no agent badges from the cmux-tui journal. A main sync had dropped the sentence #19104 added, so it read as a cmux-next gap and sent two helpers after one that does not exist (HQ#5226 row 3). cmux-next SSH machines run cmux-tui on the host with the full CLAUDE_EVENTS set; the ssh-tmux mirror is classic-only and reports badges through its own tmux subscription. Agent-Session: https://cmux.com/deeplink/agent?id=aid-c689cdaab52479676c52 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…7861) * fix(webviews): scope page store subscriptions to their lifetime Agent-Session: https://cmux.com/deeplink/agent?id=aid-aaebdf126bd73033484e * style(webviews): format store lifetime regression tests Agent-Session: https://cmux.com/deeplink/agent?id=aid-aaebdf126bd73033484e * fix(webviews): guard auxiliary store continuations Agent-Session: https://cmux.com/deeplink/agent?id=aid-aaebdf126bd73033484e * fix(webviews): fence stale app continuations Agent-Session: https://cmux.com/deeplink/agent?id=aid-aaebdf126bd73033484e * fix(webviews): stop stale app reload continuations Agent-Session: https://cmux.com/deeplink/agent?id=aid-aaebdf126bd73033484e
…27938) * feat(agent-pane): answered question and checklist as Claude desktop cards An answered question now collapses to a compact bordered card in the transcript: each question, the chosen answers (Other text included) in grey under it, then who answered. An ask that ended unanswered is the same card with Skipped, Stopped before an answer or Not answered in the answer's place. The todo list keeps its bordered card, spinner, dashed and check marks. QuestionCard and PlanList are memoized on their immutable inputs; a new test counts their commits while 200 tokens stream in the same turn. Gallery: answered looks (stacked shipped, inline, check), ended looks (card shipped, pill, rule), and a todo list looks entry (card shipped, borderless, count). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa * fix(agent-pane): answered card spacing from the design tokens Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa * test(agent-pane): cards re-created per token, as the transcript does; lower the type-scale baseline Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa * test(agent-pane): count the cards' own renders, not a re-created Profiler's commits Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa * test(agent-pane): mark the module mock's promise as handled Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa * fix(agent-pane): one reply handler per live ask, so the memoized question card skips pane updates Review (Astra) of 0dd7e86: App.tsx made replyToQuestion(permission) anew each render, so the pending card's memo never held. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa * test(agent-pane): mount the live ask's card wrapper in the render-count test The live question card's reply handler moves into PermissionQuestion, which App.tsx's PermissionAsk renders; the test mounts that wrapper with one permission across 200 tokens, so dropping its useMemo fails the test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-92fa78a91e29868c5eaa --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…er (#28152) * test(acpmux): a peer link hears no change of a row mirrored from another peer Red on base: every change of a mirrored row goes out on every peer link, which drops it (peer.rs), so with 25 peers each change went out 24 times. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c11d09c9f41988fc1d93 * acpmux: a peer link hears no change of a row mirrored from another peer Every change of a row this daemon mirrors from a peer went out as _acpmux/session_changed on every other peer's link too, where the link drops it (peer.rs: a mirrored row or a notice naming a peer). With 25 peers that was 24 copies of each change, tools included. A link now hears only this daemon's own rows' changes, as its watch list since #28105 lists only them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c11d09c9f41988fc1d93 * acpmux: a link still hears a peer's pending prompt; only session_changed is skipped Review of 8f1a1fd: the link check returned before the peer permission branch, and a link is any client named acpmux-peer, so a unix-socket watcher with that name lost a peer's _acpmux/permission_pending. The check now guards only the session_changed send; the permission branch is as on base. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c11d09c9f41988fc1d93 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…8172) * test(acpmux): briefs asks the peers at once and names each one left out Red on base: the peers are asked one by one with the 600 s request budget each, so a stalled peer holds the list for ten minutes, and a refusing peer is left out with no word of why. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c11d09c9f41988fc1d93 * acpmux: briefs asks the peers at once and names each one left out _acpmux/briefs asked every connected peer for its briefs one by one, each with the 600 s request budget, and left out a peer whose answer failed with no word of why: one stalled peer held the list for ten minutes. The peers are now asked at once under one 10 s deadline (as _acpmux/models does), and each peer left out is named with its error in peersFailed, logged at warn and printed by acpmux briefs ls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-c11d09c9f41988fc1d93 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Lawrence 2026-10-30: after a reboot the daemon's adoption records every lost terminal's end before it answers anyone: 750-821 ms for 462 terminals on a clone of a 41.6 GB registry, 60% of it cold page reads. Each end appends journal subjects (terminal, tab, pane, screen, workspace) to journal_subject_index_by_subject_sequence, keyed by random public ids, and a terminal event keyed by terminal id, so each insert lands on a leaf nothing read earlier. startup_prefetch_covers_every_page_a_terminal_end_writes: every page key an end writes is one the startup reads ahead. terminal_end_prefetch_keys is a stub that reads nothing, as the startup does now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Default changesThis pull request changes 2 defaults at
The newest verdict on this commit is a BLOCK from Merge receipt: merged as Regenerate the snapshot with |
|
Review (codex-review-box/gpt-6-astra high, lane-place): SHIP at 9fc2592 SHIP No blocking findings in the six docs-key files at Both shell suites passed, covering historical fallback, publication, docs-only merges, and depth-one checkouts. Canonical-key seeding is correctly required before skipping publication. Base reds: none established; unrelated changes excluded. |
|
Review (codex-review-box/gpt-6-astra high, lane-place): SHIP at 94dd297 SHIP |
|
Validation at 94dd297: independent Astra SHIP; fleet Release compile success; remote run https://github.com/manaflow-ai/cmux/actions/runs/41061827580 passes 104 tests, tree-key-v2, tree-publish-v2 and 191 embedded inputs. The earlier mocked-Git preflight failures are fixed; checks job is green.
Normal head-pinned squash has been requested through the owner landing route. No override was used. |
|
Review (codex gpt-6-astra, router-review): BLOCK at 94dd297 GraphQL: API rate limit already exceeded for user ID 13091533. Visual verdict: no images supplied (range review); the visual verdict must come separately
Validation: 245 Python tests and all three shell suites passed; the additional historical-publication reproduction failed as described. exit=1 |
A newer verdict blocks 94dd297 (a wait as new as the SHIP or newer: comment by teamleaderleo: Review (codex gpt-6-astra, router-review): BLOCK at 94dd29).
|
Reverted by #28714: this landed at 94dd297 while the router-review receipt at the same head (#28214 (comment)) held a blocking P1 (the history resolver only checks v2 keys, so older publications become invisible and nightly loses its fallback). A follow-up that adds the compatibility-key lookup to |
…mpatibility keys (#28764) #28214 changed the v2 tree key (docs-only filtering), so trees published before it exist only under their v2-legacy (or v1) key. The nightly's history resolver checked only v2 and lost that fallback. It now tries the v2 key, then the commit's compatibility keys, and reports the key actually published. The resolve-newest test publishes a tree only under its v2-legacy key; it fails before this change and passes after. Agent-Session: https://cmux.com/deeplink/agent?id=aid-159afad10a5ab45ea16c Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo: "we just need the nightlies bro". Docs-only changes under
cmux-tui/docs/**must not trigger the R2 publisher.The push trigger excludes that subtree and the runtime key omits it without reading parents, including shallow checkouts and merge commits. Existing v2 keys remain available as
v2-legacy, and consumers still read historical v1 objects. Preflight requires the canonical docs-independent publication before it skips a build; otherwise a later docs-only push could have no readable key. Publication writes the canonical and v2-legacy keys.This repairs the compatibility mismatch found by independent review of #28184. The retry workflow keeps its workflow_run trigger. Related design: https://github.com/manaflow-ai/cmuxterm-hq/issues/5123#issuecomment-6515215902 and https://github.com/manaflow-ai/cmuxterm-hq/issues/4946.
Validation: 90 workflow/security/retry tests; tree-key-v2 (docs-only, mixed changes, merge, depth-one checkout, v1 and old-v2 lookup); tree-publish-v2 (real workflow publication step); embedded-input coverage (191 files); git diff --check. Risk: the new canonical key requires one publication even when old compatibility objects already exist. No permissions or secrets change.
Agent session: agent session