Skip to content

fix(connections): offene Sessions mit Pane-Titel und Offen-Marke, Hex-ID nur im Tooltip - #539

Merged
iret77 merged 2 commits into
mainfrom
fix/455-verbindungen-sessionzeilen
Oct 9, 2026
Merged

iret77 merged 2 commits into
mainfrom
fix/455-verbindungen-sessionzeilen

Conversation

@iret77

@iret77 iret77 commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Worum es geht

Unter Verbindungen → Host → Zaplex-Sessions stand bisher jede Session als Host · Session · <8 Hex-Zeichen>. Man sah weder, welche Session gerade in einem Tab offen ist, noch zu welchem Tab sie gehört (#509). Damit war auch #455 nicht erledigt: Das Zeilenlayout stimmte, der Inhalt war unbrauchbar.

Dieser PR ist der clientseitige Teil. Er braucht kein Daemon-Update.

Änderungen

  • In diesem Fenster offene Sessions zeigen genau den Titel ihrer Pane, also die Pane-/Tab-Identität aus fix(ui): Pane-Identität aus Host und Verzeichnis, Tabtitel aus aktivem Pane #461. Davor steht eine Akzent-Marke (•) in der festen 16-px-Einrückungsspalte. Die Titelachse bleibt dadurch gleich, und es gibt keinen Layoutsprung. Tooltip: „In diesem Fenster offen“. Das Terminal-Icon behält Symbol und Slot, sein Tooltip lautet „Tab anzeigen“. Ein Klick fokussiert wie bisher den vorhandenen Tab.
    • Quelle ist die vorhandene PTY-Claim-Registry (app_state::daemon_pty_claim), nur lesend. Die Inventarzeile wird auf exakt dieselbe Identität abgebildet, die der Daemon-Terminal beim Claim schreibt (Daemon-Host-ID, Runtime-Datei und Serverversion, PTY-ID, Generation). Provisorische Reservierungen ohne gebundenes Terminal und Terminals in anderen Fenstern gelten nicht als „hier offen“.
    • Ändert sich der Pane-Titel (z. B. nach cd), aktualisiert sich die Zeile über PaneConfigurationEvent::TitleUpdated.
  • Alle übrigen Sessions zeigen ihre Daemon-Identität und darunter einen festen Metadaten-Slot. Er enthält heute nur, was der Daemon ehrlich meldet: „zuletzt geöffnet vor …“ aus last_attached_epoch_millis. „Getrennt seit“ und Ablaufzeit gehören in denselben Slot, sobald fix(remote-server): Detached-GC zählt ab letztem Attach – lange offene Sessions sterben kurz nach Verbindungsabbruch #508/fix(remote): Nach App-Update werden Sessions des älteren Daemons nicht wieder angehängt #510 die Daten liefern.
  • Sortierung: hier offene Sessions zuerst nach Titel, danach die übrigen nach letztem Attach. Rendering und Tastaturnavigation nutzen dieselbe Ordnungsfunktion, sodass Pfeiltasten und Enter immer die sichtbare Zeile treffen.
  • Keine Hex-ID mehr im sichtbaren Titel. Liefern weder Pane noch Daemon eine Identität, steht dort „Host · Terminal“ wie bei einer Pane ohne bekanntes Verzeichnis. Die vollständige Session-ID steht im Tooltip.

Stand von #455 auf main, geprüft

Spezifikation (im selben PR)

  • docs/ui/cockpit-sidebar-connections.html: neue Regeln #spec C6 (offene Session, Marke, Metadaten-Slot, Sortierung) und #spec C7 (Fallback ohne ID). C5 und die Statuskarte „Recovery-Inventar“ sind angepasst. Die frühere Regel „Session · mit acht ID-Zeichen“ ist bewusst ersetzt, denn fix(connections): Zaplex-Sessions mit Tab-Namen und Offen-Status statt Hex-IDs anzeigen #509 ist die neuere Entscheidung.
  • docs/ui/connections-session-rows.html: Die Fixture enthält jetzt eine offene Zeile mit Marke, eine Zeile mit Metadaten-Slot und eine Fallback-Zeile ohne ID. Die eingebauten Layoutprüfungen laufen headless mit data-fixture-checks="passed" (186 Assertions).
  • specs/GH-160/PRODUCT.md §2, TECH.md (Connections), compact-sidebar-row-actions.html, Hinweis im historischen remote-session-ram.html.

Tests

Neu in panel_tests.rs und in den CI-Filter von pr-check.yml aufgenommen:

  • connections_row_uses_pane_identity_for_locally_open_session
  • connections_row_marks_locally_open_session (Presenter-Layout: Marke in der Einrückungsspalte, gemeinsame Titelachse, offene Zeile zuerst, Tastaturreihenfolge gleich der sichtbaren)
  • sessions_open_here_come_first_and_the_rest_follow_by_most_recent_attach
  • last_opened_time_is_reported_in_coarse_honest_steps
  • inventory_rows_resolve_the_exact_daemon_pty_claim_identity
  • umbenannt: unknown_cwd_uses_an_honest_short_session_id_fallback → unknown_cwd_keeps_the_session_id_out_of_the_visible_title (neue Erwartung)

Die native Layout-Fixture (integration_testing/native_workspace.rs) enthält zusätzlich eine Zeile mit „zuletzt geöffnet“.

Verifikation – ausdrücklich nicht gelaufen

  • Compile, Clippy und Tests sind nicht gelaufen. Lokale Builds sind nicht erlaubt, und auf PRs läuft nur no-new-cjk. Compile und Tests kommen mit dem nächsten gebündelten ci-batch auf main.
  • Gelaufen sind rustfmt --check auf den geänderten Dateien, git diff --check, script/check-compact-row-actions (grün nach dem Rebase auf main) und die Headless-Fixture-Prüfung.
  • Ein unabhängiges Review des Diffs hat einen Guard-Bruch gefunden: Der Tooltip-Key muss direkt an CompactRowAction::new übergeben werden. Außerdem kamen drei kleinere Punkte: Fallback bei leerem Pane-Titel, Aktualisierung bei reinen Tooltip-Änderungen und eine falsche Doku-Aussage zum Accessibility-Namen. Alle vier sind im zweiten Commit behoben. Compile, Imports, Fluent-Argumente, Testerwartungen und die Gleichheit des Claim-Schlüssels mit claim_opened_daemon_session hat das Review ohne Befund geprüft.
  • Die Claim-Abfrage selbst (echtes Terminal, echter Daemon) deckt kein Unit-Test ab. Der Test injiziert das Ergebnis der Projektion, weil die Claim-Registry ein lebendes Terminal braucht. Den Rest zeigt die Laufzeit.

Bekannte Grenzen

  • Wird ein Tab in ein anderes Fenster gezogen oder per Schließen in „Rückgängig“ gehalten, erscheint die Marke erst beim nächsten Lifecycle-Ereignis oder Refresh richtig. Dafür gibt es kein eigenes Ereignis.
  • Steht die Pane gerade im Dateimanager-Modus, zeigt die Zeile den Titel der Terminal-Pane, die den PTY hält.

Offen / Abhängigkeiten

Refs #455, #509


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

iret77 added 2 commits October 9, 2026 18:57
…r im Tooltip

Die Zeilen unter Verbindungen → Host → Zaplex-Sessions zeigten nur
„Session · <ID>“, ohne Tab-Namen und ohne Offen-Status (#509, #455).

- Eine Session, die eine Pane in diesem Fenster hält, zeigt genau den
  Titel dieser Pane und eine Akzent-Marke in der festen Einrückungsspalte.
  Quelle ist die vorhandene PTY-Claim-Registry (nur lesend); Titeländerungen
  der Pane aktualisieren die Zeile. Das Terminal-Icon zeigt dann „Tab
  anzeigen“.
- Übrige Sessions zeigen die Daemon-Identität und einen festen
  Metadaten-Slot mit „zuletzt geöffnet vor …“ (letzter Attach). Getrennt
  seit und Ablauf folgen mit #508/#510.
- Reihenfolge: hier offene zuerst nach Titel, danach nach letztem Attach;
  Darstellung und Tastaturnavigation nutzen dieselbe Ordnung.
- Ohne Identität lautet der Titel „Host · Terminal“; die Session-ID steht
  nur noch im Tooltip.
- Spezifikation (C6/C7, Fixture, PRODUCT/TECH) und CI-Testfilter
  nachgezogen.

Lokal weder kompiliert noch getestet; Compile und Tests laufen im
nächsten ci-batch.
- Tooltip-Key direkt an CompactRowAction übergeben (Guard
  check-compact-row-actions).
- Pane ohne Titel behält die Daemon-Identität, bleibt aber als offen
  markiert.
- Tooltip-Änderungen der Pane aktualisieren die Zeile ebenfalls.
- Spezifikation: Offen-Hinweis nur im Tooltip, Reihenfolge C5–C7.
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