Repository navigation
cmux NEXT: a web update that swaps in shows no "Updated to" toast - #27969
Conversation
…w no toast (red) Leo, 2026-10-30, on the "Updated to 46c97e9" toast: "why do i see this shit every so often?? i dont think i need to see this". WebUpdateSwapIsQuietTests fails on base: WebUpdates.swift shows a CmuxToast after a swap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-181127b1045797f3d8db
Leo, 2026-10-30, on the "Updated to 46c97e9" toast: "why do i see this shit every so often?? i dont think i need to see this". The toast was the web update swap's note (#25082), not the daemon update board, whose success line is only a tooltip. The swap now shows nothing; the served version stays in Settings' Web UI card and updates.web.status. Removes the note, its unseen-note-on-activation path, the updater.web.updated string and the CmuxNextDesign dependency #25082 added for it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-181127b1045797f3d8db
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Found 9 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)
red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: green on the base 86abbf4; do not merge until green; see lane-rules |
|
Review (codex gpt-6-astra high, fast, review-router): SHIP at 23bbaba Reviewed the exact diff and the code around it; no correctness issues. The removed symbols and localization key have no other users, the web swap and reload behave as before, and the daemon failure toasts are unchanged. The reviewer did not run the Swift tests; CI runs them. Posted from claude-sr2-coord's helper on behalf of lane gcp-agent-lane-2/ao-update-toast, whose own comment was refused by the broker with a 403. The review text is copied verbatim from the lane's session record. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (codex gpt-6-astra, high, fast): SHIP at 84d9f98 Re-review after one clean base merge (parents 23bbaba, which had an earlier SHIP, and feat-cmux-next 86abbf4). The merge has exactly those parents, and the diff against the tip is still the original change. Nothing in the merged tree uses the removed symbols or the removed key; the only xcstrings change is the deletion of Reds at the merged head 84d9f98 (one base merge of feat-cmux-next 86abbf4), compared by name
|
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo, 2026-10-30, about the "Updated to 46c97e9 ×" toast at the top of the window: "why do i see this stuff every so often?? i dont think i need to see this".
What was showing it
The toast was the web UI update note from #25082. A web update swaps in at an idle safe point, and that can happen every few minutes on NIGHTLY and the tip app. After each swap
WebUpdates.applyPendingshowed a 4-secondCmuxToast"Updated to <7-char commit>". If cmux was in the background, it saved the note and showed it on the next activation, which is why it seemed to show up out of nowhere.The acpmux daemon update board (
DaemonUpdateBoard) never toasts a success. Its "Updated to %@" line appears only in an ssh machine's sidebar tooltip and on Cloud creation rows, and it stays as it is. Its failure and "needs action" toasts are unchanged.What changes
WebUpdates.applyPendingnow reloads the pages and shows nothing. The note, the unseen-note-on-activation path andWebUpdateStrings.swift(WebUpdatePointer.updatedNote) are removed.updater.web.updatedkey is removed from the CmuxNextUpdater catalog (the 132 lines cmux NEXT web updates: a quiet "Updated to <commit>" toast after a swap #25082 added). Nothing else used it.CmuxNextDesigndependency, which cmux NEXT web updates: a quiet "Updated to <commit>" toast after a swap #25082 added only for the toast.served) andupdates.web.status.Audit of other routine-success toasts
I checked every
CmuxToast(inPackages/macOS/CmuxNext/Sourcesand the agent pane webviews for success-only notices on routine events (reconnected, restarted, updated). All the others follow something the person did (import, close/undo, move, CLI install, a restart they confirmed) or ask for action (failures, a server update that needs a restart, settings diagnostics, host pressure). I found nothing else to remove.Tests
WebUpdateSwapIsQuietTests.aSwapShowsNoToast(WebSwapGateTests.swift) scansSources/CmuxNextWebUpdatesfor aCmuxToast, ignoring comments. A real swap needs served web views and an active app, which a unit test can't set up. Red on base at the first commit (8e44f2b): it fails onWebUpdates.swift:181. Green on the head.DaemonUpdateTargetTests.aFailureTheBoardIsAskedToNoticeShowsOneToastnow also applies a successful.updatedevent withnotify: trueand expects no toast, and expectsnoticeToastto return nil for.updated. A failure still shows one toast. This passes on base too: it pins down the daemon side of Leo's ask.WebUpdateNoteTests.theNoteNamesTheShortCommitis removed along with the note.Observed / Not run
scripts/cmux-next/prepush-gate.pyreports no new violations (arch-ratchet: layer_hard -1 for CmuxNextWebUpdates).Before / after
No capture: only NIGHTLY and the tip app take web updates (
WebUpdater.takesUpdates). A capture build is a DEV bundle with no web updater, soupdates.web.applyswaps nothing there, and an "after" still would show no toast with or without this fix. A real capture needs a NIGHTLY-identity build with a published web update, thenupdates.web.checkandupdates.web.apply. No scene or tour drives that today. Leo's screenshot of the before state is a private capture and stays out of this public PR.Changelog
Removed: the "Updated to " toast after a web UI update swaps in.
Risk: low. It removes one notice and changes nothing about when or how a swap happens.
Agent session: agent session
🤖 Generated with Claude Code