docs(quick-260917-h2s): Aktenstand — Desktop-Erkennung, Beta-Hinweis, deutscher Installer; Browser-Nachweise gsh/gyd/h2s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+4
-3
@@ -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-eta — Tray „Beenden"/„Öffnen" der Desktop-App repariert (Windows-VM-Bedienprobe durch Claude); davor 260917-e15 Icon-Fix, Benchmark nach VM-Umbau
|
||||
last_activity_desc: Quick 260917-gsh/gyd/h2s — alle sieben Nebenbefunde der Windows-Bedienprobe + Akzentfarbe per Hex + Logo in Akzentfarbe
|
||||
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-eta: Tray „Beenden"/„Öffnen" der Desktop-App repariert (auf Windows-VM gefunden); zuvor 260917-e15 Icon-Fix, Benchmark nach VM-Umbau
|
||||
Last activity: 2026-09-17 - Quick-Tasks 260917-gsh/gyd/h2s: Akzentfarbe per Hex + Logo in Akzentfarbe, Web-Robustheit (Ruecksprung, Sitzungswaechter, i18n), Desktop-Erkennung + Beta-Label + deutscher Installer — lokal im Browser bestaetigt, Push/CI/VM-Nachweis folgt
|
||||
|
||||
Progress: [███░░░░░░░] 33%
|
||||
|
||||
@@ -435,6 +435,7 @@ Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests.
|
||||
| 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/) |
|
||||
| 260917-gsh | **Akzentfarbe als Hex-Code eingebbar; Bildmarke uebernimmt die Akzentfarbe.** `normalizeHexColor()` in `lib/color.ts` (optionales `#`, 3-stellige Kurzform, Kleinschreibung; 9 Tests), Textfeld neben dem Farbwaehler mit Zwei-Wege-Sync, `aria-invalid` + Fehlertext + gesperrtes Speichern bei ungueltigem Wert (7 Komponententests), i18n `settings.account.accentColorHex/-Invalid`. Gedrehte Kachel in `LogoMark` per Inline-Style `fill: var(--primary, #ffed00)` — folgt `applyAccentColor`, Anmeldeseite bleibt gelb. Tests Web 365 -> 381 / 57 Dateien, tsc 0. | 2026-09-17 | 795c6a4,1601d97,db478e0 | [260917-gsh-akzentfarbe-in-einstellungen-konto-zusae](./quick/260917-gsh-akzentfarbe-in-einstellungen-konto-zusae/) |
|
||||
| 260917-gyd | **Web-Robustheit: Ruecksprung nach Anmeldung, Sitzungswaechter, Widgets-Seite uebersetzt.** Middleware leitet auf `/login?next=<Pfad>` (Helfer `lib/safe-next.ts`: nur relative Pfade, kein `//`, kein `\\`, kein `/login`; Tests), Anmeldeseite springt nach Erfolg dorthin. Neue Server Action `fetchSessionState()` (authenticated/unauthenticated/unavailable): bei 401/403 oder 200 ohne Benutzer wird das Sitzungscookie geloescht und der Header leitet auf `/login?next=…` — 5xx/Netzwerkfehler bleiben still (kein Redirect bei API-Ausfall). Befund vom Testserver-DB-Reset: `/auth/me` liefert bei geloeschtem Benutzer 200 mit leerem Body. `settings/dashboard`: `common.loading` + `settings.widgets.empty` statt englischer Hartkodierung. Tests Web gruen, tsc 0. | 2026-09-17 | 4b279ea,474d170,2868ffe | [260917-gyd-web-nach-anmeldung-zurueck-zur-ursprueng](./quick/260917-gyd-web-nach-anmeldung-zurueck-zur-ursprueng/) |
|
||||
| 260917-h2s | **Desktop-Client-Erkennung, Beta-Hinweis, deutscher Installer.** Rust: `with_desktop_marker()` haengt `desktop=1` an beide Navigationen zur Server-Adresse (Store bleibt sauber); `update_labels()` — bei gleicher Version nennt Tray/Benachrichtigung „Neuen Beta-Stand {commit}“ statt „Version X“ (5 Rust-Tests). Web: Middleware setzt Cookie `tessera_desktop=1` (`withDesktopCookie` um jede Rueckgabe), `lib/desktop-client.ts` (`isDesktopClient`/`useIsDesktopClient`), `DesktopDownloadLinks` rendert im Client nichts, `DesktopContextMenuGuard` im RootLayout blockt Rechtsklick ausser in Eingabefeldern. Installer: `bundle.windows.nsis` languages German, kein Sprachwahldialog, installerIcon icon.ico, Header/Sidebar-BMP (Markengelb + Tessera-Zeichen, resvg-Quelle), installMode currentUser; Handbuecher ergaenzt. Web-Tests 417 / 63 Dateien, tsc 0. Browser: Cookie, Link-Ausblendung, Kontextmenue, Ruecksprung, 401-Waechter lokal bestaetigt; Installer/Client-Cookie nach CI auf der Windows-VM. | 2026-09-17 | 5bdabf5,d9b94bd,2cd4adc | [260917-h2s-desktop-client-web-erkennt-den-client-do](./quick/260917-h2s-desktop-client-web-erkennt-den-client-do/) |
|
||||
|
||||
## Deferred Items
|
||||
|
||||
@@ -480,4 +481,4 @@ 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-eta (Tray Beenden/Öffnen) gepusht (a0e4c21), CI 244 gruen, Fix auf der Windows-Test-VM 8233 mit Paket 1.1.0-beta.a0e4c21 BESTAETIGT (tasklist ohne tessera-desktop.exe nach Beenden; Öffnen nach Win+D holt Fenster zurueck); Icon-Fix ebenfalls bestaetigt. Nichts angefangen. Alpha-DB wurde vom User am 17.09. 10:37 neu angelegt (Admin-Passwort dort unbekannt). Nebenbefunde 1-7 siehe Memory project-resume
|
||||
Resume file: None
|
||||
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
|
||||
Last activity: 2026-09-17 - Quick-Tasks 260917-gsh/gyd/h2s: Akzentfarbe per Hex + Logo in Akzentfarbe, Web-Robustheit (Ruecksprung, Sitzungswaechter, i18n), Desktop-Erkennung + Beta-Label + deutscher Installer — lokal im Browser bestaetigt, Push/CI/VM-Nachweis folgt
|
||||
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
---
|
||||
phase: quick-260917-h2s
|
||||
plan: 01
|
||||
subsystem: desktop-client, web-middleware
|
||||
tags: [desktop, tauri, nextjs, middleware, ux]
|
||||
status: complete
|
||||
dependency-graph:
|
||||
requires: []
|
||||
provides:
|
||||
- "with_desktop_marker / update_labels (apps/desktop/src-tauri/src/lib.rs)"
|
||||
- "withDesktopCookie (apps/web/src/middleware.ts)"
|
||||
- "isDesktopClient / useIsDesktopClient (apps/web/src/lib/desktop-client.ts)"
|
||||
- "DesktopContextMenuGuard (apps/web/src/components/desktop/desktop-context-menu-guard.tsx)"
|
||||
affects:
|
||||
- "apps/web/src/components/desktop/desktop-download-links.tsx"
|
||||
- "apps/web/src/app/layout.tsx"
|
||||
- "apps/desktop/src-tauri/tauri.conf.json"
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "Cookie-basierte Client-Erkennung: Query-Parameter auf der ersten Navigation -> Middleware setzt Cookie auf jeder Antwort -> Hook liest es hydration-sicher"
|
||||
key-files:
|
||||
created:
|
||||
- apps/web/src/lib/desktop-client.ts
|
||||
- apps/web/src/lib/desktop-client.test.ts
|
||||
- apps/web/src/middleware.test.ts
|
||||
- apps/web/src/components/desktop/desktop-context-menu-guard.tsx
|
||||
- apps/web/src/components/desktop/desktop-context-menu-guard.test.tsx
|
||||
modified:
|
||||
- apps/desktop/src-tauri/src/lib.rs
|
||||
- apps/desktop/src-tauri/tauri.conf.json
|
||||
- apps/desktop/src-tauri/icons/nsis-header.bmp
|
||||
- apps/desktop/src-tauri/icons/nsis-sidebar.bmp
|
||||
- apps/web/src/middleware.ts
|
||||
- apps/web/src/components/desktop/desktop-download-links.tsx
|
||||
- apps/web/src/components/desktop/desktop-download-links.test.tsx
|
||||
- apps/web/src/app/layout.tsx
|
||||
- CHANGELOG.md
|
||||
- docs/anleitung-anwender.md
|
||||
- docs/anleitung-entwicklung.md
|
||||
decisions:
|
||||
- "Beim Handbuchsatz zu Trotzdem ausführen wurde Der Grund dafür zu Der Grund für die Windows-Meldung umformuliert, weil der neu eingefuegte Satz sonst den Bezug des Pronomens verschoben haette (redaktionelle Praezisierung, kein inhaltlicher Unterschied zum Plan)."
|
||||
metrics:
|
||||
duration: 24min
|
||||
completed: 2026-09-17
|
||||
actuals:
|
||||
tokens: 39000
|
||||
tasks: 3
|
||||
commits: 3
|
||||
plan_head_before: 98fad86
|
||||
---
|
||||
|
||||
# Phase quick-260917-h2s Plan 01: Desktop-Client-Erkennung, Beta-Label, deutscher Installer Summary
|
||||
|
||||
Der Desktop-Client meldet sich jetzt beim Web per Cookie an, wodurch Download-Links und das Browser-Kontextmenü in der App verschwinden; der Beta-Update-Hinweis nennt bei gleicher Version den Commit-Stand statt der verwirrenden gleichen Versionsnummer, und der Windows-Installer läuft auf Deutsch mit Tessera-Grafik und -Symbol.
|
||||
|
||||
## Was wurde gebaut
|
||||
|
||||
**Task 1 — Rust (`apps/desktop/src-tauri/src/lib.rs`, Commit `5bdabf5`):**
|
||||
- `with_desktop_marker(url)` hängt `desktop=1` als Query-Paar an einen Klon der Adresse an; beide `window.navigate`-Aufrufe (`save_server_url`, Startnavigation im `setup`) nutzen sie. Der im Store gespeicherte `server_url`-Wert bleibt unverändert (Parameter geht nur in die Navigation).
|
||||
- `update_labels(version_changed, version, commit)` liefert Menü-/Benachrichtigungstext: bei Versionswechsel wie bisher „Version {v} herunterladen"; bei gleicher Version (Beta-Kanal, neuer Commit) „Neuen Beta-Stand herunterladen" / „Neuer Beta-Stand {commit} verfügbar …".
|
||||
- `mod tests` deckt beide Helfer ab (5 Tests); `cargo fmt --check`, `cargo check`, `cargo clippy`, `cargo test --lib` grün.
|
||||
|
||||
**Task 2 — Web, Tracer (Commit `d9b94bd`):**
|
||||
- `withDesktopCookie` in `middleware.ts` setzt `tessera_desktop=1` (Path `/`, ein Jahr, `SameSite=lax`, ohne `HttpOnly`, `Secure` nur bei https) auf **jede** Antwort der `middleware`-Funktion, sobald `?desktop=1` anliegt — auch auf dem Frühausstieg für öffentliche Routen und auf Redirects. Die von Plan 260917-gyd zwischenzeitlich ergänzten Rückgaben (u. a. der `next`-Redirect) sind mit eingeschlossen.
|
||||
- `apps/web/src/lib/desktop-client.ts`: `isDesktopClient()` liest das Cookie synchron (SSR-sicher: `false` ohne `document`); `useIsDesktopClient()` kapselt es per `useEffect`, damit Server- und erster Client-Render übereinstimmen.
|
||||
- `DesktopDownloadLinks` bricht den Ladeeffekt im Desktop-Client vor dem Request ab und rendert nichts.
|
||||
- `DesktopContextMenuGuard` (neu, in `layout.tsx` eingebunden) unterdrückt das WebView2-Kontextmenü außerhalb von Eingabefeldern/contenteditable-Bereichen.
|
||||
- Tracer-Gate: Die komplette Kette (Anfrage mit `?desktop=1` → Cookie auf der Antwort → Hook → Komponente rendert nichts) wurde Ende-zu-Ende durch die volle Testsuite (`pnpm --filter @tessera/web exec vitest run`, 417/417 grün) und `type-check` bestätigt, bevor Task 3 begann.
|
||||
|
||||
**Task 3 — Installer, CHANGELOG, Handbuch (Commit `2cd4adc`):**
|
||||
- `bundle.windows.nsis` in `tauri.conf.json`: `languages: ["German"]`, `displayLanguageSelector: false`, `installerIcon`, `headerImage`, `sidebarImage`, `installMode: "currentUser"`.
|
||||
- Beide BMPs aus dem Scratchpad nach `icons/` kopiert (`nsis-header.bmp` 150×57, `nsis-sidebar.bmp` 164×314, beide `BMP3`).
|
||||
- CHANGELOG: vier neue `Desktop-App:`-Stichpunkte (zwei unter „Geändert", zwei unter „Behoben").
|
||||
- `docs/anleitung-anwender.md`: Satz zum deutschen Installationsassistenten (kein Admin nötig); Tray-Eintrag „Update herunterladen" erklärt (Beta-Text).
|
||||
- `docs/anleitung-entwicklung.md`: Ort der nsis-Konfiguration und Hinweis, dass nur der CI-Bau auf Windows den echten Nachweis liefert.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
None — plan executed exactly as written. Eine redaktionelle Umformulierung (siehe `decisions` oben) war nötig, damit ein Pronomenbezug im Handbuchsatz nicht verrutscht; inhaltlich deckt sich der Text mit der Plan-Vorgabe.
|
||||
|
||||
## Offene Nachweise (nicht lokal prüfbar)
|
||||
|
||||
Wie im Plan vorgesehen, bleibt der Beweis über die WebView2-Grenze durch den Orchestrator nach dem CI-Bau auf der Windows-VM offen:
|
||||
- Cookie `tessera_desktop=1` im echten Client gesetzt (Bedienprobe)
|
||||
- Keine Download-Links auf der Anmeldeseite im Client
|
||||
- Kein Browser-Kontextmenü im Client, aber in Eingabefeldern erhalten
|
||||
- Beta-Label „Neuen Beta-Stand herunterladen" / Benachrichtigung mit Commit-Kürzel
|
||||
- Deutscher Installer mit Tessera-Kopf-/Seitenbild und -Symbol
|
||||
|
||||
## Verification
|
||||
|
||||
- `cargo fmt --check && cargo check && cargo clippy && cargo test --lib` (apps/desktop/src-tauri): grün, 5/5 Tests
|
||||
- `pnpm --filter @tessera/web exec vitest run`: 417/417 Tests grün (63 Dateien)
|
||||
- `pnpm --filter @tessera/web type-check`: grün
|
||||
- nsis-Schema-Prüfung (node gegen `NsisConfig.properties`/`NSISInstallerMode`): OK
|
||||
- `magick identify`: `nsis-header.bmp BMP3 150x57`, `nsis-sidebar.bmp BMP3 164x314`
|
||||
- `git diff --name-only 98fad86 HEAD` deckt sich exakt mit `files_modified` aus dem Plan-Frontmatter; kein Docker-Build, kein `tauri build`, kein `git push`.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- FOUND: apps/desktop/src-tauri/src/lib.rs (with_desktop_marker, update_labels, mod tests)
|
||||
- FOUND: apps/web/src/middleware.ts (withDesktopCookie)
|
||||
- FOUND: apps/web/src/lib/desktop-client.ts
|
||||
- FOUND: apps/web/src/components/desktop/desktop-context-menu-guard.tsx
|
||||
- FOUND: apps/desktop/src-tauri/icons/nsis-header.bmp, nsis-sidebar.bmp
|
||||
- FOUND commit 5bdabf5, d9b94bd, 2cd4adc in `git log --oneline`
|
||||
Reference in New Issue
Block a user