Environment on both sides: real web app, Chromium 156 on Linux, navigator.platform=MacIntel, 1280×800, light theme, fresh isolated databases and replay-seeded synthetic threads.

Create Last, Middle, and First in sidebar order using synthetic replay threads. Open Middle terminal; from Last press Cmd+Shift+] to enter Middle, then repeat while terminal focused. Reset to Middle for Cmd+Shift+[ and Cmd+1. Type x with its thread.next binding excluded by isDesktop. Close terminal; click conversation outside composer and use Cmd+Down to enter Middle. Fill composer with two lines; test Cmd+Down, Cmd+Up, Cmd+3, End, and Home, resetting Middle between cases. Check excluded Cmd+Left/Right preserve caret navigation and excluded Cmd+Shift+Right selects gamma delta without switching threads.

### Scenario: Thread shortcuts survive terminal and macOS composer focus and respect conditions

**Proven: the scenario fails on base [95cb068c10](https://github.com/pingdotgg/t3code/commit/95cb068c10a6cf0b33eed0a0cab3b298763fe852) and passes on head [de963b105d](https://github.com/pingdotgg/t3code/commit/de963b105d0500d4ce2e157de0ce59cfda160ca1).**

|  | Base [95cb068c10](https://github.com/pingdotgg/t3code/commit/95cb068c10a6cf0b33eed0a0cab3b298763fe852) | Head [de963b105d](https://github.com/pingdotgg/t3code/commit/de963b105d0500d4ce2e157de0ce59cfda160ca1) |
| --- | --- | --- |
| Result | Navigation blocked in terminal and macOS composer | All navigation and input controls pass |
| 01 enter middle terminal | ![Base 95cb068c10: 01 enter middle terminal](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/66ac5b00f2072e71/before-001-01-enter-middle-terminal.png) | ![Head de963b105d: 01 enter middle terminal](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ac2e522f75340443/001-01-enter-middle-terminal.png) |
| 02 terminal next | ![Base 95cb068c10: 02 terminal next](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9844dbf22afe4b62/before-002-02-terminal-next.png) | ![Head de963b105d: 02 terminal next](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2bcb07634786f36/002-02-terminal-next.png) |
| 03 terminal previous | ![Base 95cb068c10: 03 terminal previous](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7acf5c2ff789e56/before-003-03-terminal-previous.png) | ![Head de963b105d: 03 terminal previous](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95d118f24d987f86/003-03-terminal-previous.png) |
| 04 terminal numbered jump | ![Base 95cb068c10: 04 terminal numbered jump](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a02359872467c6d9/before-004-04-terminal-numbered-jump.png) | ![Head de963b105d: 04 terminal numbered jump](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/470f3fafe74e0800/004-04-terminal-numbered-jump.png) |
| 05 terminal condition excluded | ![Base 95cb068c10: 05 terminal condition excluded](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b7ab5c392a8273d3/before-005-05-terminal-condition-excluded.png) | ![Head de963b105d: 05 terminal condition excluded](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/903236746000eb7f/005-05-terminal-condition-excluded.png) |
| 06 composer unfocused control | ![Base 95cb068c10: 06 composer unfocused control](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1e068584d79e7564/006-06-composer-unfocused-control.png) | ![Head de963b105d: 06 composer unfocused control](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0843ba2561981973/006-06-composer-unfocused-control.png) |
| 07 composer next | ![Base 95cb068c10: 07 composer next](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5f1cd821a362d368/007-07-composer-next.png) | ![Head de963b105d: 07 composer next](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9242354cd7b1015f/007-07-composer-next.png) |
| 08 composer previous | ![Base 95cb068c10: 08 composer previous](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/19f0da122299e647/008-08-composer-previous.png) | ![Head de963b105d: 08 composer previous](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/174e5a1c0215c429/008-08-composer-previous.png) |
| 09 composer numbered jump | ![Base 95cb068c10: 09 composer numbered jump](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f030c8cf10347fc/009-09-composer-numbered-jump.png) | ![Head de963b105d: 09 composer numbered jump](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4d698a387c265092/009-09-composer-numbered-jump.png) |
| 10 composer end | ![Base 95cb068c10: 10 composer end](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7842851ec2cb77e/010-10-composer-end.png) | ![Head de963b105d: 10 composer end](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/944f1e9586201520/010-10-composer-end.png) |
| 11 composer home | ![Base 95cb068c10: 11 composer home](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/52899120032fbf86/011-11-composer-home.png) | ![Head de963b105d: 11 composer home](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bb2a5920a56d8aff/011-11-composer-home.png) |
| 12 composer condition excluded | ![Base 95cb068c10: 12 composer condition excluded](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0b974f2cd3254860/012-12-composer-condition-excluded.png) | ![Head de963b105d: 12 composer condition excluded](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d597d68303aaf518/012-12-composer-condition-excluded.png) |
| failure | ![Base 95cb068c10: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bd5a34ef9e0d770c/013-failure.png) |  |

| Recording | Before | After |
| --- | --- | --- |
| Same interaction | [Before recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/723ab10620d17a9a/before.mp4) | [After recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d3a17227fb906671/after.mp4) |

[Scenario source](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5e362c12cb8716da/thread-navigation-proof.e2e.ts) · [Recording preparation script](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7acfeadca776e2f5/prepare-recordings.py)

Recordings start at the first navigation caption, with setup/loading removed. The base shell prompt row is redacted; input, focus-dependent behavior, and navigation are unchanged. Base blocks terminal next/previous/jump and composer Cmd+Down/Up/Home/End; head passes all cases. Composer numbered jump and condition-excluded input work on both sides.
