List each host on its own, so a sleeping one cannot hide the rest #3

Merged
natsukium merged 2 commits from fix/list-hosts-independently into main 2026-10-14 14:02:50 +09:00
Owner

On restore, the app sent one roster-wide list, which only answers after its slowest host does. When a laptop on the roster is asleep, that wait is the full 20 s ssh dial timeout, and the tab bar stayed empty the whole time. From a phone it looked like there were no sessions at all.

  • Each host is now listed separately and its tabs are added as soon as it answers. The active tab is picked once the default host has answered.
  • A host whose listing fails keeps its tabs unchanged instead of marking them dead.
  • Bumps felis-web-component so the resume probe sends hosts instead of list. With list, a sleeping host made every resume drop a healthy socket.

Checked with a felis 0.2.0 daemon and an unreachable ssh host on the roster: the restored session now appears in 68 ms (it took 20.4 s before), and a resume probe no longer opens a new websocket.

On restore, the app sent one roster-wide `list`, which only answers after its slowest host does. When a laptop on the roster is asleep, that wait is the full 20 s ssh dial timeout, and the tab bar stayed empty the whole time. From a phone it looked like there were no sessions at all. - Each host is now listed separately and its tabs are added as soon as it answers. The active tab is picked once the default host has answered. - A host whose listing fails keeps its tabs unchanged instead of marking them dead. - Bumps felis-web-component so the resume probe sends `hosts` instead of `list`. With `list`, a sleeping host made every resume drop a healthy socket. Checked with a felis 0.2.0 daemon and an unreachable ssh host on the roster: the restored session now appears in 68 ms (it took 20.4 s before), and a resume probe no longer opens a new websocket.
Restore asked the gateway for one roster-wide `list`, which answers only
once its slowest host has. With a laptop asleep on the roster, that is
the full ssh dial timeout, and the app sat on an empty tab bar for all
of it: from a phone it looked as if there were no sessions at all.

Each host is now listed separately and folded in as it answers. The
active tab is chosen once the default host has answered, since that is
where a new tab would open. A host whose listing failed keeps its tabs
as they were rather than marking them dead: an empty answer from a dial
that failed says nothing about whether its sessions still exist.
Picks up the resume probe that asks the gateway for `hosts` instead of
`list`, so a host that is asleep no longer makes every resume abandon a
healthy socket.
natsukium deleted branch fix/list-hosts-independently 2026-10-14 14:02:50 +09:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
natsukium/felis-web!3
No description provided.