Files
orca/src
Neil 6211a5ea8f fix(ssh): a legacy relay restarted at the same socket never takes over an open tab (#31068)
* fix(ssh): a legacy relay restarted at the same socket never takes over an open tab

A pane's owner is now its relay endpoint plus the incarnation that relay listed. A
relay that restarts at the owner's socket and reuses pty-N under another incarnation
is never served for the tab, its exit and output never reach it, and its silence is
not read as the original shell's exit: the pane stays unverifiable.

* fix(ssh): keep an exit a reconnected relay reported before its listing bound the pane

* fix(ssh): a legacy relay's exit report counts when it arrives on the connection that listed the pane

* fix(ssh): a pane waiting on a replaced legacy relay keeps its connection

* fix(ssh): never hold or retake a replaced legacy relay's owner role for a pane it can't resolve

* fix(ssh): an epoch-scoped pane's exit reported during a reconnect counts without a listing row

* refactor(ssh): the owner ledger holds the connection that speaks for each legacy relay pane

The connection a listing verified stays bound to the owner until it closes, so its
exit reports count even after a later listing missed the pane.

* refactor(ssh): every legacy relay pane route asks the owner ledger; a replaced pane is never bound

Attach, input and stops go through liveRouteOf, which reaches only the connection the
ledger says speaks for the pane; exit and output reports use the same check. A pane
whose relay was replaced at its socket is never bound to the replacement, and a stop
owed to it is abandoned instead of being fenced against the stranger.
2026-10-20 02:56:29 -07:00
..