Repository navigation
fix(remote): verdeckten Besitzer eines Daemon-PTYs nicht mehr als Sackgasse behandeln - #534
Merged
Merged
Conversation
…kgasse behandeln "In neuem Tab öffnen" in der Sidebar endete im Toast workspace-remote-pty-already-open, sobald der Claim des PTYs von einer Oberfläche gehalten wurde, die kein offener Tab zeigt: - Ein geschlossener Tab bleibt während der Undo-Close-Frist (60 s) im UndoCloseStack; seine Panes werden nur HiddenForClose gelöst, Claim und Verbindung bleiben bestehen. focus_daemon_claim_owner durchsucht nur workspace.tabs und fand ihn nie. - Eine Oberfläche, die lebt, aber in keinem Tab mehr steckt (geschlossenes Fenster in der Undo-Frist, verwaiste Oberfläche), hielt den Claim dauerhaft. Jetzt öffnet focus_daemon_claim_owner einen solchen geschlossenen Tab wieder und fokussiert ihn. Ist der Besitzer von keinem Tab erreichbar, geben der Sidebar-Pfad (focus_existing_adopted_daemon_session) und "Erneut versuchen" (retry_remote_restore) seinen Claim frei und trennen nur seine Verbindung – das PTY auf dem Daemon läuft weiter – und öffnen das PTY dann neu, statt den Pane zu degradieren bzw. den Toast zu zeigen.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Vorfall am 2026-10-08: Eine laufende Daemon-Session auf devhost mit einer aktiven Claude-Instanz war für den Nutzer nicht mehr erreichbar. „In neuem Tab öffnen“ in der Sidebar löste beim Daemon kein Attach aus. Stattdessen kam mehrfach der Toast
Der einzige Ausweg war ein App-Neustart bzw. das Fortsetzen der Konversation in einer neuen Session.
Bestätigte Ursache (Undo-Close-Frist):
remove_tablegt die Pane-Group eines geschlossenen Tabs in denUndoCloseStack. Die Panes werden nurHiddenForClosegelöst.DetachType::Closedfreigegeben (terminal_pane.rs,daemon_tty/terminal_manager.rs).focus_daemon_claim_ownerdurchsucht nurworkspace.tabsund landet 60 s lang im Toast. Das passt zum Daemon-Log: Die Verbindungen der geschlossenen Tabs lebten genau bis zum Ende der Frist.on_window_closedden Workspace aus der Registry nimmt.Nicht rekonstruiert: In der ersten Runde zeigte der einzige sichtbare Pane der Session „Wiederherstellung der Remote-Sitzung abgebrochen“, während eine Verbindung unsichtbar am PTY hing und sich nach Abbruch sofort neu anhängte (
replay 0 bytes). Im Cancel- und Replace-Pfad wurde kein Leck gefunden. Der Rückfallweg unten deckt diesen Fall ab, aber nur, wenn der Nutzer über die Sidebar oder „Erneut versuchen“ handelt.Änderung
UndoCloseStack: Kann einen geschlossenen Tab finden und herausnehmen, der eine bestimmte Terminal-View hält (has_…/take_closed_tab_with_terminal_view).focus_daemon_claim_owner: Öffnet einen solchen Tab wieder (restore_closed_tab) und fokussiert ihn, statt den Toast zu zeigen.deregister_session(conn, false)). Das PTY auf dem Daemon läuft weiter.PaneGroup::holds_terminal_viewprüft alle Einträge des Pane-Stacks, auch verdeckte Views und Panes, die zum Rückgängigmachen zurückgehalten werden.Bewusst so entschieden:
claimed_elsewhere,index_opened_daemon_sessionund das Adopt-Reservierungsrennen.Tests
workspace/view_test.rs:reopening_a_pty_owned_by_an_undo_closed_tab_restores_that_tabsidebar_open_retires_a_pty_owner_no_tab_can_showretry_claim_takes_over_only_from_an_unreachable_owner: Ein erreichbarer Besitzer ergibtExisting, ein verwaisterClaimed.Die Nebenwirkung
deregister_sessionwird nicht geprüft. Die Testverbindung ist beim Manager nicht registriert.Verifikation
rustfmt --checkist für die geänderten Hunks sauber. Die einzige Abweichung inview.rsbesteht schon aufmain.git diff --checkundscript/check-v1-release-readiness --phase-asind sauber.&mut self-Aufruf im Match-Guard vonclaim_daemon_pty_retiring_unreachable_owner,closed_item @ (ClosedItem::Window(_) | ClosedItem::Pane { .. })instack.rs,&mut ViewContext→&AppContextindaemon_claim_owner_is_reachable.ci-batch.Bezug
Behebt den Kern von #519, schließt das Issue aber nicht vollständig.
Erfüllt:
HiddenForClosewerden Claims weiterhin nicht freigegeben, es entstehen keine doppelten Tabs.Offen:
focus_existing_adopted_daemon_sessiongibt für erreichbare Besitzer weitertruezurück, auch wenn das Fokussieren scheitert.undo_grace_expiry_releases_daemon_claim).Weitere Bezüge: Die Anzeige „Wiederherstellung abgebrochen“ desselben Vorfalls betrifft #470 und #456. Das falsche Absturz-Banner behebt #532.