diff --git a/README.md b/README.md index bac43c1..1ea0717 100644 --- a/README.md +++ b/README.md @@ -342,10 +342,16 @@ Six limits, stated rather than discovered: into it that is not there. Items are filed into one vault at a time, and which one is asked at the moment the item is made. **A host's -editor has its own picker**, beside the name, because that is the decision that cannot be undone: the two -vaults are encrypted under different keys, so moving an item afterwards means deleting it and typing it -again — and the picker is therefore absent when you edit an existing host rather than present and refusing. -Keys, passwords and buckets take theirs from a standing "new items go to" picker on the Keychain screen. +editor has its own picker**, beside the name, because it is the decision on that form that decides who can +read the host. It is absent when you edit an existing one rather than present and refusing, and that is not +because the host is stuck: **a host can be moved to another vault** — "Move to another vault…" in the detail +pane's menu on the desktop, MOVE beside EDIT on the phone. It is a separate act because it is not a save. +The two vaults are encrypted under different keys, so a move is a re-seal into one and a tombstone in the +other; the host gets a new id, and **its group and its tags stay behind**, because both are items of the +vault it is leaving. A picker inside the form would do all of that as a side effect of correcting a port. +What a move cannot do is reach a machine that has already synced the host, which is the same limit +everything else about revocation has. Keys, passwords and buckets take theirs from a standing "new items go +to" picker on the Keychain screen and cannot be moved yet. Both default to your personal vault and neither moves on its own, because an item put in a shared vault is visible to everybody holding that vault's key. Choosing a vault in the host editor also decides which groups it can be filed under: a group is an item like any other and lives in exactly one vault. diff --git a/docs/design-import-gaps.md b/docs/design-import-gaps.md index 9cf65d9..830da52 100644 --- a/docs/design-import-gaps.md +++ b/docs/design-import-gaps.md @@ -157,7 +157,7 @@ the chrome, hosts and terminals, file transfer, the vault, teams, and preference > | **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, on the pane about an existing host: an item cannot be moved between vaults, because the two are encrypted under different keys and moving one is a delete and a retype. The half of the question that *does* have an answer — where a new host goes — is asked in the host editor, as a picker beside the name; keys, passwords and buckets take theirs from the keychain screen's standing picker instead. | +> | The **chevron beside the vault name** | The name alone, and the move behind the pane's ⋯ menu instead. A host *can* now be moved between vaults, so the gap is no longer that there is nothing to offer — it is that a chevron on a subtitle implies an edit, and this is not one: the two vaults are encrypted under different keys, so it is a re-seal into one and a tombstone in the other, the host takes a new id, and its group and tags stay behind. A control that implied "just change this field" would be describing something else. Where a *new* host goes is still asked in the host editor, as a picker beside the name; keys, passwords and buckets take theirs from the keychain screen's standing picker and cannot be moved yet. | > | **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. | diff --git a/src/DodoSSH.Client.Android/Views/HostsScreen.axaml b/src/DodoSSH.Client.Android/Views/HostsScreen.axaml index 821f6f2..fd589c3 100644 --- a/src/DodoSSH.Client.Android/Views/HostsScreen.axaml +++ b/src/DodoSSH.Client.Android/Views/HostsScreen.axaml @@ -262,10 +262,12 @@ @@ -279,7 +281,7 @@ + Text="A host in a shared vault is readable by everybody holding that vault's key. It can be moved out later, with MOVE under the host — what it cannot do is become unreadable to somebody who has already synced it." /> @@ -432,45 +434,97 @@ BorderThickness="0,1,0,0" Padding="14,12"> - - - - - - - - - - + - - - + + + + - + + + + + + + + + + + + + +