feat(desktop): signature updater Tauri + wizard persistant + protocole E2E (#77)
CI / lint (push) Successful in 1m11s
CI / security (push) Successful in 43s
CI / test (push) Successful in 2m22s
CI / build (push) Successful in 1m41s
CI / e2e (push) Successful in 10m50s
Desktop Build / build-windows (push) Canceled after 0s
Desktop Build / build-linux (push) Canceled after 0s

- Signature des mises a jour Tauri : paire de cles minisign generee, cle publique dans tauri.conf.json, createUpdaterArtifacts actif, secrets CI exposes (repli build non signe si secret absent).

- Wizard 1er lancement : etat persistant wizard_done cote Rust (get_wizard_state/complete_wizard) pour ne plus reafficher la banniere, retro-compatible.

- Protocole des 6 tests E2E manuels : docs/DESKTOP_E2E_CHECKLIST.md.

- CI : desktop.test.mjs ajoute au job lint.

- Docs : ROADMAP, fiche desktop-tauri, CHANGELOG, README desktop, guide releases.

- fix(build): retirer les libs WeasyPrint inutiles du stage builder Docker.
This commit is contained in:
2026-09-12 09:29:47 -04:00
parent 31d4be8015
commit d3299166bb
14 changed files with 519 additions and 29 deletions
+36
View File
@@ -14,6 +14,24 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Ajouté
- **#77 Desktop — Signature des mises à jour Tauri** — la paire de clés `minisign`
de l'updater est générée et sa clé publique est embarquée dans
`desktop/tauri.conf.json` (`plugins.updater.pubkey`, remplace le placeholder) ;
`bundle.createUpdaterArtifacts: true` produit les fichiers `.sig` par artefact.
Le workflow `.gitea/workflows/desktop-build.yml` expose les secrets
`TAURI_SIGNING_PRIVATE_KEY` / `TAURI_SIGNING_PRIVATE_KEY_PASSWORD` aux builds
Windows et Linux, avec repli automatique en build **non signé** si le secret est
absent (CI toujours verte). Procédure complète :
[docs/DEVELOPMENT_AND_RELEASES.md](./docs/DEVELOPMENT_AND_RELEASES.md#2bis-signature-des-mises-à-jour-updater-tauri).
Reste à produire le manifeste `latest.json`.
- **#77 Desktop — Protocole de tests E2E manuels** — nouveau
[`docs/DESKTOP_E2E_CHECKLIST.md`](./docs/DESKTOP_E2E_CHECKLIST.md) : prérequis,
étapes et résultat attendu pour les 6 scénarios OS non automatisables
(installation, tray, notifications natives, association `.md`, auto-update,
désinstallation), avec emplacements des logs/config et procédure de signature
de l'updater Tauri.
- **#70 Recherche sémantique — Embeddings vectoriels** — la recherche comprend désormais le
**sens** de la requête en plus des mots-clés. **Embeddings** : chaque document est découpé en
chunks de 512 mots (recouvrement 64) puis vectorisé (384 dim) via `all-MiniLM-L6-v2`
@@ -156,6 +174,24 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Corrigé
- **#77 Desktop — bannière de premier lancement réaffichée à chaque démarrage** —
l'état du wizard « Choisissez votre vault » n'était mémorisé que dans le
`localStorage` de la webview et le paramètre `hasVaultPath` n'était jamais
renseigné. Ajout d'un booléen persistant `wizard_done` dans la config desktop
(`desktop/src/main.rs`, commandes `get_wizard_state` / `complete_wizard`,
rétro-compatible via `#[serde(default)]`) : la bannière ne réapparaît plus après
un choix de dossier ou un clic « Plus tard », même si le stockage webview est
vidé. Tests Rust (`desktop/src/main.rs`) et JSDOM
(`tests/frontend/desktop.test.mjs`) ajoutés.
- **Build Docker — « No space left » lors de `apt-get install`** — le stage *builder*
installait inutilement `libpango-1.0-0`, `libpangocairo-1.0-0` et `shared-mime-info`
(libs runtime de WeasyPrint, sans usage à la compilation), dupliquant les téléchargements
apt. Ces paquets sont retirés du builder et `apt-get clean` est ajouté dans les deux
stages pour purger les `.deb` conservés par défaut sous Debian trixie, réduisant
l'empreinte disque et le temps de build. En complément, purge du cache de build
(`docker builder prune`) ayant libéré l'espace nécessaire.
- **BUG-005 — Chargement mobile incomplet derrière Cloudflare (`og.dracodev.net`)** —
le service worker utilisait une stratégie **cache-first avec un nom de cache fixe**
(`obsigate-v1`) et un précache de chemins erronés (`/frontend/js/…`) : le Cache Storage