a73x

444ebf6e

docs: pin moving-text and shared tmux selection gaps

a73x   2026-09-06 10:28

Commit message
docs: pin moving-text and shared tmux selection gaps

RETRO.md
Old New
@@ -1403,3 +1403,19 @@ or performance claim is made for this behavioral fix.
1403 The final full `make ci` run passed, including all e2e, agent and throughput 1403 The final full `make ci` run passed, including all e2e, agent and throughput
1404 gates. The prior nested-agent timeout did not recur. Hands-on acceptance is 1404 gates. The prior nested-agent timeout did not recur. Hands-on acceptance is
1405 still pending; source commit and tests do not imply user approval. 1405 still pending; source commit and tests do not imply user approval.
1406
1407
1408 ### Follow-up: moving text and tmux selection ownership
1409
1410 The user's two-client trial found two remaining gaps. First, retaining a range
1411 through redraws does not track the same line through terminal scrolling; the
1412 highlight must move with that line and subsequent copy must still name it.
1413 Second, foot's apparent tmux-owned drag can be visible in muxg because tmux paints
1414 it, whereas muxg's current local drag is not sent to tmux. Local desktop copy,
1415 tmux's paste buffer and shared selection rendering are distinct outcomes.
1416
1417 Added explicit acceptance scenarios to the text-selection plan: row-following
1418 belongs to the selection-identity slice; normal application drag, shared tmux
1419 selection, independent buffer/clipboard checks and required Shift+drag override
1420 belong to the application mouse slice. Neither gap is claimed fixed by the
1421 redraw-preservation commit. User acceptance of the overall feature is pending.
docs/superpowers/plans/2026-09-06-native-text-selection.md
Old New
@@ -220,6 +220,12 @@ The following application mouse/clipboard slice must demonstrate:
220 - A gesture keeps its chosen owner through motion and release, including modifier 220 - A gesture keeps its chosen owner through motion and release, including modifier
221 changes and crossing another pane; cancellation cannot leave an application 221 changes and crossing another pane; cancellation cannot leave an application
222 with a stuck button or copy text from a different pane. 222 with a stuck button or copy text from a different pane.
223 - Attach foot and muxg to the same tmux session with mouse reporting enabled.
224 Normal drag in either client must enter tmux's selection/copy path and render
225 its selection in both clients; verify tmux's paste buffer independently.
226 Shift+drag in muxg remains a local highlight and desktop copy, with no tmux
227 mouse reports or paste-buffer mutation. Verify desktop clipboard separately
228 from tmux's buffer; a visible shared highlight alone does not prove copying.
223 - Application-issued clipboard writes reach the desktop through the existing 229 - Application-issued clipboard writes reach the desktop through the existing
224 validated clipboard-effect path. Verify actual PTY mouse reports and an 230 validated clipboard-effect path. Verify actual PTY mouse reports and an
225 independent clipboard reader, plus a real application's selection/copy flow. 231 independent clipboard reader, plus a real application's selection/copy flow.
@@ -261,3 +267,27 @@ Validation: full `make ci`, client/native units, full native integration and
261 actual NVIDIA Wayland selection/wheel checks passed. The counter runs inside 267 actual NVIDIA Wayland selection/wheel checks passed. The counter runs inside
262 real tmux for the Wayland selection check; eleven selection and ten wheel 268 real tmux for the Wayland selection check; eleven selection and ten wheel
263 checkpoints pass. Evidence: `dist/wheel-scrolling/active-selection-*.log`. 269 checkpoints pass. Evidence: `dist/wheel-scrolling/active-selection-*.log`.
270
271
272 ### Outstanding feedback: selection must follow moving text
273
274 The user expects a selected line and its highlight to move together when output
275 scrolls that line upward. Commit `7897f7d` only preserves a live coordinate range
276 through redraws; it does not track row identity through scrolling inside an
277 application. Wheel movement of the client's viewport is already handled, but
278 terminal scroll-region movement, insert/delete lines, reflow and capped-history
279 eviction require a distinct identity/transform solution. This gap remains open.
280
281 Acceptance: select a unique line, let genuine terminal output scroll it upward,
282 and verify its highlight follows that same line. Text already copied must remain
283 unchanged; copying again must still address the originally selected line. Cover
284 normal screen/history and alternate-screen scroll regions, plus offscreen return,
285 without guessing identity by matching strings (duplicate lines are valid).
286 Owner: the next selection-tracking slice, using Ghostty's existing engine-owned
287 pins/scroll semantics and an explicit client/daemon contract where required.
288
289 The user's foot/tmux comparison also exposes the already planned application
290 mouse gap: normal muxg drag is currently local, so tmux cannot render that
291 selection to other clients. This does not imply that local clipboard extraction
292 failed. Cross-client visibility, tmux paste buffers, and the desktop clipboard
293 must be tested as separate outcomes in the application mouse slice above.