detached 27f03fe

docs(remote): describe actual replay guarantees and connection states

In-flight keys at a drop may be lost; degraded and probing states are not emitted yet. Link mosh upstream in the resilience plan.
commit
27f03fe6b51426bec84829756714a7090e3d749f
author
brice · · 2026-10-07 07:01 UTC
parent
1e5d59c
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +9 -11
M docs/plans/quic-resilience.md +3 -3
@@ -4,10 +4,10 @@ Goal: on a lossy or intermittent link (4G, roaming, sleep), the UI never
44 freezes, typed input is kept and delivered when the link returns, and SSH is
55 used only to authenticate the first QUIC handshake.
66
7-Reference: mosh (`/tmp/mosh`, `src/network/transportsender-impl.h`,
8-`src/frontend/terminaloverlay.cc`).
7+Reference: [mosh](https://github.com/mobile-shell/mosh)
8+(`src/network/transportsender-impl.h`, `src/frontend/terminaloverlay.cc`).
99
10-## Diagnosis (current main)
10+## Diagnosis (before Phases 1 and 2)
1111
1212 1. Input path blocks on the network: `sessionAttachmentWorker.send` waits for
1313 `SendClient`, which waits for the carriage write. While QUIC stalls, the
@@ -4,10 +4,10 @@ Goal: on a lossy or intermittent link (4G, roaming, sleep), the UI never
4 freezes, typed input is kept and delivered when the link returns, and SSH is4 freezes, typed input is kept and delivered when the link returns, and SSH is
5 used only to authenticate the first QUIC handshake.5 used only to authenticate the first QUIC handshake.
6 6
7-Reference: mosh (`/tmp/mosh`, `src/network/transportsender-impl.h`,7+Reference: [mosh](https://github.com/mobile-shell/mosh)
8-`src/frontend/terminaloverlay.cc`).8+(`src/network/transportsender-impl.h`, `src/frontend/terminaloverlay.cc`).
9 9
10-## Diagnosis (current main)10+## Diagnosis (before Phases 1 and 2)
11 11
12 1. Input path blocks on the network: `sessionAttachmentWorker.send` waits for12 1. Input path blocks on the network: `sessionAttachmentWorker.send` waits for
13 `SendClient`, which waits for the carriage write. While QUIC stalls, the13 `SendClient`, which waits for the carriage write. While QUIC stalls, the
M docs/remote-resilience.md +6 -8
@@ -26,7 +26,7 @@ The transport is fixed when the host is added (`quic` by default). To switch, ru
2626
2727 - The remote session and its shells keep running while you are offline.
2828 - The client reconnects by itself after a network change, a VPN switch, or a laptop sleep, and keeps retrying for up to 15 minutes of outage before it returns to the picker. Press Ctrl-C or Esc while it reconnects to give up and return to the picker.
29-- A stalled link does not block the client loop. Keys typed while the link stalls or reconnects are kept and sent in order once it recovers; keys that never reached the remote before a reconnect are replayed to the resumed session.
29+- A stalled link does not block the client loop. Keys typed while the link stalls or reconnects are kept and sent in order once it recovers. Keys vev had not yet sent when the link dropped are replayed to the resumed session; keys already in flight at the drop may be lost.
3030 - If the reconnect window has expired but the session still exists, the client opens a fresh attachment to it.
3131 - Several clients can attach to the same session. Each keeps its own window, tab, focus, and copy mode.
3232
@@ -34,15 +34,13 @@ The command palette is rendered by the remote daemon, so opening it needs a work
3434
3535 ## Connection states
3636
37-| State | Meaning |
37+| What you see | Meaning |
3838 |---|---|
39-| `connected` | Everything works. |
40-| `degraded` | Packets arrive, but updates are slow. |
41-| `probing` | No contact; vev is looking for a working path. |
42-| `offline` | No contact for a while; vev is reconnecting. |
43-| `dead` | The connection is gone for good. |
39+| The session | The link works. |
40+| `Connecting to session…` | The link dropped; vev is reconnecting and keeps your keys. |
41+| The picker with an error | The session could not be reached again, or you cancelled. |
4442
45-States appear in the vev status bar, never inside your shell output.
43+vev does not yet report a slow (`degraded`) link separately. Connection notices never appear inside your shell output.
4644
4745 ## Hybrid mode: local and remote together
4846
@@ -26,7 +26,7 @@ The transport is fixed when the host is added (`quic` by default). To switch, ru
26 26
27 - The remote session and its shells keep running while you are offline.27 - The remote session and its shells keep running while you are offline.
28 - The client reconnects by itself after a network change, a VPN switch, or a laptop sleep, and keeps retrying for up to 15 minutes of outage before it returns to the picker. Press Ctrl-C or Esc while it reconnects to give up and return to the picker.28 - The client reconnects by itself after a network change, a VPN switch, or a laptop sleep, and keeps retrying for up to 15 minutes of outage before it returns to the picker. Press Ctrl-C or Esc while it reconnects to give up and return to the picker.
29-- A stalled link does not block the client loop. Keys typed while the link stalls or reconnects are kept and sent in order once it recovers; keys that never reached the remote before a reconnect are replayed to the resumed session.29+- A stalled link does not block the client loop. Keys typed while the link stalls or reconnects are kept and sent in order once it recovers. Keys vev had not yet sent when the link dropped are replayed to the resumed session; keys already in flight at the drop may be lost.
30 - If the reconnect window has expired but the session still exists, the client opens a fresh attachment to it.30 - If the reconnect window has expired but the session still exists, the client opens a fresh attachment to it.
31 - Several clients can attach to the same session. Each keeps its own window, tab, focus, and copy mode.31 - Several clients can attach to the same session. Each keeps its own window, tab, focus, and copy mode.
32 32
@@ -34,15 +34,13 @@ The command palette is rendered by the remote daemon, so opening it needs a work
34 34
35 ## Connection states35 ## Connection states
36 36
37-| State | Meaning |37+| What you see | Meaning |
38 |---|---|38 |---|---|
39-| `connected` | Everything works. |39+| The session | The link works. |
40-| `degraded` | Packets arrive, but updates are slow. |40+| `Connecting to session…` | The link dropped; vev is reconnecting and keeps your keys. |
41-| `probing` | No contact; vev is looking for a working path. |41+| The picker with an error | The session could not be reached again, or you cancelled. |
42-| `offline` | No contact for a while; vev is reconnecting. |
43-| `dead` | The connection is gone for good. |
44 42
45-States appear in the vev status bar, never inside your shell output.43+vev does not yet report a slow (`degraded`) link separately. Connection notices never appear inside your shell output.
46 44
47 ## Hybrid mode: local and remote together45 ## Hybrid mode: local and remote together
48 46

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 12

Tags 11

↑↓ moveenter openesc close