Skip to content

Latest commit

 

History

History
450 lines (343 loc) · 22.9 KB

File metadata and controls

450 lines (343 loc) · 22.9 KB

Volt — Roadmap

Version actuelle : 0.1.1  •  Derniere mise a jour : 2026-05-03  •  Statut : P1 finalisation (M1.1 ✅ · M1.2 ✅ · M1.3 🟡 blocage certs · M1.4 ✅) | Phase 2-4 ✅ completes | Phase 4+ features continues | Security hardening v2 ✅

Document vivant. Les milestones sont groupes en 4 phases. Chaque milestone liste un but, des taches concretes (avec fichiers), des criteres d'acceptation et une estimation.

L'ancien plan (../../archive/plans/IMPLEMENTATION_PLAN.md) reste le journal historique (M0 → M5 completes). Cette roadmap couvre ce qui reste pour atteindre 1.0 et au-dela.

Important pre-marketing : cette roadmap suit l'implementation. Elle ne remplace pas les preuves release/marketing. Pour une decision Go/No-Go, utiliser ../marketing/PRODUCT_READINESS_REVIEW.md, ../release/QA_MATRIX.md et ../marketing/CLAIMS_EVIDENCE.md.


Etat actuel (audit 2026-04-14)

Ce qui marche ✅

Phase 1 (fondation):

  • ✅ Core flow : scan apps → recherche fuzzy → launch, multi-plateforme (Windows/macOS/Linux)
  • ✅ Indexation fichiers : SQLite transactionnel + Tantivy persistant feature-gaté + watcher incremental synchronisé
  • ✅ Plugins builtin (13 frontend + 3 backend) : calculator, emoji-picker, timer, websearch, systemcommands, systemmonitor, games, steam, clipboard, snippets, preview, quicklinks, shell, window-management
  • ✅ Settings : 8 categories + panneau Integrations, hotkey configurable, autostart, 9 positions fenetre
  • ✅ Auto-updater : signature minisign, GitHub Releases, end-to-end
  • ✅ CI/CD : matrice W/macOS(Intel+ARM)/Linux, release pipeline, bundles
  • ✅ Logging : tracing + rolling daily logs, 91+ sites println!tracing, logger.ts frontend

Phase 2 (qualite):

  • ✅ Tests : 345 frontend, 303 backend par défaut, 321 avec Tantivy, 15 SQLCipher ciblés
  • ✅ App.tsx refactor : 1090 → 197 lignes, hooks extraits
  • ✅ VoltError type : discriminated union, error handling
  • ✅ CI gates : cargo fmt --check, cargo clippy -D warnings
  • ✅ Accessibilite : skip link, ARIA listbox, focus trap Modal, live region SearchBar, aria-describedby

Phase 3 (extensibilite) — ✅ FAIT:

  • Extension system complet : loader + worker sandbox + permission model + consent UI
    • 14 Tauri commands (install, uninstall, toggle, update, registry fetch, dev mode, etc.)
    • Web Worker 500ms timeout + Sucrase transpilation
    • Keywords + prefix matching (canHandle declaratif)
    • Permission enforcement (clipboard, network, notifications)
  • Index persistant : SQLite source de vérité + Tantivy dérivé/réutilisable + watcher incremental
  • Registry marketplace UI : fetch_extension_registry wired, UI fonctionnelle

Phase 4 (power features) — ✅ FAIT:

  • ✅ Snippets : 6 commands + builtin plugin + variables dynamiques + JSON import/export
  • ✅ Preview panel : get_file_preview (text/image/folder), Ctrl+P toggle, window resize 800→1100px
  • ✅ Frecency scoring : launch_count × recency_decay, predictive suggestions, search_applications_frecency
  • ✅ Power operators : ext:, in:, size:, modified: parses par queryParser.ts
  • ✅ Results grouping : Applications, Commands, Games, Files sections
  • ✅ Clipboard history : 9 commands, core fonctionnel
  • ✅ Games & Steam : 10 platforms (Steam, Epic, GOG, Xbox, EA, Ubisoft, Riot, Amazon, Battle.net, Rockstar)
  • Integrations tierces : OAuth GitHub/Notion, credentials chiffres, panneau Settings
  • i18n : 2 langues (en/fr), 9 namespaces, plugins localises, detection locale OS
  • Performance : batch IPC, snapshot O(1), lookup de chemins persistant, Tantivy exact/BM25/prefix/fuzzy, sync watcher
  • Qualite code : type guards, safe invoke, constantes scoring centralisees, 3 TODOs resolus
  • Query-result binding : record_search_selection pour apprentissage

