Skip to content

fix(file-manager): Einzeilige aktive F-Leiste und eindeutige Mehrhost-Transferziele #464

Description

@iret77

Vertrag

Dateimanager bleibt ein reversibler Modus jeder Terminal-Pane. Zwei Dateimanager-Panes ergeben den MC-Workflow; die Funktion ist nicht auf genau zwei Panes oder einen Host begrenzt.

Abnahme

  • Jede Dateimanager-Pane zeigt ihre kompakte Funktionsleiste in einer Zeile. F3/F4/F5/F6 samt Aktion sind in beiden Pane-Leisten sichtbar; nur die fokussierte Pane zeigt aktivierte Aktionen.
  • Nicht fokussierte Panes zeigen dieselben F-Tasten disabled, nicht eine andere Struktur ohne Tastennamen. Fokus in Terminal/Konto/Overlay deaktiviert Dateiaktionen anderer Panes und verhindert globale Fehl-Auslösung.
  • Lange Übersetzungen und minimale unterstützte Pane-Breite ohne mehrzeilige, überlappende Aktionsblöcke testen; vorhandene weitere FM-Kommandos/Shortcuts nicht entfernen. Keine neue konkurrierende F-Tasten-Konvention.
  • Wechsel Terminal ↔ Dateimanager erhält Session, Host, CWD, Eingabeentwurf und Prozess. F10 und das Mode-Schließen kehren zum Terminal zurück statt die Session zu beenden.
  • F5/F6 zeigen Quelle und eindeutig ausgewähltes Ziel. Ein einziges gültiges sichtbares Gegenstück darf Standardziel sein; bei Mehrdeutigkeit explizite Auswahl. Weitere Dateimanager-Panes, auch in anderen Tabs, bleiben auswählbar.
  • Zielidentität umfasst Host und stabile Pane-/Sessionreferenz plus Pfad; zwei Hosts mit demselben Pfad sind nicht dasselbe Verzeichnis. Keine fremde Hostroute aus dem Tabtitel/Tab-Host ableiten.
  • Quelle/Ziel und deren Generation/Modus vor Ausführung erneut prüfen. Ziel geschlossen, umgezogen, anderer CWD, Moduswechsel oder Transportabbruch während des Pickers darf keinen Transfer in die falsche Pane/auf falschen Host erzeugen.
  • Bestehende Konflikt-, Symlink-, Pfad-, Streaming-, Abbruch- und Überschreibschutzregeln bleiben erhalten; keine realen Dateien als Testnebenwirkung riskieren.
  • ..-Fokusregel wird in Dateimanager: Nach '..' vorheriges Verzeichnis auswählen #458 umgesetzt und hier im Gesamtflow mitgeprüft, nicht doppelt implementiert.

Einstieg / Prüfmatrix

app/src/sftp_manager/browser.rs (render_responsive_function_bar, Copy/Move, Zielpicker), keynav.rs, fm_registry.rs, file_list.rs, transfer_queue.rs, Pane-Mode-Anbindung in app/src/workspace/view.rs.

Fälle: lokal↔lokal, lokal↔remote, remote A↔remote B; gleiche Pfade auf zwei Hosts; N=2/N=3; Ziel in anderem Tab; kein gültiges Ziel; stale Ziel während offenem Picker; Fokuswechsel mit F-Taste; Mode-X/F10 und spätere Rückkehr. HTML-Fixture-Tests sind kein Beweis nativer Transfers.

Abgrenzung: Host-/Launch-Auflösung in #460, Geometrie/Fokus-Lifecycle in #462, .. in #458. Die native Transferidentität kann bereits korrekt sein: bestehende Schutzlogik bewahren und fehlende Regressionstests ergänzen statt pauschal umschreiben.

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.

    Dateimanager-/Transferkorrekturen sind über #465/#466 in #477 enthalten. Offen sind die native einzeilige F-Leiste/Fokusprüfung sowie echte lokale/Remote-/Mehrhost-Transfers mit eindeutiger Zielidentität und Schutz vor veralteten Zielen.

    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. iret77 commented on Oct 1, 2026

    @iret77
    CollaboratorAuthor

    Mit #477 auf main gemergt (Merge-Commit c0af4484e). Weiter blockiert: Die native F-Leisten-Abnahme war im letzten Lauf rot (Legende im Kompaktmodus nur 16 px breit, Zellen außerhalb). Die Ursache ist ungeklärt; 74fc6fad4 erweitert die Fehlermeldung um Fenstergröße und Legendenmodus. Der erste Batch-Lauf auf main liefert die Diagnose.

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

    @iret77
    CollaboratorAuthor

    Ursache gefunden und mit #481 auf main (a84d8d730): Die Breadcrumb hatte keine Breitengrenze. Ein langer Pfad machte das linke Dateimanager-Pane breiter als seinen Anteil, das rechte bekam keine Breite (Lauf 36851973446: Fenster 760 px, rechtes Pane bei x=796–1345, F-Leiste 16 px). Weiter blockiert, bis der nächste ci-batch-Lauf die native F-Leisten-Abnahme bestätigt; offen ist, ob bei rund 250 px Panebreite alle acht Tasten ohne Überlappung passen.

  6. iret77 commented on Oct 1, 2026

    @iret77
    CollaboratorAuthor

    Nativ bestätigt: Im ci-batch-Lauf 36934129461 ist test_native_workspace_file_managers_evidence grün, auch bei 760 px Fensterbreite. Die F-Leiste bleibt einzeilig im eigenen Pane. Offen bleibt die Abnahme durch Christian in der App.

  7. 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
  8. iret77 commented on Oct 4, 2026

    @iret77
    CollaboratorAuthor

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

  9. iret77 commented on Oct 6, 2026

    @iret77
    CollaboratorAuthor

    Codebefund 9ce5af67c: Ziel-Anzeige weicht ab

    Lesender Abgleich, kein Build und kein Test ausgeführt. Einzeilige F-Leiste, Aktivzustand nur in der fokussierten Pane, Routing und Revalidierung sind im Code umgesetzt. Offen sind:

    1. Ziel-Labels zeigen die Registry-ID statt des Hostnamens. fm_label() baut <node_id>:<pfad> (app/src/sftp_manager/browser.rs:2281-2288). Picker und Toasts zeigen damit eine interne ID, und zwei Panes mit gleichem Host und Pfad sehen identisch aus. Das Routing selbst ist korrekt (fm_registry.rs:47-70). AC6 ist damit nur in der Anzeige verletzt.
    2. Ziel vor der Ausführung nicht sichtbar. Ein Standardziel wird bei F5/F6 sofort ausgeführt (browser.rs:2447-2452). Die dauerhafte Fußzeile „Ziel: …“ aus dem Mockup fehlt, das Ziel erscheint erst danach im Toast (AC5).
    3. Unter 280 px gibt es keine weitere Rückfallstufe der F-Leiste (browser.rs:156). Das Verhalten bei etwa 250 px ist ungeprüft.
  10. iret77 commented on Oct 9, 2026

    @iret77
    CollaboratorAuthor

    Erledigt mit #538, gemergt als ebfd3d525. Rebased auf main nach #536, #537 und #539.

    Behoben

    Die drei offenen Punkte aus dem Codebefund vom 06.10.:

    1. Ziel-Labels nennen den Host statt der Registry-ID. Picker, Fußzeile und Toasts zeigen Host · Verzeichnis mit demselben Host-Label wie der Pane-Kopf (seit fix(ui): Pane-Identität im Dateimanager-Modus und bei Hostwechsel #536): SSH-Host, ersatzweise der Anzeigename, lokal mit ~.
      • Tragen zwei verschiedene Hosts dasselbe Label, wird zusätzlich die Verbindung (user@host[:port], mit dem tatsächlich verwendeten Login-Benutzer) angezeigt.
      • Zwei Panes im selben Verzeichnis unterscheidet die Pane-Referenz.
      • Die Identität wird bei jedem erfolgreichen Connect aus genau dieser Verbindung erneuert. Das Routing ist unverändert.
    2. Das Ziel ist vor der Ausführung sichtbar. Eine dauerhafte Fußzeile „Ziel: Host · Verzeichnis“ bzw. „Ziel wählen“ steht über der F-Leiste. Ein Klick öffnet die Zielauswahl.
      • Die Auswahl zeigt den eigenen Tab zuerst, markiert das aktuelle Ziel und nennt bei F5/F6 die Quelle.
      • Ein gewähltes Ziel folgt seiner Pane. Ist diese Pane geschlossen oder kein Dateimanager mehr, fragen Fußzeile und F5/F6 neu und fallen nicht auf eine andere Pane zurück (#spec „Transfer“).
    3. F-Leiste unter 280 px: bereits durch fix(file-manager): F-Tasten immer mit Kurzbeschriftung, Umbruch statt Ausblenden #506 gelöst (1, 2 oder 4 Zeilen gemäß #spec F2; „einzeilig“ aus der ursprünglichen Abnahme ist damit abgelöst). Der native Nachweistest war seit fix(file-manager): F-Tasten immer mit Kurzbeschriftung, Umbruch statt Ausblenden #506 veraltet (alte Legenden-IDs, Umbruch galt als Fehler) und ist korrigiert. Er belegt jetzt zusätzlich die Ziel-Fußzeile.

    Konflikt-, Symlink-, Pfad-, Streaming-, Abbruch-, Überschreibschutz und Stale-Ziel-Revalidierung sind unverändert. PRODUCT §39, TECH §5A, #spec F3, README und Mockup sind mitgezogen.

    Geprüft

    rustfmt --check, no-new-cjk, Syntaxprüfung der Mockup-Skripte, eigenes Review und drei Codex-Review-Runden. Alle Befunde sind behoben, die letzte Runde war ohne Befund.

    Nicht verifiziert

    • Compile, Clippy und Rust-Tests laufen erst im nächsten gebündelten ci-batch. Der letzte Lauf (37793832881) scheiterte schon vorher beim Compile an terminal/view.rs (nicht dieser Fix; 5b814cf51 adressiert das). Damit sind auch die Tests aus fix(file-manager): F-Tasten immer mit Kurzbeschriftung, Umbruch statt Ausblenden #506 noch ungelaufen.
    • Reconnect-Auffrischung und Login-Benutzer aus der Authentifizierung: nur statisch geprüft, weil beide Pfade eine echte SSH-Verbindung brauchen.
    • Native Ausführung in der App (Fußzeile, Auswahl, echte lokale/Remote-/Mehrhost-Transfers): nicht erfolgt.

    Fällt dabei etwas auf, bitte das Issue wieder öffnen.

  11. 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