Upstream sync to c7f68a7f4 (2026-11-03) + cmux release line
Brings main up to the latest upstream Ghostty and merges the release line that cmux-next pins, so cmux-next can move to one commit that has both.
Why: cmux-next NIGHTLY froze. The main thread waited in ghostty_surface_free -> pthread_join on a renderer stuck in CVDisplayLinkStop (manaflow-ai/cmux#35300). Upstream's fix ffaaf5d7a came in with v1.4.0 (#64), but cmux-next still pins 7d43bb68b on release/cmux-9ce9b7d0-e2, which forked before v1.4.0.
b7b943fe3: mergerelease/cmux-9ce9b7d0-e2(7d43bb68b, PRs #66, #69, #70, #71) intomain. Clean. The pinned commit becomes an ancestor ofmain.b630aad15: merge upstreammainc7f68a7f4(241 commits after v1.4.0). Zig stays 0.17.0.next/UPSTREAM_BASEmoves toc7f68a7f4.
The 4 conflicts and their resolution are in NEXT.md, "Upstream sync to c7f68a7f4": test.yml stays deleted; ghostty.h keeps ghostty_surface_process_output and takes upstream's GHOSTTY_NULLABLE; Screen.clearRows keeps the fork's wrap-edge break and upstream's blank-row fast path; stream_handler.zig keeps the fork's reply tests and adds upstream's tmux test.
Not run locally (Zig 0.17 is not on the laptop, and builds do not run there): this PR's next-xcframework.yml builds, tests and smokes it.
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Syncs main to upstream Ghostty c7f68a7f4 (241 commits past v1.4.0) and merges the cmux-9ce9b7d0-e2 release line, so cmux-next can pin a single commit containing both. The upstream fix for the cmux NEXT freeze (renderer stuck in CVDisplayLinkStop) landed in v1.4.0, but the pinned cmux commit forked before it.
The PR also carries the fork's wrap-edge fix series driven by cmux VT fuzz findings (stale soft-wrap flags across scrolls, region scrolls, clears, and line breaks), upstream's tmux protocol support (%window-close, %session-window-changed, %output handling, active_window action), new embedded APIs that let the embedder present frames for a host size (ghostty_surface_set_host_present, ghostty_surface_host_frame), and upstream's fix for the snap and flatpak builds, which had been broken since the Zig 0.17 bump.
Merge and conflicts
- Merges
release/cmux-9ce9b7d0-e2intomaincleanly, then upstreamc7f68a7f4, making cmux's pinned commit an ancestor ofmain. - Resolves 4 conflicts (details in
NEXT.md):test.ymlstays deleted;ghostty.hkeeps the fork'sghostty_surface_process_outputand takes upstream's nullability annotations;Screen.clearRowskeeps the fork's wrap-edge break and upstream's blank-row fast path;stream_handler.zigkeeps the fork's reply tests and adds upstream's tmux test. - Zig stays 0.17.0; version bumps to
1.4.1-dev, pinning thezigimgmirror inbuild.zig.zon; all example projects now require Zig 0.17. - The snap moves to
core26and bundles GStreamer plugins so the audio bell plays. - GhosttyNextKit xcframework releases now also publish from
release/*branches, so an embedder can take a fix on an old base without unrelatedmainchanges.