Terminal WebSocket sessions now retry with capped backoff through cold-start failures instead of giving up and requiring a manual Reconnect click.
- useTerminal tracks whether a socket has ever successfully opened via hasEverConnectedRef
- a never-connected initial connect ignores MAX_RECONNECT_ATTEMPTS and keeps retrying at capped backoff, staying in the reconnecting affordance until it opens
- mid-session drops (sockets that opened at least once) keep the existing bounded give-up behavior, and permanent 4000/4004 closes remain terminal
- context-change invalidation now uses a ref flag (contextChangedSinceLastEffectRef) consumed inside the effect instead of a transient boolean dependency, avoiding cleanup re-runs that tore down the replacement socket during context-switch/reconnect races
- manual reconnect() and context/session changes reset hasEverConnectedRef so cold-start behavior reapplies per session
- added a patch changeset and expanded useTerminal test coverage for first-launch reconnect vs. mid-session disconnect behavior
- documented the first-launch reconnect behavior in docs/dashboard-guide.md
Files changed:
.changeset/FN-7824-terminal-first-launch-autoreconnect.md | 7 +
docs/dashboard-guide.md | 3 +
packages/dashboard/app/hooks/__tests__/useTerminal.test.ts | 208 ++++++++++++++++++++-
packages/dashboard/app/hooks/useTerminal.ts | 34 +++-
4 files changed, 234 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-7824
Fusion-Task-Lineage: 7ed696d0-449e-4dc0-9be0-48b429b8c844
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>