Skip to content

fix(panes): Tab-Einfügen ohne Pane-Verlust und mit korrekter Geometrie - #535

Merged
iret77 merged 1 commit into
mainfrom
fix/tab-join-review-findings
Oct 8, 2026
Merged

iret77 merged 1 commit into
mainfrom
fix/tab-join-review-findings

Conversation

@iret77

@iret77 iret77 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Korrigiert drei Laufzeitfehler, die ein unabhängiges Codex-Review (gpt-6-astra, XHigh, rein lesend) in #523 gefunden hat. #522 und #523 sind bereits in main, deshalb setzt dieser PR direkt auf main auf. Ausgeliefert wurden die Fehler nie, denn 1.2.0 ist noch unveröffentlicht.

Befunde und Korrekturen

  1. Editor-Pane ging verloren (hoch). Ist die Datei eines Editor-Panes aus dem gezogenen Tab im Ziel-Tab schon offen, verweigert CodePane::pre_attach die Übernahme und fokussiert stattdessen den vorhandenen Editor. Das übertragene Pane war damit weg, samt weiterer Editor-Tabs und möglicher ungespeicherter Änderungen.
    → PaneGroup::can_join_tab lässt Editor-Panes nur in einen Tab ohne Editor. Sonst erscheint keine Drop-Fläche, und auch join_tab_as_pane prüft das noch einmal.
  2. Geometrie passte nicht zur Drop-Fläche (mittel). Die Neuanordnung über einzelne Splits fiel bei gleicher Achse in den Elternknoten zusammen. Zwei Panes rechts neben ein Ziel-Pane ergaben drei gleich breite Spalten, und Nachbarn schrumpften.
    → PaneData::graft ersetzt das Ziel-Pane durch einen Split aus Ziel und vollständigem Teilbaum. Das Layout teilt sich so genau den bisherigen Platz des Ziel-Panes, die markierte Hälfte, und Nachbarn behalten ihre Größe. Ist das Ziel inzwischen verschwunden, hängt graft_at_root das Layout an den Tabrand. Die bisherigen Funktionen place_joined_pane und expand_joined_layout entfallen.
  3. Child-Agent-Zuordnung blieb zurück (mittel). child_agent_panes blieb im aufgelösten Tab, sodass „Child-Agent anzeigen“, das Schließen und das Aufräumen dieser Panes nicht mehr griffen.
    → take_panes_for_join gibt die Einträge der übertragenen Panes in JoinedPanes mit, und insert_joined_panes übernimmt sie.

Zusätzlich zu den Codex-Befunden: Tabs mit offener Konversations-Wiederherstellung (pending_ambient_agent_conversation_restorations) oder offenem Zusammenfassungsdialog bieten keine Drop-Fläche, weil dieser Zustand pro Pane in der Gruppe hängt.

Weitere Prüfung nach dem Merge

Ich habe geprüft, ob die acht nach #522/#523 gemergten PRs entfernte oder geänderte Funktionen aufrufen: Das ist nicht der Fall. Alle Quelltext-Tests in view_test.rs finden ihre gesuchten Textstellen noch. Das Codex-Review für #522 ergab keine Befunde.

Spec und Changelog

  • #spec J3 und #spec J6 in docs/ui/pane-launch-and-tab-join.html sowie PRODUCT §34 beschreiben die Geometrie und die Sperren.
  • Der Changelog-Eintrag zu 1.2.0 ist ergänzt. Die Version bleibt 1.2.0, weil das Feature selbst noch unveröffentlicht ist.

Verifikation

  • Statisch: rustfmt --check, git diff --check, check-no-new-cjk, check-v1-release-readiness --phase-a.
  • Neue Tests: graft_keeps_the_joined_layout_inside_the_target_pane (gleiche Achse bleibt verschachtelt, Nachbar unberührt) und graft_before_the_target_and_at_the_root. dragging_a_tab_onto_a_pane_joins_its_panes_as_a_split gilt unverändert.
  • Nicht automatisiert getestet sind die Editor-Sperre und die Übergabe der Child-Agents. Dafür fehlt eine Testumgebung mit echten Editor- und Agent-Konversations-Panes.
  • Nicht kompiliert. Wie feat(panes): Gemeinsames Startmenü für Tab und Pane #522 und feat(panes): Tab per Ziehen als Pane in den sichtbaren Tab einfügen #523 läuft der Code erst im ci-batch, nach Freigabe.

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

Drei Befunde aus dem unabhängigen Codex-Review von #523:

- Ein Editor-Pane, dessen Datei im Ziel-Tab schon offen ist, verweigert
  beim Anhängen die Übernahme (CodePane::pre_attach) und ging verloren.
  Editor-Panes werden jetzt nur in einen Tab ohne Editor eingefügt; sonst
  gibt es keine Drop-Fläche.
- Das eingefügte Layout fiel bei gleicher Split-Achse in den Elternknoten
  zusammen und verkleinerte unbeteiligte Nachbarn. Es wird jetzt als
  eigener Teilbaum anstelle des Ziel-Panes eingehängt (PaneData::graft)
  und teilt sich genau dessen bisherigen Platz, wie die Drop-Fläche zeigt.
- child_agent_panes blieb im aufgelösten Tab zurück. Die Zuordnungen der
  übertragenen Panes wandern jetzt mit.

Zusätzlich bieten Tabs mit offener Konversations-Wiederherstellung oder
Zusammenfassung keine Drop-Fläche, weil deren Zustand am Pane hängt.
@iret77
iret77 merged commit 0ba54c0 into main Oct 8, 2026
1 check passed
@iret77
iret77 deleted the fix/tab-join-review-findings branch October 8, 2026 15:25
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