# HANDOVER 2026-08-27 — Switcher-Paket (Bereichs-/Projekt-UX) Ziel der nächsten Session: das per Persona-Check (Noten 4/3/2) definierte Umbaupaket am Stück bauen. Details + Belege: Memory `workspace-switcher-persona-2026-08-27` lesen. ## Reihenfolge (HOCH zuerst) 1. **Umschalt-Race schließen** (Datenschützer, HOCH): In `lib/data/workspace.dart` (`switchToSealed`, ~Z. 169–204) zeigt der Client nach `HubService.reconnect` (Z. 188) schon auf den Mandanten-Hub, bevor `_activeSealed` gesetzt/notifiziert ist — 2-s-Poller (`runs.dart:218`, `audit.dart:94`) können sealed-Daten UNMARKIERT rendern. Fix: expliziter `switching`-Zustand VOR dem Reconnect (Identity-Bar optimistisch „Wechsle in Bereich …", Poller pausieren), Freigabe erst nach `healthy()`. Wächter-Test (state_matrix-Stil): „Client-Endpoint ≠ angezeigter Kontext" darf nie vorkommen. 2. **Filter-Restaurierung** (Poweruser, HOCH): `workspace.dart:202` löscht den Projekt-Slug beim Bereichseintritt ohne Prefs-Write; `switchToShared` (Z. 210–222) restauriert nur `_sharedEndpoint`. Analog den Slug merken + restaurieren. 3. **Globaler Anker**: Switcher EINMAL in die Shell (Sidebar links oben, `main.dart`), die 4 Einzel-Einbindungen raus (`flows.dart:227`, `runs.dart:329`, `audit.dart:295`, `approvals.dart:376`). Kontext damit auf allen Seiten sichtbar. 4. **Bestätigungsdialog** vor Auto-Start gestoppter Bereiche (`workspace.dart:169–179`): „Bereich ‚X' starten und verbinden?" — laufende Bereiche weiter 1 Klick. 5. **Tooltip-Lüge fixen**: `app_de.arb:1836` / `app_en.arb:1875` „filtert diese Ansicht" → wirkt global (Flows, Läufe, Audit, Freigaben + Stempel neuer Läufe). 6. **Aggregat erklären**: Warum-Zeile an der „N abgeschottete Bereiche"-Zeile (`chain_workspace_switcher.dart:334–390`) + Link auf den Settings-Schalter. Aggregation BLEIBT (bewusste Vertraulichkeitsentscheidung, vom Datenschützer bestätigt). 7. **Poweruser-Komfort**: Cmd+K-Palette kennt Projekte/Bereiche (`chain_search_palette.dart`), Kürzel für den Switcher, Häkchen am aktiven Eintrag, Zuletzt-benutzt; Läufe-Leerzustand bei aktivem Filter ehrlich („Keine Läufe in Projekt X" statt `runsEmptyHint`, `runs.dart:357–369`). 8. **Beispiel-Chip** (offen vom 23.08.): Hub liefert `FlowSummary.sample` (Wire-Feld 6, gepusht in fai_chain `4cd5122`); ERST Dart-Proto-Regen im Client-SDK (`fai_chain_client_sdk_dart`), DANN Flows-Liste: „Beispiel"-Chip + Beispiele eingeklappt + „Beispiele importieren"-Aktion im leeren sealed-Zustand. Alte Hubs ohne Feld → false → keine Chips (ehrlich). Skew-Gate (`scripts/skew-smoke.sh`) laufen lassen. ## Prüfpflichten Studio-Regeln: Selbstverifikation per Screenshot (hell+dunkel), l10n DE+EN, kopierbare Fehler, Inline-Hilfe für neue Flächen (doc_help_wiring_test), Canon-Wächter. Hub-Seite ist KOMPLETT (sealed seedet nicht mehr, Prune live auf den echten Bereichen verifiziert, Backfill für alte Instanz-Configs in `chain project start`). ## Fallen - Kundenbereichs-Slugs nie in Commit-Messages — der Security-Hook blockt (richtig so). - `!`-Befehle des Nutzers haben 2-min-Timeout; lange Gates selbst puschen. - Scratchpad überlebt nicht: der hermetische OpenAI-Wire-Fake (fake_vllm.py, chunked-Encoding-Handling!) ist weg — bei Bedarf neu aus der Beschreibung in fai_chain-Commit `ad6c772` bzw. den llm.rs-Unit-Tests ableiten.