Skip to content

refactor(cockpit): Sidebar, Verbindungen und Konten entdoppeln #160

Description

@iret77

Zielbild

Die Sidebar erhält zwei klar getrennte, aber auf demselben Zustandsmodell beruhende Aufgaben:

  1. Verbindungen verwaltet registrierte Hosts und Favoriten.
  2. Cockpit zeigt ausschließlich die aktuell beobachtbare Session-Welt: lokale Sessions immer, Remote-Hosts nur solange mindestens eine Zaplex-Verbindung zu ihnen geöffnet ist.

Die große Claude-/Codex-Ansicht macht Provider, Konto, Sessions und Aufmerksamkeit eindeutig sichtbar, ohne Informationen doppelt anzuzeigen.

Dieses Issue ist eine Folgearbeit zu #136, #141 und #142. Wo ältere Darstellungsregeln widersprechen, gelten die nachfolgenden, später bestätigten Entscheidungen.

Explizit abgelöste Annahmen aus #136

  • Registrierte, aber nicht verbundene Remote-Hosts bleiben nicht im Cockpit-Tree; sie bleiben ausschließlich in Verbindungen sichtbar.
  • Verbindungen und Cockpit sind zwei eigenständige Sidebar-Elemente mit gemeinsamen Daten, keine doppelte Hostliste und keine einzige vermischte Oberfläche.
  • Connection-/Favoriten-Konfiguration gehört nicht an Cockpit-Hostzeilen.
  • Der Tree trägt keine feste Metrikspalte und keine ausgeschriebenen Statuswörter.

Scope

1. Verbindliche UI-Spezifikation vor Implementierung

  • Die freigegebene Darstellung als selbstenthaltene HTML-Spezifikation unter docs/ui/ festhalten.
  • Regeln, Zustände, responsive Ansichten und Akzeptanzkriterien müssen maschinenlesbar und screenshot-fähig sein.
  • Keine Verweise auf private Artefakte, lokale Pfade oder Hostnamen.
  • Kein neuer vertikaler Icon-Rail und keine neue app-weite Navigation.

2. Eigenständiges Sidebar-Element „Verbindungen“

  • Eine Host-Registry bleibt die einzige Quelle für registrierte Hosts, Favoriten und Verbindungsparameter.
  • Die Standardliste zeigt Hostnamen neutral und gleichwertig.
  • Der vorhandene Verbindungs-Button kodiert den Zustand allein:
    • verbunden: grüner, intakter Stecker;
    • getrennt: gedämpfter Stecker mit Slash.
  • Kein wiederholter Text wie „lokal“, „nicht verbunden“ oder „2 offen“.
  • Keine Legende und keine zusätzliche Live-Root-Zusammenfassung.
  • Favoriten steuern das Tab-+-Menü. Dessen erste Ebene zeigt nur Stern, Hostname und Submenü-Chevron; konkrete Aktionen erscheinen erst im Submenü.
  • Änderungen an Registry/Favoriten aktualisieren Verbindungen und Tab-Menü aus demselben Modell, ohne zweite Konfiguration.

3. Live-Cockpit-Tree

Verbindliche Hierarchie:

Host → Projekt → PTY-Session → Agent

  • Lokale Agent-Sessions sind immer sichtbar.
  • Ein Remote-Host erscheint, sobald die erste Zaplex-Session zu ihm geöffnet wird.
  • Weitere offene Sessions verwenden dieselbe stabile Host-Wurzel.
  • Beim Schließen/Trennen der letzten offenen Session verschwindet die Remote-Wurzel synchron.
  • Eine generation-gebundene Aktualisierung verhindert, dass verspätete Inventarantworten eine entfernte Wurzel erneut einfügen.
  • Registry-only-/Favoriten-Hosts gelangen nicht in den Tree.
  • Der Tree enthält keine Connection-, Favorite- oder Host-Config-Aktionen.
  • Provider/Agent-Identität stammt aus dem Live-Inventar. Fehlende oder nicht unterstützte Inventar-Fähigkeit darf nicht als „kein Agent installiert“ fehlinterpretiert werden.
  • Containerzahlen sind bei aufgeklappten Knoten verborgen und nur im eingeklappten Zustand sichtbar; enthält der verborgene Teil Aufmerksamkeit, darf die Zahl amber werden.
  • Projekt- und Session-Hierarchie entsteht durch Einrückung und Chevron, nicht durch zusätzliche Labels oder Spalten.
  • Kontextprozent, Kosten und weitere Metriken bleiben in der Detailansicht.

