cmux NEXT: reconcile native Session Info rows and gate copy

Merged
TE
3d ago
+118-83

Leo said:

“the session rail session info thing, like, you literally didn't do. I mean, why is the button not toggled? ... you still haven't done the full-length thing. It's still just this constrained height for, like, no reason at all.”

“plus we're gonna be doing that part natively in Swift anyways?”

“But I literally fing said to do that. I literally fing said to do that.”

“You can just edit the fing web UI” / “it's so fing lame to be delaying the entire f***ing thing based off of ... the Swift thing”.

Leo-ask: ask-560d04c05d

What changed

  • Reconcile every native Session Info row from the latest page model, rebuilding value-bearing children so meters, segments, marks, menus, buttons, glyphs, tooltips, toggles, and action closures cannot remain stale.
  • Accept fractional row indentation and reveal revisions, rounding them at the AppKit boundary; keep reveal highlighting visible for a short, cancellable interval.
  • Require a current person-input gesture before either bridge path writes Session Info copy text to the pasteboard.

The page remains the source of model and policy; AppKit only draws the model and forwards registered action ids. This fixes the native follow-ups from #31930 while the native tunable remains off until the parity and default-flip work is complete.

Design spec: leo-workspace/design/session-info.md; prior art: #31930, #32056, #27513.

Gallery/mock scene: session-info-native in scripts/cmux-next/media/tours/session-info-native.json.

Validation: focused native Session Info tests cover fractional decoding, row reconciliation, panel actions, and gesture-gated copy; run the standard compile check and Swift suite route for the final head.

Agent session: agent session


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


Summary by cubic

Fixes native Session Info rows so they fully reconcile from the latest page model, skips rebuilding rows whose model and theme values are unchanged, accepts fractional indentation and reveal revisions, and requires a recent person-input gesture before copy text reaches the pasteboard. The native Session Info tunable stays off pending parity and default-flip work.

Bug Fixes

  • Rows that change rebuild every value-bearing child (meters, marks, menus, toggles, buttons, action closures) and stay keyed by id, so focus, hover, and accessibility persist; unchanged rows are left untouched to avoid churn.
  • Fractional indentation and reveal revisions round at the AppKit boundary, and reveal highlighting clears after a cancellable 350 ms interval.