Jinwoo-H and Orca
121faeca08
Fix hidden/parked split-pane exit stranding ghost or resurrected panes
...
Deterministic e2e repro of the field 'ghost blank pane' incident (a
closed/finished setup-split leaf persisted in root with no binding and
remounted as a permanently blank pane) found two teardown gaps at the
hidden-view parking boundary:
1. The kept-exit guard ('freshly split pane can lose its newborn PTY
during setup') fired for HIDDEN panes. The hidden-delivery gate
withholds their bytes, so a hidden split always looks output-less and
its dead pane was kept — a binding-less ghost that dead-session
reconcile can never reach (no PTY id to prove dead). The keep is a
visible-failure UX; gate it on isVisibleRef and close hidden panes.
2. A PTY exit landing while the tab is PARKED reached only the parked
watcher's exit sidecar (hosts' onPtyExit requires a mounted
TerminalPane), which only disposed the watcher. The leaf's stale
binding then reattached on reveal and the daemon re-created the
exited session id as a fresh shell — silent pane resurrection. The
sidecar now collapses the dead leaf out of the stored layout via
detachTerminalLayoutLeaf (the observed-exit teardown's data half).
New e2e suite terminal-pane-close-layout-consistency.spec.ts sweeps
close/shell-exit at every hidden/park lifecycle phase and asserts
leaves(root) == bindings == live panes; all 7 scenarios pass. Unit
regressions added for both fixes.
Co-authored-by: Orca <help@stably.ai >
2026-07-09 22:42:15 -04:00
..
2026-07-02 23:43:35 -07:00
2026-07-06 16:29:48 -04:00
2026-07-06 02:12:32 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-06-10 17:23:12 -07:00
2026-06-19 17:14:55 -07:00
2026-06-11 12:46:43 -07:00
2026-07-07 15:57:43 -04:00
2026-06-09 17:06:56 -07:00
2026-07-03 01:44:20 -04:00
2026-07-04 01:30:44 -04:00
2026-06-11 00:08:27 -07:00
2026-06-07 18:16:53 -07:00
2026-07-05 21:51:32 -07:00
2026-06-08 01:00:29 -07:00
2026-07-06 16:29:48 -04:00
2026-06-28 23:13:03 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 23:37:30 -07:00
2026-07-07 15:57:43 -04:00
2026-07-05 21:51:32 -07:00
2026-06-07 17:49:01 -07:00
2026-06-07 17:49:01 -07:00
2026-06-07 17:49:01 -07:00
2026-06-29 22:38:29 -07:00
2026-06-17 20:05:55 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-05-13 18:48:14 -07:00
2026-05-13 18:48:14 -07:00
2026-05-30 22:46:38 -07:00
2026-05-30 22:46:38 -07:00
2026-07-06 02:12:32 -07:00
2026-06-19 17:14:55 -07:00
2026-05-25 22:21:39 -07:00
2026-04-27 20:55:47 -07:00
2026-06-22 16:27:33 -07:00
2026-06-09 20:57:43 -07:00
2026-06-10 13:41:05 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-07-05 19:46:49 -07:00
2026-07-03 01:44:20 -04:00
2026-07-03 01:44:20 -04:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 22:38:29 -07:00
2026-05-25 16:43:22 -07:00
2026-07-04 23:29:05 -07:00
2026-06-22 12:29:18 -07:00
2026-05-19 00:28:55 -07:00
2026-07-09 00:46:03 -07:00
2026-07-09 02:13:13 -07:00
2026-07-05 19:46:49 -07:00
2026-07-05 21:51:32 -07:00
2026-07-02 17:52:46 -04:00
2026-06-29 22:38:29 -07:00
2026-07-02 17:52:46 -04:00
2026-05-21 01:19:49 -04:00
2026-06-29 22:38:29 -07:00
2026-07-05 19:46:49 -07:00
2026-06-29 22:38:29 -07:00
2026-06-02 22:31:57 -07:00
2026-07-06 02:12:32 -07:00
2026-06-10 21:14:53 -07:00
2026-07-05 19:46:49 -07:00
2026-07-05 19:46:49 -07:00
2026-06-20 18:47:39 -07:00
2026-06-16 18:56:52 -07:00
2026-06-29 22:38:29 -07:00
2026-07-04 22:56:55 -07:00
2026-06-22 16:42:20 -07:00
2026-06-22 16:42:20 -07:00
2026-06-22 16:42:20 -07:00
2026-06-22 16:42:20 -07:00
2026-06-22 16:42:20 -07:00
2026-07-07 15:57:43 -04:00
2026-07-06 02:12:32 -07:00
2026-06-26 14:28:16 -07:00
2026-07-07 15:41:05 -04:00
2026-07-05 21:51:32 -07:00
2026-06-19 17:14:55 -07:00
2026-06-10 21:14:53 -07:00
2026-05-16 11:50:26 -07:00
2026-06-25 18:36:11 -07:00
2026-06-18 00:11:32 -07:00
2026-06-18 00:11:32 -07:00
2026-06-29 22:38:29 -07:00
2026-06-29 21:37:49 -07:00
2026-05-25 15:07:40 -07:00
2026-06-08 01:00:29 -07:00
2026-06-30 15:29:12 -07:00
2026-07-05 21:51:32 -07:00
2026-06-20 02:03:24 -07:00
2026-06-10 21:14:53 -07:00
2026-06-19 19:43:42 -07:00
2026-06-17 10:49:41 -07:00
2026-06-29 22:38:29 -07:00
2026-06-11 00:08:27 -07:00
2026-07-03 20:40:34 -04:00
2026-06-12 16:31:24 -07:00
2026-06-09 13:52:58 -07:00
2026-06-19 17:14:55 -07:00
2026-06-24 20:16:14 -07:00
2026-07-03 03:50:22 -04:00
2026-07-07 15:41:05 -04:00
2026-06-20 01:27:41 -07:00
2026-06-20 01:27:41 -07:00
2026-06-27 09:30:29 -07:00
2026-07-06 02:12:32 -07:00
2026-07-09 22:42:15 -04:00
2026-06-21 23:09:01 -07:00
2026-06-11 00:08:27 -07:00
2026-06-23 21:24:13 -07:00
2026-06-24 20:16:14 -07:00
2026-06-20 02:03:24 -07:00
2026-06-20 02:03:24 -07:00
2026-06-20 02:03:24 -07:00
2026-07-06 05:21:45 -04:00
2026-06-22 16:42:20 -07:00
2026-07-05 02:34:56 -04:00
2026-07-08 22:23:35 -07:00
2026-06-22 16:42:20 -07:00
2026-07-06 02:12:32 -07:00
2026-07-06 20:17:35 -07:00
2026-06-23 00:23:34 -07:00
2026-07-06 02:12:32 -07:00
2026-06-09 17:06:56 -07:00
2026-06-19 17:14:55 -07:00
2026-07-06 18:01:21 -04:00
2026-06-23 00:23:34 -07:00
2026-06-23 10:15:06 -07:00
2026-06-23 00:23:34 -07:00
2026-07-05 21:51:32 -07:00
2026-07-05 21:51:32 -07:00
2026-06-12 16:31:24 -07:00
2026-06-22 16:42:20 -07:00
2026-06-19 17:14:55 -07:00
2026-05-15 23:52:37 -07:00
2026-06-07 17:49:01 -07:00
2026-06-29 22:38:29 -07:00
2026-05-17 15:43:53 -04:00
2026-06-18 00:11:32 -07:00
2026-07-05 19:46:49 -07:00
2026-04-19 15:50:19 -07:00
2026-05-21 01:33:53 -07:00
2026-06-18 00:11:32 -07:00
2026-06-29 22:38:29 -07:00
2026-06-18 00:11:32 -07:00
2026-07-05 21:51:32 -07:00
2026-06-18 00:11:32 -07:00
2026-06-18 00:11:32 -07:00
2026-07-05 19:46:49 -07:00