4. Status- und Aufmerksamkeitsdarstellung

  • Agent-Zeilen im Tree zeigen Status ausschließlich durch das vorhandene Zustands-Glyph:
    • amber: wartet auf Nutzer;
    • grün: arbeitet/aktiv;
    • neutraler Ring: idle.
  • Keine sichtbaren Wörter „wartet“, „aktiv“ oder „idle“ im Tree; zugängliche Namen/Tooltips bleiben erhalten.
  • Die Header-Summe für wartende Sessions nutzt ambernes Glyph plus Anzahl statt Prosa.
  • Nur das amberne Warte-Glyph pulsiert:
    • 1,6-Sekunden-Rhythmus;
    • sichtbarer auslaufender Ring plus leichte Kernhelligkeit;
    • maximale Ausdehnung ungefähr 2× Glyph-Größe;
    • bei prefers-reduced-motion statisch.
  • Grüne, Idle- und Connection-Glyphs bleiben statisch.
  • In großen Sessiontabellen bleiben Statuspunkt und Statuswort erhalten.
  • Eine Session, die Nutzerinteraktion benötigt, erhält dort zusätzlich eine dezente amberne Hintergrundtönung über die gesamte stabile Zeile, ohne Badge oder Layoutänderung.

5. Einheitliche Claude-/Codex-Kontenansichten

  • In Sidebar-Karte und großer Ansicht gilt dieselbe Identitätshierarchie:
    • Headline: Provider Claude oder Codex;
    • Subline: Kontolabel/E-Mail plus Plan.
  • Ein identisches Kontolabel und dieselbe E-Mail werden nur einmal gezeigt.
  • Keine zusätzliche Provider-Leiste, die den Provider oberhalb desselben Identitätsblocks wiederholt.
  • Provider darf nie nur aus Farbe oder Icon erschlossen werden.
  • Account-Anzahl und UI entstehen aus erfolgreicher Account-Discovery, nicht aus vorhandenen Sessions.
  • Loading, Degraded und Error dürfen nicht als „0 Konten“ erscheinen.
  • Alias, Farbe, Reihenfolge und Hide-Override bleiben in genau einem bestehenden Override-Mechanismus; keine zweite Settings-Ablage.

