docs(06): complete Phase 06 — desktop wrapper + CI/CD pipeline verified
- 06-01: Tauri scaffold complete - 06-02: Native features (tray, window-state, autostart, version check, AppImage) - 06-03: Gitea CI/CD pipeline green (Run #89 — all 3 jobs pass) - Clean up handoff and continue-here files - Update STATE.md to 100% (all 6 phases complete) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
---
|
||||
phase: 06-desktop-client-ci-cd
|
||||
plan: 02
|
||||
subsystem: desktop
|
||||
tags: [tauri, tray, autostart, window-state, notification, version-check, appimage]
|
||||
|
||||
requires:
|
||||
- phase: 06-desktop-client-ci-cd
|
||||
plan: 01
|
||||
provides: Tauri scaffold with server URL persistence
|
||||
provides:
|
||||
- System tray with close-to-tray behavior
|
||||
- Window state persistence (size/position)
|
||||
- Autostart plugin registration
|
||||
- Startup version check with native notification
|
||||
- GET /health/version API endpoint
|
||||
- AppImage production bundle
|
||||
affects: [desktop user experience, API health module]
|
||||
|
||||
tech-stack:
|
||||
added: [tauri-plugin-notification, tauri-plugin-autostart, tauri-plugin-window-state, reqwest]
|
||||
patterns: [close-to-tray, prevent-exit, async-version-check]
|
||||
|
||||
key-files:
|
||||
modified:
|
||||
- apps/desktop/src-tauri/src/lib.rs
|
||||
- apps/desktop/src-tauri/Cargo.toml
|
||||
- apps/desktop/src-tauri/capabilities/default.json
|
||||
- apps/api/src/health/health.controller.ts
|
||||
created:
|
||||
- apps/desktop/src-tauri/icons/icon.png
|
||||
- apps/desktop/src-tauri/icons/icon.ico
|
||||
- apps/desktop/src-tauri/icons/128x128.png
|
||||
|
||||
key-decisions:
|
||||
- "Both prevent_close (CloseRequested) AND prevent_exit (ExitRequested) per Pitfall 2"
|
||||
- "Async version check via reqwest — non-blocking, fire-and-forget"
|
||||
- "German tray labels: Oeffnen / Beenden"
|
||||
- "ImageMagick for icon generation (tauri icon not available headless)"
|
||||
- "NSIS target configured but only AppImage built (no Windows cross-compile toolchain)"
|
||||
|
||||
patterns-established:
|
||||
- "Close-to-tray: on_window_event hide + prevent_close, RunEvent::ExitRequested prevent_exit, tray quit -> app.exit(0)"
|
||||
- "Version check: spawn async task in setup, GET {server_url}/health/version, compare CARGO_PKG_VERSION"
|
||||
|
||||
requirements-completed: [DESK-01, DESK-02]
|
||||
|
||||
duration: 8min
|
||||
completed: 2026-06-25
|
||||
---
|
||||
|
||||
# Phase 06 Plan 02: Native Desktop Features Summary
|
||||
|
||||
**Tray, close-to-tray, window-state, autostart, version check, branded icons, AppImage bundle**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** 8 min
|
||||
- **Commit:** c65ada0
|
||||
- **Tasks:** 4 completed (3 auto + 1 build verification)
|
||||
- **Files modified:** 4, icons generated: 3
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- API GET /health/version endpoint (public, no auth)
|
||||
- Tray icon with context menu (Oeffnen/Beenden) and left-click show
|
||||
- Close-to-tray with both prevent_close and prevent_exit guards
|
||||
- Window state persistence via tauri-plugin-window-state
|
||||
- Autostart plugin registered with capability permissions
|
||||
- Async startup version check with native notification on mismatch
|
||||
- Tessera-branded icon (yellow T on dark bg, OKLCH palette)
|
||||
- AppImage built: Tessera_0.0.1_amd64.AppImage
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
- Icons generated with ImageMagick instead of `tauri icon` (headless environment)
|
||||
- NSIS bundle configured but not built (no Windows cross-compile toolchain on Linux host)
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- cargo check passes with all 4 plugins
|
||||
- API type-check passes
|
||||
- AppImage produced at target/release/bundle/appimage/
|
||||
|
||||
---
|
||||
*Phase: 06-desktop-client-ci-cd*
|
||||
*Completed: 2026-06-25*
|
||||
Reference in New Issue
Block a user