diff --git a/fleetd/src/main/java/dev/ltms/fleet/member/HerdrPeerLauncher.java b/fleetd/src/main/java/dev/ltms/fleet/member/HerdrPeerLauncher.java index 8e9fe6c..a4fd26b 100644 --- a/fleetd/src/main/java/dev/ltms/fleet/member/HerdrPeerLauncher.java +++ b/fleetd/src/main/java/dev/ltms/fleet/member/HerdrPeerLauncher.java @@ -947,7 +947,14 @@ public abstract class HerdrPeerLauncher implements PeerLauncher { // person can go close by hand. try { spaces.closeTab(loc.tabId()); - } catch (HerdrException e) { + } catch (RuntimeException e) { + // Caught as RuntimeException, not HerdrException, to match releaseZdotdir's own + // guard five lines below. Today the two are the same set — HerdrCodec wraps every + // encode/decode failure and UnixSocketHerdrClient wraps every IOException, so + // HerdrException is all closeTab can actually throw. Narrowing to it anyway would + // leave this step guarded against the expected failure and bare against any other, + // which is the exact asymmetry fleetd #293 exists to remove. No behaviour change + // today; it stops a later change inside WorkspaceControl.closeTab reopening it. log.warn("tab.close({}) failed — the pane is already torn down, so continuing; the " + "tab may need manual cleanup: {}", loc.tabId(), e.getMessage()); }