Merge branch 'claude/host-detail-pane-design-e98621'

This commit is contained in:
2026-08-03 16:31:43 +02:00
7 changed files with 1219 additions and 382 deletions
+37
View File
@@ -117,6 +117,43 @@ the chrome, hosts and terminals, file transfer, the vault, teams, and preference
> | **Serial** beside **Terminal** in the toolbar | Omitted. Every session here is an SSH channel; a serial transport is not a button, it is a second session kind. |
> | The strip's tabs inside the titlebar row, with a hamburger | A row of its own under the titlebar. The titlebar already carries the drag region, the search box, the sync light and three window controls, and the strip scrolls — putting both on one 44-pixel row would make the thing that scrolls fight the thing that drags. |
> | A count on the S3 tab | Omitted. The rail entry it replaces carried one; a number on two of five tabs reads as a fact about those two rather than as the tab's own state, and a terminal tab has nothing to count. The count is on the S3 screen. |
>
> ## The desktop's v4 — the host detail pane
>
> A fourth pass, narrower than v3: one pane and the cards beside it. It changes the *shape* of the drawer
> rather than what is in it, and it changes one behaviour that is not cosmetic at all.
>
> **The drawer is asked for now.** Selecting a host used to open it, which charged 304 pixels of grid for
> the act of choosing — including every card arrowed past on the way to the one you wanted. A pencil appears
> on a card under the pointer, and on the selected card, and that is what opens the pane;
> `VaultViewModel.IsHostPaneOpen` is the flag, and the context menu has a **Details…** entry so the pane is
> reachable without a pointer. Once open the pane follows the selection, because a pane about one host
> beside a grid marking a different one is two answers to the same question.
>
> **The pane is three cards, a fixed header and a fixed footer.** Address, General, Connection — the same
> three in the detail pane and in the host editor, the first as rows and the second as boxes. Only the
> middle scrolls, so the button each panel exists to offer is never below the fold, which CONNECT could be
> on a host with fifteen tags. The detail pane's rows are *buttons that open the editor*: the design draws
> every fact as a filled box, and rather than draw an input that refuses the pointer, pressing one leads to
> the same card with a real box in it. Saving is a whole-host operation — it validates the key-or-credential
> exclusion and writes one encrypted payload — so a box committing per keystroke was never on offer.
>
> **A host card is two lines and no chips.** The subtitle is `ssh, root, pci, eu-west-1`: the transport, the
> resolved account, then every tag. It replaces the `user@host:port` line *and* the wrapped row of tag chips
> below it. The address moved to the card's tooltip rather than nowhere — a card is read while scanning
> forty machines, where the name and the kind of machine are what is being looked for, and an address is
> what you read once you have found it.
>
> | v4 element | What ships instead |
> | --- | --- |
> | **Share this host** | Omitted, as the vault screen's `SHARED WITH · 6` is. A grant is per *vault* and per-item sharing is M5; a button here would imply this one host could be handed over, which is the thing the architecture does not do. |
> | **Add Telnet**, and **Serial** in the toolbar | Omitted. `ISshConnection` is the only transport there is. This is also why the card subtitle's `ssh` is a constant today rather than a reading — it is stated in `HostRowViewModel.Summary`, which is the one place in this interface where a constant is printed on purpose. |
> | **+ SSH ID, Certificate, FIDO2** | Omitted. `IDENTITIES` and `CERTIFICATES` have been on this document's list since the first import — neither is even a reserved `SyncEntityType` — and there is no security-key path anywhere in the SSH layer. One control offering three item types that do not exist. |
> | The **Backspace / Default** row | Omitted. It is a terminal setting, and the client has no preferences store and no frame to carry one to the renderer — see the Preferences section. It would be a control whose value could not survive the window closing. |
> | The **chevron beside the vault name** | The name alone. An item cannot be moved between vaults: the two are encrypted under different keys, so moving one is a delete and a retype. Where a *new* item is filed is chosen on the keychain screen, which is the only vault question with an answer. |
> | **Show more ⌄** | Not drawn as a disclosure. What it would hide — notes, the relay switch, forgetting the host key — is in the editor, one press away, and a second fold inside a pane that already scrolls is a second place for a field to be missing from. |
> | **Port Forwarding** in the sidebar | Nothing, for the third time in this document. |
> | The host grid's toolbar avatar, share and tag-filter controls | Omitted, as in v3 and for the same reasons. |
Most of it landed. This file is the rest: every element of that design with nothing behind it, which
project each piece would have to land in, and **what the shipped interface does instead**. That last