Ce qu'il NE reste que 🟧

  • M1.3 Code signing : Windows Authenticode + macOS Developer ID certs (bloque par achat externe ~340 €/an)
  • M1.3 Test CSP en prod : pnpm run tauri -- build + verifier DevTools console
  • M1.3 Test fresh install : Windows + macOS vierges → SmartScreen/Gatekeeper absent

Gaps critiques restants 🟧

Zone Statut Detail
Code signing ❌ BLOQUANT Windows Authenticode + macOS notarization necessaires (~340 €/an)
CSP en prod ⚠️ A tester Policy stricte ajoutee, a verifier pnpm run tauri -- build + DevTools
Matrices de validation ✅ Valide Frontend, Rust default, Tantivy et SQLCipher passent avec Clippy strict

Problemes RESOLUS depuis l'audit precedent :

  • ✅ Tests : 345 frontend, 303 backend par défaut, 321 avec Tantivy, 15 SQLCipher ciblés
  • ✅ CSP : policy stricte dans tauri.conf.json
  • ✅ Version sync : script pnpm run sync-version + pnpm run check-version
  • ✅ Index fichiers : remplacement SQLite transactionnel + Tantivy persistant + watcher lifecycle fiable
  • ✅ Extension loader : completement implemente avec worker sandbox
  • ✅ CI gates : cargo fmt --check + cargo clippy -D warnings
  • ✅ App.tsx : refactorise 1090 → 197 lignes
  • ✅ Logging : tracing + 91+ sites migres
  • ✅ Accessibilite : ResultsList listbox + aria-selected, focus trap Modal, skip link, live region
  • ✅ i18n : systeme complet 2 langues
  • ✅ Integrations : OAuth + credentials chiffres
  • ✅ Performance : batch IPC, nucleo unifie, query-result binding

Phase 1 — Path to 1.0 (release readiness) — ~3 semaines

Objectif : rendre Volt installable et utilisable par des non-developpeurs sans avertissements systeme ni crashes non diagnostiques.

✅ Milestone 1.1 — Cleanup & dette immediate (termine 2026-04-12)

But : Supprimer les stubs morts et unifier les sources de verite avant d'ajouter quoi que ce soit.

Realise :

  • src/shared/components/ui/SnowEffect.tsx (0 octet) supprime
  • src/features/onboarding/ (dossiers vides) supprime
  • Bonus : src/features/settings/components/SettingsWindow.tsx (1200+ lignes) supprime — doublon mort de SettingsApp.tsx, decouvert pendant l'audit. SettingsWindow.css renomme en SettingsApp.css et deplace au bon endroit. Barrel exports nettoyes.
  • Setting showPreview retire cote TypeScript et cote Rust
  • Script scripts/sync-version.mjs + pnpm run sync-version / pnpm run check-version
  • Pre-commit hook opt-in : scripts/hooks/pre-commit + scripts/setup-hooks.mjs

Criteres valides :

  • pnpm exec tsc --noEmit vert
  • cargo check vert
  • ✅ Plus aucun fichier a 0 octet dans src/
  • pnpm run sync-version operationnel

✅ Milestone 1.2 — Fondation de tests (termine)

But : Poser le minimum viable de tests pour securiser les refactors a venir.

Resultats :

  • 345 tests frontend (cible : ≥ 20) ✓
  • 303 tests Rust par défaut / 321 avec Tantivy (cible : ≥ 60) ✓
  • CI execute pnpm run test + cargo test sur chaque PR ✓
  • Coverage : plugin registry 100%, calculator > 80%, indexer search couvert

