Skip to content

cmux NEXT: a web update that swaps in shows no "Updated to" toast - #27969

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
lane/daemon-update-quiet-success
Oct 30, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
lane/daemon-update-quiet-success

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

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.applyPending showed a 4-second CmuxToast "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

Audit of other routine-success toasts

I checked every CmuxToast( in Packages/macOS/CmuxNext/Sources and 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) scans Sources/CmuxNextWebUpdates for a CmuxToast, 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 on WebUpdates.swift:181. Green on the head.
  • DaemonUpdateTargetTests.aFailureTheBoardIsAskedToNoticeShowsOneToast now also applies a successful .updated event with notify: true and expects no toast, and expects noticeToast to 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.theNoteNamesTheShortCommit is removed along with the note.

Observed / Not run

  • Observed: scripts/cmux-next/prepush-gate.py reports no new violations (arch-ratchet: layer_hard -1 for CmuxNextWebUpdates).
  • Not run locally (lane VM, no Swift builds): both suites run on the fleet through CI on this PR.

Before / after

  • Before: after each web UI swap, a 4-second "Updated to 46c97e9 ×" toast at the top of the window (the one Leo saw). After a swap made while cmux was in the background, the same toast when cmux came back to the front.
  • After: a swap reloads the pages and nothing shows.

No capture: only NIGHTLY and the tip app take web updates (WebUpdater.takesUpdates). A capture build is a DEV bundle with no web updater, so updates.web.apply swaps 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, then updates.web.check and updates.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

teamleaderleo and others added 2 commits October 30, 2026 03:54
…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
@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot 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.

@blacksmith-sh

blacksmith-sh Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Found 9 test failures on Blacksmith runners:

Failures

Test View Logs
--from must install a complete prebuilt tree/
--from must install a complete prebuilt tree
View Logs
/tmp/tmpdpct6g5r/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpi2dky0i0/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)/
test_every_listed_hook_is_one_glaeda_released_with_the_check (main.SigningHooksInSt
epWithGlaedaTests.test_every_listed_hook_is_one_glaeda_released_with_the_check)
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 23bbaba: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr27969 -f ref=lane/daemon-update-quiet-success -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: green on the base 86abbf4; do not merge until green; see lane-rules

@github-actions github-actions Bot added the risk:high Risk tier (docs/ci/risk-tiers.md) label Oct 30, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

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 updater.web.updated.

Reds at the merged head 84d9f98 (one base merge of feat-cmux-next 86abbf4), compared by name

  • cmux-next daemon tests: green. At the old head, CI ran 6 failing tests from the PR's merge ref. Five of them (aDaemonBusyPastTheBudgetIsStillReached, aDaemonWithoutClientKeysIsNotAskedAgain, aPaneThatStartsLateIsWaitedForAndMadeOnce, aRefusedConnectionSaysTheDaemonIsBusy, aRefusedSplitIsNotAskedAgain) did not exist at the old head 23bbaba or its base 16e03d3; they landed on feat-cmux-next later (e.g. d9b100f). The sixth, theFirstLaunchBringsEverythingOnce(manyGroups), is the red cmux NEXT model picker: every harness its own tab again (claude-sr2 models back), and Claude Code gets full model ids #27692 shows, fixed on base by a0174db, which this merge includes. All six pass here.
  • swift-test-summary.test.sh ("Script tests" in cmux-next checks): green, and it was never a crash. At the old head it stopped through the script's own fail() at line 162 with exit 1, not a signal exit. It expected the crash ::error line to name the fixture's frame BrowserPopupPanelThreadTests.anOpenerCloseNoticePostedOffMainClosesItsPopupsOnMain. It got crashed thread: no crash report matched; searched …/DiagnosticReports: 0 matched, 1 older than this run, 1 another process, the CI annotation word for word. The "signal 5" text comes from the fixture's fake swift output (line 152). The same assertion fails the same way at base a312592 (rc 1). Base has since fixed the script, and it passes at this head (ok swift-test-summary).
  • crash-class rules / Unrecognized-selector rule (super calls): base red. All 5 findings are in CmuxNextDesign/EditorAlignedTextField.swift ("probe needed"), from base commit 5de8713 (the palette placeholder). This PR doesn't touch it; the file and objc-selector-table.json are identical to tip 86abbf4.
  • cmux-next checks: base reds only. "Package dependency lists sorted" flags CmuxNextAccounts missing CmuxNextWakeups; this PR's only Package.swift change is the CmuxNextWebUpdates line. "Sidebar look owner" names the same 3 base commits (4367c16, 6c1a5ab, eb8105b) at the tip and at this head. This PR's commits have 0 findings.
  • release-notary and Guard status: known base reds ("No space left on device" and rate-limit warnings in the release-notary log).
  • risk evidence: clears with the SHIP line at this head (above).

@teamleaderleo
teamleaderleo merged commit f623d2a into feat-cmux-next Oct 30, 2026
138 of 146 checks passed
@teamleaderleo
teamleaderleo deleted the lane/daemon-update-quiet-success branch October 30, 2026 05:56
@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 84d9f987 Deployed Oct 30, 2026 by teamleaderleo via wait for same-key tree publisher #80806
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:high Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant