docs: handover — workspace-switcher rebuild package from persona review

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-08-27 23:38:16 +02:00
parent ebc668d28d
commit 906290f445

68
HANDOVER-2026-08-27.md Normal file
View file

@ -0,0 +1,68 @@
# 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. 169204) 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. 210222) 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:169179`): „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:334390`) +
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:357369`).
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.