6. Account- und Session-Discovery vervollständigen

  • Dokumentieren und testen, welche Standard- und env-gepinnten Konfigurationswurzeln für Claude und Codex gescannt werden.
  • Kanonisch gleiche Konfigurationswurzeln/Stabile IDs werden dedupliziert.
  • CLAUDE_CONFIG_DIR und CODEX_HOME müssen ein Konto gezielt pinnen können.
  • Unlesbare/fehlerhafte Quellen erzeugen einen ehrlichen Scan-Zustand, kein erfundenes Konto und kein scheinbar leeres Ergebnis.
  • Claude-Verlauf darf nicht ausschließlich von vorhandenen sessions/*.json-Registryzeilen abhängen:
    • substanzielle, gültige Transkripte ohne aktuelle Registryzeile bleiben in der Konto-Detailansicht auffindbar und resumierbar;
    • Legacy-Einträge ohne status sowie reale interactive-/bg-Konversationen werden korrekt klassifiziert;
    • Shell-Helfer bleiben ausgeschlossen;
    • dormante Historie gelangt nicht in den Live-Sidebar-Tree.

7. Wiederholter Regressionsaudit gegen Referenz-Repos

Vergleich gegen die aktuellen Default-Branches von claudeplex und claudeplex-desktop.

Jeder Auditlauf beginnt zwingend mit einem frischen Checkout oder fetch plus Fast-forward-only. Ein lokaler, möglicherweise veralteter Stand ist kein gültiger Benchmark. Für alle drei Repositories werden Branch, Commit-SHA und Audit-Zeitpunkt protokolliert.

Auditläufe:

  1. Baseline vor der Implementierung;
  2. Wiederholung nach Datenmodell/Discovery;
  3. Wiederholung nach UI-Integration und vor Abschlussreview.

Die Matrix umfasst mindestens:

  • Account-Erkennung und gepinnte Konfigurationswurzeln;
  • Claude-/Codex-Session-Erkennung;
  • Live-, dormant- und resumierbare Historie;
  • Status-/Attention-Semantik;
  • Usage-/Kosten-Provenienz;
  • Provider-/Account-Identität;
  • Favoriten-, Verbindungs- und Launch-Verhalten.

Jede Zeile enthält: Referenzverhalten, Zaplex-Verhalten, verbleibende Regression, bewusste Abweichung oder Fix, sowie reproduzierbaren Nachweis. Die Referenz-Repos bleiben reine Ideen-/Paritätsquellen; keine Runtime-Abhängigkeit und kein Shell-out.

Nicht-Ziele

  • Keine neue globale Symbolleiste.
  • Keine zweite Connection-Konfiguration.
  • Keine Offline-/Registry-Hosts im Live-Cockpit.
  • Keine Provider-Ebene zwischen Host und Projekt.
  • Keine Statusprosa oder Kontextmetriken im Tree.
  • Keine Runtime-Abhängigkeit von den Referenz-Repos.
  • Kein Build, CI-Lauf, Push, PR, Merge oder Release allein durch dieses Issue.

Abnahmekriterien

  • Verbindungen, Tab-Favoriten und Cockpit konsumieren gemeinsame stabile Host-IDs, ohne sichtbare Doppelung.
  • Lokal bleibt immer sichtbar; erster Remote-Open fügt genau eine Wurzel hinzu; letzter Disconnect entfernt sie dauerhaft.
  • Der Tree entspricht exakt Host → Projekt → PTY-Session → Agent.
  • Tree-Zustände sind glyph-only; der amberne Zustand pulsiert im festgelegten Radius und respektiert Reduced Motion.
  • Die große Claude-/Codex-Ansicht nennt den Provider sichtbar und zeigt keine doppelte Kontoidentität.
  • Wartende Tabellenzeilen sind dezent über die ganze Zeile markiert.
  • Registrylose, substanzielle Claude-Historie ist resumierbar, aber nicht Teil des Live-Trees.
  • Account-Scanfehler werden nicht als leere Kontenliste dargestellt.
  • Alle drei frischen Paritätsaudits liegen mit SHA-Ledger und verbleibender Regressionsmatrix vor.
  • Normale und schmale Fensterbreite bestehen Spec- und Screenshot-Abnahme.

Zwingende Regressionstests

  • connections_registry_drives_favorite_launch_menu
  • cockpit_excludes_registry_only_hosts
  • local_sessions_remain_visible_without_remote_connections
  • first_open_remote_session_adds_one_host_root
  • last_open_remote_session_removes_host_root
  • stale_inventory_cannot_readd_disconnected_host
  • tree_hierarchy_is_host_project_pty_agent
  • tree_status_is_glyph_only
  • waiting_glyph_motion_respects_reduced_motion
  • provider_is_visible_and_account_identity_is_not_duplicated
  • needs_user_session_highlights_the_full_stable_row
  • account_scan_error_is_not_rendered_as_zero_accounts
  • legacy_claude_transcript_without_registry_is_resumable
  • claude_shell_helper_is_not_a_session
  • dormant_history_never_enters_live_tree

Gates

  • HTML-UI-Spezifikation und Baseline-Audit vor Produktcode.
  • Rot-/Grün-Nachweise für Model-, Discovery- und Lifecycle-Tests.
  • Originalgrößen-Screenshots für Cockpit, Verbindungen sowie Claude-/Codex-Detailansichten.
  • Unabhängiges kritisches UI-/Semantikreview nach dem dritten Audit.
  • Keine teure Build-/CI-Phase ohne separate ausdrückliche Freigabe.

Activity

  1. iret77 commented on Aug 19, 2026

    @iret77
    CollaboratorAuthor

    Follow-ups aus dem zusammengeführten Codex- und Claude/Fable-xhigh-Review

    Die nach dem frischen Vergleich mit claudeplex und claudeplex-desktop verifizierten Restlücken sind in eigenständige, deduplizierte Arbeitspakete überführt:

    P0 – zentrale Paritätslücken

    P1 – Bedienung und Automation

    Korrektheit und Verifikation

    Alle Issues enthalten konkrete Abnahmekriterien und relevante Codepfade.

  2. iret77 commented on Aug 21, 2026

    @iret77
    CollaboratorAuthor

    Signiertes Abnahme-DMG für Main 1971e1b

    Der vollständig grüne Test-DMG-Lauf für den gemergten Main-Commit 1971e1bccc0e7f87069cf9187dbe8991555d5f02 ist abgeschlossen:

    Das Issue bleibt bis zur echten Same-SHA-Zwei-Host-Runtime-Abnahme offen; es wird keine Hardware-Evidenz fingiert.

  3. iret77 commented on Sep 9, 2026

    @iret77
    CollaboratorAuthor

    Signiertes Abnahme-DMG für Main 70fc30b

    Der vollständig grüne Test-DMG-Lauf für den gemergten Main-Commit 70fc30b09089d051c56e8d472f80421e5bbe7bc3 ist abgeschlossen:

    • PR-Fix: fix: catch macOS-only compilation regressions #370
    • Run: https://github.com/byte5ai/zaplex/actions/runs/34355443739
    • DMG-Artefakt: im Bereich „Artifacts“ des Run-Links, Name zap-test-dmg-aarch64
    • Download per CLI: gh run download 34355443739 --repo byte5ai/zaplex --name zap-test-dmg-aarch64
    • Hinweis: Der Download von Actions-Artefakten erfordert eine angemeldete GitHub-Sitzung; der direkte Weblink liefert sonst 404.
    • Developer-ID-Code-Signatur: gültig
    • Apple-Notarisierung: Accepted
    • Stapling und Ticket-Validierung: erfolgreich
    • GitHub-Artefakt-Digest: sha256:d73375c0d6dae2b23df1f62f79b123f1ed906df3e7777bcc8cd0f8bfa34a65e4
    • Größe: 192921158 Byte
    • Ablauf des Actions-Artefakts: 2026-09-16

    Das Issue bleibt bis zur echten Same-SHA-Zwei-Host-Runtime-Abnahme offen; es wird keine Hardware-Evidenz fingiert.

  4. iret77 commented on Sep 11, 2026

    @iret77
    CollaboratorAuthor

    Signiertes Same-SHA-Abnahme-DMG für main 62393d1

    Der vollständig grüne Test-DMG-Lauf für den gemergten Main-Commit 62393d17d725331f0105cf47ab44f0c76a13f339 ist abgeschlossen:

    • Run: https://github.com/byte5ai/zaplex/actions/runs/34644595672
    • Artefakt: zap-test-dmg-aarch64 (ID 10283109721)
    • Authentifizierter Download: gh run download 34644595672 --repo byte5ai/zaplex --name zap-test-dmg-aarch64
    • Hinweis: Ein direkter Actions-Artefaktlink erfordert eine angemeldete GitHub-Sitzung und liefert andernfalls 404.
    • Developer-ID-Signatur: App und DMG valid on disk, Designated Requirement erfüllt
    • Apple-Notarisierung: Accepted (Submission 8f5b112b-346e-45af-b2b8-1d32575bb6af)
    • Stapling und Ticket-Validierung: erfolgreich
    • GitHub-Artefakt-Digest: sha256:fad4612a4e85d57b1d178447ead3344080a71062ca0ac3dabab56d7f5776386a
    • DMG-Datei: 187130336 Byte, sha256:15f2145366dcbec0536c9b8d05ede8412a5159394db0dd787ba807980df5fdb9
    • Ablauf des Actions-Artefakts: 2026-09-18T21:48:41Z

    Das Issue bleibt bis zur echten Same-SHA-Runtime-Abnahme mit lokalem Claude, lokalem Codex, Remote-Host sowie den geforderten Screenshots offen; es wird keine Hardware-Evidenz fingiert.

  5. iret77 commented on Sep 20, 2026

    @iret77
    CollaboratorAuthor

    UI-Nachtrag zur abgestimmten Implementierung durch GPT-5.6 Sol

    Übergeordneter Implementierungsplan: #459. Dieses offene Issue bleibt Owner der gemeinsamen Cockpit-/Connections-/Konto-Darstellung; keine parallele Sidebar-Neuentwicklung.

    Zusätzlich verbindliche Abnahme

    • Cockpit- und Verbindungs-Sidebar verwenden dieselben Raster-, Header-, Zeilen-, Einrückungs- und Aktionsregeln. Section-Headline, Host, Projekt, Session und Metadaten sind typografisch unterscheidbar, nicht alle gleich formatiert.
    • Sidebar als zusammenhängende, gegenüber Arbeits-Panes optisch abgesetzte Fläche; dafür vorhandene Theme-Surface-/Akzentrollen nutzen. Alle Themes einschließlich hell/dunkel und Kontrastvarianten prüfen. Keine hartcodierten Farben oder von der Produktpalette unabhängigen Mockup-RGB-Werte übernehmen.
    • Akzent bedeutet Auswahl/Fokus/Handlung; keine dekorativen farbigen Pane-Rahmen. Sidebar bleibt optisch Sidebar, kein zusätzliches Arbeits-Pane.
    • Beide Usage-Balken 5 h und Woche untereinander, über die verfügbare Kartenbreite; Werte/Labels sauber ausgerichtet. Unbekannte/geschätzte Werte nicht als gemessene Null ausgeben.
    • Große Claude-/Codex-Konto-Pane: dieselbe Identitätshierarchie wie Sidebar, Provider nur einmal, Konto/Plan darunter, gestapelte Limits mit zugeordneten Reset-Angaben. Vorhandene Kosten-/Token-Provenienz und echte Sessionaktionen erhalten.
    • Konto-Klick fügt eigene Detailpane hinzu bzw. fokussiert sie im aktuellen Tab; andere Panes bleiben intakt. Gleiche Kontoansicht in verschiedenen Tabs erlaubt. „Alle Konten“ ist beschriftet, kein richtungsloser Pfeil.
    • Keine redundanten Links zum Verbindungs-Sidebar-Tab; vorhandenes horizontales Toolbelt bleibt die Navigation. Keine globalen Tabs „Tests“ oder „Dateimanager“.
    • Hover ändert Farbe, niemals Inhalte/Geometrie. Repetitive Sekundäraktionen in engen Zeilen icon-only nach CompactRowAction; Identität bekommt Restbreite.
    • Puffer-/RAM-Angaben aus der normalen Session-Navigation in explizite Verbindungsdetails verschieben; tatsächlich gemessenen Ausgabepuffer korrekt benennen, nicht „Host-RAM“. Diagnosefähigkeit erhalten. Das löst die ältere pauschale Sichtbarkeit der Ringmetriken ab, nicht deren Datenerfassung.
    • Große Cockpit-Panes, minimale Sidebarbreite, lange Identitäten, fokussierte/ungefokussierte Zustände und mehrere Themes als native Screenshots gemeinsam abnehmen.

    Weitere ausdrücklich abgelöste Altregel: Favoriten-Hostname verbindet direkt; ⋯ öffnet ein seitliches Flyout bei sichtbarem Parent. Umsetzung ist #463, nicht eine zweite Arbeit in #160. #455 besitzt den konkreten schmalen Sessionzeilen-Fix.

    Die zugehörigen PRODUCT-/TECH-/HTML-Dokumente im Implementierungs-PR synchronisieren. Die übrigen Live-Tree-, Discovery-, Identity-, Capability- und Sicherheitsverträge bleiben bestehen. Keine privaten Accountdaten oder ursprünglichen Screenshots veröffentlichen.

  6. iret77 commented on Sep 23, 2026

    @iret77
    CollaboratorAuthor

    Versionierte Referenz für den Abgleich nach PR #465

    Der letzte interaktive Entwurf ist jetzt anonymisiert als Mockup und Vergleichsanleitung mit Referenzbildern veröffentlicht (Commit bea818ce9, Branch codex/ui-reference, noch nicht in main). Die Spezifikation und PRODUCT/TECH sind darauf synchronisiert; die alten statischen Gegenentwürfe sind abgelöst.

    Wichtig: Der zusätzliche „Shell-Sessions in Verbindungen öffnen“-Link ist im integrierten app/src/cockpit/panel.rs noch vorhanden, widerspricht aber der Referenz. Diese Dokumentationsänderung korrigiert die Vorgabe, nicht den Produktcode. Abweichung und native Restabnahme bleiben in #459/#160 offen.

    Browser- und statische Referenzprüfungen bestanden; das ist keine native Produktabnahme. Kein neuer Build, CI-Lauf, Merge oder Release.

  7. iret77 commented on Sep 28, 2026

    @iret77
    CollaboratorAuthor

    Statusabgleich vom 28.09.2026: status: blocked.

    Die Cockpit-/Connections-/Konto-Implementierung und spätere UI-Korrekturen sind über #465 und die Folge-PRs im gemeinsamen #477 gebündelt. Offen bleiben der erfolgreiche Paritätsnachweis #169 und die native Same-SHA-Abnahme für Sidebar/Konten, Themes/Breiten und echte Hosts.

    Aktueller technischer Blocker: Der gemeinsame Abnahme-PR #477 ist Draft und enthält laut PR-Beschreibung die Änderungen dieses Issues. Sein aktueller HEAD 5c9c445ba961671583c09981450a7fb79b9c9cfd hat im vollständigen Prüflauf 36354992553 den Status failure: Die Schritte „Rust workspace coverage tests“ und „Export coverage and execution evidence“ sind fehlgeschlagen; die separate Nicht-Rust-Suite ist erfolgreich. Eine grüne vollständige Baseline ist damit weiterhin nicht belegt.

    Der letzte PR-Prüflauf 36353993130 auf dem Vorgänger 710faa3e8 scheiterte an Linux-Clippy und „Native subscription Agent layout evidence“ auf macOS. Spätere Quellkorrekturen sind dokumentiert, ein grüner Ersatz für diese Pflichtprüfungen ist beim Statusabgleich nicht vorhanden. Das bedeutet nicht, dass jedes einzelne Issue den gemeinsamen Fehler verursacht.

    Nächster Schritt: Die fehlgeschlagenen gemeinsamen Prüfungen korrigieren und auf dem aktuellen Stand erfolgreich nachweisen; anschließend die oben genannte individuelle Restabnahme abschließen. Solange technische Gates fehlen, ist dies weder ready noch ausschließlich needs-user. Dieser Eintrag aktualisiert den Status; er startet keinen Build und schließt das Issue nicht.

  8. added
    status: blockedTechnisch blockiert: fehlgeschlagene CI/Abnahme oder externe Abhängigkeit
    status: in-progressIn Bearbeitung; Verifikation noch nicht abgeschlossen
    status: needs-userWartet auf Entscheidung, Test oder Freigabe durch Christian
    and removed
    status: blockedTechnisch blockiert: fehlgeschlagene CI/Abnahme oder externe Abhängigkeit
    status: in-progressIn Bearbeitung; Verifikation noch nicht abgeschlossen
    on Sep 28, 2026
  9. iret77 commented on Oct 1, 2026

    @iret77
    CollaboratorAuthor

    Mit #477 auf main gemergt (Merge-Commit c0af4484e). Wartet auf Christians Freigabe des ersten Batch-Laufs (release-approve "ci-batch.yml --ref main") und danach auf die native bzw. Laufzeit-Abnahme.

  10. added theissue type on Oct 1, 2026
  11. iret77 commented on Oct 4, 2026

    @iret77
    CollaboratorAuthor

    Enthalten im Test-DMG aus Lauf 37208729131 (9ce5af67c), wartet auf Christians Abnahme.

  12. iret77 commented on Oct 6, 2026

    @iret77
    CollaboratorAuthor

    Owner-Entscheidung nachgetragen: KI-Sessions und KI-Konten werden zwei eigene Sidebar-Ansichten im vorhandenen Toolbelt (#504). Das löst die 3/5-Höhenregel aus d2183ba1b ab. Die Lesbarkeit des Baums ist #505. Code-Abgleich gegen die Referenz siehe #459.

  13. iret77 commented on Oct 9, 2026

    @iret77
    CollaboratorAuthor

    Abnahmematrix auf main (Stand 09.10.2026)

    Basis: main 0ba54c049. Lücken-PR: #537. Geprüft wurde Code und Test, keine Laufzeit. Legende: erfüllt · Lücke → #537 (im PR behoben) · → #X (gehört zu einem anderen offenen Issue).

    A. Abnahmekriterien aus dem Issue

    Kriterium Status Nachweis
    Verbindungen, Tab-Favoriten und Cockpit nutzen gemeinsame stabile Host-IDs erfüllt connections_registry_drives_favorite_launch_menu, live_status_enriches_registered_host_without_duplicate, same_display_name_hosts_remain_distinct_by_stable_id
    Lokal immer sichtbar, erster Remote-Open eine Wurzel, letzter Disconnect entfernt sie erfüllt im Code; dass der Remote-Baum zur Laufzeit leer bleibt → #507 Tests 3–6 unten, dazu connected_host_is_visible_before_any_inventory_response
    Baum Host → Projekt → PTY-Session → Agent erfüllt (Darstellung B+ über #505); Test geschärft → #537 tree_hierarchy_is_host_project_pty_agent
    Status nur als Glyph, Puls max. 2×, Reduced Motion statisch erfüllt; Marke ◆ ohne Tooltip war eine Lücke → #537 tree_status_is_glyph_only, waiting_pulse_is_fixed_and_capped_at_twice_the_core, waiting_glyph_motion_respects_reduced_motion
    Große Claude-/Codex-Ansicht nennt Provider, keine doppelte Kontoidentität erfüllt provider_is_visible_and_account_identity_is_not_duplicated; account_identity speist Sidebar-Karte und große Pane
    Wartende Tabellenzeilen dezent über die ganze Zeile markiert erfüllt needs_user_session_highlights_the_full_stable_row; Tönung über with_row_background_fn in pane.rs
    Registrylose Claude-Historie fortsetzbar, aber nicht im Live-Baum erfüllt; Beleg auf Baumebene ergänzt → #537 legacy_claude_transcript_without_registry_is_resumable, only_a_dormant_session_can_be_resumed, neu dormant_account_history_never_enters_local_tree
    Scanfehler nicht als leere Kontenliste erfüllt account_scan_error_is_not_rendered_as_zero_accounts; die Funktion steuert die Kontenansicht (accounts_panel.rs)
    Paritätsaudits mit SHA-Ledger erfüllt REFERENCE_AUDIT.md Stage 1–8, neu Stage 9 → #537
    Normale und schmale Breite bestehen Spec- und Screenshot-Prüfung HTML-Screenshot-Vertrag (normal, schmal, Reduced Motion) zuletzt grün im ci-batch 37208729131 auf 9ce5af67c; native Abnahme entfällt nach neuer Vorgabe specs/parity/cockpit-screenshots.spec.ts

    B. Zusatzabnahme UI-Nachtrag vom 20.09.

    Kriterium Status Nachweis
    Cockpit und Verbindungen mit gleichen Raster-, Header-, Zeilen- und Aktionsregeln, typografische Stufen Cockpit erfüllt (Stufen aus #505); Verbindungen ohne Sektionskopf und Karte → #455 (in Arbeit) Befund aus #459 vom 06.10.
    Sidebar als abgesetzte Fläche, nur Theme-Rollen, alle Themes im Code erfüllt; visuell nicht verifiziert #spec A6, Farben nur über appearance.theme()
    Akzent nur für Auswahl, Fokus, Handlung erfüllt stabile Fokus-Hinterlegung #spec B7, keine Rahmen
    5 h und Woche untereinander, Schätzung nie als gemessene Null erfüllt Kontokarten in accounts_panel.rs, Markierung ~
    Große Konto-Pane: gestapelte Limits mit zugeordneten Resets, Provenienz erhalten Lücke → #537 (gemeinsame Reset-Zeile, Opus/Sonnet fehlten); Kostenlegende war vorhanden #spec I2, Legende cockpit-pane-provenance-legend
    Konto-Klick fügt Pane hinzu oder fokussiert sie, „Alle Konten“ beschriftet erfüllt open_cockpit_pane_for (dedupliziert pro Konto im Tab), Kopf „Alle Konten · heute …“
    Keine redundanten Links, keine globalen Tabs erfüllt Link entfernt in d2183ba1b, siehe D
    Hover nur Farbe, Sekundäraktionen icon-only erfüllt; der Guard dafür war auf main rot → #537 Task-Peek im Baum entfernt (#529), check-compact-row-actions
    Puffer/RAM nur in Verbindungsdetails Cockpit zeigt keine Metriken; Verbindungen → #455/#509 (in Arbeit) PRODUCT §2
    Native Screenshots entfällt nach neuer Vorgabe —

    Abgelöst: 3/5-Höhenregel durch #504 (nur noch als „abgelöst“ in PRODUCT §42 und TECH §5 erwähnt). Favoriten-Direktverbindung und Flyout → #463.

    C. Die 15 Pflicht-Regressionstests

    Test Ort auf main Prüft das Verhalten?
    connections_registry_drives_favorite_launch_menu app/src/workspace/view_test.rs:1461 ja: echte SSH-Registry, Umbenennung, Favoriten-Toggle, Menü inkl. „Weitere Hosts“ und Lesefehler
    cockpit_excludes_registry_only_hosts crates/zaplex_cockpit/src/fleet_tests.rs:503 ja
    local_sessions_remain_visible_without_remote_connections fleet_tests.rs:207 teilweise: vergleicht zwei Fold-Wege; leere lokale Wurzel deckt der Test darüber ab
    first_open_remote_session_adds_one_host_root fleet_tests.rs:229 ja auf Fold-Ebene; Modellebene über connected_host_is_visible_before_any_inventory_response
    last_open_remote_session_removes_host_root app/src/cockpit/model_tests.rs:198 ja, ruft die Abgleichsfunktion direkt auf
    stale_inventory_cannot_readd_disconnected_host model_tests.rs:27 war teilweise tautologisch (feste Generationen, Sperre im Test nachgebaut) → #537: über RefreshSingleFlight und Ereignis-Einordnung, plus neuer Test der Zuordnung
    tree_hierarchy_is_host_project_pty_agent crates/zaplex_cockpit/src/conductor_tests.rs:448 prüfte nur PTY → Agent → #537: alle vier Ebenen
    tree_status_is_glyph_only app/src/cockpit/panel_tests.rs:167 ja; dieselbe Funktion rendert jedes Baum-Glyph
    waiting_glyph_motion_respects_reduced_motion panel_tests.rs:227 ja; Einstellung kommt aus AccessibilitySettings::reduce_motion
    provider_is_visible_and_account_identity_is_not_duplicated app/src/cockpit/mod_test.rs:198 ja
    needs_user_session_highlights_the_full_stable_row app/src/cockpit/pane_tests.rs:99 ja (Prädikat und stabiler Zeilenschlüssel)
    account_scan_error_is_not_rendered_as_zero_accounts panel_tests.rs:251 ja
    legacy_claude_transcript_without_registry_is_resumable crates/zaplex_cockpit/src/sessions_tests.rs:307 ja, fast deckungsgleich mit dem Test in Zeile 281; das Fortsetzen selbst prüft only_a_dormant_session_can_be_resumed
    claude_shell_helper_is_not_a_session sessions_tests.rs:245 ja
    dormant_history_never_enters_live_tree sessions_tests.rs:790 prüfte nur die Trennung im Scan → #537: zusätzlich auf der Baumquelle

    Alle 15 sind Belege der Paritätsmatrix und laufen im ci-batch.

    D. Weitere Prüfpunkte

    E. Paritätsaudit (Stage 9)

    Repository Branch SHA
    zaplex main 0ba54c049eff50a904a3b67842abe6b85fa06d10
    claudeplex main 8c2041ff68d97463aed7aeb01da0f16b708b8e22
    claudeplex-desktop main 8c0aad0a944a8f5b6a26636d0827db57ca22d0f3

    Synchronisiert am 2026-10-09T16:21:43Z per fetch und Fast-forward; beide Referenzen unverändert seit Stage 8. cockpit-parity-audit validate (107 Tests, 9 Szenarien) und self-test (28 Fälle) bestanden. Ergebnis: Sidebar-Trennung entspricht jetzt der Referenz (Desktop trennt Konten- und Agent-Sidebar); eine Regression gefunden und behoben (Opus-/Sonnet-Teillimits fehlten in der Konto-Pane); Aufmerksamkeitslogik und Ausblenden externer Agents sind bewusste Abweichungen nach Spec. Details in REFERENCE_AUDIT.md Stage 9 (#537).

    F. Offene Punkte in anderen Issues

    #507 (Remote-Inventur), #455 und #509 (Verbindungen), #461 (Pane- und Dateimanager-Titel), #464 (Transferziele), #463 (Favoriten-Flyout), #515 (unbepreiste Modelle), #516 (englische Texte).

    Nicht verifiziert: Compile, Clippy, Rust-Tests, Mutationen und Screenshots für den Stand mit #537. Sie laufen erst im nächsten gebündelten ci-batch.

  14. added 2 commits that reference this issue on Oct 9, 2026
  15. iret77 commented on Oct 9, 2026

    @iret77
    CollaboratorAuthor

    Abschluss

    Erledigt: Alle Abnahmekriterien, die Zusatzabnahme vom 20.09. und die 15 Pflichttests sind im Code umgesetzt; die Matrix steht im Kommentar oben. Die Restlücken sind mit #537 geschlossen (Merge ac693dbd1):

    Restpunkte in eigenen Issues: #507, #455, #509, #461, #463, #464, #515, #516.

    Nicht verifiziert: Compile, Clippy, Rust-Tests, Mutationen 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.

    Worauf du in der App achten kannst:

    • In der Seitenleiste gibt es zwei Einträge: „KI-Sessions“ (der Baum) und „KI-Konten“ (die Kontokarten).
    • Wartet ein Agent, während du „KI-Konten“ offen hast, trägt der Eintrag „KI-Sessions“ eine orange Marke.
    • Fährst du im Baum über das kleine ◆ hinter einem verwalteten Agent, erklärt ein Hinweis, was es bedeutet.
    • In der großen Kontoansicht steht unter dem 5-h-Balken und unter dem Wochenbalken jeweils, wann er zurückgesetzt wird.
    • Meldet ein Claude-Konto Opus- und Sonnet-Limits, erscheinen sie dort als weitere Balken.

    Fällt dir etwas auf, öffne das Issue einfach wieder.

  16. removed
    status: needs-userWartet auf Entscheidung, Test oder Freigabe durch Christian
    on Oct 9, 2026
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 workingenhancementNew feature or request

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions