From 281e828e258fc1b18e2fb6783d7274eabe9836f5 Mon Sep 17 00:00:00 2001 From: Jaap-Jan de Wit | DodoTech Date: Fri, 7 Aug 2026 18:14:54 +0200 Subject: [PATCH] Sweep out the group-card navigation nothing reaches any more --- docs/reaching-a-host-you-cannot-dial.md | 4 +- src/DodoSSH.Client.App/App.axaml | 30 +- .../ViewModels/VaultViewModel.cs | 587 +++--------------- .../HostGridTests.cs | 4 +- .../VaultSharingTests.cs | 86 +-- 5 files changed, 115 insertions(+), 596 deletions(-) diff --git a/docs/reaching-a-host-you-cannot-dial.md b/docs/reaching-a-host-you-cannot-dial.md index 92e0a5c..93ad2e8 100644 --- a/docs/reaching-a-host-you-cannot-dial.md +++ b/docs/reaching-a-host-you-cannot-dial.md @@ -141,8 +141,8 @@ Nothing calls it with a proxy yet. That is deliberate and it is one step wide: s - The hop's own connection, and a `ForwardedPortDynamic("127.0.0.1", 0)` started on it, whose `BoundPort` becomes the `SshLoopbackProxy` for the connection after it. A chain of two is that twice. - `VaultViewModel` resolves `JumpHostIds` to hosts in the same vault, applying group inheritance per hop the - way the target already gets it, and refuses a chain that crosses a vault — the same refusal - `RefusesTheDrop` and the group picker already make, for the same reason. + way the target already gets it, and refuses a chain that crosses a vault — the same refusal the group + picker already makes, for the same reason. - ◆ **The target's address is resolved at the last hop, not here.** A SOCKS CONNECT names the target and the bastion resolves it, so what has to be stored on the host is the address *the bastion* can reach — which is what an `ssh_config` means by `HostName` beside a `ProxyJump`, and what the importer is already diff --git a/src/DodoSSH.Client.App/App.axaml b/src/DodoSSH.Client.App/App.axaml index 59715e3..e4089f3 100644 --- a/src/DodoSSH.Client.App/App.axaml +++ b/src/DodoSSH.Client.App/App.axaml @@ -713,7 +713,7 @@ chosen card that also drew an accent outline would be indistinguishable from the selected one, and the question "which of these is the drawer showing" would have no answer. Declared after that rule anyway, because it sets the same Background and Avalonia settles two matching rules by declaration order — - the trap this file records for Button.tab, Border.rowmark and the drop target below. + the trap this file records for Button.tab and Border.rowmark. --> - - -