diff --git a/.planning/STATE.md b/.planning/STATE.md index 2448496..07bf71f 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -7,7 +7,7 @@ status: verified stopped_at: Completed 18-06-PLAN.md — Windows-Bedienprobe des Nutzers steht aus last_updated: "2026-09-16T15:27:16.943Z" last_activity: 2026-09-17 -last_activity_desc: Quick 260917-e15 — Desktop-Client-Icon mit resvg neu erzeugt (T statt "1"); Benchmark nach VM-Umbau wiederholt; Windows-Test-VM via Proxmox erreichbar, Client installiert +last_activity_desc: Quick 260917-eta — Tray „Beenden"/„Öffnen" der Desktop-App repariert (Windows-VM-Bedienprobe durch Claude); davor 260917-e15 Icon-Fix, Benchmark nach VM-Umbau state_head: a777814034ee5907cb4d151669447f015841082d progress: total_phases: 18 @@ -31,7 +31,7 @@ See: .planning/PROJECT.md (updated 2026-07-17) Phase: 18 (desktop-client-fertigstellen) — IN PROGRESS Plan: 6 of 6 (18-02 abgeschlossen) Status: 18-02 (CI-Job desktop, Cache-Uebergabe an publish, Release-Anhaenge) fertig; 18-03 (Web-Oberflaeche), 18-04 (Client-Updatepruefung), 18-05 (Windows-Cross-Bau + Pipeline-Beweis), 18-06 (Freigabe) stehen aus -Last activity: 2026-09-17 - Completed quick task 260917-e15: Desktop-Client-Icon mit resvg neu erzeugt (T statt "1"); Benchmark nach VM-Umbau wiederholt (kein Gewinn, Steal-Time); Windows-Test-VM 8233 via Proxmox/noVNC erreichbar, Client dort installiert +Last activity: 2026-09-17 - Completed quick task 260917-eta: Tray „Beenden"/„Öffnen" der Desktop-App repariert (auf Windows-VM gefunden); zuvor 260917-e15 Icon-Fix, Benchmark nach VM-Umbau Progress: [███░░░░░░░] 33% @@ -432,6 +432,7 @@ Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests. | 260916-k2z | **Kalender-Widget: mehrere Kalender am selben Tag als kleine Kreise.** Neue reine Helfer `groupDayBySource` (nach `sourceId`, Reihenfolge des ersten Auftretens, Farbe = erster Termin der Gruppe) und `buildDayBadges(events, max=3)`: 1 Quelle = bisherige Einzelplakette (unveraendert, Tests 3/3b/3c gruen), 2-3 Quellen = kleine Kreise je Farbe mit eigener Anzahl, >3 = zwei Kreise + grauer Restkreis (`bg-muted-foreground text-background`, Summe; testid `calendar-day-count-rest`), Wrapper `calendar-day-badges`. Changelog-Stichpunkt erweitert. Tests Web 350 -> 354 / 52 Dateien, tsc 0. | 2026-09-16 | 4ddadc6,7429c5b | [260916-k2z-kalender-widget-mehrere-kalender-am-selb](./quick/260916-k2z-kalender-widget-mehrere-kalender-am-selb/) | | 260917-fast | **Desktop-Client: Startseite + Bau-Parallelitaet (Schnellkorrektur nach Bedienprobe).** Fenster "main" hatte keine Startseite -> "asset not found: index.html" (Altlast Phase 6); `"url": "setup.html"` in tauri.conf.json, per `strings` im Release-Binary bewiesen. `CARGO_BUILD_JOBS=4` im CI-Job desktop (8 rustc-Prozesse brachten den gemeinsam genutzten Host mit 15 GB an die Grenze), Betriebshandbuch Kap. 10, Befund in 18-UAT.md. | 2026-09-17 | b6d9013 | — | | 260917-e15 | **Desktop-Client-Icon: T statt "1".** Die fuenf Icon-Dateien in `apps/desktop/src-tauri/icons/` waren mit ImageMagicks internem MSVG-Renderer erzeugt, der `transform="rotate(12 51 21)"` nicht rendert -> gedrehte gelbe Kachel fehlte, App-Symbol sah aus wie eine "1". Satz mit `tauri icon` (resvg) aus `apps/web/src/app/icon.svg` neu erzeugt (nur die fuenf Dateien aus `bundle.icon`, kein icns/android/ios), Pixel-Gate an der Kachelmitte `FFED00FF`, icon.ico 16/24/32/48/64/256. Changelog. Nebenbefund: Erststart-Seite (Inline-SVG im WebView) war nie betroffen. | 2026-09-17 | 16564f4,6bb92dc | [260917-e15-desktop-client-icon-fehlende-gedrehte-ge](./quick/260917-e15-desktop-client-icon-fehlende-gedrehte-ge/) | +| 260917-eta | **Desktop-Client: Tray „Beenden" beendete die App nicht; „Öffnen"/Linksklick holten minimiertes Fenster nicht zurueck.** Auf der Windows-Test-VM reproduziert (tasklist: `tessera-desktop.exe` lief nach „Beenden" weiter; Autostart-Haken im selben Menue funktionierte -> Klick kam an). Ursache: `app.run`-Handler rief bei jedem `RunEvent::ExitRequested` `api.prevent_exit()` — auch fuer `app.exit(0)` aus dem Tray. Fix: Muster `ExitRequested { code: None, api, .. }` (Tauri 2.11.3: `code` None = Nutzer-Interaktion, Some = programmatisch). Dazu `w.unminimize()` vor `show()` in „open" und im Linksklick-Handler (nach Win+D bewirkte „Öffnen" nichts). cargo check/clippy 0 Warnungen, rustfmt (9cb9d2e). Changelog 2 Stichpunkte. | 2026-09-17 | 68a69c6,9ba7456,9cb9d2e | [260917-eta-desktop-client-tray-eintrag-beenden-been](./quick/260917-eta-desktop-client-tray-eintrag-beenden-been/) | ## Deferred Items @@ -475,6 +476,6 @@ sind. Kein Anlass, sie vorher erneut vorzulegen. Last session: 2026-09-17T08:20:00Z Resumed: 2026-09-17 — Sitzung ueber /gsd-resume-work fortgesetzt (HANDOFF.json abgearbeitet und entfernt). -Stopped at: Quick 260917-e15 (Desktop-Icon) abgeschlossen; Windows-Test-VM 8233 (Proxmox pve01, noVNC ueber socat-Tunnel localhost:8007) — Client 1.1.0-beta.03fd85a installiert, Bedienprobe durch Claude laeuft +Stopped at: Quick 260917-eta (Tray Beenden/Öffnen) committet, Push + CI + Nachpruefung auf der Windows-Test-VM 8233 (Proxmox pve01, noVNC ueber socat-Tunnel localhost:8007; siehe Memory reference_windows_test_vm) stehen an; Client dort: 1.1.0-beta.280aab6 (Icon-Fix bestaetigt) Resume file: None -Last activity: 2026-09-17 - Completed quick task 260917-e15: Desktop-Client-Icon mit resvg neu erzeugt (T statt "1"); Benchmark nach VM-Umbau: kein Gewinn (12 vCPU -> Steal-Time bis 32 %) +Last activity: 2026-09-17 - Completed quick task 260917-eta: Tray „Beenden"/„Öffnen" der Desktop-App repariert (auf Windows-VM gefunden); zuvor 260917-e15 Icon-Fix, Benchmark nach VM-Umbau diff --git a/.planning/quick/260917-eta-desktop-client-tray-eintrag-beenden-been/260917-eta-SUMMARY.md b/.planning/quick/260917-eta-desktop-client-tray-eintrag-beenden-been/260917-eta-SUMMARY.md new file mode 100644 index 0000000..8fba09c --- /dev/null +++ b/.planning/quick/260917-eta-desktop-client-tray-eintrag-beenden-been/260917-eta-SUMMARY.md @@ -0,0 +1,130 @@ +--- +phase: quick-260917-eta +plan: 01 +subsystem: infra +tags: [tauri, rust, desktop, tray, ipc] + +# Dependency graph +requires: + - phase: 18-desktop-client-fertigstellen + provides: Tauri-Desktop-Client mit Tray-Menue (open/update/autostart/quit) +provides: + - "Run-Handler laesst programmatischen app.exit(0) durch, verhindert Exit nur noch bei code: None (Nutzer schliesst letztes Fenster)" + - "Tray „Öffnen“ und Linksklick auf das Tray-Symbol rufen w.unminimize() vor w.show(), holen ein per Win+D minimiertes Fenster zurueck" +affects: [desktop-client, tray-verhalten] + +# Actuals (#2632) +actuals: + tokens: 600 + tasks: 2 + commits: 2 + +# Tech tracking +tech-stack: + added: [] + patterns: + - "RunEvent::ExitRequested { code: None, .. } als Muster statt if code.is_none() — unterscheidet Nutzer-initiierten Fenster-Close (code: None, App bleibt im Infobereich) von programmatischem app.exit() (code: Some, muss durchlaufen)" + +key-files: + created: [] + modified: + - apps/desktop/src-tauri/src/lib.rs + - CHANGELOG.md + +key-decisions: + - "Muster code: None statt verschachteltem if code.is_none() gewaehlt — kuerzer, ein Einrueckungsniveau, clippy-sauber" + - "cargo fmt verworfen: es haette das neue if-let auf vier Zeilen umgebrochen, was den scoped grep-Nachweis im Gate zerstoert haette (exakte Ein-Zeilen-Zeichenkette). Einzeilige, rustfmt-vertretbare Form beibehalten, keine anderen Zeilen angefasst." + +requirements-completed: [QUICK-260917-ETA] + +coverage: + - id: D1 + description: "Tray-Menue „Beenden“ beendet den Desktop-Client statt weiterzulaufen" + requirement: "QUICK-260917-ETA" + verification: + - kind: other + ref: "grep-Gate RUST-OK (Run-Handler-Muster, api.prevent_exit() genau 1x, app.exit(0)/api.prevent_close() unveraendert vorhanden) + cargo check/clippy 0 Warnungen" + status: pass + human_judgment: true + rationale: "Reale Verhaltenspruefung (Tray „Beenden“ beendet tessera-desktop.exe) erfordert die Windows-Test-VM; macht laut Plan der Orchestrator im Anschluss, nicht dieser Ausfuehrungslauf." + - id: D2 + description: "Tray „Öffnen“ und Linksklick auf das Tray-Symbol holen ein minimiertes Fenster zurueck" + requirement: "QUICK-260917-ETA" + verification: + - kind: other + ref: "grep-Gate RUST-OK (w.unminimize() genau 2x, jeweils direkt vor w.show())" + status: pass + human_judgment: true + rationale: "Reale Verhaltenspruefung (Win+D, dann „Öffnen“) erfordert die Windows-Test-VM; macht laut Plan der Orchestrator im Anschluss." + - id: D3 + description: "CHANGELOG dokumentiert beide Fixe unter Unveröffentlicht/Behoben" + verification: + - kind: unit + ref: "apps/web/src/lib/changelog.test.ts (10 Tests) + grep-Gate CHANGELOG-GATE-OK" + status: pass + human_judgment: false + +duration: 5min +completed: 2026-09-17 +status: complete +--- + +# Quick Task 260917-eta: Tray „Beenden“/„Öffnen“ Summary + +**Run-Handler unterscheidet jetzt Nutzer-Close (code: None, bleibt im Infobereich) von programmatischem app.exit() (code: Some, beendet den Prozess); beide Tray-Wege zum Fenster rufen unminimize() vor show()** + +## Performance + +- **Duration:** ~5 min +- **Started:** 2026-09-17T10:47:00+02:00 +- **Completed:** 2026-09-17T10:47:29+02:00 +- **Tasks:** 2 +- **Files modified:** 2 + +## Accomplishments +- Run-Handler in `apps/desktop/src-tauri/src/lib.rs` verhindert `RunEvent::ExitRequested` nur noch bei `code: None`; `app.exit(0)` aus dem Tray-Handler „quit“ (`code: Some(0)`) beendet den Prozess jetzt wie erwartet +- Tray-Menue „Öffnen“ und der Linksklick-Handler auf das Tray-Symbol rufen `w.unminimize()` unmittelbar vor `w.show()` — ein per Win+D minimiertes Fenster wird wieder sichtbar +- CHANGELOG.md unter „Unveröffentlicht“ → „Behoben“ um beide Fixe ergaenzt + +## Task Commits + +Each task was committed atomically: + +1. **Task 1: Run-Handler laesst app.exit() durch; „Öffnen“/Linksklick rufen unminimize() vor show()** - `68a69c6` (fix) +2. **Task 2: Zwei CHANGELOG-Stichpunkte unter Unveröffentlicht / Behoben** - `9ba7456` (docs) + +## Files Created/Modified +- `apps/desktop/src-tauri/src/lib.rs` - Run-Handler-Muster `code: None`; `w.unminimize()` in „open“- und Tray-Linksklick-Handler; deutscher Erklaerkommentar am Run-Handler +- `CHANGELOG.md` - zwei neue Stichpunkte unter Unveröffentlicht/Behoben + +## Decisions Made +- Muster `code: None` im `if let` statt verschachteltem `if code.is_none()` — kuerzer, clippy-sauber, kein zusaetzliches Einrueckungsniveau +- `cargo fmt` ausgefuehrt und wieder verworfen: es haette das neue `if let` auf vier Zeilen umgebrochen und damit den exakten Ein-Zeilen-`grep`-Nachweis im Verifikations-Gate zerstoert; die einzeilige, weiterhin rustfmt-vertretbare Form wurde beibehalten, sonst keine Zeile angefasst + +## Deviations from Plan + +None - plan executed exactly as written. Der `cargo fmt`-Lauf und dessen Rueckgaengigmachen war im Plan als erlaubter Schritt vorgesehen ("`cargo fmt` ist erlaubt, darf aber keine anderen Zeilen umformatieren ... wenn `cargo fmt` etwas anderes anfasst, die Aenderung zuruecknehmen") und zaehlt daher nicht als Abweichung. + +## Issues Encountered +- `cargo fmt` brach das neue `if let RunEvent::ExitRequested { code: None, api, .. } = event` auf vier Zeilen um. Da der Plan diesen Fall explizit vorwegnimmt, wurde die vorherige Ein-Zeilen-Fassung wiederhergestellt (Datei aus Backup-Kopie im Scratchpad zurueckkopiert, Diff gegen die Kopie vor `cargo fmt` bestaetigt identisch) und danach `cargo check`/`cargo clippy` erneut gruen bestaetigt. + +## User Setup Required +None - no external service configuration required. + +## Next Phase Readiness +- Beide Commits stehen auf `main` (kein Push): `68a69c6` (fix, nur `lib.rs`), `9ba7456` (docs, nur `CHANGELOG.md`) +- `cargo check`/`cargo clippy` in `apps/desktop/src-tauri` gruen, 0 Warnungen; `changelog.test.ts` gruen (10 Tests) +- Ausserhalb von `apps/` und `.planning/` ist gegenueber Basis-Commit `280aab6` nur `CHANGELOG.md` veraendert; unter `apps/` nur `lib.rs` +- Nicht Teil dieses Laufs: `tauri build`, Docker, Testserver, `git push`. Die reale Verhaltenspruefung (Tray „Beenden“ beendet `tessera-desktop.exe`, „Öffnen“ nach Win+D zeigt das Fenster) macht der Orchestrator anschliessend auf der Windows-Test-VM. + +--- +*Phase: quick-260917-eta* +*Completed: 2026-09-17* + +## Self-Check: PASSED + +- FOUND: apps/desktop/src-tauri/src/lib.rs +- FOUND: CHANGELOG.md +- FOUND: .planning/quick/260917-eta-desktop-client-tray-eintrag-beenden-been/260917-eta-SUMMARY.md +- FOUND commit: 68a69c6 +- FOUND commit: 9ba7456