ghostty-next: pin 850bb9849 (fork PR #84): a reflow preview frame re-wraps off the terminal lock

Merged
LA
20h ago
+35-6

Summary

cmux-ad m18 (T-REWRAP). GhosttyNextKit and the ghostty-next gitlink move together from 383b27d73 (fork main, the upstream sync) to 850bb9849 (fork main + fork PR #84):

  • manaflow-ai/ghostty-next#84 ports manaflow-ai/ghostty-next#83 to main (the source is byte-identical to #83's reviewed head 79d62f7c5). A reflow preview frame whose only change is the grid (each frame of a key resize or a divider drag) re-wraps a kept copy of the terminal with no terminal lock held. The live terminal is copied under the lock only when it changed (a dirty flag, a color epoch, its cursor or colors, a new live grid, or the history a new grid needs). Before, the preview's watch never reset its dirty state, so every preview frame copied the live terminal under the terminal lock (0.43-0.55 ms p50 at 200x60) and blocked the output parser and the main thread's lock users. Now 1 copy serves 800 frames of a drag.

No C API change: the app keeps ghostty_surface_set_size each frame with ghostty_surface_set_reflow_preview(true). No change in the present path.

The release: xcframework-850bb98497044f6632310c303a68974b6289af4b-apple-v6 (run 42047067774), zip sha256 f8b0c65707292cce8fa34fa195b529206a45b6f2b53b187c5b401339e233006f. The release's SHA256SUMS, the GitHub asset digest and the manifest commit agree. The changed fork files are not in the libghostty-vt link graph, so vt-link-graph.json changes only its commit.

This branch was first opened on the release line (510ca45ff, fork #83); feat moved to fork main (#35478) during its checks, so it was re-pinned to the main port. The branch now differs from feat only in the 5 pin files.

Testing

  • Fork: reflow preview: tests (6). Reds: run 42018811302 ("a frame whose only change is the grid copies nothing under the terminal lock", expected 1, found 7) and run 42024684069 (stale cursor, expected x 1, found 2). On main (Zig 0.17): tests + bench 42040022802 (84/84; 1 copy for 800 frames), PR build 42040024043 (224/224, lib-vt 481/481).
  • Fork reviews: independent SHIP at 79d62f7c5 (#83, after one BLOCK fixed), delta SHIP at f9048ee65 (#84).
  • Here: check_ghostty_vt_notices.py --check-link-graph and package_notices.py check-data pass; prepush-gate.py passes.
  • Fleet, exact head 469d944007c: Mac DEV build 26cfebb8ed2e47e8598139e8 (aws-m4pro-4, tag t-rewrap-pin-v4); launch smoke PASS on macOS 14.8.7 and 15.7.7 (os-matrix step d4c5cd6146f51695570c508c, 0 crashes, 0 hangs, 0 faults). Its split screenshot shows the left terminal's command line re-wrapped at the narrower pane.

Observed / Not run

  • Observed: everything above.
  • Not run: films and the STRESS gate (owned by T-KEYS and T-DRAGS); the display resize suites at this head. The earlier Linux-pool build failed only in the import-set infra red (STATUS 14391), and an earlier Mac build only in the acpmux base red fixed by #36647.

No capture: the change is the cost and the lock time of each resize frame; what a frame shows does not change.

Changelog

none