🟡 Milestone 1.3 — Code signing & securite release (partiel — pret a activer)

But : Eliminer les avertissements OS a l'installation et fermer les trous de securite evidents.

Realise (sans dependance externe) :

  • CSP : policy stricte dans tauri.conf.json
  • Capabilities : desktop.json supprime (doublon), default.json audite
  • Scaffolding CI : env vars Apple/Windows ajoutees dans .github/workflows/release.yml
  • Doc complete : SIGNING_SETUP.md

Bloque par achat externe (hors scope dev) :

  • Windows Authenticode : cert a acheter (~250 €/an OV ou 25 €/an Certum Open Source)
  • macOS Developer ID + notarization : inscription Apple Developer (~99 $/an)
  • Release de test signee : v1.0-rc
  • Test fresh install Windows 11 + macOS
  • Test CSP en prod : pnpm run tauri -- build + DevTools console

✅ Milestone 1.4 — Logging & observabilite de base (TERMINE)

But : Savoir ce qui se passe en production sans attacher un debugger.

Complete ✓

  • tracing + tracing-subscriber + tracing-appender initialises
  • 91+ sites println!tracing migres
  • Fichier log rotatif quotidien
  • get_log_file_path() expose + Settings > About : "Open logs" + "Copy diagnostics"

Release 1.0.0 — implementation mostly ready, release proof pending

Checklist :

  • M1.1 cleanup ✓
  • M1.2 tests ✓
  • 🟡 M1.3 code signing (bloque par achat certs)
  • M1.4 logging ✓
  • M2.1 refactor ✓
  • M2.2 robustesse ✓
  • M2.3 accessibilite ✓
  • M3.1 index persistant ✓
  • M3.2 extension loader ✓
  • M3.3 registry UI ✓
  • Phase 4 features ✓

Avant tag v1.0.0 :

  • Acquerir certs Windows + macOS (bloquant)
  • Integrer certs dans CI/CD
  • Test CSP en prod
  • Test fresh install Windows + macOS + Ubuntu
  • Test auto-update 0.0.4 → 1.0.0
  • Update public/changelog.json
  • Update README.md

Phase 2 — Quality & Polish ✅ COMPLETE (2026-04-13)

✅ Milestone 2.1 — Refactor App.tsx (TERMINE)

  • Extraction hooks : useSearchPipeline, useAppLifecycle, useGlobalHotkey, useResultActions
  • Extraction composants : ViewRouter, ResultContextMenu
  • App.tsx = 197 lignes (cible < 300) ✓

✅ Milestone 2.2 — Robustesse backend (TERMINE)

  • VoltError discriminated union + tous commands migres
  • CI gates : cargo fmt --check + cargo clippy -D warnings
  • 345 tests frontend, 303 tests Rust par défaut, 321 avec Tantivy
  • Game scanners : 10 platforms fonctionnels (Steam, Epic, GOG, Xbox, EA, Ubisoft, Riot, Amazon, Battle.net, Rockstar)

✅ Milestone 2.3 — Accessibilite (TERMINE)

  • ResultsList ARIA pattern (role="listbox" + aria-activedescendant + aria-selected)
  • Focus trap dans Modal (Tab/Shift+Tab cycle)
  • Live region SearchBar (role="status" + aria-live="polite")
  • Skip link visible au focus
  • aria-describedby sur HotkeyCapture, folder picker, extensions
  • Contraste WCAG AA light + dark

Phase 3 — Platform & Extensibility ✅ COMPLETE (2026-04-14)

