Skip to content

fix(remote): kein Shell-Start-Banner bei Daemon-Verbindungsfehlern - #532

Merged
iret77 merged 1 commit into
mainfrom
fix/remote-connect-failure-banner
Oct 8, 2026
Merged

iret77 merged 1 commit into
mainfrom
fix/remote-connect-failure-banner

Conversation

@iret77

@iret77 iret77 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Verliert ein Daemon-Pane die Verbindung, bevor die Remote-Shell gebootstrappt ist, zeigte Zaplex zwei Meldungen übereinander. Auslöser war am 2026-10-08 ein beendetes Tailscale auf dem Mac: ControlMaster setup failed: ssh: connect to host … port 22: Network is unreachable.

  1. Die korrekte Remote-Meldung „Verbindung fehlgeschlagen (Verbindungsaufbau): …“ mit „Erneut versuchen“ und „Abbrechen“.
  2. Zusätzlich das rote Banner „Shell-Prozess wurde vorzeitig beendet! Beim Starten und Zaplexifizieren von shell ist etwas schiefgelaufen … Ausgabe des Zaplexify-Skripts …“ mit „Issue melden“.

Das zweite Banner ist doppelt und führt in die Irre. Es macht das Bootstrap-Skript für ein Netzwerkproblem verantwortlich und lädt dazu ein, ein Issue für einen Verbindungsausfall zu melden.

Die Kette:

  • on_connect_failed schreibt die Remote-Meldung.
  • Danach ruft finish_failed_startup model.exit(ExitReason::PtyDisconnected) auf (daemon_tty/event_loop.rs).
  • Der Handler für ModelEvent::Exit in terminal/view.rs fügt daraufhin unbedingt TerminationType::Premature ein und sendet das Telemetrieereignis ShellTerminatedPrematurely.

Änderung

  • ModelEvent::Exit überspringt das Banner für Daemon-Panes, also Panes mit gebundener remote_input_session_id, die noch nicht gebootstrappt sind. Das Telemetrieereignis entfällt ebenfalls, ein Netzwerkausfall zählt damit nicht mehr als Bootstrap-Fehler.
  • Alle Fehlerpfade des Daemon-Loops, die model.exit auslösen, setzen vorher die Phase Failed. Damit zeigt die Remote-Meldung immer eine Erklärung, mindestens die generische.
  • Unverändert:
    • klassische SSH-Panes: ohne gebundene Daemon-Session, dort zeigt der Initialisierungsblock die echte ssh-Ausgabe,
    • lokale Panes,
    • abgebrochene Wiederherstellungen,
    • das Verhalten bereits gebootstrappter Panes.

Tests

view_test.rs: Ein Daemon-Pane erhält einen Verbindungsfehler vor dem Bootstrap und danach Exit. Erwartet:

  • kein neuer Rich-Content und kein Shell-Exit-Banner,
  • die Phase bleibt Failed,
  • die Remote-Fehlermeldung bleibt erhalten.

Der bestehende Test cancelled_remote_restore_teardown_shows_no_shell_failure_banner bleibt gültig. Er setzt is_login_shell_bootstrapped = true.

Verifikation


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Scheitert die Verbindung eines Daemon-Panes, bevor die Remote-Shell
gebootstrappt ist (z. B. Tailscale aus: "Network is unreachable"),
beendet der Daemon-Pfad das Terminalmodell. Der View zeigte daraufhin
zusätzlich zur korrekten Remote-Meldung mit "Erneut versuchen" das rote
Banner "Shell-Prozess wurde vorzeitig beendet", das das
Zaplexify-Skript verantwortlich macht und auf "Issue melden" verweist.
Für Daemon-Panes vor dem Bootstrap entfällt dieses Banner samt
Telemetrieereignis; klassische SSH- und lokale Panes sind unverändert.
@iret77
iret77 merged commit 71ffd4c into main Oct 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant