Skip to content

Fix terminal session flicker on display changes - #14116

Merged
austinywang merged 3 commits into
mainfrom
issue-13251-display-session-flicker
Sep 24, 2026
Merged

austinywang merged 3 commits into
mainfrom
issue-13251-display-session-flicker

Conversation

@austinywang

@austinywang austinywang commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Display connect/disconnect notifications schedule a second backing-properties callback for every terminal view. This candidate fix for #13251 removes that synthetic callback and leaves scale changes to AppKit, avoiding an extra settled geometry commit during screen transitions. Display identity and renderer visibility still update in the screen-change handler.

Validation on pushed head 8c5a1c72be056b42cc59fe54c4d6ce8b7a7f6076 (includes main at 150ba9f55e):

  • CI passed, including macOS compile admission. Broader suites were skipped by change selection.
  • Fleet job ec6d7cd04ba5fcdedcbc0a60 succeeded and published issue-13251-display-session-flicker. Artifact SHA-256: 67561a540071634483537ae677e4d6502c2a7603223f84931c9f094c90381255. Bundle name and identifier were verified against the requested tag, and the opener returned HTTP 200.
  • On macOS 26.6, the isolated socket /tmp/cmux-debug-issue-13251-display-session-flicker.sock passed identity/ping, two terminal panes, send/readback, advancing presentation counters, and nonblank IOSurface snapshots. CLI window placement ran on the only available built-in display; this does not prove a cross-display transition.
  • Automated hotplug attempts were exhausted: the standard and uniquely identified virtual-display helpers created CoreGraphics displays, but the app’s window.displays never exposed them. Helpers were removed. Hosted display E2E run 36056625035 failed screen-capture setup before tests executed. Its retry and the no-recording follow-up 36061334701 were canceled while queued; no hosted display-test pass is claimed.

ORANGE / human dogfood required: connect and disconnect the two external displays while both prepared terminal panes are producing output; verify sessions keep rendering without a flash. The reported macOS 27 flicker has not been reproduced or verified fixed. The dev app remains running for that check. No user-facing strings changed.

Receipts and exact socket-command harnesses are retained under this worktree’s artifacts/fleet/ and artifacts/runtime/, including failed attempts and captured frames.

@coderabbitai

coderabbitai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 40 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 66a2620e-a661-4616-8c99-8067935d6f90

📥 Commits

Reviewing files that changed from the base of the PR and between 150ba9f and 8c5a1c7.

📒 Files selected for processing (1)
  • Sources/GhosttyTerminalView.swift

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.

@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@austinywang
austinywang merged commit fb1759a into main Sep 24, 2026
59 checks passed
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 24, 2026
fb1759a Merge pull request manaflow-ai#14116 from manaflow-ai/issue-13251-display-session-flicker
4bcfbdb ci: keep compile admission's build state on an owned Mac between jobs (manaflow-ai#14285)
5f01b36 Merge pull request manaflow-ai#14284 from manaflow-ai/issue-14027-sidebar-tmux-focus
2062c82 Merge pull request manaflow-ai#14045 from manaflow-ai/14024-hook-prompt-length
616cd44 ci: let a dispatched seed save the SwiftPM manifest cache (manaflow-ai#14288)
c4dcf65 iOS: rebuild the workspace list table engine (manaflow-ai#14040)
1670d11 Document focusable sidebar IDs and remote readiness
cff83c2 Expose focusable sidebar surfaces and preserve explicit focus
44fd840 Test sidebar surface identities and cross-workspace focus
8c5a1c7 docs: bound display-change rationale to observed code path
900b55d Merge remote-tracking branch 'origin/main' into issue-13251-display-session-flicker
a530c4c test: retry expected event-stream disconnects while collecting telemetry
9250404 test: inspect app exit status only after process termination
072809c test: clean socket probe process diagnostics
4098af4 test: launch the socket-only probe without expected activation failures
c3771e6 Merge commit '169cd1af66b1e96cdedf9d30b415a370574948bf' into 14024-hook-prompt-length
169cd1a fix: split the SSH session-list merge so it type-checks on slow runners
2b713cc test: resolve probe Python from the selected Xcode installation
570412f Merge branch 'main' into 14024-hook-prompt-length
f4d8ac2 fix(terminal): avoid redraw on display topology changes
2e42f86 test: assert each hook entrypoint retains its existing attribution contract
024965f test: collect event frames separately from Debug CLI diagnostics
3ce127f test: isolate hook probe app storage under the shared fixture home
a276c01 test: keep hook probe socket in the runner-owned temporary directory
5482f48 test: launch hook probe app outside the runner sandbox
857c953 test: retain isolated app startup evidence for hook probe
7dab194 test: use Xcode Python directly inside the UI test sandbox
0bf8cb2 test: launch socket-only hook probe without foreground activation
5181aed test: wait for hook delivery and handle event stream timeouts
8f21fac chore: refresh generated schema after upstream word-wrap shortcut
cfe5ed7 Merge remote-tracking branch 'origin/main' into 14024-hook-prompt-length
2adae62 fix: keep legacy prompt length fallback bound to its message
80cffee fix: preserve original prompt length in hook event telemetry
cfcb3fd test: reproduce original hook prompt length loss through events

# Conflicts:
#	.github/workflows/ci-guards.yml
#	.github/workflows/ci-macos.yml
#	.github/workflows/seed-derived-data.yml
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