Skip to content

ci: pin GhosttyKit archive for ghostty 17357e12 - #18598

Merged
teamleaderleo merged 1 commit into
feat-cmux-nextfrom
fix/feat-cmux-next-ghostty-checksum
Oct 8, 2026
Merged

teamleaderleo merged 1 commit into
feat-cmux-nextfrom
fix/feat-cmux-next-ghostty-checksum

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Commit b89fdeaa0504104062b1280c3e0ff0209823d4a5 moved the ghostty gitlink to 17357e12a0ac4a50841d8635ef593d4aaa6552c1 without adding the matching GhosttyKit archive checksum. Nightly-next run 37779335812 then failed before compilation could start.

Change

Add the checksum generated from the published xcframework-17357e12a0ac4a50841d8635ef593d4aaa6552c1-crashsubdir-cmux-crash-sentry-off-noi18n-v2 archive. The existing tests/test_ci_ghosttykit_checksum_present.sh guard already checks the exact checked-in gitlink and is wired into ci-guards release-tooling coverage; it reproduces the reported failure on the bad run head, so this PR does not duplicate it.

Validation

  • scripts/download-prebuilt-ghosttykit.sh --verify-only with the generated row: pass
  • tests/test_ci_ghosttykit_checksum_present.sh: pass
  • tests/test_ci_ghosttykit_checksum_verification.sh: pass
  • tests/test_ci_ghosttykit_release_check.sh: pass
  • git diff --check: pass

Changelog

none


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


Summary by cubic

Adds the GhosttyKit archive checksum for ghostty commit 17357e12 so nightly-next CI no longer fails before compilation. The previous commit bumped the ghostty gitlink without adding the matching checksum entry in scripts/ghosttykit-checksums.txt.

Written for commit f68e8c4. Summary will update on new commits.

View guided diff Turn on auto-fix


Note

Low Risk
Single checksum table entry for CI artifact verification; no application or security logic changes.

Overview
Adds the missing GhosttyKit xcframework checksum for ghostty submodule 17357e12a0ac4a50841d8635ef593d4aaa6552c1 in scripts/ghosttykit-checksums.txt, so CI can verify/download the matching prebuilt archive after the gitlink was bumped without this row.

This unblocks nightly-next and other jobs that run download-prebuilt-ghosttykit.sh --verify-only and the existing checksum guard tests.

Reviewed by Cursor Bugbot for commit f68e8c4. Bugbot is set up for automated code reviews on this repo. Configure here.

Generated from the published GhosttyKit archive using the standard release packaging and SHA-256 verification path.
@coderabbitai

