diff --git a/docs/manual-checks.md b/docs/manual-checks.md index 1aa2226..97d69da 100644 --- a/docs/manual-checks.md +++ b/docs/manual-checks.md @@ -580,3 +580,114 @@ Repeat 6.1 and 6.3 with the endpoint blank, a real region, and path-style **off* **Pass:** it lists. This is the path that exercises `RegionEndpoint.GetBySystemName` and virtual-host addressing, neither of which MinIO covers. + +--- + +## Phase 7 — Connecting without waiting, and the host list's pointer + +Connecting no longer holds the vault while it happens: a tab appears at once and the handshake runs behind +it. The state machine around that is covered in `ShellFlowTests` — the tab, the card, the two kinds of +failure, two connections at once — and the card itself is measured. What is left needs a real window: a +native drag, a real menu popup, and a host that takes its time answering. + +### 7.1 The window stays usable while a connection is being made · **the point of the change** + +Connect to something that will take a while — an address that is routable but silent, so the handshake sits +there rather than failing at once (a firewalled IP is ideal; `10.255.255.1` will do). While it runs: click +around the host list, open KEYS, edit something, connect to a second host. + +**Pass:** everything works. The strip shows a tab named for the host with `connecting…` beside it, and the +terminal area shows the host, the address it is dialling, and the same word. + +**Failure means:** the connect has ended up back inside `RunAsync`'s busy gate, which is the one thing +`VaultViewModel.ConnectAsync` must never be put inside again. + +### 7.2 Navigating away during a connection unlights the tab + +While 7.1's connection is still running, click KEYS. + +**Pass:** the tab stays in the strip and stops being marked as the active one. No accent bar along its top +edge while a page is showing. + +**Failure means:** the tab is bound to `IsSelected` again rather than to `IsShowing`, and the strip is +claiming to be what the window is showing when it is not. + +### 7.3 A refusal ends up in the tab, not only in the status line + +Connect to a host with the wrong password, and navigate to PREFS before it answers. + +**Pass:** the tab goes grey and carries the refusal; selecting it shows the reason in the middle of the +window with a CLOSE TAB button. Closing it returns to the page underneath. + +**Failure means:** a connection that failed while the user was elsewhere has left no trace anywhere they +would look. + +### 7.4 An unknown host key still wins the window + +Connect to a host whose key is not yet approved. + +**Pass:** no tab is left behind, and the window is on HOSTS with the fingerprint prompt. Approving it +connects and gives the tab a pane. This is 1.5 with the tab rework underneath it. + +### 7.5 Giving up on a connection, and what arrives afterwards + +Start 7.1's slow connection and press GIVE UP (or the tab's cross) while it is still trying. + +**Pass:** the tab goes at once. If the host does eventually answer, a tab appears for the session that +opened — it is a real shell, and one running with nothing naming it would be worse than one that comes +back. + +### 7.6 Dragging a host into a group · **least covered, like all drag and drop** + +Make two groups and file a host into one. Drag a host row onto another group's heading; onto a host row +inside another group; and onto UNGROUPED. + +**Pass:** the row under the pointer washes accent while the pointer is over it, the cursor shows a move +rather than a refusal, and the drop files the host — it moves under that heading and the counts on both +headings change. Dropping onto its own group's heading is refused while still in the air. + +**Failure means:** headless Avalonia cannot synthesise a platform drag, so nothing about this gesture is +automated. The write it performs is: `MovingAHostToAGroup_FilesItAndLeavesItSelected`. + +### 7.7 A click still selects, and a double click still connects + +Click host rows; drag one a few pixels without releasing; double-click one. + +**Pass:** a click selects, a small movement starts nothing, and a double click connects. + +**Failure means:** the 5-pixel threshold in `HostSidebar.axaml.cs` is not doing its job — the same failure +as 2.16 on the other screen, and here it would make the list unusable. + +### 7.8 The highlight clears after a drag that goes nowhere + +Drag a host over a heading and release outside the list, or press Escape mid-drag. + +**Pass:** the wash goes away. + +### 7.9 The right-click menu acts on the row under the pointer + +With host A selected, right-click host B and choose Delete. + +**Pass:** the question names **B**. Then right-click a group heading. + +**Pass:** no menu opens at all, and the host selection has not moved. + +**Failure means:** a menu acting on the selection rather than on the row under the pointer deletes the wrong +machine. `HostSidebarTests` covers both halves headlessly, so this is a confirmation that a real popup +behaves as the headless one did. + +### 7.10 Clicking a host in the palette connects + +Ctrl+K, then click a result with the mouse rather than pressing Enter. + +**Pass:** the palette closes and the connection starts. + +### 7.11 A host or a bucket made now can be picked on FILES now + +With the files screen's picker open on an empty or short list, go to HOSTS and add a host — or to KEYS and +add a bucket — then come back. + +**Pass:** the new one is in the picker, without locking and unlocking. + +**Failure means:** the screen has gone back to copying the vault's lists once at unlock. Covered by +`TheTransfersScreen_FollowsTheVaultsHostList`; this is the version of it with a real picker in front of it. diff --git a/src/DodoSSH.Client.Android/Views/PhoneShell.axaml b/src/DodoSSH.Client.Android/Views/PhoneShell.axaml index 9a645f7..3e23d2e 100644 --- a/src/DodoSSH.Client.Android/Views/PhoneShell.axaml +++ b/src/DodoSSH.Client.Android/Views/PhoneShell.axaml @@ -77,7 +77,13 @@ - + + - + + @@ -143,7 +156,7 @@ The terminal is a surface rather than a page — see ShellSurface — so this one does not go through ShowScreen. Its own command is on the shell. --> - - + + @@ -81,12 +83,33 @@ - + + + + + + + + @@ -96,8 +119,9 @@ path, or reach the previous command. Ctrl and Alt latch — pressed once they apply to the next key and then release, because holding a modifier while typing is not possible one-thumbed. --> + + BorderThickness="0,1,0,0" IsVisible="{Binding IsTerminalShowing}"> diff --git a/src/DodoSSH.Client.App/App.axaml b/src/DodoSSH.Client.App/App.axaml index 321f146..985b678 100644 --- a/src/DodoSSH.Client.App/App.axaml +++ b/src/DodoSSH.Client.App/App.axaml @@ -452,6 +452,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + +