# 🔍 Audit Technique Exhaustif — Module Veza Desktop

**Date**: 2024-12-19  
**Module**: `veza-desktop`  
**Type**: Electron Wrapper Application  
**Auditeur**: Technical Audit System

---

## 📋 Table des matières

1. [Module Overview](#module-overview)
2. [Runbook Minimal](#runbook-minimal)
3. [Health/Build/Test Status](#healthbuildtest-status)
4. [Security Findings](#security-findings)
5. [Observability & Production Readiness](#observability--production-readiness)
6. [Performance Notes](#performance-notes)
7. [Issue List Priorisée (P0→P3)](#issue-list-priorisée-p0p3)
8. [Execution Plan](#execution-plan)

---

## Module Overview

### But du module

**Veza Desktop** est un **wrapper Electron** léger qui charge l'application web Veza (`apps/web`) dans une fenêtre native. Il ne contient **aucune logique UI unique** — c'est un shell natif minimaliste.

**Rôle exact** :
- Wrapper Electron pour l'app web Veza
- Gestion du cycle de vie de l'application (fenêtre, shortcuts, auto-update)
- Bridge entre le processus principal et le renderer (via preload)
- Distribution multi-plateforme (Windows, macOS, Linux)

### Entrées / Sorties

**APIs exposées** :
- **Aucune API HTTP/WS/gRPC** (wrapper uniquement)
- **IPC Electron** : communication main ↔ renderer via preload (actuellement vide)

**Formats** :
- Charge l'app web via `loadURL()` (dev) ou `loadFile()` (prod)
- Dev : `http://localhost:5173` (configurable via `VITE_DEV_SERVER_URL`)
- Prod : `../renderer/index.html` (chemin relatif)

### Dépendances internes

- **Aucune dépendance interne** (module isolé)
- Attend que `apps/web` soit buildé et accessible

### Dépendances externes

- **Electron** `^25.0.0` (vulnérable, voir P0)
- **electron-updater** `^6.0.0` (auto-update)
- **electron-builder** `^24.0.0` (packaging)
- **TypeScript** `^4.9.0` (compilation)
- **Node.js** (runtime Electron)

### Exécution

**Commandes** :
```bash
# Dev
npm run dev:main          # Compile TS + lance Electron
npm run dev               # Dev complet (nécessite apps/web en parallèle)

# Build
npm run build             # Compile TypeScript uniquement
npm run build:main        # Alias de build
npm run dist              # Package avec electron-builder
npm run dist:win|mac|linux # Package spécifique

# Production
npm start                 # Lance Electron (après build)
```

**Configuration** :
- **Env vars** : `VITE_DEV_SERVER_URL` (optionnel, défaut: `http://localhost:5173`)
- **Config build** : `package.json` → `build` (electron-builder)
- **TypeScript** : `tsconfig.main.json`
- **Icons** : `assets/icon.{ico,icns,png}` (non vérifiés)

### Points d'intégration

**Avec `apps/web`** :
- **Dev** : Charge `http://localhost:5173` (doit être running)
- **Prod** : Charge `../renderer/index.html` (doit être copié dans `dist/renderer/`)
- **Contrat** : Aucun contrat explicite — dépendance implicite fragile

**Auth** :
- Aucune gestion d'auth dans le wrapper
- L'app web gère l'auth (JWT probablement)

**CORS/CSP** :
- Aucune configuration CSP dans Electron
- `webSecurity: true` par défaut (OK)
- `contextIsolation: true` (OK)
- `nodeIntegration: false` (OK)

---

## Runbook Minimal

### Développement

```bash
# Terminal 1: Lancer l'app web
cd ../apps/web
npm run dev  # Doit être sur port 5173

# Terminal 2: Lancer le wrapper
cd veza-desktop
npm install
npm run dev:main
```

### Build Production

```bash
# 1. Build l'app web
cd ../apps/web
npm run build
# Vérifier que dist/ existe

# 2. Copier dist/ vers veza-desktop/dist/renderer/ (MANUEL actuellement)
# OU configurer electron-builder pour le faire automatiquement

# 3. Build le wrapper
cd veza-desktop
npm run build
npm run dist
```

### Troubleshooting

- **Erreur "Failed to load local dev server"** : Vérifier que `apps/web` tourne sur port 5173
- **Erreur "Cannot find module"** : `npm install` manquant
- **Build échoue** : Vérifier `tsconfig.main.json` (rootDir incorrect)

---

## Health/Build/Test Status

### ❌ Build Status: **BROKEN**

**Problèmes critiques** :
1. **TypeScript non installé globalement** : `tsc: command not found`
   - **Fichier** : `package.json` ligne 11
   - **Cause** : TypeScript est en `devDependencies` mais pas accessible dans PATH
   - **Impact** : Build impossible sans `npm install` préalable

2. **tsconfig.main.json incohérent** :
   - **Fichier** : `tsconfig.main.json` ligne 9
   - **Problème** : `rootDir: "./src"` mais fichiers dans `./electron/`
   - **Impact** : Compilation peut échouer ou générer mauvais output

### ⚠️ Test Status: **PARTIEL**

**Tests E2E présents** :
- `tests/e2e/library-enhanced.spec.ts` (9 tests)
- `tests/e2e/playlists.spec.ts` (7 tests)
- `tests/e2e/settings.spec.ts` (9 tests)
- `tests/e2e/transcoding.spec.ts` (8 tests)

**Problèmes** :
1. **Aucun script de test dans package.json**
   - Tests Playwright non exécutables via npm
   - Pas de `test:e2e`, `test:unit`, `test:ci`

2. **Tests dépendent de l'app web** :
   - Pointent vers `http://localhost:5173`
   - Nécessitent l'app web running + auth fonctionnelle
   - Pas de mocks/stubs

3. **Scripts de test référencés mais inexistants** :
   - `scripts/production-tests.js` appelle `npm run test:unit`, `test:e2e`, `lighthouse:ci`, `test:perf`, `test:a11y`
   - **Aucun de ces scripts n'existe dans package.json**

4. **Pas de tests unitaires** :
   - Aucun test pour `electron/main.ts`
   - Aucun test pour `electron/preload.ts`
   - Pas de validation IPC, gestion d'erreurs, etc.

### ⚠️ Linter Status: **NON CONFIGURÉ**

- **Aucun linter configuré** (ESLint, TSLint)
- **Aucun formatter** (Prettier)
- **Aucun pre-commit hook**

### ⚠️ Type Safety: **PARTIEL**

- TypeScript configuré avec `strict: true` (OK)
- Mais `rootDir` incorrect peut causer des problèmes
- Pas de vérification de types dans CI

---

## Security Findings

### 🔴 P0 — Vulnérabilités Critiques

#### 1. Electron Version Vulnérable (CVE)

**ID**: `MOD-P0-001`  
**Fichier**: `package.json` ligne 31  
**Version actuelle**: `electron@^25.0.0`  
**Vulnérabilités** :
- **GHSA-6r2x-8pq8-9489** : Heap Buffer Overflow in NativeImage (moderate)
- **GHSA-vmqv-hx8q-j7mg** : ASAR Integrity Bypass via resource modification (moderate)

**Impact** :
- RCE potentiel via images malveillantes
- Bypass de l'intégrité ASAR (modification de fichiers packagés)

**Fix minimal** :
```json
"electron": "^28.0.0"  // ou dernière LTS
```

**Plan de validation** :
```bash
npm audit
npm run build
npm run dist
# Tester sur Windows/macOS/Linux
```

**Effort**: S (1-2h)  
**Risque régression**: Moyen (changements Electron majeurs possibles)

#### 2. glob Package Vulnérable (Command Injection)

**ID**: `MOD-P0-002`  
**Fichier**: `package-lock.json` (dépendance transitive)  
**Version**: `glob@10.2.0 - 10.4.5`  
**Vulnérabilité**: **GHSA-5j98-mcp5-4vw2** — Command injection via `-c/--cmd` (high)

**Impact** :
- RCE si glob est utilisé avec input utilisateur

**Fix minimal** :
```bash
npm audit fix
```

**Plan de validation** :
```bash
npm audit
npm run build
```

**Effort**: S (< 1h)  
**Risque régression**: Faible

### 🟡 P1 — Sécurité Electron

#### 3. DevTools Ouvert en Production (Risque)

**ID**: `MOD-P1-001`  
**Fichier**: `electron/main.ts` ligne 41  
**Code** :
```typescript
if (isDev) {
    mainWindow.webContents.openDevTools();
}
```

**Impact** :
- Si `isDev` est mal détecté, DevTools ouverts en prod
- Accès console, injection de code, debug

**Fix minimal** :
```typescript
if (isDev && process.env.ENABLE_DEVTOOLS === 'true') {
    mainWindow.webContents.openDevTools();
}
```

**Plan de validation** :
- Build prod et vérifier que DevTools ne s'ouvrent pas
- Test avec `app.isPackaged === true`

**Effort**: S (< 30min)  
**Risque régression**: Faible

#### 4. Pas de Validation d'URL avant loadURL

**ID**: `MOD-P1-002`  
**Fichier**: `electron/main.ts` ligne 35-40  
**Code** :
```typescript
const WEB_URL = process.env.VITE_DEV_SERVER_URL || 'http://localhost:5173';
mainWindow.loadURL(WEB_URL).catch(e => {
    console.error('Failed to load local dev server. Is apps/web running?');
    console.error(e);
});
```

**Impact** :
- Si `VITE_DEV_SERVER_URL` est modifié malicieusement, chargement d'URL arbitraire
- SSRF potentiel (moins critique en desktop, mais mauvais pattern)

**Fix minimal** :
```typescript
const WEB_URL = process.env.VITE_DEV_SERVER_URL || 'http://localhost:5173';
const ALLOWED_ORIGINS = ['http://localhost:5173', 'http://127.0.0.1:5173'];
if (!ALLOWED_ORIGINS.some(origin => WEB_URL.startsWith(origin))) {
    throw new Error(`Invalid dev server URL: ${WEB_URL}`);
}
mainWindow.loadURL(WEB_URL).catch(e => {
    // ...
});
```

**Plan de validation** :
- Test avec `VITE_DEV_SERVER_URL=http://evil.com`
- Vérifier que l'app refuse

**Effort**: S (< 1h)  
**Risque régression**: Faible

#### 5. Pas de CSP (Content Security Policy)

**ID**: `MOD-P1-003`  
**Fichier**: `electron/main.ts`  
**Problème**: Aucune CSP configurée dans `session.defaultSession.webRequest.onHeadersReceived`

**Impact** :
- Injection de scripts possible depuis l'app web si compromise
- XSS non mitigé au niveau Electron

**Fix minimal** :
```typescript
import { session } from 'electron';

app.on('ready', () => {
    session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
        callback({
            responseHeaders: {
                ...details.responseHeaders,
                'Content-Security-Policy': [
                    "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';"
                ]
            }
        });
    });
    createWindow();
});
```

**Plan de validation** :
- Test avec injection de script dans l'app web
- Vérifier que CSP bloque

**Effort**: M (2-3h)  
**Risque régression**: Moyen (peut casser certaines fonctionnalités web)

#### 6. Preload Vide (Pas d'API Exposée)

**ID**: `MOD-P1-004`  
**Fichier**: `electron/preload.ts`  
**Code** : Vide (juste un commentaire)

**Impact** :
- Pas de bridge sécurisé main ↔ renderer
- Si besoin futur, risque d'utiliser `nodeIntegration: true` (dangereux)

**Fix minimal** :
```typescript
import { contextBridge, ipcRenderer } from 'electron';

contextBridge.exposeInMainWorld('electronAPI', {
    platform: process.platform,
    versions: process.versions,
    // Exposer uniquement les APIs nécessaires
});
```

**Plan de validation** :
- Test que `window.electronAPI` est disponible dans renderer
- Vérifier que `nodeIntegration: false` est toujours respecté

**Effort**: S (< 1h)  
**Risque régression**: Faible

### 🟢 P2 — Bonnes Pratiques

#### 7. Pas de Gestion d'Erreurs Globale

**ID**: `MOD-P2-001`  
**Fichier**: `electron/main.ts`  
**Problème**: Pas de `process.on('uncaughtException')` ni `process.on('unhandledRejection')`

**Impact** :
- Crashes silencieux
- Pas de logging d'erreurs critiques

**Fix minimal** :
```typescript
process.on('uncaughtException', (error) => {
    console.error('Uncaught Exception:', error);
    // Envoyer à Sentry si configuré
});

process.on('unhandledRejection', (reason, promise) => {
    console.error('Unhandled Rejection:', reason);
});
```

**Effort**: S (< 30min)  
**Risque régression**: Faible

#### 8. Pas de Validation de Fichier en Production

**ID**: `MOD-P2-002`  
**Fichier**: `electron/main.ts` ligne 58  
**Code** :
```typescript
mainWindow.loadFile(path.join(__dirname, '../renderer/index.html'));
```

**Impact** :
- Si fichier manquant, crash silencieux
- Pas de fallback

**Fix minimal** :
```typescript
import fs from 'fs';

const indexPath = path.join(__dirname, '../renderer/index.html');
if (!fs.existsSync(indexPath)) {
    dialog.showErrorBox(
        'Missing Files',
        'The application files are missing. Please reinstall the application.'
    );
    app.quit();
    return;
}
mainWindow.loadFile(indexPath);
```

**Effort**: S (< 1h)  
**Risque régression**: Faible

---

## Observability & Production Readiness

### ❌ Logs: **NON STRUCTURÉS**

**Problèmes** :
- `console.log`/`console.error` uniquement
- Pas de corrélation (request_id, trace_id)
- Pas de niveaux log (info/warn/error)
- Pas de rotation de logs
- Pas d'intégration Sentry/LogRocket

**Recommandation** :
- Utiliser `electron-log` ou `winston`
- Structurer les logs (JSON)
- Ajouter context (user_id, session_id)

### ❌ Metrics: **AUCUNE**

**Manquant** :
- Pas de healthcheck endpoint (normal pour desktop, mais utile pour auto-update)
- Pas de métriques de performance (FPS, memory, CPU)
- Pas de crash reporting (Sentry)

**Recommandation** :
- Intégrer Sentry pour crash reporting
- Exposer métriques via IPC pour debug

### ⚠️ Healthchecks: **PARTIEL**

**Présent** :
- Aucun healthcheck explicite

**Manquant** :
- Vérification que l'app web répond avant de charger
- Vérification de connectivité réseau (pour auto-update)

### ⚠️ Auto-Update: **CONFIGURÉ MAIS NON TESTÉ**

**Présent** :
- `electron-updater` installé
- Config GitHub dans `package.json` (ligne 95-98)

**Manquant** :
- Pas de code d'auto-update dans `main.ts`
- Pas de tests d'auto-update
- Pas de rollback strategy

**Recommandation** :
```typescript
import { autoUpdater } from 'electron-updater';

autoUpdater.checkForUpdatesAndNotify();
autoUpdater.on('update-available', () => {
    // Notifier l'utilisateur
});
```

### ❌ Error Handling: **FAIBLE**

**Problèmes** :
- Pas de retry logic
- Pas de circuit breaker
- Pas de timeout sur loadURL
- Erreurs silencieuses (catch sans action)

**Exemple** :
```typescript
mainWindow.loadURL(WEB_URL).catch(e => {
    console.error('Failed to load local dev server. Is apps/web running?');
    console.error(e);
    // ❌ Pas de dialog utilisateur, pas de retry
});
```

---

## Performance Notes

### ⚠️ Bundle Size: **NON OPTIMISÉ**

**Problèmes** :
- Scripts d'optimisation présents (`scripts/optimize-bundle.js`) mais non utilisés
- Pas de code splitting pour Electron (normal, mais à noter)
- Pas d'analyse de bundle size

**Recommandation** :
- Utiliser `webpack-bundle-analyzer` ou équivalent
- Vérifier taille du bundle final

### ⚠️ Build Time: **NON MESURÉ**

- Pas de métriques de build time
- Pas d'optimisation de build (cache, parallélisation)

### ✅ Memory: **OK (Wrapper Léger)**

- Wrapper minimal, pas de fuites évidentes
- Mais pas de monitoring

### ⚠️ Startup Time: **NON MESURÉ**

- Pas de métriques de temps de démarrage
- Pas d'optimisation (lazy loading, etc.)

---

## Issue List Priorisée (P0→P3)

### 🔴 P0 — Critiques (Do Immediately)

#### MOD-P0-001: Electron Version Vulnérable
- **Titre**: Mettre à jour Electron vers version sécurisée
- **Impact**: RCE potentiel, bypass ASAR
- **Preuve**: `package.json:31`, `npm audit`
- **Cause**: Version obsolète
- **Fix**: `npm install electron@^28.0.0`
- **Validation**: `npm audit`, build, tests E2E
- **Effet de bord**: Possible breaking changes Electron
- **Effort**: S (1-2h)

#### MOD-P0-002: glob Package Vulnérable
- **Titre**: Mettre à jour glob (command injection)
- **Impact**: RCE si utilisé avec input utilisateur
- **Preuve**: `npm audit` (high severity)
- **Cause**: Dépendance transitive vulnérable
- **Fix**: `npm audit fix`
- **Validation**: `npm audit`, build
- **Effet de bord**: Faible
- **Effort**: S (< 1h)

#### MOD-P0-003: Build Cassé (TypeScript)
- **Titre**: Build échoue car tsc non trouvé
- **Impact**: Impossible de build en production
- **Preuve**: `npm run build` → `tsc: command not found`
- **Cause**: TypeScript en devDependencies mais pas dans PATH
- **Fix**: S'assurer que `npm install` est exécuté, ou utiliser `npx tsc`
- **Validation**: `npm run build` doit réussir
- **Effet de bord**: Aucun
- **Effort**: S (< 30min)

#### MOD-P0-004: tsconfig.main.json rootDir Incorrect
- **Titre**: rootDir pointe vers `./src` mais fichiers dans `./electron/`
- **Impact**: Compilation incorrecte, fichiers non trouvés
- **Preuve**: `tsconfig.main.json:9` vs structure réelle
- **Cause**: Incohérence de configuration
- **Fix**: Changer `rootDir: "./electron"` ou `"./"`
- **Validation**: `npm run build`, vérifier output
- **Effet de bord**: Possible changement de structure dist/
- **Effort**: S (< 30min)

### 🟡 P1 — Importants (Do This Sprint)

#### MOD-P1-001: DevTools Ouvert en Production
- **Titre**: Risque d'ouverture DevTools en prod si isDev mal détecté
- **Impact**: Debug console accessible, injection de code
- **Preuve**: `electron/main.ts:41`
- **Cause**: Détection isDev fragile
- **Fix**: Ajouter flag explicite `ENABLE_DEVTOOLS`
- **Validation**: Build prod, vérifier DevTools fermés
- **Effet de bord**: Faible
- **Effort**: S (< 30min)

#### MOD-P1-002: Pas de Validation d'URL
- **Titre**: loadURL accepte n'importe quelle URL depuis env var
- **Impact**: SSRF potentiel, chargement d'URL malveillante
- **Preuve**: `electron/main.ts:35-40`
- **Cause**: Pas de whitelist d'URLs
- **Fix**: Whitelist `localhost:5173` uniquement
- **Validation**: Test avec URL malveillante
- **Effet de bord**: Faible
- **Effort**: S (< 1h)

#### MOD-P1-003: Pas de CSP
- **Titre**: Content Security Policy manquante
- **Impact**: XSS non mitigé au niveau Electron
- **Preuve**: Aucune CSP dans `main.ts`
- **Cause**: Non configuré
- **Fix**: Ajouter CSP via `session.webRequest`
- **Validation**: Test injection de script
- **Effet de bord**: Peut casser certaines fonctionnalités web
- **Effort**: M (2-3h)

#### MOD-P1-004: Preload Vide
- **Titre**: Preload script vide, pas de bridge sécurisé
- **Impact**: Risque futur d'utiliser nodeIntegration: true
- **Preuve**: `electron/preload.ts` (vide)
- **Cause**: Non implémenté
- **Fix**: Exposer APIs via contextBridge
- **Validation**: Test que window.electronAPI fonctionne
- **Effet de bord**: Faible
- **Effort**: S (< 1h)

#### MOD-P1-005: Scripts de Test Inexistants
- **Titre**: Scripts référencés dans `production-tests.js` n'existent pas
- **Impact**: Tests de production non exécutables
- **Preuve**: `scripts/production-tests.js:18-37` vs `package.json`
- **Cause**: Scripts non ajoutés au package.json
- **Fix**: Ajouter scripts manquants ou supprimer références
- **Validation**: `npm run prod:test` doit fonctionner
- **Effet de bord**: Aucun
- **Effort**: S (< 1h)

#### MOD-P1-006: Pas de Tests Unitaires
- **Titre**: Aucun test pour main.ts et preload.ts
- **Impact**: Bugs non détectés, régressions possibles
- **Preuve**: Aucun fichier de test dans `tests/unit/`
- **Cause**: Tests non écrits
- **Fix**: Ajouter tests unitaires (Jest/Vitest)
- **Validation**: `npm run test:unit` doit passer
- **Effet de bord**: Aucun
- **Effort**: M (4-6h)

#### MOD-P1-007: Auto-Update Non Implémenté
- **Titre**: electron-updater installé mais non utilisé
- **Impact**: Pas de mise à jour automatique
- **Preuve**: `package.json:36` vs `main.ts` (aucun import)
- **Cause**: Non implémenté
- **Fix**: Implémenter auto-update avec notifications
- **Validation**: Test avec serveur de mise à jour
- **Effet de bord**: Moyen (nécessite serveur GitHub/autre)
- **Effort**: M (4-6h)

### 🟢 P2 — Qualité (Do Next Sprint)

#### MOD-P2-001: Pas de Gestion d'Erreurs Globale
- **Titre**: Pas de handlers pour uncaughtException/unhandledRejection
- **Impact**: Crashes silencieux, pas de logging
- **Preuve**: `electron/main.ts` (aucun handler)
- **Cause**: Non implémenté
- **Fix**: Ajouter handlers + Sentry
- **Effort**: S (< 30min)

#### MOD-P2-002: Pas de Validation de Fichier en Production
- **Titre**: loadFile ne vérifie pas l'existence du fichier
- **Impact**: Crash si fichier manquant
- **Preuve**: `electron/main.ts:58`
- **Cause**: Pas de vérification
- **Fix**: Vérifier existence + dialog erreur
- **Effort**: S (< 1h)

#### MOD-P2-003: Pas de Linter/Formatter
- **Titre**: Aucun ESLint/Prettier configuré
- **Impact**: Code incohérent, bugs potentiels
- **Preuve**: Aucun fichier de config
- **Cause**: Non configuré
- **Fix**: Ajouter ESLint + Prettier + pre-commit
- **Effort**: M (2-3h)

#### MOD-P2-004: Logs Non Structurés
- **Titre**: console.log uniquement, pas de logs structurés
- **Impact**: Debug difficile, pas d'observabilité
- **Preuve**: `electron/main.ts` (console.log partout)
- **Cause**: Pas de logger configuré
- **Fix**: Intégrer electron-log ou winston
- **Effort**: M (2-3h)

#### MOD-P2-005: Pas de Healthcheck pour App Web
- **Titre**: Charge l'app web sans vérifier qu'elle répond
- **Impact**: Erreur silencieuse si app web down
- **Preuve**: `electron/main.ts:37` (catch sans action)
- **Cause**: Pas de vérification
- **Fix**: Healthcheck avant loadURL + retry
- **Effort**: M (2-3h)

#### MOD-P2-006: Scripts de Déploiement Incomplets
- **Titre**: `deploy-production.js` référence des commandes inexistantes
- **Impact**: Déploiement impossible
- **Preuve**: `scripts/deploy-production.js:151,189` (build:optimized, deploy:staging, etc.)
- **Cause**: Scripts non ajoutés au package.json
- **Fix**: Ajouter scripts ou adapter deploy script
- **Effort**: M (2-3h)

#### MOD-P2-007: Pas de Documentation de Build
- **Titre**: README ne documente pas le processus de build complet
- **Impact**: Développeurs perdus, build manuel
- **Preuve**: `README.md` (section build incomplète)
- **Cause**: Documentation incomplète
- **Fix**: Documenter build + copie de fichiers
- **Effort**: S (< 1h)

#### MOD-P2-008: Pas de CI/CD Config
- **Titre**: Aucun fichier GitHub Actions / GitLab CI
- **Impact**: Pas de build/test automatique
- **Preuve**: Aucun fichier `.github/workflows/` ou `.gitlab-ci.yml`
- **Cause**: Non configuré
- **Fix**: Ajouter CI/CD (build, test, audit)
- **Effort**: M (3-4h)

### 🔵 P3 — Cosmétique (Nice to Have)

#### MOD-P3-001: Icons Non Vérifiés
- **Titre**: Assets d'icons référencés mais non vérifiés
- **Impact**: Build peut échouer si icons manquants
- **Preuve**: `package.json:51,63,74` (assets/icon.*)
- **Cause**: Non vérifié
- **Fix**: Vérifier existence ou générer icons
- **Effort**: S (< 1h)

#### MOD-P3-002: Pas de Source Maps en Production
- **Titre**: Source maps générées mais peut-être non utilisées
- **Impact**: Debug production difficile
- **Preuve**: `tsconfig.main.json:17` (sourceMap: true)
- **Cause**: Non vérifié
- **Fix**: Vérifier utilisation ou désactiver
- **Effort**: S (< 30min)

#### MOD-P3-003: Pas de Métriques de Performance
- **Titre**: Pas de monitoring de performance (FPS, memory, CPU)
- **Impact**: Pas d'optimisation basée sur données
- **Preuve**: Aucun code de monitoring
- **Cause**: Non implémenté
- **Fix**: Ajouter monitoring (optionnel)
- **Effort**: M (4-6h)

#### MOD-P3-004: Scripts d'Optimisation Non Utilisés
- **Titre**: `optimize-bundle.js` existe mais non intégré
- **Impact**: Bundle non optimisé
- **Preuve**: `scripts/optimize-bundle.js` (non appelé)
- **Cause**: Script standalone
- **Fix**: Intégrer dans build ou supprimer
- **Effort**: S (< 1h)

#### MOD-P3-005: validate-frontend-complete.sh Obsolète
- **Titre**: Script référence des fichiers qui n'existent pas dans ce module
- **Impact**: Confusion, script inutile
- **Preuve**: `validate-frontend-complete.sh` (vérifie src/features/*)
- **Cause**: Script copié depuis autre module
- **Fix**: Adapter ou supprimer
- **Effort**: S (< 30min)

---

## Execution Plan

### Checklist P0 (Ordre Strict)

1. ✅ **MOD-P0-002**: `npm audit fix` (glob)
2. ✅ **MOD-P0-001**: `npm install electron@^28.0.0` + tests
3. ✅ **MOD-P0-004**: Corriger `tsconfig.main.json` rootDir
4. ✅ **MOD-P0-003**: Vérifier build fonctionne (`npm install` + `npm run build`)
5. ✅ **Validation**: `npm audit`, `npm run build`, `npm run dist` (test packaging)

**Temps estimé**: 2-3h

### Checklist P1 (Par Lots Cohérents)

#### Lot 1: Sécurité Electron (2-3h)
1. **MOD-P1-001**: DevTools conditionnel
2. **MOD-P1-002**: Validation URL
3. **MOD-P1-003**: CSP (optionnel, peut être P2)

#### Lot 2: Tests & Qualité (6-8h)
1. **MOD-P1-005**: Ajouter scripts de test manquants
2. **MOD-P1-006**: Tests unitaires (main.ts, preload.ts)
3. **MOD-P2-003**: Linter/Formatter

#### Lot 3: Auto-Update & Observabilité (6-8h)
1. **MOD-P1-007**: Implémenter auto-update
2. **MOD-P2-001**: Gestion d'erreurs globale
3. **MOD-P2-004**: Logs structurés

#### Lot 4: Robustesse (4-6h)
1. **MOD-P1-004**: Preload avec contextBridge
2. **MOD-P2-002**: Validation fichier production
3. **MOD-P2-005**: Healthcheck app web

**Temps estimé total P1**: 18-25h

### Quick Wins (≤ 1h chacun)

1. **MOD-P2-007**: Documenter build process (30min)
2. **MOD-P3-001**: Vérifier icons (30min)
3. **MOD-P3-004**: Intégrer ou supprimer optimize-bundle.js (1h)
4. **MOD-P3-005**: Adapter/supprimer validate-frontend-complete.sh (30min)
5. **MOD-P2-006**: Corriger scripts de déploiement (1h)

### Tests à Ajouter en Priorité

1. **Tests unitaires** (P1):
   - `electron/main.ts`: createWindow, gestion erreurs
   - `electron/preload.ts`: contextBridge APIs
   - Mock Electron APIs (sinon)

2. **Tests E2E** (déjà présents mais à améliorer):
   - Tester build production
   - Tester auto-update (mock)
   - Tester gestion d'erreurs

3. **Tests d'intégration**:
   - Build + package (Windows/macOS/Linux)
   - Vérifier que l'app web se charge correctement

### PR Plan

#### PR 1: Fix P0 (Sécurité & Build)
**Titre**: `fix: Update Electron, fix build, add security validations`  
**Fichiers**:
- `package.json` (Electron update)
- `tsconfig.main.json` (rootDir fix)
- `electron/main.ts` (URL validation, DevTools fix)
- `package-lock.json` (audit fix)

**Tests**: Build, audit, dist

#### PR 2: Tests & Qualité
**Titre**: `feat: Add unit tests, linter, and test scripts`  
**Fichiers**:
- `package.json` (scripts de test)
- `tests/unit/main.test.ts` (nouveau)
- `tests/unit/preload.test.ts` (nouveau)
- `.eslintrc.js` (nouveau)
- `.prettierrc` (nouveau)

**Tests**: `npm run test:unit`, `npm run lint`

#### PR 3: Preload & CSP
**Titre**: `feat: Implement preload bridge and CSP`  
**Fichiers**:
- `electron/preload.ts` (contextBridge)
- `electron/main.ts` (CSP)

**Tests**: E2E, vérifier window.electronAPI

#### PR 4: Auto-Update
**Titre**: `feat: Implement auto-update with electron-updater`  
**Fichiers**:
- `electron/main.ts` (auto-update logic)
- `electron/updater.ts` (nouveau, optionnel)

**Tests**: Mock serveur de mise à jour

#### PR 5: Observabilité
**Titre**: `feat: Add structured logging and error handling`  
**Fichiers**:
- `electron/main.ts` (error handlers)
- `electron/logger.ts` (nouveau)
- `package.json` (electron-log)

**Tests**: Vérifier logs structurés

#### PR 6: Robustesse
**Titre**: `feat: Add file validation and healthcheck`  
**Fichiers**:
- `electron/main.ts` (file validation, healthcheck)

**Tests**: Test avec fichier manquant

#### PR 7: CI/CD
**Titre**: `ci: Add GitHub Actions workflow`  
**Fichiers**:
- `.github/workflows/ci.yml` (nouveau)

**Tests**: Vérifier que CI passe

#### PR 8: Documentation & Cleanup
**Titre**: `docs: Update README and cleanup scripts`  
**Fichiers**:
- `README.md` (build process)
- `scripts/` (cleanup ou intégration)

---

## Résumé Exécutif

### Statut Global: ⚠️ **NON PRODUCTION READY**

**Problèmes critiques** :
- 🔴 4 P0 (sécurité, build cassé)
- 🟡 7 P1 (sécurité Electron, tests, auto-update)
- 🟢 8 P2 (qualité, observabilité)
- 🔵 5 P3 (cosmétique)

### Actions Immédiates

1. **Mettre à jour Electron** (P0-001)
2. **Fixer le build** (P0-003, P0-004)
3. **Ajouter validation URL** (P1-002)
4. **Ajouter tests unitaires** (P1-006)

### Estimation Totale

- **P0**: 2-3h
- **P1**: 18-25h
- **P2**: 12-18h
- **P3**: 4-6h

**Total**: ~36-52h de travail

### Risques Majeurs

1. **Sécurité**: Electron vulnérable, pas de CSP, validation URL manquante
2. **Build**: Build cassé, configuration incohérente
3. **Tests**: Pas de tests unitaires, scripts manquants
4. **Production**: Pas d'auto-update, pas d'observabilité, gestion d'erreurs faible

---

**Fin du rapport d'audit**