✅ Milestone 3.1 — Index persistant + incremental (TERMINE, durci 2026-06-12)

  • SQLite (indexer/database.rs) comme source de vérité, remplacement transactionnel après scan réussi
  • Tantivy persistant sous tantivy-search, cohérence contrôlée par marqueur dirty + nombre de documents
  • Recherche exacte/BM25/préfixe/fuzzy avec transpositions; fichiers cachés exclus par défaut
  • File watcher (indexer/watcher.rs) via notify, debounce 100ms, sync SQLite/cache/Tantivy
  • stop() rejoint le worker; frontend stoppe/reprend le watcher autour des rebuilds et changements de config
  • Lookup path→position maintenu avec le snapshot, sans reconstruction par requête
  • Commandes : start_file_watcher, stop_file_watcher, invalidate_index, get_db_index_stats
  • Frontend Settings > Indexing : stats DB + bouton "Rebuild"

✅ Milestone 3.2 — External plugin loader (TERMINE)

  • Backend (commands/extensions.rs — 14 commandes)
  • Frontend (features/extensions/) : ExtensionLoader, WorkerPlugin, PermissionDialog, ExtensionsStore
  • Manifest : keywords + prefix matching, permissions enforcement, entry point, version compat
  • Worker sandbox : 500ms timeout, Sucrase transpilation, crash recovery

✅ Milestone 3.3 — Extension registry + marketplace UI (TERMINE)

  • Backend : fetch_extension_registry + check_extension_updates
  • Extension metadata : icon, author, description, license, repository
  • Settings > Extensions > Store : recherche, install, categories, enable/disable
  • 🟡 Registry JSON publication workflow (GitHub Pages) — optionnel
  • 🟡 Extension reviews/ratings backend — optionnel

Phase 4 — Features & Ecosystem ✅ COMPLETE (2026-04-14)

✅ 4.1 — Recherche avancee

  • Frecency scoring + resultats predictifs
  • Operateurs power-user : ext:, in:, size:, modified:
  • Groupage resultats par section
  • Batch IPC : search_all (1 appel au lieu de 3)
  • Scoring unifie nucleo-matcher

✅ 4.2 — Power user features

  • Snippets : 6 commands + plugin + variables + import/export
  • Preview panel : Ctrl+P, text/image/folder, metadata
  • Clipboard history : 9 commands, pin, search
  • Games & Steam : 7 platforms, cache 5 min
  • Query-result binding : record_search_selection

✅ 4.3 — Integrations tierces (NOUVEAU)

  • Panneau Integrations Settings : GitHub, Notion
  • OAuth flow : browser → token → stockage chiffre
  • Backend : commands/oauth.rs + commands/credentials.rs
  • Frontend : credentialsService.ts + IntegrationsPanel.tsx
  • Token validation, visibility toggle, delete avec confirmation

✅ 4.4 — Internationalisation (NOUVEAU)

  • Systeme i18n : i18next + react-i18next
  • 2 langues : Anglais (en), Francais (fr)
  • 9 namespaces + plugins localises
  • Detection locale OS + fallback anglais

✅ 4.5 — Performance & qualite (NOUVEAU)

  • Batch IPC : commande search_all unifiee
  • O(1) file clone + sync watcher cache
  • Scoring nucleo unifie (fast paths + normalisation log)
  • Type guards centralises (typeGuards.ts)
  • Safe invoke wrapper (safeInvoke.ts)
  • Constantes scoring centralisees (searchScoring.ts)
  • 3 TODOs en suspens resolus

✅ Shell commands inline (2026-04-17)

  • Prefixe > pour execution inline
  • Streaming output via Tauri Channels
  • Kill propre des processus (cancel/timeout)
  • Ctrl+C cancel, !! re-run, !prefix history search
  • Historique frecency (500 entries, persistence JSON)
  • ANSI color rendering (16 colors + bright, bold, dim, italic, underline)
  • Settings panel (shell, timeout, working dir, history size)
  • Preview panel + context menu + i18n (en/fr)
  • Securite : blocklist 14 patterns destructeurs, redaction secrets avant persistance, execution tokens
  • Limites : 50KB max output par stream, validation UTF-8

✅ Extension hardening & securite (2026-04-18)

  • State signatures : HMAC-SHA256 sur installed.json / dev-extensions.json, cle stockee dans OS keyring
  • Tamper detection : signature .sig detachee, alertes UI si mismatch, schema "sig-first, JSON-atomic, rename-last"
  • Worker sandbox renforce : eval, Function, WebSocket, XMLHttpRequest, importScripts desactives
  • SSRF prevention : blocage IP privees (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, ::1), credentials omit, headers Cookie/Auth strippes
  • Response body cap : 10 MB limite dure contre OOM
  • Request IDs crypto : UUIDs non-devinables pour match/execute (anti-forge Worker)
  • Manifest validation : permissions fictives droppees, dev paths restreints (pas de .ssh, .aws, .config)
  • Launch validation : LOLBIN denylist (cmd.exe, powershell.exe, regsvr32.exe...), normalisation NTFS, validation extensions

✅ System Monitor v2 (2026-04-18)

  • Per-core CPU : usage individuel par coeur + frequences
  • Per-disk : points de montage, systemes de fichiers, classification SSD/HDD
  • Reseau : throughput par interface (RX/TX bytes/s), historique, totaux agreges
  • Top processes : top 5 CPU + top 5 RAM avec kill process (kill_process_by_pid)
  • Temperatures : CPU package, GPU, capteurs avec seuils critiques
  • Uptime systeme
  • Frontend detail : modal avec sparklines 60s, indicateurs couleur, export CSV
  • Polling intelligent : 1Hz quand modal ouvert, 60s en arriere-plan

✅ Game Scanner etendu — 10 plateformes (2026-04-18)

  • Amazon Games : lecture metadata.json, lancement via amazon-games://play/<gameId>
  • Battle.net : mapping 80+ product codes Blizzard, lancement battlenet://<ProductCode>
  • Rockstar Games : scan registre HKLM, Launcher.exe -launchTitleInFolder
  • Scan parallele : std::thread::scope pour tous les scanners
  • Deduplication : HashMap case-insensitive par nom
  • Filtrage non-jeux : 60+ patterns (launchers, anticheat, redistributables)

✅ Timer / Focus Timer (Pomodoro) (2026-04-18)

  • Modes : focus 25min, short break 5min, long break 15min, duree custom
  • Parsing flexible : 5m, 1h30m, 90, 1:30
  • Interface : anneau de progression, tracking sessions, gestion de taches integree
  • Persistence : timer survit hide/show de l'app
  • Notifications : desktop + audio a la fin de chaque phase
  • Auto-cycle : enchainement automatique focus → break → focus

✅ Quicklinks ameliores (2026-04-18)

  • Validation : URL (whitelist http/https/mailto), folders (existence), commands (chemin absolu + blocage metacaracteres shell)
  • Commandes : ql:add, ql:list, ql:remove avec hints
  • Cache intelligent : lazy-loading, recherche fuzzy sur nom + shortcut
  • Icones par type : URL, dossier, commande

✅ Deep links & Auth (2026-04-18)

  • Deep links : volt://auth/callback + volt://oauth-callback pour OAuth
  • Single instance : tauri-plugin-single-instance redirige les URL vers l'instance existante
  • Dev mode : enregistrement runtime des schemes sur Windows/Linux
  • Redaction : query params masques dans les logs

✅ CI/Release automation (2026-04-18)

  • auto-tag.yml : tag automatique sur merge PR release/v* → main, validation semver
  • pr-title.yml : enforcement Conventional Commits sur titres PR (squash-merge)
  • commitlint.config.mjs : standardisation types de commit → sections changelog
  • generate-changelog.mjs : generation CHANGELOG.md depuis commits, commits securite collapses
  • commit-msg hook : validation locale avant push

✅ UI & Settings (2026-04-18)

  • ResultItem enrichi : progress bars system monitor, calculator card, shell output streaming, badges type
  • Update manager : check, download, install avec progress bar dans Settings
  • Index stats : fichiers indexes, taille DB, dernier scan dans Settings
  • App shortcuts : gestion enable/disable dans Settings
  • Export diagnostics : export complet depuis Settings > About
  • Tests i18n : parity check en/fr automatise

✅ Security hardening v2 (2026-05-03)

  • Auth CSRF : state nonce HMAC lie a volt://auth/callback — deep-link drive-by impossible (auth_start_login, handle_auth_deep_link)
  • JWT validation : claims exp, iss, sub verifies cote Rust ; user_id et expires_at jamais tires des query params
  • Token refresh : user_id mismatch rejete + expires_in plafonne a 24h
  • HMAC sur keyring : store_signed/retrieve_signed avec tag de domaine length-prefixe (M10) — force les attaquants a recalculer a chaque swap
  • Extensions fail-closed : signature mismatch → granted_permissions reset a vide, forensic log par extension (H4)
  • Permission allowlist backend : ALLOWED_PERMISSIONS valide cote Rust a chaque update_extension_permissions (M1) — lot entier refuse sur entree inconnue
  • Extension SSRF : blocage redirections + IP numeriques IPv4/IPv6-mappees dans le proxy fetch Worker
  • Deep-link rate-limit : single-instance forward avec historique forensic (H9)
  • Shell hardening : NFKC + quote-strip avant matching blocklist ; 9+ nouveaux patterns (PowerShell destructif, diskpart, init 0/6, -EncodedCommand, find -delete)
  • Redacteurs shell : GitHub tokens, AWS AKIA, Stripe sk_, Slack xox*, JWT, curl -u
  • UNC working_dir : rejete dans shell (fuite NTLM) + open_file_with_dialog + open_path
  • open_file_with_dialog : nouvelle commande Tauri — .lnk et UNC bloques, path canonicalise
  • open_path : refus des types executables (contourne LOLBIN/extension validation)
  • windows_search : longueur query plafonnee
  • snippets : taille JSON import + comptage snippets plafonnes
  • test_credential : nouvelle commande Rust — token reste cote Rust, jamais dans le renderer
  • Worker sandbox : clear_pending map au timeout pour eviter les fuites

A faire (post-2.0)

  • Redaction automatique clipboard
  • Token rotation
  • Apprentissage des preferences (exploitation query-result binding)

Phase 5 — Ecosystem (a venir)

Themes custom

  • Export/import JSON + editeur UI + marketplace

Integrations OS natives (restant)

  • Linux : support Wayland
  • macOS : integration Spotlight

i18n Phase 2

  • Langues supplementaires (ES, DE, etc.)
  • Contribution communautaire

Protocoles custom

  • volt://search?q=... + deep linking

Sync settings cloud

  • Opt-in, zero donnee par defaut

Timeline revisee (2026-04-18)

Jalon Contenu Bloquants Estimation
v0.1.1 Security hardening v2 (auth CSRF, HMAC keyring, extensions fail-closed, shell hardening) 2026-05-03
v1.0.0 Phase 1-4 feature-complete + code signing Code signing cert (~340 €) + CSP test Mai/Juin 2026
v1.0.1 Bug fixes + polish Retours utilisateurs Juillet 2026
v2.0.0 Phase 5 ecosystem User feedback 2026+

Actions immediatement necessaires :

  1. Acquerir Windows Authenticode + macOS Developer ID certs (~340 €/an)
  2. Integrer certs dans CI/CD + tester code signing
  3. Test CSP en prod : pnpm run tauri -- build + verifier DevTools console
  4. Test fresh install Windows + macOS vierges

Principes de priorisation

  1. Stabilite avant features : si un bug bloque le flow principal (search → launch), il passe avant tout milestone.
  2. Pas de feature sans test : tout nouveau code vient avec au moins un test.
  3. Pas de refactor speculatif : les refactors servent une feature concrete.
  4. Les docs suivent le code : a chaque milestone termine, mettre a jour docs + changelog.
  5. Release early : une petite release (patch) toutes les 2-3 semaines.

Liens utiles


Document vivant — mettre a jour a chaque fin de milestone. Derniere revision : 2026-05-03 (Security hardening v2 : auth CSRF/JWT, HMAC keyring, extensions fail-closed + permission allowlist, shell blocklist etendu + redacteurs, UNC blocking, open_file_with_dialog, snippets/windows_search caps, deep-link rate-limit).