Record v5b in the design-import log, and true up the manual checks
ci / build and test (push) Failing after 2m12s
ci / desktop nightly (push) Skipped
ci / api image (push) Skipped
ci / android head (push) Successful in 3m25s

This commit is contained in:
2026-08-08 00:49:59 +02:00
parent d91729c0b8
commit 422d5ca10e
2 changed files with 99 additions and 32 deletions
+33 -30
View File
@@ -24,15 +24,17 @@ a phase had nothing left for a person to do, which is the good outcome rather th
---
## Phase 1 — the shell and the tab strip
## Phase 1 — the shell and the nav rail
### 1.1 No screen is sliced at the WebView's left edge · **the important one**
Open two terminals, then visit every nav rail entry in turn — Hosts, Keychain, Pins, Snippets, Logs, Vaults,
Preferences — and both of the fixed tabs, SFTP and S3.
Open two terminals, then visit every nav rail entry in turn — Hosts, Keys, Pins, Snips, Logs — and both of
the switcher's other two segments, SFTP and S3, at the rail's own head.
**Pass:** each screen draws whole, its buttons all clickable, and the tab strip stays across the top of all
nine. The nav rail is there for the seven and gone for the two, because it belongs to the Vaults tab.
**Pass:** each screen draws whole, its buttons all clickable, and the nav rail stays up the left edge for
every one of them. Since v5b's chrome pass the rail is permanent furniture — it no longer collapses for
SFTP, S3 or an open terminal the way it did while it belonged to a Vaults tab; see
`MainWindowViewModel.IsVaultsTab`'s own remark for what changed and what stayed the same under that name.
**Failure means:** a screen is not collapsing while the terminal shows. The terminal is a native child
window and composites above everything Avalonia paints, so the symptom is a screen cut off at the WebView's
@@ -41,8 +43,8 @@ bound to `IsShowingPages` in `MainWindow.axaml` is what should make it impossibl
### 1.2 A tab clicked from another screen takes the keyboard
Go to FILES with a terminal open. Click the tab. **Start typing immediately, without clicking anything
else.**
Go to SFTP with a terminal open, then click the SSH segment at the rail's head to return to it. **Start
typing immediately, without clicking anything else.**
**Pass:** every character reaches the shell, including the first.
@@ -53,7 +55,7 @@ be typed immediately rather than after a pause.
### 1.3 Leaving a terminal gives the keyboard back
With a terminal focused, click FILES. Type into the filter box.
With a terminal focused, click SFTP at the rail's head. Type into the filter box.
**Pass:** the characters appear in the box.
@@ -64,10 +66,10 @@ strip rework and is now on the hot path. See `docs/platform-flags.md`.
### 1.4 The middle click closes tabs and only tabs
Middle-click a tab (closes it), the strip background to the right of the last tab (closes nothing), and the
`+` button (closes nothing, opens nothing).
On the terminal's own in-screen tab row: middle-click a tab (closes it), the row's background to the right
of the last tab (closes nothing), and the `+` button (closes nothing, opens nothing).
**Pass:** as described. Covered by `TerminalTabsTests` headlessly, so this is a confirmation that headless
**Pass:** as described. Covered by `SessionTabRowTests` headlessly, so this is a confirmation that headless
pointer input matches a real mouse rather than a first look.
### 1.5 Connecting from the palette while on another screen
@@ -82,28 +84,28 @@ Approving connects; CANCEL leaves you on FILES.
question that cannot be reached — or the window has jumped to HOSTS, which is what it used to do and what
cost the palette its whole point.
### 1.6 The vault menu draws above the terminal's rectangle · **the one with a precedent**
### 1.6 The user-chip popover draws above the terminal's rectangle · **the one with a precedent**
With a terminal open and showing, press the `⌄` beside the Vaults tab.
With a terminal open and showing, press the user chip at the foot of the nav rail.
**Pass:** the window leaves the terminal for the Vaults tab as the menu opens, and the menu is drawn whole
over the screen underneath it — no part of it clipped along the WebView's edge.
**Pass:** the popover opens without leaving the terminal, and is drawn whole over the screen underneath it —
no part of it clipped along the WebView's edge.
**Failure means:** the popup is being composited under the renderer's native child window, and the guard
this design relies on has stopped working. It is not supposed to be possible: `OnVaultMenuPressed` selects
the Vaults tab *before* opening the flyout, and a page surface is one where the renderer is not drawn — the
same move QuickConnect makes. `OpeningTheVaultMenu_SelectsTheVaultsTabSoTheTerminalIsNotUnderIt` asserts
the ordering headlessly, which is as far as a headless test can go: it has no native window, so it cannot
see what is painted over what. This check is the other half.
**Failure means:** the popup is being composited under the renderer's native child window. Unlike the v3v5
tab strip's own vault menu, which sat directly above the terminal's own rectangle and had to select the
Vaults tab before opening for exactly that reason, the rail's popover should not need that guard at all: it
opens inside the rail's own 255-pixel column — see `NavRail.axaml`'s own remark — which the terminal's
native child window never occupies, so there should be no rectangle here for a popup to be composited
under. If this fails, that assumption is the thing to re-examine, not the ordering of two calls. No headless
test can see this either way — it has no native window, so it cannot see what is painted over what.
It is on this list rather than assumed because the note beside the `+` button in `TerminalTabs.axaml`
refuses a flyout on exactly this reasoning, and `docs/platform-flags.md` records what this project has
already paid for treating a rendering claim as settled without looking.
It is on this list because `docs/platform-flags.md` records what this project has already paid for treating
a rendering claim as settled without looking.
### 1.7 Switching a vault off does not switch it out
With a team vault holding at least one host: press `⌄` beside Vaults, switch the team vault off, and check
the hosts screen, the keychain and the pins.
With a team vault holding at least one host: press the user chip at the foot of the nav rail, switch the
team vault off in the popover, and check the hosts screen, the keychain and the pins.
**Pass:** that vault's hosts, keys and pins are gone from all three; the vault is still in the "file this
into" picker on a host editor; the sync indicator still settles rather than stalling; and a host in another
@@ -120,7 +122,8 @@ view models — this check is the version with a real connection on the end of i
### 2.1 The fingerprint column is readable end to end
Connect to two or three hosts, approving each fingerprint. Go to Pins and narrow the window to its minimum
(1016px since the v2 sidebar; it was 880 while the rail was 54 wide), then widen it to something ordinary.
(1081px since v5b's titlebar and rail fidelity pass; it was 1016 with the v2 sidebar, and 880 while the rail
was 54 wide), then widen it to something ordinary.
**Pass:** the full `SHA256:…` is on screen at both sizes, never cut off and never ellipsised.
@@ -1727,9 +1730,9 @@ button that always refuses is the milder failure and is still worth removing.
Rename a shared vault from the VAULTS screen.
**Pass:** the new name is on the vault list, on the badge of every host card in that vault, in the keychain
screen's "new items go to" picker, in the host editor's vault picker, and in the tab strip's vault menu —
and on the second account after a refresh. Nothing in the vault needs re-encrypting and everybody's key
still opens it.
screen's "new items file to" picker, in the host editor's vault picker, and in the nav rail's user-chip
popover — and on the second account after a refresh. Nothing in the vault needs re-encrypting and
everybody's key still opens it.
**Failure means:** a name that moved in one place and not another is the shape this rename is most likely to
fail in, because several screens read it separately from a cached vault row. A vault that stops opening