Skip to content

fix(cockpit): Session-Baum übersichtlich machen – weniger Ebenen, keine doppelten Labels #505

Closed

Description

@iret77

Problem — P2

Der Live-Baum im Cockpit („KI-Sessions“) ist nach dem Owner-Feedback zum ersten Build mit der überarbeiteten UI (nach #465) „extrem unübersichtlich“. Punkt 1a:

„Die Sessionliste ist extrem unübersichtlich. Das bezieht sich nicht nur auf den dargestellten Text, sondern auch auf die visuelle Gestaltung.“

Zu diesem Feedback wurde nie ein Issue angelegt. #455 betrifft nur die Sessionzeilen unter Verbindungen, nicht den Cockpit-Baum.

Befund

Aus der Analyse des Feedbacks und dem aktuellen Stand:

  1. Zu viel technische Hierarchie. Host → Projekt → PTY-Session → Agent (specs/GH-160/PRODUCT.md:72) erzeugt bis zu vier Einrückungsebenen, auch wenn eine Ebene keine Information trägt.
  2. Wiederholte Namen, abgeschnittene Unterschiede. Ähnliche Session-Namen mit gleichem Präfix wiederholen sich, und der unterscheidende Teil wird am rechten Rand abgeschnitten.
  3. Doppelte Labels im Normalfall. Reproduzierbar mit einer lokalen Codex-Session in einem Verzeichnis ohne Git-Branch: Projekt- und Sessionzeile tragen denselben Namen direkt untereinander (Host › X › X › Codex).
    • Codex-Rollouts haben keinen Session-Namen (crates/zaplex_cockpit/src/codex_sessions.rs:1103).
    • Lokale Sessions haben nie PTY-Metadaten. Jede bekommt deshalb einen Fallback-Container (crates/zaplex_cockpit/src/conductor.rs:337-358).
    • session_identity_label fällt dann über Name, Branch und Worktree auf project_directory_label zurück (app/src/cockpit/panel.rs:410-434). Das liefert genau den Projektnamen, wenn Projekt und Verzeichnis gleich heißen.
    • Ein Test schreibt dieses Verhalten fest (app/src/cockpit/panel_tests.rs:271-278).
  4. Keine visuelle Unterscheidung der Ebenen. Ähnliche Schriftgrößen und Grautöne lassen Host, Projekt, Session und Zusatzinformationen ineinanderlaufen. Das widerspricht dem bestehenden Nachtrag in refactor(cockpit): Sidebar, Verbindungen und Konten entdoppeln #160: „Section-Headline, Host, Projekt, Session und Metadaten sind typografisch unterscheidbar, nicht alle gleich formatiert.“

Entscheidung (06.10.2026): Variante „B+“

Der Owner hat am Mockup aus vier Varianten B+ gewählt. Die Vergleichswerte beziehen sich auf dieselbe Beispiel-Flotte mit 8 Sessions und 9 Agenten: heute 24 Zeilen, B+ 15.

Struktur

  1. Agent in der Sessionzeile. Eine PTY-Session ist eine Zeile:
    • Statusglyph, Sessiontitel, darunter Provider-Icon, Provider und Modell, getrennt nur durch Abstand.
    • Eigene Agent-Zeilen gibt es nur, wenn eine PTY mehrere Agenten hat.
  2. Projekt und Session verschmelzen, wenn ein Projekt genau eine PTY-Session hat, mit oder ohne eigenen Titel (Entscheidung vom 08.10.2026). Der Projektname führt und behält Vorrang. Der eigene Titel der Session, etwa der Branch, folgt gedimmt mit Abstand und weicht bei Platzmangel zuerst. Ein Titel, der nur den Projektnamen wiederholt, entfällt. Zwei direkt untereinanderstehende gleiche Labels gibt es nicht mehr. In einem Projekt mit mehreren Sessions zeigt eine Session ohne eigenen Titel ihren Agenten einzeilig als Überschrift.
  3. Gemeinsamer Präfix: Teilt ein Titel mit mindestens einem Geschwister einen Namensanfang, wird dieser gekürzt und gedimmt dargestellt (vault-curator-…), der unterscheidende Rest hell. Der volle Name steht im Tooltip und in den Details.
    3a. Lange Titel kürzen in der Mitte (Entscheidung vom 08.10.2026): Ein langer Titel behält sein kurzes letztes Segment und kürzt davor (feat/checkout-re…-step-2), sonst am Ende. Kann der sichtbare Titel kürzer sein, steht der volle im Tooltip.
    3b. Keine Trennzeichen (Entscheidung vom 08.10.2026): Titelteile, Provider und Modell trennen Abstand und Tonwert, keine Mittelpunkte.
  4. Das Datenmodell Host → Projekt → PTY-Session → Agent (#spec T1) bleibt unverändert. Die Regeln betreffen nur die Darstellung.

Visuelle Regeln

  1. Feste Glyph-Spalte: Jede Zeile reserviert die Glyph-Spalte, auch ohne Glyph. Titel einer Ebene beginnen auf derselben Achse. Die zweite Zeile beginnt auf der Achse des Titels (#spec C5).
  2. Provider-Icon führt die Agentangabe, gedämpft (style.rs::provider_icon). Der Providername bleibt als Text sichtbar.
  3. Ruhende Sessions sind leiser: Der Titel einer Session im Leerlauf nutzt die gedämpfte Textrolle, laufende und wartende Sessions die primäre. Amber bleibt ausschließlich „wartet auf dich“.
  4. Typografische Stufen aus Theme-Rollen, ohne hartkodierte Farben:
    • Host: primär, halbfett
    • Projekt: sekundär, kleiner
    • Session: primär
    • Agentangabe: gedämpft, kleiner
  5. Fokussierte Session: Die Session des aktiven Panes trägt eine dauerhafte Akzent-Hinterlegung über die ganze Zeile (CONTROL_RADIUS 4).
  6. Abstände statt Linien: Vor Host- und Projektgruppen steht zusätzlicher Abstand. Es gibt keine Trennlinien oder Rahmen im Baum.
  7. Zähler stehen nur an zugeklappten Containern (#spec T3), auch bei „N Agenten“.

Abgelöste Regel: „Jede Sessionzeile ist genau eine Zeile“ (Cockpit-Redesign v2). Sessionzeilen werden zweizeilig, Titel oben, Agent und Modell darunter. Bei der üblichen Sidebarbreite würde der Titel einzeilig sonst abgeschnitten.

Referenz: Das private Mockup-Artefakt „Zaplex Session-Baum – Varianten“ (Board „B+ – visuell verfeinert“) ist die Entscheidungsgrundlage. Im Implementierungs-PR wird es anonymisiert nach docs/ui/ übernommen. Mit ihm werden specs/GH-160/PRODUCT.md (Punkt 4), TECH.md und docs/ui/cockpit-sidebar-connections.html#spec nachgezogen.

Nicht-Ziele

Erwartung / Abnahme

  • Die Regeln 1–11 sind umgesetzt. Spec, TECH und HTML-Spec sind im selben PR nachgezogen, mit anonymisiertem Mockup unter docs/ui/.
  • Keine zwei direkt untereinanderstehenden Zeilen mit identischem Label.
  • Bei mehreren ähnlich benannten Sessions ist der unterscheidende Teil bei üblicher und minimaler Sidebarbreite sichtbar.
  • Host, Projekt, Session und Agent-Metadaten sind typografisch unterscheidbar, in hell und dunkel.
  • Eine reale Flotte mit mehreren Hosts, Projekten und parallelen Sessions ist als native Aufnahme abgenommen.

Regressionstests

  • tree_never_repeats_parent_label_in_child_row
  • similar_session_names_show_distinguishing_suffix
  • single_untitled_session_merges_into_project_row
  • multiple_agents_in_one_pty_render_child_rows
  • tree_rows_reserve_glyph_slot_for_text_axis
  • idle_session_title_uses_muted_role
  • focused_session_row_has_stable_highlight
  • expanded_container_shows_no_count

Bezug: #504 (Trennung Sessions/Konten), #160, #459, #455. Zeilenangaben beziehen sich auf 9ce5af67c. Kein Build und kein Test ausgeführt.

Activity

  1. added
    bugSomething isn't working
    status: needs-userWartet auf Entscheidung, Test oder Freigabe durch Christian
    and removed
    status: needs-userWartet auf Entscheidung, Test oder Freigabe durch Christian
    on Oct 6, 2026
  2. iret77 commented on Oct 9, 2026

    @iret77
    CollaboratorAuthor

    Abschluss

    Erledigt: Darstellung B+ umgesetzt mit #529 (Merge b813a4759), einschließlich der Entscheidungen vom 08.10. (zusammengelegte Projektzeile, Mittelkürzung, keine Trennpunkte). Die Abnahmematrix in #160 bestätigt die Umsetzung. Ergänzt in #537 (Merge ac693dbd1): Die Marke ◆ verwalteter Agents hat jetzt einen lokalisierten Tooltip, und der Hierarchie-Test prüft alle vier Ebenen. #537 behebt außerdem den statischen Guard, den der Tooltip am Hosttitel aus #529 gebrochen hatte.

    Regressionstests:

    • tree_never_repeats_parent_label_in_child_row, similar_session_names_show_distinguishing_suffix, single_untitled_session_merges_into_project_row, multiple_agents_in_one_pty_render_child_rows, idle_session_title_uses_muted_role, focused_session_row_has_stable_highlight: vorhanden.
    • expanded_container_shows_no_count: vorhanden als expanded_containers_hide_counts (panel_tests.rs).
    • tree_rows_reserve_glyph_slot_for_text_axis: nicht als Test geschrieben, weil es reine Layoutgeometrie ist. Jede Zeilenart setzt empty_slot() oder chevron_slot() mit GLYPH_COL_WIDTH vor den Titel.

    Nicht verifiziert: Compile, Clippy, Tests und Screenshots laufen erst im nächsten gebündelten ci-batch. Der letzte Lauf auf b813a4759 war aus den zwei in #537 behobenen Gründen rot. Typografie in hell und dunkel ist nicht visuell geprüft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions