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.mdet../marketing/CLAIMS_EVIDENCE.md.
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
- 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
| Zone | Statut | Detail |
|---|---|---|
| Code signing | ❌ BLOQUANT | Windows Authenticode + macOS notarization necessaires (~340 €/an) |
| CSP en prod | 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
Objectif : rendre Volt installable et utilisable par des non-developpeurs sans avertissements systeme ni crashes non diagnostiques.
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 deSettingsApp.tsx, decouvert pendant l'audit.SettingsWindow.cssrenomme enSettingsApp.csset deplace au bon endroit. Barrel exports nettoyes. - Setting
showPreviewretire 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 --noEmitvert - ✅
cargo checkvert - ✅ Plus aucun fichier a 0 octet dans
src/ - ✅
pnpm run sync-versionoperationnel
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 testsur chaque PR ✓ - Coverage : plugin registry 100%, calculator > 80%, indexer search couvert
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.jsonsupprime (doublon),default.jsonaudite - 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
But : Savoir ce qui se passe en production sans attacher un debugger.
Complete ✓
-
tracing+tracing-subscriber+tracing-appenderinitialises - 91+ sites
println!→tracingmigres - Fichier log rotatif quotidien
-
get_log_file_path()expose + Settings > About : "Open logs" + "Copy diagnostics"
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
- Extraction hooks :
useSearchPipeline,useAppLifecycle,useGlobalHotkey,useResultActions - Extraction composants :
ViewRouter,ResultContextMenu - App.tsx = 197 lignes (cible < 300) ✓
-
VoltErrordiscriminated 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)
- 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-describedbysur HotkeyCapture, folder picker, extensions - Contraste WCAG AA light + dark
- 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"
- 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
- 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
- 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
- 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
- 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
- Systeme i18n : i18next + react-i18next
- 2 langues : Anglais (en), Francais (fr)
- 9 namespaces + plugins localises
- Detection locale OS + fallback anglais
- Batch IPC : commande
search_allunifiee - 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
- Prefixe
>pour execution inline - Streaming output via Tauri Channels
- Kill propre des processus (cancel/timeout)
- Ctrl+C cancel,
!!re-run,!prefixhistory 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
- State signatures : HMAC-SHA256 sur
installed.json/dev-extensions.json, cle stockee dans OS keyring - Tamper detection : signature
.sigdetachee, alertes UI si mismatch, schema "sig-first, JSON-atomic, rename-last" - Worker sandbox renforce :
eval,Function,WebSocket,XMLHttpRequest,importScriptsdesactives - 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
- 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
- Amazon Games : lecture
metadata.json, lancement viaamazon-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::scopepour tous les scanners - Deduplication : HashMap case-insensitive par nom
- Filtrage non-jeux : 60+ patterns (launchers, anticheat, redistributables)
- 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
- Validation : URL (whitelist http/https/mailto), folders (existence), commands (chemin absolu + blocage metacaracteres shell)
- Commandes :
ql:add,ql:list,ql:removeavec hints - Cache intelligent : lazy-loading, recherche fuzzy sur nom + shortcut
- Icones par type : URL, dossier, commande
- Deep links :
volt://auth/callback+volt://oauth-callbackpour 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
- 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
- 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
- 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,subverifies cote Rust ;user_idetexpires_atjamais tires des query params - Token refresh : user_id mismatch rejete +
expires_inplafonne a 24h - HMAC sur keyring :
store_signed/retrieve_signedavec tag de domaine length-prefixe (M10) — force les attaquants a recalculer a chaque swap - Extensions fail-closed : signature mismatch →
granted_permissionsreset a vide, forensic log par extension (H4) - Permission allowlist backend :
ALLOWED_PERMISSIONSvalide cote Rust a chaqueupdate_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-instanceforward 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_pendingmap au timeout pour eviter les fuites
- Redaction automatique clipboard
- Token rotation
- Apprentissage des preferences (exploitation query-result binding)
- Export/import JSON + editeur UI + marketplace
- Linux : support Wayland
- macOS : integration Spotlight
- Langues supplementaires (ES, DE, etc.)
- Contribution communautaire
volt://search?q=...+ deep linking
- Opt-in, zero donnee par defaut
| 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 :
- Acquerir Windows Authenticode + macOS Developer ID certs (~340 €/an)
- Integrer certs dans CI/CD + tester code signing
- Test CSP en prod :
pnpm run tauri -- build+ verifier DevTools console - Test fresh install Windows + macOS vierges
- Stabilite avant features : si un bug bloque le flow principal (search → launch), il passe avant tout milestone.
- Pas de feature sans test : tout nouveau code vient avec au moins un test.
- Pas de refactor speculatif : les refactors servent une feature concrete.
- Les docs suivent le code : a chaque milestone termine, mettre a jour docs + changelog.
- Release early : une petite release (patch) toutes les 2-3 semaines.
- Architecture technique : ../architecture/ARCHITECTURE.md
- Plan historique (M0-M5) : ../../archive/plans/IMPLEMENTATION_PLAN.md
- CI/CD : ./CICD.md
- Distribution : ./DISTRIBUTION.md
- Plugin development : ../plugins/DEVELOPMENT.md
- Code signing setup : ./SIGNING_SETUP.md
- Product roadmap : ../roadmap/PRODUCT_ROADMAP.md
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).