- Ya
- 4 Septemba 2026, 01:23 UTC
- Mwandishi
- Kamo
- Ahadi ya
- 29489fe
The tab listed terminals and gave a member no way to open one — the only starting points were the Linux Desktop submenu and the navigator's header, neither of them where they were looking. `onNew` is optional rather than always-on because the two surfaces put the action in different places: the navigator has a header and keeps it there beside refresh and collapse, while the tab has no header to hang it on and needs it in the list. Rendering it in both would put two of the same button inches apart. A row at the head of the list rather than a floating button — it sits where a new terminal would appear and scrolls with the list instead of covering a row — and a proper button on the empty screen, which is where it matters most. Not offered when the dev machine is unreachable: inviting somebody to start a terminal that cannot start is an invitation to a failure, and the empty state already says why. The empty-state copy no longer points at the Linux Desktop menu, which was the long way round once a button was sitting next to it. It says the thing a member cannot see instead: a terminal outlives the window it was opened from. Renamed rather than edited, because translate.ts queues a key only when it is missing. Writing the test found a real defect: the row rendered in the collapsed 40px rail too, where a labelled row cannot fit. Six tests pin where the action appears and the three places it deliberately does not. 417 test files / 5252 tests, all 14 guards, tsc and the production build clean.