58052e9d
docs: record sprint 3 mouse demo acceptance
a73x 2026-09-05 09:59
Commit message
RETRO.md
| Old | New | ||
|---|---|---|---|
| @@ -119,8 +119,10 @@ At the next retrospective, mark each action with evidence or a carry-forward rea | |||
| 119 | expanding the interaction model. Record feedback on direction, back/cancel, | 119 | expanding the interaction model. Record feedback on direction, back/cancel, |
| 120 | focus, and the shared host catalogue. The recorded demo was accepted on | 120 | focus, and the shared host catalogue. The recorded demo was accepted on |
| 121 | 2026-09-05; no changes or control-specific feedback were requested. | 121 | 2026-09-05; no changes or control-specific feedback were requested. |
| 122 | - [ ] Agree divider hit areas and keyboard resize increments before UI work; | 122 | - [x] Agree divider hit areas and keyboard resize increments before UI work; |
| 123 | reuse one sizing policy for drag, keyboard input, and minimum constraints. | 123 | reuse one sizing policy for drag, keyboard input, and minimum constraints. |
| 124 | Closed by recorded-demo approval on 2026-09-05. Timing target missed: defaults | ||
| 125 | were proposed before UI work and accepted after delivery, without requested changes. | ||
| 124 | - [x] Exercise nested divider movement at 200% scale and after a display-scale | 126 | - [x] Exercise nested divider movement at 200% scale and after a display-scale |
| 125 | change. Check both PTY sizes and erased pixels, not only model rectangles. | 127 | change. Check both PTY sizes and erased pixels, not only model rectangles. |
| 126 | - [x] Include batched resize/input events and stale asynchronous completion in | 128 | - [x] Include batched resize/input events and stale asynchronous completion in |
| @@ -133,7 +135,8 @@ At the next retrospective, mark each action with evidence or a carry-forward rea | |||
| 133 | Implemented relative divider weights, mouse dragging, and keyboard resize mode. | 135 | Implemented relative divider weights, mouse dragging, and keyboard resize mode. |
| 134 | Opening cleanup is separately committed as `3eaad75`; the closing cleanup and | 136 | Opening cleanup is separately committed as `3eaad75`; the closing cleanup and |
| 135 | adversarial review are complete. Final delivery evidence belongs in the native | 137 | adversarial review are complete. Final delivery evidence belongs in the native |
| 136 | tiling plan. User acceptance of the resize trial is pending. | 138 | tiling plan. Implementation `3eab2a35` is accepted: after the mouse-focused |
| 139 | recording, the user said “demo approved!” on 2026-09-05. | ||
| 137 | 140 | ||
| 138 | ### What worked | 141 | ### What worked |
| 139 | 142 | ||
| @@ -153,6 +156,9 @@ tiling plan. User acceptance of the resize trial is pending. | |||
| 153 | - Actual Wayland transitions through 200%, 100%, 150%, and 200% preserved nested | 156 | - Actual Wayland transitions through 200%, 100%, 150%, and 200% preserved nested |
| 154 | resizing, cancelled stale drags, and passed all-pane PTY and erased-pixel checks. | 157 | resizing, cancelled stale drags, and passed all-pane PTY and erased-pixel checks. |
| 155 | An isolated compositor allowed these tests without changing the user's monitor. | 158 | An isolated compositor allowed these tests without changing the user's monitor. |
| 159 | - The follow-up mouse recording used Wayland virtual-pointer motion and button | ||
| 160 | events with a visible cursor. Both dividers moved in both directions, stopped | ||
| 161 | on release, and retained correct kernel PTY sizes. It passed without code changes. | ||
| 156 | 162 | ||
| 157 | ### What to change | 163 | ### What to change |
| 158 | 164 | ||
| @@ -160,7 +166,11 @@ tiling plan. User acceptance of the resize trial is pending. | |||
| 160 | preserve a locally consistent value that the daemon refuses. | 166 | preserve a locally consistent value that the daemon refuses. |
| 161 | - Keep ergonomic proposals distinct from agreement. Six logical pixels and one | 167 | - Keep ergonomic proposals distinct from agreement. Six logical pixels and one |
| 162 | cell per key were proposed before UI work, then used as trial defaults while | 168 | cell per key were proposed before UI work, then used as trial defaults while |
| 163 | awaiting feedback. The outstanding action above remains open until user review. | 169 | awaiting feedback. Demo approval closes the action; it does not establish that |
| 170 | agreement happened before implementation or imply a hands-on trial. | ||
| 171 | - Include the pointer in mouse demos and use actual compositor input. The first | ||
| 172 | attempt warped the pointer without delivering held-button motion; the virtual | ||
| 173 | pointer interface exercised the complete input path successfully. | ||
| 164 | - Preserve practical test limits: tiny-window requests may be constrained by a | 174 | - Preserve practical test limits: tiny-window requests may be constrained by a |
| 165 | desktop compositor. Record the actual size granted instead of changing global | 175 | desktop compositor. Record the actual size granted instead of changing global |
| 166 | compositor policy. This sprint achieved exact 8x8 both offscreen and on Sway | 176 | compositor policy. This sprint achieved exact 8x8 both offscreen and on Sway |
| @@ -171,8 +181,9 @@ tiling plan. User acceptance of the resize trial is pending. | |||
| 171 | Owner: the sprint lead and the bounded implementation/review pair. Review these | 181 | Owner: the sprint lead and the bounded implementation/review pair. Review these |
| 172 | before Sprint 4 and close each with evidence at its retrospective. | 182 | before Sprint 4 and close each with evidence at its retrospective. |
| 173 | 183 | ||
| 174 | - [ ] Obtain resize demo acceptance and resolve any requested ergonomic changes | 184 | - [x] Obtain resize demo acceptance and resolve any requested ergonomic changes |
| 175 | before extending interaction with detach, end, and recovery actions. | 185 | before extending interaction with detach, end, and recovery actions. |
| 186 | The user approved the recorded demo on 2026-09-05; no changes were requested. | ||
| 176 | - [ ] Start with a bounded cleanup of the lifecycle and state-ownership paths; | 187 | - [ ] Start with a bounded cleanup of the lifecycle and state-ownership paths; |
| 177 | keep substantial refactors explicit and preserve the closing cleanup package. | 188 | keep substantial refactors explicit and preserve the closing cleanup package. |
| 178 | - [ ] Persist the relative weights and stable pane/tab identity introduced here; | 189 | - [ ] Persist the relative weights and stable pane/tab identity introduced here; |
docs/native-sprint-workflow.md
| Old | New | ||
|---|---|---|---|
| @@ -63,6 +63,12 @@ packages. Keep one sprint active, ending in a working demo and explicit acceptan | |||
| 63 | before closing the window so another application cannot enter the recording. | 63 | before closing the window so another application cannot enter the recording. |
| 64 | A slideshow of screenshots is useful evidence but is not a screen recording. | 64 | A slideshow of screenshots is useful evidence but is not a screen recording. |
| 65 | 65 | ||
| 66 | For mouse acceptance, include the cursor with `grim -c` and drive the | ||
| 67 | compositor's virtual-pointer motion/button events. SDL-injected input can | ||
| 68 | validate application routing but does not demonstrate the compositor input | ||
| 69 | path. Cursor-warp commands can move the visible cursor without delivering | ||
| 70 | held-button motion. Verify actual divider movement and release, then check PTYs. | ||
| 71 | |||
| 66 | For a user on the same tailnet, serve only the demo page/video through a loopback | 72 | For a user on the same tailnet, serve only the demo page/video through a loopback |
| 67 | HTTP server with byte-range support, then use Tailscale Serve: | 73 | HTTP server with byte-range support, then use Tailscale Serve: |
| 68 | 74 | ||
docs/superpowers/plans/2026-09-05-native-tiling.md
| Old | New | ||
|---|---|---|---|
| @@ -1,8 +1,8 @@ | |||
| 1 | # Native tiling — delegated delivery plan | 1 | # Native tiling — delegated delivery plan |
| 2 | 2 | ||
| 3 | Design authority: [native tiling spec](../specs/2026-09-05-native-tiling-design.md). | 3 | Design authority: [native tiling spec](../specs/2026-09-05-native-tiling-design.md). |
| 4 | Status: Sprint 2 accepted; Sprint 3 implemented, reviewed, and validated, awaiting | 4 | Status: Sprint 3 complete; implementation, review, validation, and recorded-demo |
| 5 | user acceptance of the recorded demo. | 5 | acceptance passed. |
| 6 | 6 | ||
| 7 | ## Working agreement | 7 | ## Working agreement |
| 8 | 8 | ||
| @@ -401,7 +401,7 @@ scope. | |||
| 401 | 401 | ||
| 402 | ## Sprint 3 — divider resizing | 402 | ## Sprint 3 — divider resizing |
| 403 | 403 | ||
| 404 | Ready for user trial. The user requested a bounded cleanup before every sprint in addition | 404 | Accepted. The user requested a bounded cleanup before every sprint in addition |
| 405 | to the closing refactor. Commit `3eaad75` records the reusable workflow and the | 405 | to the closing refactor. Commit `3eaad75` records the reusable workflow and the |
| 406 | reviewed opening cleanup: `Tree.layout` now owns minimum-footprint expansion and | 406 | reviewed opening cleanup: `Tree.layout` now owns minimum-footprint expansion and |
| 407 | flattening for both live layout and insertion planning. This preserves behavior; | 407 | flattening for both live layout and insertion planning. This preserves behavior; |
| @@ -409,11 +409,11 @@ flattening for both live layout and insertion planning. This preserves behavior; | |||
| 409 | Logs: `/tmp/muxg-sprint3-preflight-check.log` and | 409 | Logs: `/tmp/muxg-sprint3-preflight-check.log` and |
| 410 | `/tmp/muxg-sprint3-preflight-native.log`. | 410 | `/tmp/muxg-sprint3-preflight-native.log`. |
| 411 | 411 | ||
| 412 | Packages 3A–3C are implemented and reviewed. Relative weights preserve split | 412 | Packages 3A–3C are complete; implementation is committed as `3eab2a35`. Relative |
| 413 | proportions across window sizes. Dragging and prefix + `r` use one minimum-clamped | 413 | weights preserve split proportions across window sizes. Dragging and prefix + `r` use one minimum-clamped |
| 414 | divider operation. Keyboard direction selects the nearest matching-axis ancestor; | 414 | divider operation. Keyboard direction selects the nearest matching-axis ancestor; |
| 415 | drag capture ends on release, geometry/focus changes, or keyboard modal transitions. | 415 | drag capture ends on release, geometry/focus changes, or keyboard modal transitions. |
| 416 | The proposed resize defaults are in the spec; ergonomic acceptance remains pending. | 416 | The resize trial defaults are in the spec; recorded-demo acceptance is complete. |
| 417 | 417 | ||
| 418 | Adversarial review resolved actual-key repeat leakage, ignored modal keys repeating | 418 | Adversarial review resolved actual-key repeat leakage, ignored modal keys repeating |
| 419 | after exit, and mouse drag state surviving picker or resize-key transitions. The | 419 | after exit, and mouse drag state surviving picker or resize-key transitions. The |
| @@ -462,5 +462,20 @@ Private demo: `https://charizard.folk-amberjack.ts.net/sprint3/`; HTTPS byte-ran | |||
| 462 | playback returned 206. Its loopback server is `/tmp/muxg-sprint3-demo/server.py` | 462 | playback returned 206. Its loopback server is `/tmp/muxg-sprint3-demo/server.py` |
| 463 | on port 18766. The earlier Sprint 2 route remains intact. To remove only this | 463 | on port 18766. The earlier Sprint 2 route remains intact. To remove only this |
| 464 | route, use `tailscale serve --https=443 --set-path /sprint3 off`, then stop that | 464 | route, use `tailscale serve --https=443 --set-path /sprint3 off`, then stop that |
| 465 | owned server. These resize checks use SDL-injected input; hands-on ergonomics and | 465 | owned server. The original resize checks use SDL-injected input. |
| 466 | remote-specific resizing were not separately claimed as validated this sprint. | 466 | |
| 467 | The user requested a mouse-focused demo, then explicitly approved it: “demo approved!” | ||
| 468 | on 2026-09-05. This closes Sprint 3's product gate. The follow-up recording uses | ||
| 469 | actual Wayland virtual-pointer motion and button events, with `grim -c` including | ||
| 470 | the cursor. Both dividers moved in both directions, movement stopped on release, | ||
| 471 | and all three kernel PTY sizes matched. No product changes were needed. It contains | ||
| 472 | 114 continuous compositor frames over 22.8 seconds without audio. Log: | ||
| 473 | `/tmp/muxg-sprint3-mouse/record.log`; fixtures `/tmp/muxg-tiling-fprn8mxs` were cleaned. | ||
| 474 | Retained recording: | ||
| 475 | `/home/xanderle/.codex/visualizations/2026/09/04/01a06dd2-1bb6-79c3-8a66-bc6bd8f2dedf/native-tiling-sprint3-mouse.mp4`. | ||
| 476 | Private playback: `https://charizard.folk-amberjack.ts.net/sprint3/mouse/`, verified | ||
| 477 | with HTTPS 206. Its server is `/tmp/muxg-sprint3-mouse/server.py` on port 18767; | ||
| 478 | remove only its route with `tailscale serve --https=443 --set-path /sprint3/mouse off` | ||
| 479 | before stopping that owned server. No hands-on or remote-specific resize trial is | ||
| 480 | claimed. Sprint 4 retains lifecycle/recovery and native persistence scope; its | ||
| 481 | opening actions are recorded in RETRO.md. | ||
docs/superpowers/specs/2026-09-05-native-tiling-design.md
| Old | New | ||
|---|---|---|---|
| @@ -1,7 +1,7 @@ | |||
| 1 | # Native tiling — draft design and delivery plan | 1 | # Native tiling — draft design and delivery plan |
| 2 | 2 | ||
| 3 | 2026-09-05. Status: Sprint 2 accepted. Sprint 3 resizing implemented and reviewed; | 3 | 2026-09-05. Status: Sprint 3 resizing implemented, reviewed, validated, and accepted |
| 4 | native and high-DPI validation passed, with recorded-demo acceptance pending. | 4 | by the user after the mouse-focused recording. |
| 5 | 5 | ||
| 6 | Execution: [delegated work packages and review gates](../plans/2026-09-05-native-tiling.md). | 6 | Execution: [delegated work packages and review gates](../plans/2026-09-05-native-tiling.md). |
| 7 | 7 | ||
| @@ -140,8 +140,8 @@ and connection state; both detach and end actions must be clearly labelled. | |||
| 140 | 140 | ||
| 141 | ### Sprint 3 resize trial | 141 | ### Sprint 3 resize trial |
| 142 | 142 | ||
| 143 | The following defaults are proposed for the ergonomic trial; user acceptance is | 143 | The following trial defaults were accepted through recorded-demo approval on |
| 144 | pending. Prefix + `r` enters a visibly labelled resize mode. `h`/Left and `l`/Right | 144 | 2026-09-05. Prefix + `r` enters a visibly labelled resize mode. `h`/Left and `l`/Right |
| 145 | move the focused pane's nearest ancestor vertical divider left/right by one cell | 145 | move the focused pane's nearest ancestor vertical divider left/right by one cell |
| 146 | width; `k`/Up and `j`/Down move its nearest ancestor horizontal divider up/down by | 146 | width; `k`/Up and `j`/Down move its nearest ancestor horizontal divider up/down by |
| 147 | one cell height. Direction moves the divider in screen coordinates regardless of | 147 | one cell height. Direction moves the divider in screen coordinates regardless of |