Skip to content

Connect to remote hosts over SSH - #936

Draft
thesiti92 wants to merge 19 commits into
remote/2-headless-server-gatewayfrom
remote/3-ssh-hosts
Draft

thesiti92 wants to merge 19 commits into
remote/2-headless-server-gatewayfrom
remote/3-ssh-hosts

Conversation

@thesiti92

@thesiti92 thesiti92 commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Stacked PR 3 of 9 for remote reviews (base: remote/2-headless-server-gateway; #934, the rename, is merged). Review in order; each PR builds and passes its suites on its own.

Manual test plan

Purpose. Desktop connects to hosts named by SSH alias: one ssh master per alias, remote attach over it, an ssh -L forward, prompts shown in the window through askpass, and a host manager feeding the gateway. Settings gets a Remote hosts section, and Home labels remote reviews <alias>: <repo>.

Setup. Worktree at origin/remote/3-ssh-hosts. R up a; R install a; R up p --auth password; R install p; R up n; R up nf --no-forwarding; R install nf. Create the remote review on a. Launch with DEV_FAST_REVIEW_SSH_CONFIG.

Steps.

  1. Settings → Remote hosts: the SSH alias field suggests wb-test-a, wb-test-p, wb-test-n, wb-test-nf (read from the run's ssh_config).
  2. Add wb-test-a → connecting, then online; review.remote.hosts in $H/.../User/settings.json becomes ["wb-test-a"].
  3. Home lists Remote-order labelled wb-test-a: wbrepo.
  4. Open it: the prose, the code peek, the Diff view and the structural diff load. Share, Trace, Open file and Source tree are absent.
  5. edit wb-test-a $ID "Edited on the remote." → appears without a reload.
  6. S wb-test-a 'bash -s -- Pushed' < /tmp/wb-push.sh → a "Pushed" tab opens, labelled as the host's.
  7. pkill -f -- ' -M -N .*-- wb-test-a$' (Desktop's master) → the open review shows Connection lost…, then recovers in the same page; the row returns to online.
  8. R pause a → offline within about 15 s; the review rows read unavailable and opening one says why; a laptop review still opens at once. R resume a → online.
  9. Add wb-test-p → a quick input titled SSH: wb-test-p shows ssh's password prompt; enter cat /tmp/wbt.$WB_TEST_RUN/password → online.
  10. Remove wb-test-a → its reviews leave Home; R ssh a -- ls ~/.dev/review-api.db → still there.

Negative checks.

  • Alias -oProxyCommand=touch /tmp/x → refused (… starts with -.); the setting is unchanged and /tmp/x does not exist.
  • wb-test-p, press Esc at the prompt → auth-failed; no retry by itself; Retry prompts again.
  • wb-test-n (no package) → not-installed, showing npm install -g @dev.fast/whiteboard@0.2.0.
  • wb-test-nf → unreachable, detail quoting OpenSSH's administratively prohibited.
  • R install a --version 0.0.2-e2e; R ssh a -- whiteboard server stop → incompatible with the install command; rows read incompatible. R install a; R ssh a -- whiteboard server stop → online within about 10 s.
  • DevTools (Help → Toggle Developer Tools → Network): every request goes to $URL; none carries the remote's token (R ssh a -- whiteboard remote attach --json).
  • SSH command and askpass edge cases: covered by code-oss/src/vs/review/electron-main/remote/reviewSsh*.test.ts, reviewRemoteHost*.test.ts; journey remote-host.

Cleanup. Common cleanup.

Common setup for all plans

Common setup (read once)

  • Test each PR in a worktree at its head branch: git -C <core> worktree add --detach ../review-prN origin/<head>, then pnpm install there. Run everything below from that worktree root.
  • Helpers (bash or zsh):
R() { node apps/review-desktop/scripts/e2e/remote/remote.mjs "$@"; }
export WB_TEST_RUN=manual-$$                  # before the first `R up`
S() { ssh -F /tmp/wbt.$WB_TEST_RUN/ssh_config "$@"; }   # host aliases are wb-test-<name>
H=/tmp/wb-home-$WB_TEST_RUN                   # isolated Desktop home
mkdir -p $H/review-desktop/state/user-data/User
echo '{"review.experimental.remoteHosts.enabled": true}' > $H/review-desktop/state/user-data/User/settings.json
awk '/createRemoteReview = String.raw`/{f=1;next} /^`;/{f=0} f' apps/review-desktop/scripts/e2e/journeys/remote-host.mjs > /tmp/wb-review.sh
sed -e 's/open\\":false/open\\":true/' -e 's/wbrepo/wbrepo2/g' /tmp/wb-review.sh > /tmp/wb-push.sh
edit() { printf '{"sessionId":"%s","edit":{"type":"insert","content":{"type":"markdown","markdown":"%s"}}}' "$2" "$3" | S "$1" 'whiteboard api session_edit -'; }
  • Launch (dev build only; a packaged build ignores both env vars): DEV_REVIEW_HOME=$H DEV_FAST_REVIEW_SSH_CONFIG=/tmp/wbt.$WB_TEST_RUN/ssh_config pnpm dev (prefix DEV_FAST_REVIEW_DESKTOP_BACKGROUND=1 to keep it from taking focus).
  • Desktop API: D=$(ls $H/review-desktop/instances/dev-*.json); URL=$(node -p "require('$D').url"); TOK=$(node -p "require('$D').token"); api() { curl -s -H "x-review-token: $TOK" "$URL$1"; }
  • A remote review: ID=$(S wb-test-a 'bash -s -- Remote-order' < /tmp/wb-review.sh | head -1) (repo ~/wbrepo, review "Remote-order" with a prose line and a code peek of f.ts). /tmp/wb-push.sh is the same with open: true in ~/wbrepo2.
  • Settings: ⌘, → region Remote hosts → type the alias in SSH alias → Add.
  • Fork unit tests: (cd apps/review-desktop && TSX_TSCONFIG_PATH=tsconfig.test.json node --import tsx --test --test-force-exit <files>). Package tests: pnpm --filter @dev.fast/whiteboard test <files>.
  • Journeys: stage a runtime per apps/review-desktop/scripts/e2e/TESTING.md ("Staging the runtime"), then node apps/review-desktop/scripts/e2e/run.mjs --runtime "$REVIEW_E2E_RUNTIME" --journey <name>.
  • The harness has pause/resume (there is no unpause).
  • Cleanup, every plan: quit Desktop first (its ssh masters count as leftovers), then R down --all; R verify-clean; rm -rf $H /tmp/wb-*.sh. Without an aws sso login session verify-clean also prints AWS could not be checked and exits 1; no other line may appear.

@thesiti92
thesiti92 added this pull request to stack #943 October 5, 2026 19:37
@thesiti92
thesiti92 force-pushed the remote/3-ssh-hosts branch 2 times, most recently from 85c4310 to d60133f Compare October 5, 2026 20:40
@thesiti92
thesiti92 force-pushed the remote/3-ssh-hosts branch 2 times, most recently from 0f294cb to af05567 Compare October 6, 2026 03:46
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
One master connection per alias, and every other call through its
control socket: exec, loopback forwards and their cancels, check and
close. An alias that could become an option or reach a shell is refused.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Read for display only, in file order and following Include; patterns
are not aliases.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
ssh runs a packaged helper as SSH_ASKPASS. The helper sends the prompt
over a socket in the 0700 control directory to the main process, which
asks one prompt at a time and never logs or stores the answer.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Every window on the Desktop channel shows each prompt as plain text; the
first answer wins, and a prompt stays open across a window reload. A
typed secret is cleared before the input hides.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
A development stand-in for the remote host manager, to exercise the
prompts.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
A host opens a master connection, runs `whiteboard remote attach` through
the CLI its login shell finds, and forwards a loopback port to the
remote server. It reports an endpoint or a problem, reconnects with
backoff when the master ends, and attaches again when the remote server
restarts.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
With `review.experimental.remoteHosts.enabled` on, main connects each
alias in `review.remote.hosts` after the first window opens and sends
the hosts to the local server, in the setting's order, at most once a
second. At start it closes the masters an earlier run left.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
The gateway takes a 401, or nothing answering behind a working forward,
as a restart and asks Desktop once to attach again.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
The SSH alias rule moves to common code so the renderer checks an alias
as main does.

Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Home puts the host's alias before the repository name, groups by host,
and explains an unavailable review instead of opening it. A review on
another machine has no Open file, source tree, sharing or traces.

Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
It lists each alias with its state and detail as plain text, offers the
SSH configuration's hosts, and shows the install command Desktop builds,
never one from a remote's text. The canvas passes each review's host and
the host states to the UI.

Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
The journey runs a review server in a container over SSH, or on a host
prepared by hand, and checks Home, the canvas, live edits, pushes,
reconnects, a hung server, a version mismatch and removal.

Agent-Session: 203ee435-a867-494c-bb56-ddde9edf962e
Agent-Session: 879f8dc8-4a2e-4c1d-a221-935df47f9854
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0f84f-dd30-7a41-b2fe-0d7af3946366
Agent-Session: b74726e7-9218-4d00-81bd-c3fc64dcd8d7
Agent-Session: 01a0f894-9661-79c0-a6c4-71002d15105c
Agent-Session: 00102a68-dcd0-4748-a95e-fc417ddbb706
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 61ddd1f7-126b-4756-8f8e-ed5123004afa
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 945245a7-5fc9-4d4e-bb9a-8fa4987ac199
Agent-Session: 01a0f7e4-a040-7c70-958e-c32707c30fa1
Agent-Session: 01a0fde5-49f5-7691-b5d7-6bed5e5e4448
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
A server that misses three /health checks in a row is attached again.

Agent-Session: 10f346e1-a3d6-4004-b9ae-e69332b86ef7
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 6f4264ba-6e8e-4283-8a0d-c70b0912c75d
Agent-Session: e8fb83ae-d61f-497d-8c6f-2949c5e4760b
Agent-Session: 6aa25413-6ff2-4207-a23e-f435d86aeff7
Agent-Session: 7d6b1dc9-dc43-474e-a7cf-897a3eb667e1
Agent-Session: 01a0fde5-5de7-7a00-8f1e-508af5d4455c
Agent-Session: 2843f7c1-df99-4190-ae44-e0bec53ffa49
Agent-Session: 01a1034a-9158-7d23-bc59-21b4a209a1d8
Agent-Session: ef4983e0-5b02-4105-b264-6ae48c727a8a
Agent-Session: 01a10c6b-6286-7d63-bec6-b36570f309dc
Agent-Session: fe2ac599-fe10-4bdd-a496-a121682ac842
Agent-Session: c7d5d811-b851-4c36-93a4-ea2325ac973a
Agent-Session: 01a10cab-5911-7c00-92f4-5e3404373ba2
Agent-Session: 17be59a9-37ae-45bc-ad47-3cdb1660c6c2
Agent-Session: 0742d3f8-2ac6-4fee-8102-c6e930f316ad
Agent-Session: 01a10cc6-7bb1-7652-8fe2-f99e54e4d14e
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 01a10d6d-cc61-7a60-8be6-0d3d48878694
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: 8a675162-2f63-4f2c-8be7-66b7ae4cdd6a
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
attachAgain and connect now end in the same establish step, and a reattach
waits on the same timer and failure count as a reconnect. connect drops any
running master first, so a resume during a reattach delay no longer leaves
the old master behind.

Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: 01a10d75-7d32-7f11-8d5a-7aa1c81b5390
Agent-Session: 01a10db4-61fc-7181-82a9-ac2de659fb25
Agent-Session: b432f7be-90f7-4d63-894d-7d75660d19b2
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 459ae7ec-7302-42c5-b473-4e315a7e4e19
Agent-Session: bc41ade8-aab1-4279-b31a-ea472fcfaacc
Agent-Session: 96eed70a-4af6-4249-a91d-8064746610b6
Agent-Session: 04f92d25-41e1-4ba0-aef1-7a1a1d409286
Agent-Session: a5134983-fbca-42d2-ac6c-fe14cf3ce20e
Agent-Session: 01a0fd55-7d25-70c3-bf87-46cdb881d91e
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: c155cff4-ccd6-416d-a2e3-f65113f2d163
Agent-Session: edffabb0-c704-439a-bf69-7b366f2f332d
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: c155cff4-ccd6-416d-a2e3-f65113f2d163
Agent-Session: 13cd2035-0029-45cb-a2c9-65f0c01b6460
Agent-Session: e9b9e23e-de55-4291-9391-cd234f736397
Agent-Session: 5368a6f5-df0c-4411-8eec-4b9cccbfbef0
Agent-Session: f086ac47-f054-41fb-8279-be4df7aa2dee
Agent-Session: 7633c50b-998d-4b1e-8ca2-ffb350a26066
Agent-Session: 3a3376c5-3f72-46df-930c-a66d5c3bcce5

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant