Skip to content

fix(ui): Pane-Identität aus Host und Verzeichnis, Tabtitel aus aktivem Pane #461

Closed

Description

@iret77

Problem / Vertrag

Identische Hostnamen unterscheiden mehrere Sessions nicht. Der korrigierte Entwurf verwendet kurze, tatsächliche Identitäten und übernimmt die vorhandene native Titelpriorität.

Abnahme

  • Terminal-Pane zeigt kurz Host · Projekt-/Verzeichnisname, z. B. host-a · api, host-a · logs; vollständiger Host/Pfad bleibt per Tooltip/zugänglichem Namen erreichbar.
  • Verzeichnis/Projekt aus dem echten Pane-/Sessionkontext ableiten. Nicht für jede Session denselben globalen Projektwert verwenden. Fehlender CWD bekommt einen ehrlichen Host-/Session-Fallback.
  • Erst bei tatsächlich kollidierender Kurzidentität dezent disambiguieren, ohne Session-ID abzuschneiden, Identitäten umzuhängen oder rohe UUIDs zur Standardüberschrift zu machen. Numerierung allein ist keine primäre Identität.
  • Automatischer Tabtitel folgt der fokussierten Pane gemäß vorhandener display_title()-Regel. Explizit benannter Tab hat Vorrang; Entfernen des Overrides stellt Automatik wieder her.
  • Kein automatisch erfundener Projekt-/Gruppenname und kein Pane-Zähler als Titelersatz. Konto-Pane behält seinen nativen Cockpit-Titel, keine fiktive Hostzuordnung.
  • Maus-/Tastaturfokus, CWD-/Hostwechsel, Split, Schließen und Restore aktualisieren die Anzeige korrekt. Jeder Tab behält seinen eigenen Fokus, auch bei gleicher Kontoansicht in zwei Tabs.
  • Schmaler Header reserviert stabile Aktionsplätze; Identität bekommt Restbreite. Kein Hover-Reflow, keine Separator-Ketten, keine doppelte Titel-/Providerzeile.
  • Keine zweite „Pane schließen“-Aktion hinter ⋯, wenn bereits ein X dieselbe Aktion anbietet. Echte andere bestehende Headeraktionen nicht entfernen.

Einstieg / Tests

app/src/tab.rs (Tabtitel), app/src/pane_group/mod.rs (title, display_title, Custom-Title), app/src/pane_group/pane/terminal_pane.rs, app/src/pane_group/pane/view/header/, app/src/cockpit/pane.rs.

Fälle: zwei unterschiedliche CWDs auf einem Host; gleiche Basenames in unterschiedlichen Pfaden; zwei identische Kurzidentitäten; echter Hostwechsel; fehlende Metadata; Konto in zwei Tabs; explizites Override und dessen Rücknahme. Neue Darstellung darf Terminal-Titelereignisse nicht falsch als neue Session identifizieren.

Abgrenzung: Darstellung/Titelableitung hier; Fokus- und Layout-Lifecycle in #462, Hostkontext in #460.

Ausführung und Grenzen

Implementierungsagent: GPT-5.6 Sol. Teil des übergeordneten UI-Implementierungsplans #459. Keine neue globale Navigation und kein Ersatz vorhandener Session-/Pane-Funktionen. Bestehende WarpUI-Komponenten, Theme-Rollen, Lokalisierung und Action-Routing verwenden. Mockup-Verhalten ist ein Produktvertrag, kein Nachweis nativer Funktionsfähigkeit.

Vor Codeänderungen aktuellen Main-Stand und zugehörige Specs prüfen; bereits korrektes Verhalten mit Tests absichern, nicht neu bauen. Produkt-/Tech-/HTML-Spezifikation im selben PR mitziehen. Worktree + Feature-Branch, keine fremden Änderungen überschreiben. Keine Builds auf dem MacBook, kein Release und keine teure Build-/CI-Phase allein aufgrund dieses Issues. Verifikation gemäß Repo-/Buildregeln einschließlich cargo check über den freigegebenen CI-Weg; native Laufzeit-/Screenshot-Nachweise nicht durch HTML-Tests ersetzen.

Activity

  1. iret77 commented on Sep 28, 2026

    @iret77
    CollaboratorAuthor

    Statusabgleich vom 28.09.2026: status: blocked.

    Pane-/Tabtitel-Korrekturen sind über #465/#466 in #477 enthalten. Offen ist die native Titel-/Fokus-/Breitenprüfung mit kollidierenden Kurzidentitäten, CWD-Wechsel, Custom-Tabtitel und Restore.

    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.

  2. added
    status: blockedTechnisch blockiert: fehlgeschlagene CI/Abnahme oder externe Abhängigkeit
    status: in-progressIn Bearbeitung; Verifikation noch nicht abgeschlossen
    and removed
    status: blockedTechnisch blockiert: fehlgeschlagene CI/Abnahme oder externe Abhängigkeit
    status: in-progressIn Bearbeitung; Verifikation noch nicht abgeschlossen
    on Sep 28, 2026
  3. added
    status: needs-userWartet auf Entscheidung, Test oder Freigabe durch Christian
    and removed
    status: blockedTechnisch blockiert: fehlgeschlagene CI/Abnahme oder externe Abhängigkeit
    on Oct 1, 2026
  4. 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. Der Fix aus 3bae12909 ist nur statisch geprüft; der native Panes-Test muss ihn bestätigen.

  5. added theissue type on Oct 1, 2026
  6. iret77 commented on Oct 1, 2026

    @iret77
    CollaboratorAuthor

    Nativ bestätigt: Im ci-batch-Lauf 36851973446 ist test_native_workspace_panes_evidence grün. Pane- und Tabtitel folgen einem echten cd. Offen bleibt nur die Abnahme durch Christian in der App.

  7. iret77 commented on Oct 4, 2026

    @iret77
    CollaboratorAuthor

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

  8. iret77 commented on Oct 6, 2026

    @iret77
    CollaboratorAuthor

    Codebefund 9ce5af67c: zwei offene Lücken

    Lesender Abgleich, kein Build und kein Test ausgeführt. Die Grundregel Host · Verzeichnis mit Tabtitel aus der fokussierten Pane ist umgesetzt und in der Laufzeit bestätigt. Offen sind:

    1. Dateimanager-Modus ohne Host. Pane und Tab heißen dann SFTP: /pfad (fm-title-sftp, gesetzt in app/src/sftp_manager/browser.rs:1316). Das gilt auch für lokale Panes. In einem Mehrhost-Tab lassen sich zwei Dateimanager-Panes so nicht unterscheiden. Das Mockup behält host · verzeichnis. Kein Test deckt das ab.
    2. Hostwechsel in der Shell. Das Host-Label wird nur gebunden, wenn Zaplex die SSH-Pane öffnet oder wiederherstellt (app/src/workspace/view.rs:11028, 5222). Ein manuelles ssh oder exit in der Shell bindet es nicht neu, Ergebnis wäre zum Beispiel „Lokal · “. AC6 fordert das. Nativ noch zu prüfen.
  9. iret77 commented on Oct 9, 2026

    @iret77
    CollaboratorAuthor

    Erledigt: Dateimanager-Identität und Hostwechsel

    Gemergt mit #536 (Merge-Commit dd867dd0b, Commits e04256dde und b0e82de74). Beide offenen Lücken aus dem Codebefund vom 06.10. waren auf main noch vorhanden und sind behoben.

    1. Dateimanager-Modus nennt den Host. Pane und Tab zeigen Host · Verzeichnis statt SFTP: /pfad, lokal als Lokal · Verzeichnis, remote mit demselben Hostlabel wie die Terminal-Pane auf diesem Host. Die Ableitung läuft über die zentrale terminal_identity; deren Signatur ist unverändert. Die Pane-Gruppe löst Kollisionen jetzt auch für Dateimanager-Panes auf: Nur eine echte Kollision zeigt den vollen Pfad. Das lokale Home-Verzeichnis steht wie im Terminal als ~.

    2. Hostwechsel in der Shell bindet das Host-Label neu. Das von Zaplex gebundene Label gilt nur, solange die aktive Shell nachweislich die eigene Shell der Pane ist. Die Prüfung ist dieselbe wie bei der Verzeichnisübergabe des Dateimanagers. Ein manuelles ssh mit Shell-Integration zeigt den Host, den die neue Shell beim Bootstrap meldet. exit zeigt wieder Lokal bzw. das gebundene Label, auch bei gleichem Verzeichnis.

    Grenzen (in specs/GH-160/PRODUCT.md und TECH.md dokumentiert):

    • Ein interaktives ssh ohne Shell-Integration auf dem Ziel meldet weder Host noch Verzeichnis. Die Pane zeigt dann ehrlich Remote-Session · Terminal statt Lokal · <alter Ordner>. Erkannt wird das über die vorhandene Zaplexify-Erkennung (ssh samt Alias, gcloud compute ssh, eb ssh, doctl compute ssh). mosh und weitere Sprünge innerhalb einer solchen Sitzung bleiben unsichtbar.
    • Eine klassische SSH-Pane, deren eigene Verbindung nie bootstrappt, behält ihr gebundenes Label.
    • Ein Remote-Dateimanager kennt das entfernte Home-Verzeichnis nicht und zeigt dort den absoluten Pfad.
    • Ein eigenständiger Dateimanager ohne darunterliegendes Terminal hat keine persistente Session. Sein Kollisions-Suffix ist daher nur innerhalb eines Laufs stabil.

    Nicht verifiziert: Compile, Clippy und Tests sind nicht gelaufen. Sie folgen im nächsten gebündelten ci-batch auf main. Die neuen Tests pane_identity_follows_the_shell_across_a_manual_ssh_hop_and_exit, bound_host_names_only_the_panes_own_shell und file_manager_mode_keeps_the_host_and_directory_identity sind dafür in pr-check.yml eingetragen. Review: eigenes Review und Codex-Zweitreview. Ein Finding wurde behoben, eines am Code widerlegt (Details in #536).

  10. 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 working

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions