a73x

docs/superpowers/plans/2026-09-05-native-chord-ergonomics.md

Ref:   Size: 4.7 KiB   History

# Native split chords and End feedback

The user reported that selecting a split direction is normally followed by host
selection, and that prefix + x flashes an unidentifiable menu. This hands-on
feedback authorizes a bounded ergonomic trial; it does not accept prior recordings.

## Scope and acceptance

- Prefix + v/b arms the focused pane for side-by-side/below insertion and opens
  the host picker immediately. No geometry or session changes before selection.
- Esc in the host picker closes it while retaining the pending direction;
  another Esc outside the picker cancels it. Prefix + Enter remains available.
- End uses a status on its originating pane while awaiting the daemon. It opens
  no progress modal. A shared-session refusal still offers Cancel first and
  explicit End for all clients, bound to the original attachment.
- Pending requests cannot be duplicated; late replies cannot steal an active
  picker, command, resize, drag or recovery menu. The daemon protocol is unchanged.

Opening inspection found the existing controller and pending request identity
sufficient; no preparatory refactor is needed. Closing cleanup removes the
obsolete progress-menu variant instead of introducing a popup delay or timer.
Existing save-failure visibility remains a priority in narrow pane headers.

Luna owns controller/frame changes and unit coverage; Terra reviews the input
and request-lifetime contracts. Root owns integration fixtures, independent
validation, the recording and delivery records. Reused session metadata confirms
the selected models. Test helpers must exercise the direct v/b-to-picker path
rather than sending an extra prefix + Enter afterward.

## Validation and delivery

Implemented, independently reviewed, validated and accepted for merge. The user
said “this is excellent” and authorized merging the native branch. This accepts
the current result without asserting a separate hands-on trial of this build.
Both binaries were built together in ReleaseSafe at
`dist/native-chord-release`. The final GUI is also installed in `zig-out/bin/muxg`
for the user's next launch; an already running window keeps its earlier image.

- Native unit tests passed: 22 core and 28 frame/painter tests.
- Full `make ci` passed, including ten agent scenarios and throughput.
- `make native-e2e` passed on the final frozen source. The real delayed-daemon
  cases assert no progress popup in modal state or centre framebuffer pixels,
  preserve request identity, and exercise command, focus, picker, resize, drag,
  replacement, detach and accepted-End transitions.
- Separate real Wayland lifecycle checks and 200%/100%/150%/200% scale transitions
  passed, including independent kernel PTY dimensions and passive pixels.
- `make native-stress` passed after CI and recording completed. Over 30.2 seconds,
  it read 104.8 MB, with frame p99 19.920 ms before reopen and 19.388 ms afterward.
  Input-to-painted maxima were 55.5 ms on the separate daemon and 55.4 ms on the
  shared daemon, 95 samples each. The 5 ms polling and observation overhead make
  these upper bounds. No budget changed and no speed improvement is claimed.

The final 23.8-second actual GUI recording has one continuous clip, no cuts or
audio, at 200% scale. It shows both direct split chords, cancellation, fast End,
a delayed End header and Cancel-first shared-session confirmation. Input is
ordinary SDL events; this is not a new compositor mouse-path demonstration.
Video review caught an obsolete extra-chord hint; it now shows only the split
direction while the insertion picker is open. A replacement picker retains the
pending-arm hint, so it cannot be mislabeled as insertion.

Two fixture setup mistakes were corrected without product changes: the first
shell-suite Wayland launch lost its compositor address when the harness isolated
its runtime directory, and the first recorder omitted PTY observer registration.
The complete native suite used its standard offscreen setup; separate Python
Wayland fixtures preserve the compositor address correctly. Initial and final
logs are retained. The owned fixtures and compositor are cleaned up separately
from the user's sessions and desktop. No new macOS or SSH transport claim is made.

Artifacts, final source/binary hashes and model metadata are in `chord-evidence/`
beside this thread's visualization files. The retained video is
`native-chord-trial.mp4`. User approval explicitly confirmed tailnet ownership
and publication of this recording after automatic approval review blocked the
new payload. The verified page is
<https://charizard.folk-amberjack.ts.net/chord-trial/>; all prior routes remain.
Publication authorization was separate from the subsequent result acceptance
and merge authorization recorded above.