coderabbitai Bot commented Oct 8, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 7d1fc1ed-2656-4245-abd2-8ac37b67e521

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@teamleaderleo
teamleaderleo merged commit 4f7bf45 into feat-cmux-next Oct 8, 2026
39 checks passed
@teamleaderleo
teamleaderleo deleted the fix/feat-cmux-next-ghostty-checksum branch October 8, 2026 18:45
teamleaderleo added a commit that referenced this pull request Oct 8, 2026
* test(cmux-next): the chat menu opens the chat in a new window (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: open a chat in a new window from its menu, Codex-style

The chat menu's Open in new window runs the app's tab.moveToNewWindow on
the chat's tab, after Move to new workspace. The string is in all 21
locales; the keycap comes from the action catalog when one is bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: the pane reads Open in new window's key from the catalog

AgentPaneShortcuts.actions lists every header action, so the menu row
shows tab.moveToNewWindow's binding when the user sets one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: red tests for serving other apps' sign-in sessions (cx-q3y7)

WebAuthSessionBrokerTests: a sign-in (ASWebAuthenticationSession) opens in
a tab, ends with its custom-scheme or https callback exactly once, is
cancelled when the tab closes, closes its tab when the system cancels, and
ephemeral sessions ask for a non-persistent profile. The shim's C++
callback rule (auth_callback_policy_test.cpp) cancels only the session's
own callback navigation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: serve other apps' sign-in sessions as the default browser (cx-q3y7)

macOS hands the default browser every ASWebAuthenticationSession another
app starts once the browser declares
ASWebAuthenticationSessionWebBrowserSupportCapabilities and installs a
session handler. cmux now does both:
- WebAuthSessionHandler (installed at launch) passes each request to
  WebAuthSessionBroker, the one owner of pending sessions: each opens in
  its own sign-in panel (the popup panel: title, origin, close, Escape)
  with a Chromium page, ends once with its callback URL (the panel
  closes), and is cancelled when the person closes the panel; a system
  cancel closes the panel without an answer.
- The shim stops the callback before it loads
  (cmux_shim_set_auth_callback, auth_callback_policy.h: custom scheme, or
  https host and path; event AUTH_CALLBACK), so the code never reaches the
  network or another app. The system's matcher confirms it; observing the
  page URL is the last line when the callback could not be read.
- Ephemeral sessions use an off-the-record profile that ends with the
  panel; normal ones use the default profile (an existing sign-in stays).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: do not declare the sign-in capability until macOS delivers requests (cx-q3y7)

Live test on cmux-lawrence-2 (macOS 27.0.1) with a test app starting an
ASWebAuthenticationSession while cmux DEV was the default browser: the
system sent the session's Apple event and cmux's framework reported the
request, but SafariLaunchAgent never handed it over, so the handler was
not called. Chrome as the default browser fails the same way on that host
(no sign-in page), which points at the system (FB21939656 reports the same
on macOS 26.2). With the key declared, a sign-in would hang instead of
using Safari, so the key stays out; the handler stays installed and is
inert without it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: install the sign-in session handler only when the capability is declared

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: sign-in review fixes (cx-q3y7)

- A stopped https URL the system's matcher rejects loads once with the
  shim callback cleared (no stop-reload loop); a rejected custom-scheme
  link from a sign-in page does not open another app; a late event after
  the session ended does nothing.
- The callback opened in a new tab (target=_blank, window.open) still
  ends the session instead of leaking to a normal tab.
- A system cancel that arrives before its begin opens nothing; a repeated
  begin opens one panel.
- A log line when the callback could not be read.
- WebAuthSessionHandler.install installs only with the capability key
  (test: theHandlerInstallsOnlyWithTheCapabilityKey).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: sign-in callbacks off CEFTab and AppServices; split the broker file

CEFSignInCallbacks holds the sign-in tabs (set, re-applied on attach,
AUTH_CALLBACK routed by CEFRuntime), so CEFTab and AppServices stay under
the god-type limit; AppDelegate's WebAuthSessionHandler owns the broker.
WebAuthCallback and the session protocols get their own files.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: crash-allow the SDK's implicitly unwrapped sign-in request and its main-actor hop

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* ci: pin GhosttyKit for ghostty 17357e12 (#18598)

Generated from the published GhosttyKit archive using the standard release packaging and SHA-256 verification path.

* fix(cmux-next): render account registry marks in both themes (#18081)

* fix(cmux-next): render account registry marks in brand color

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(cmux-next): use theme tone and ChatGPT account mark

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix: keep the pane catalog in base's layout

The base merge rewrote the agent pane catalog's layout (792 lines
removed). Rebuild it as the merge base's text plus this branch's keys;
the strings are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
teamleaderleo added a commit that referenced this pull request Oct 9, 2026
…he palette (#16614)

* cmux-next agent pane: log every acpmux message and socket change

The agent pane now keeps a log of what it sent to and received from
acpmux: each JSON-RPC request, its reply or error with latency, each
notification, and the socket's lifecycle (connecting, open, close with
code, errors, reconnect delays, a lost daemon and the handshake that
follows). The log survives reconnects, never holds the daemon token, and is
bounded to 2000 entries and about 4 MB of message text.

window.cmuxAcpmuxDebug.acpLog and acpLogExport (JSON Lines) read it, so the
DEBUG debug.agent_pane socket method can fetch it. The inspector panel and
the export action build on this.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* agent-pane: add an ACP inspector panel

A header icon opens a panel over the transcript with the pane's wire log
(every ACP request, reply, notification and socket event, with latency),
the selected session's ACP journal, connection and session state, request
and error counts, latency p50 and max, a filter, expandable JSON rows and
an export as JSON Lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* agent-pane: save the ACP log natively and toggle the inspector from the palette

The inspector's Export now asks the host for a save panel (pane.saveLog,
capped at 16 MB) and copies the log only when the host cannot save; a
cancelled panel does nothing. Show ACP Inspector (agentPane.toggleInspector)
toggles the focused agent pane's inspector through the page bridge, and
debug.agent_pane gains an inspector action for dogfood capture.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Test opening the inspector from the current chat menu

* Test inspector journal selection and list isolation

* Open the localized ACP inspector from the chat menu

* Include inspector styles in the shipped agent pane bundle

* Run inspector checks against feat-cmux-next

* red: a workspace any daemon client creates lands at the top by default (cx-8351)

workspaces.newPlacement (top by default) is applied only by the Mac app
today: a plain workspace.create (TUI, CLI, iOS, agents) still gets the
last personal row. The test creates workspaces through the protocol with
Home and a group right below it and expects each new one first below Home,
above the group, stored across a restart.

* fix: the daemon puts every new workspace at workspaces.newPlacement, for every client (cx-8351)

The personal row a workspace gets in the commit that creates it (every
creation path: the app, iOS, the TUI, the CLI, agents) now goes where the
settings file's workspaces.newPlacement says, instead of last: top
(default, also for a missing or unknown value) right after the home
workspace's row, else first, ungrouped, so above every group at that
place; afterCurrent right after the session's active workspace before the
commit, in its group (top when there is none, it has no row, it is Home,
or the new workspace is pinned to another room than the group's); bottom
last. Several workspaces of one commit keep their order. Home always takes
the top; a reopened workspace is created last and then takes its closed
row's place, so no other row moves. The creation's session.events batch
carries each new and moved placement and each group whose top_index moved
(tests replay the events against the store).

Decision: the daemon reads the setting from the app's settings file itself
(new cmux_tui_core::user_settings: CMUX_NEXT_CONFIG_FILE, else
~/.config/cmux/cmux-next.json, else classic cmux.json before the app's
first launch; regular files only, cached by mtime and size; the JSONC
reader moved from the MCP config, which now reads the same file), not from
a field on the create intent: the order is the daemon's state, the file is
the config layer every client on the machine shares, it works while the
app is quit, and no protocol field or binding changes. A caller that wants
another place still sends workspace.place after the creation; that later
write wins. The managed (MDM) layer is not read.

App: the classic-session import names an explicit bottom slot, so its
batch keeps the saved order now that the daemon itself puts new
workspaces on top.

* Route inspector export through the shared page host and declare its action surfaces

* cmux-next: open a chat in a new window from its menu (#17611)

* test(cmux-next): the chat menu opens the chat in a new window (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: open a chat in a new window from its menu, Codex-style

The chat menu's Open in new window runs the app's tab.moveToNewWindow on
the chat's tab, after Move to new workspace. The string is in all 21
locales; the keycap comes from the action catalog when one is bound.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: the pane reads Open in new window's key from the catalog

AgentPaneShortcuts.actions lists every header action, so the menu row
shows tab.moveToNewWindow's binding when the user sets one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* cmux-next: red tests for serving other apps' sign-in sessions (cx-q3y7)

WebAuthSessionBrokerTests: a sign-in (ASWebAuthenticationSession) opens in
a tab, ends with its custom-scheme or https callback exactly once, is
cancelled when the tab closes, closes its tab when the system cancels, and
ephemeral sessions ask for a non-persistent profile. The shim's C++
callback rule (auth_callback_policy_test.cpp) cancels only the session's
own callback navigation.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: serve other apps' sign-in sessions as the default browser (cx-q3y7)

macOS hands the default browser every ASWebAuthenticationSession another
app starts once the browser declares
ASWebAuthenticationSessionWebBrowserSupportCapabilities and installs a
session handler. cmux now does both:
- WebAuthSessionHandler (installed at launch) passes each request to
  WebAuthSessionBroker, the one owner of pending sessions: each opens in
  its own sign-in panel (the popup panel: title, origin, close, Escape)
  with a Chromium page, ends once with its callback URL (the panel
  closes), and is cancelled when the person closes the panel; a system
  cancel closes the panel without an answer.
- The shim stops the callback before it loads
  (cmux_shim_set_auth_callback, auth_callback_policy.h: custom scheme, or
  https host and path; event AUTH_CALLBACK), so the code never reaches the
  network or another app. The system's matcher confirms it; observing the
  page URL is the last line when the callback could not be read.
- Ephemeral sessions use an off-the-record profile that ends with the
  panel; normal ones use the default profile (an existing sign-in stays).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: do not declare the sign-in capability until macOS delivers requests (cx-q3y7)

Live test on cmux-lawrence-2 (macOS 27.0.1) with a test app starting an
ASWebAuthenticationSession while cmux DEV was the default browser: the
system sent the session's Apple event and cmux's framework reported the
request, but SafariLaunchAgent never handed it over, so the handler was
not called. Chrome as the default browser fails the same way on that host
(no sign-in page), which points at the system (FB21939656 reports the same
on macOS 26.2). With the key declared, a sign-in would hang instead of
using Safari, so the key stays out; the handler stays installed and is
inert without it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: install the sign-in session handler only when the capability is declared

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: sign-in review fixes (cx-q3y7)

- A stopped https URL the system's matcher rejects loads once with the
  shim callback cleared (no stop-reload loop); a rejected custom-scheme
  link from a sign-in page does not open another app; a late event after
  the session ended does nothing.
- The callback opened in a new tab (target=_blank, window.open) still
  ends the session instead of leaking to a normal tab.
- A system cancel that arrives before its begin opens nothing; a repeated
  begin opens one panel.
- A log line when the callback could not be read.
- WebAuthSessionHandler.install installs only with the capability key
  (test: theHandlerInstallsOnlyWithTheCapabilityKey).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: sign-in callbacks off CEFTab and AppServices; split the broker file

CEFSignInCallbacks holds the sign-in tabs (set, re-applied on attach,
AUTH_CALLBACK routed by CEFRuntime), so CEFTab and AppServices stay under
the god-type limit; AppDelegate's WebAuthSessionHandler owns the broker.
WebAuthCallback and the session protocols get their own files.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: crash-allow the SDK's implicitly unwrapped sign-in request and its main-actor hop

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* ci: pin GhosttyKit for ghostty 17357e12 (#18598)

Generated from the published GhosttyKit archive using the standard release packaging and SHA-256 verification path.

* fix(cmux-next): render account registry marks in both themes (#18081)

* fix(cmux-next): render account registry marks in brand color

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(cmux-next): use theme tone and ChatGPT account mark

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix: keep the pane catalog in base's layout

The base merge rewrote the agent pane catalog's layout (792 lines
removed). Rebuild it as the merge base's text plus this branch's keys;
the strings are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>

* test(pages): a rebound pooled page view forgets the old page's activation; submenu choice counts (red, cx-qoxe)

Red on cmux-lawrence-2 (nx-remote 1008-154834-be660b): retarget and
resetPooledPage keep the old document's gesture timestamp. The submenu test
is new coverage of the menu walk (already green).

* fix(pages): a rebound or parked pooled page view forgets the old page's activation (cx-qoxe)

retarget and resetPooledPage now clear PageWKWebView's gesture timestamp and
opened context menu, so a new document cannot use a click or key the person
made in the previous one for clipboard.write or person-only actions.

Gate: cmux-lawrence-2 nx-remote 1008-155539-e0ff66, PageUserActivationTests,
PageHostRetargetTests, PageHostPoolTests, PageDesktopDefaultsTests,
PageRouterTests, PageProvidersTests green.

* Test inspector action focus intent for automation

* Require explicit focus intent for automated inspector toggles

* Regenerate inspector action exports and complete localization audit

* ci(cmux-next): repin app FFI to published source (#18575)

* ci(cmux-next): repin app FFI to published source

The f1a32f1 build passed the app FFI release checks. Pin its immutable release and checksum so the target push verifies the current sources.

* ci(cmux-next): pin app FFI for current base

* cmux-tui-core: red tests: legacy ops, TUI workspace ops and older ledgers record the daemon (cx-44j.5 landing 3b)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-tui-core: legacy ops, TUI workspace ops and older ledgers record their actor (cx-44j.5 landing 3b)

P8 landing 3b (plans/cmux-next/identity.md section 3). The paths that still
recorded `daemon` for a caller now record the caller's actor:

- Legacy commands pass the connection actor: select-tab, close-pane /
  close-screen / close-tab-group with end_terminals (and the
  close-screen-group end_terminals branch), move-tab-to-split/column,
  move-tab-to-workspace, set-column-dock, set-row-heights, undo-layout,
  apply-layout, every tab group and screen group command
  (StripRequest::local takes an actor), set-tab-pinned, notify, the keyed
  bookmark ops, bind-conversation-tab-session, update-frontend-browser-tab
  owner, and the provider-managed close/rename.
- The in-process TUI (Session::Local) closes, renames and moves workspaces
  and undoes layouts as the local user.
- terminal.move projections, the v2 workspace.close effect and the
  apply-layout rollback commit as their caller. Agent hooks, terminal OSC
  notifications, reaps, runtime commits, interrupted-creation recovery and
  host-loss respawn stay the daemon's own work.
- The older ledgers (mutations, terminal_mutations, projection_mutations,
  bookmark_mutations) get a nullable actor column (design D: NULL reads
  `legacy`, an older daemon that omits it keeps working) and one shared
  write, insert_keyed_mutation. A fresh journal record takes the actor of
  the row its own commit wrote, matched by (origin, key), so another
  origin's row under the same key never lends it its actor.
- Key-less op names exist only under cfg(test)
  (mux/legacy_actor_test_wrappers.rs, TuiMuxOps, DaemonMuxOps).
- mux/tab_groups/reopen_saved.rs and server/group_outcome_json.rs move code
  out of two god files (no baseline raised).

Test fix vs the red commit: the undo check reads the effect receipt too
(a layout undo is effectful).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* red: the top of the first remote row in one list is a slot of that computer (cx-hzpd)

Restores SidebarOntoGroupTests.theTopOfARowReorders to the flat list
(sidebar.groupByComputer off, the default); cx-plf5 had switched it to
grouping-on.

* fix(sidebar): the open gap holds when the card's leading edge is over rows it cannot join (cx-hzpd)

In the one-list sidebar (sidebar.groupByComputer off) a remote computer's
rows follow the local rows with no header. Dragging a remote workspace to
the top of its computer's first row opened the gap there, the card's
centre then sat in that gap, and the leading edge (the card's top, over
the last local row) decided: a slot among the local rows, which a remote
workspace cannot take, so the drop was refused.

Rule: with the centre in the open gap, that gap is the drop the list
shows; the leading edge moves it only to a slot the dragged rows can
take, else the gap holds. Away from the gap an unreachable slot still
refuses the drop.

---------

Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Resolve concurrent catalog additions and regenerate pane strings

* Keep inspector strings outside concurrently changed catalog rows

* agent-pane: ACP inspector panel (#16604)

* cmux-next agent pane: log every acpmux message and socket change

The agent pane now keeps a log of what it sent to and received from
acpmux: each JSON-RPC request, its reply or error with latency, each
notification, and the socket's lifecycle (connecting, open, close with
code, errors, reconnect delays, a lost daemon and the handshake that
follows). The log survives reconnects, never holds the daemon token, and is
bounded to 2000 entries and about 4 MB of message text.

window.cmuxAcpmuxDebug.acpLog and acpLogExport (JSON Lines) read it, so the
DEBUG debug.agent_pane socket method can fetch it. The inspector panel and
the export action build on this.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* agent-pane: add an ACP inspector panel

A header icon opens a panel over the transcript with the pane's wire log
(every ACP request, reply, notification and socket event, with latency),
the selected session's ACP journal, connection and session state, request
and error counts, latency p50 and max, a filter, expandable JSON rows and
an export as JSON Lines.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Test opening the inspector from the current chat menu

* Test inspector journal selection and list isolation

* Open the localized ACP inspector from the chat menu

* Include inspector styles in the shipped agent pane bundle

* Run inspector checks against feat-cmux-next

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* cmux-next: tab hover cards without empty thumbnails or unavailable text (#17636)

* test(cmux-next): tab cards drop empty thumbnails and unavailable resources

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(cmux-next): tab cards drop empty thumbnails and unavailable resources

A tab with no resource numbers (an agent chat, the New Tab page) showed
"Resource usage unavailable" over an empty thumbnail frame. The card now
leaves out the resource line when the sample says unavailable and drops
the thumbnail once its fetch returns none, remembered per tab so the next
hover opens at the right size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* test: reject inspector toggles on hidden surfaces

* fix: reject inspector toggles on hidden surfaces

* Keep inspector save panel and bridge handlers in focused owners

* Follow the existing reply type in the namespace lint ratchet

* Keep inspector strings separate from concurrently removed dialog strings

* Declare the stable inspector callback in the bridge effect

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Lawrence Chen <54008264+lawrencecchen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant