| 18-desktop-client-fertigstellen |
04 |
infra |
| tauri |
| rust |
| desktop-client |
| opener-plugin |
| autostart |
|
| phase |
provides |
| 18-desktop-client-fertigstellen (Plan 01) |
GET /desktop/latest (@Public), DesktopLatestResponse-Form, Basislinie 1.1.0 |
|
| phase |
provides |
| 18-desktop-client-fertigstellen (Plan 03) |
Route /settings/general/desktop, GET /desktop/latest ueber /api-proxy/* im Web-Container |
|
|
| Rust-Kommandos check_server/save_server_url fuer die Erststart-Seite (kein Modul-Import mehr) |
| Versionspruefung gegen /api-proxy/desktop/latest mit Benachrichtigung + Tray-Update-Eintrag |
| Tray-Menue: Öffnen · Update herunterladen · Autostart-Haken · Beenden, echte Umlaute |
| Echtes App-Icon (Tessera-Zeichen) in allen Bundle-Groessen |
| Lokal gebautes AppImage (Tessera-1.1.0.AppImage) als D-16-Beweis |
|
| 18-05-windows-cross-bau-pipeline-beweis |
| 18-06-freigabe-release-anhang |
|
| tokens |
tasks |
commits |
| 4547 |
2 |
2 |
|
82312ef691 |
| added |
patterns |
| tauri-plugin-opener 2.5.5 (offizielles Tauri-Plugin, Legitimitaet in 18-RESEARCH.md geprueft: OK) |
|
| api_url(server, path) als einzige Stelle, die den Next.js-Rewrite-Praefix /api-proxy kennt — alle Rust-seitigen API-Aufrufe (check_server, Versionspruefung) laufen ausschliesslich darueber |
| Erststart-Seite spricht nur noch ueber window.__TAURI__.core.invoke() mit Rust-Kommandos statt ueber einen ES-Modul-Import eines Tauri-Plugins — vermeidet den 'Failed to resolve module specifier'-Fehler im gebauten Client (kein Bundler/keine Importmap vorhanden) |
|
|
| created |
modified |
|
|
| apps/desktop/src-tauri/src/lib.rs |
| apps/desktop/src-tauri/Cargo.toml |
| apps/desktop/src-tauri/Cargo.lock |
| apps/desktop/src-tauri/capabilities/default.json |
| apps/desktop/src-tauri/tauri.conf.json |
| apps/desktop/src/setup.html |
| apps/desktop/src-tauri/icons/icon.png |
| apps/desktop/src-tauri/icons/icon.ico |
| apps/desktop/src-tauri/icons/128x128.png |
| apps/desktop/src-tauri/icons/128x128@2x.png |
| apps/desktop/src-tauri/icons/32x32.png |
|
|
| cargo add tauri-plugin-opener@2 ausgefuehrt statt Cargo.toml/Cargo.lock von Hand zu pflegen — Cargo.lock bleibt damit fuer den echten Dependency-Graphen konsistent (Cargo hat zusaetzlich open, is-docker, is-wsl als transitive Abhaengigkeiten des Plugins aufgeloest). |
| Autostart-Umschaltung setzt den Haken im Fehlerfall bewusst auf den vor dem Klick gemessenen Ist-Zustand zurueck (set_checked(currently_on) statt eines optimistischen Toggles), damit der Haken nie eine falsche Systemwahrheit anzeigt, wenn enable()/disable() fehlschlaegt. |
| Versionspruefung liest die Zieladresse jetzt ausschliesslich ueber die neue api_url()-Hilfsfunktion, damit /health/version (im Kommando check_server) und /desktop/latest (im Setup-Block) denselben Rewrite-Praefix garantiert konsistent verwenden. |
|
|
|
| id |
description |
requirement |
verification |
human_judgment |
rationale |
| D1 |
Versionspruefung gegen /api-proxy/desktop/latest mit Benachrichtigung 'Neue Version X.Y.Z verfuegbar' und freigeschaltetem, umbenanntem Tray-Eintrag 'Update herunterladen', der die Einstellungsseite im Systembrowser oeffnet |
DESK-05 |
| kind |
ref |
status |
| other |
grep-Batterie (fn api_url, /desktop/latest, settings/general/desktop, tauri_plugin_opener::init()) + cargo check/cargo clippy gruen |
pass |
|
|
true |
Das tatsaechliche Ausloesen der Benachrichtigung und das Umschalten des Tray-Eintrags laesst sich nur gegen einen laufenden Server mit abweichender Version und einer grafischen Sitzung beobachten — beides stand in dieser Ausfuehrungsumgebung nicht zur Verfuegung (kopflos, kein Display). Die Bedienprobe macht der Nutzer laut Plan-Verifikation Punkt 4 in 18-06. |
|
| id |
description |
requirement |
verification |
human_judgment |
rationale |
| D2 |
Erststart-Seite prueft die Adresse ueber das Rust-Kommando check_server (kein Modul-Import mehr), speichert sie ueber save_server_url und fuehrt zur Tessera-Anmeldung; Sie-Form, Tessera-Farben/-Zeichen, kein vorbelegter Wert |
DESK-02 |
| kind |
ref |
status |
| other |
grep-Batterie (SETUP-OK: __TAURI__.core, invoke('check_server'/'save_server_url'), kein import, kein unpkg.com, keine vorbelegte Adresse, Label vorhanden) |
pass |
|
|
true |
Der volle Ablauf (Adresse eingeben, echten Server erreichen, zur Anmeldeseite navigieren) braucht ein gestartetes AppImage mit grafischer Sitzung und einen laufenden Tessera-Server — nicht Teil dieses Plans (kein Pflichtschritt laut Action-Abschnitt), Bedienprobe folgt in 18-06. |
|
| id |
description |
requirement |
verification |
human_judgment |
rationale |
| D3 |
Tray-Menue in der Reihenfolge Öffnen · Update herunterladen · Autostart-Haken (Windows: 'Mit Windows starten', sonst 'Beim Anmelden starten') · Beenden, mit echten Umlauten; Autostart-Haken spiegelt beim Start den Systemzustand |
DESK-05 |
| kind |
ref |
status |
| other |
grep-Batterie ("Öffnen", "Mit Windows starten", CheckMenuItemBuilder::with_id("autostart") je genau 1 Treffer) + cargo check/cargo clippy gruen |
pass |
|
|
true |
Die sichtbare Tray-Darstellung (Reihenfolge, Umlaute im echten Rendering, Haken-Zustand) laesst sich nur in einer grafischen Sitzung mit laufender App pruefen, nicht headless. Bedienprobe folgt in 18-06. |
|
| id |
description |
requirement |
verification |
human_judgment |
| D4 |
Client traegt das Tessera-Zeichen als App-/Fenster-Icon in allen Bundle-Groessen (512 PNG, 128/128@2x/32 PNG, ICO 16-256); cargo check, cargo clippy und ein lokaler AppImage-Bau laufen durch |
DESK-05 |
| kind |
ref |
status |
| other |
cargo check/cargo clippy (Finished, 0 Warnungen) + magick identify (icon.png 512x512, icon.ico 6 Groessen) + lokaler Bau pnpm --filter @tessera/desktop exec tauri build --bundles appimage + desktop-collect.sh --require linux (Tessera-1.1.0.AppImage im Manifest) |
pass |
|
|
false |
|
|
9min |
2026-09-16 |
complete |