diff --git a/docs/TECH_DEBT.md b/docs/TECH_DEBT.md index d5afe54..03a547e 100644 --- a/docs/TECH_DEBT.md +++ b/docs/TECH_DEBT.md @@ -1,6 +1,6 @@ # TECH_DEBT.md — Expria Frontend -> **Document de référence — Version 1.14** +> **Document de référence — Version 1.15** > Ce document recense les décisions techniques prises par pragmatisme qui devront être revisitées, les stubs temporaires, et les fonctionnalités reportées. > À mettre à jour après chaque session de développement. > @@ -114,22 +114,6 @@ Vient du pattern `c.json(result, result.status)` où `result` contient déjà `s --- -### FTD-15 — Option `'system'` manquante dans ThemeProvider -**Priorité :** 🟢 Mineur -**Statut :** Reporté — après MVP -**Estimation de session :** 2h -**Description :** Le `ThemeProvider` est bi-state (`'light' | 'dark'`). L'option `'system'` (qui suit `prefers-color-scheme` en temps réel via `MediaQueryList.addEventListener`) a été volontairement différée (décision Sprint 0.5). - -**À faire :** -- Étendre le type `Theme` à `'light' | 'dark' | 'system'` -- Dans `ThemeProvider`, si `theme === 'system'` : écouter `matchMedia('(prefers-color-scheme: dark)')` et appliquer/retirer `.dark` dynamiquement -- `ThemeToggle` : cycle light → dark → system (ou un sélecteur 3 états) -- Mettre à jour `getInitialTheme()` pour retourner `'system'` si aucune préférence stockée - -**Condition de résolution :** après MVP — confort utilisateur, pas bloquant. - ---- - > FTD-17, FTD-18, FTD-19 résolus au Sprint 3.5 (2026-04-22) — voir §5 Historique des résolutions. --- @@ -208,22 +192,47 @@ Risque : confusion pour un futur dev sur quel composant utiliser. --- -## 3. Fonctionnalités reportées +### FTD-27 — CI GitHub Actions pour `expria-backend` +**Priorité :** 🔴 Critique +**Statut :** Ouvert +**Estimation de session :** 2h +**Description :** Le backend n'a aucune CI. Aucun typecheck, test, ni audit ne s'exécute automatiquement. Le backend gère Stripe, JWT, permissions — c'est le dépôt le plus sensible. -### FTD-06 — AudioWorklet au lieu de ScriptProcessorNode (T2 Live) -**Priorité :** 🟢 Mineur -**Statut :** Reporté à après le lancement MVP -**Estimation de session :** 1 jour -**Description :** Hérité du backend (TD-09). Côté frontend, le traitement audio pour la T2 Live (capture PCM 16kHz) devra probablement utiliser `AudioWorklet` au lieu de `ScriptProcessorNode` qui est déprécié. +**À faire :** créer `.github/workflows/ci.yml` dans `expria-backend` avec jobs : +- `typecheck` (`tsc --noEmit`) +- `test` (`vitest run`) +- `audit` (`npm audit --audit-level=high`) -**Impact actuel :** fonctionne avec warnings dans la console. Peut poser problème sur certains navigateurs futurs. - -**À faire :** session dédiée après le lancement MVP, pour migrer le pipeline audio vers AudioWorklet. - -**Condition de résolution :** après 30 jours de production stable. +**Condition de résolution :** CI verte sur le prochain push backend. --- +### FTD-28 — Semgrep dans CI frontend + backend +**Priorité :** 🔴 Critique +**Statut :** Ouvert +**Estimation de session :** 1h +**Description :** `SECURITY.md` §4.3 exige `semgrep scan` en CI. Absent des deux dépôts. SEC-05 (XSS rapports IA) classé critique nécessite un scan SAST. + +**À faire :** ajouter un step `semgrep scan --config=auto` dans les CI des deux dépôts. Bloquer sur sévérité ERROR uniquement. + +**Condition de résolution :** Semgrep exécuté et vert sur les deux CI. + +--- + +### FTD-29 — `.github/dependabot.yml` dans les 2 dépôts +**Priorité :** 🟡 Important +**Statut :** Ouvert +**Estimation de session :** 30 min +**Description :** Dependabot alerts et security updates sont activés via l'UI GitHub mais sans fichier de config, les version updates automatiques ne fonctionnent pas. + +**À faire :** créer `.github/dependabot.yml` dans les 2 dépôts (ecosystem `npm`, schedule `weekly`, directory `/`). + +**Condition de résolution :** fichier mergé dans les 2 dépôts. + +--- + +## 3. Fonctionnalités reportées + ### FTD-07 — Sentry non intégré **Priorité :** 🟡 Important **Statut :** Planifié — après MVP @@ -242,18 +251,6 @@ Risque : confusion pour un futur dev sur quel composant utiliser. --- -### FTD-08 — Tests E2E non implémentés -**Priorité :** 🟢 Mineur -**Statut :** Reporté — accepté par design -**Estimation de session :** 2 jours (Playwright setup) -**Description :** Actuellement, les tests de bout en bout sont manuels (via `GOLDEN_DATASET.md`). Une automatisation avec Playwright permettrait de détecter les régressions UI sans effort humain. - -**À faire :** session Playwright setup après MVP, pour automatiser au minimum les 10 scénarios du Groupe Z (smoke test). - -**Condition de résolution :** quand la maintenance manuelle du Golden Dataset devient trop chronophage. - ---- - ### FTD-21 — Persistance session simulation **Priorité :** 🔴 Critique **Statut :** Partiellement résolu — `/simulation/ee` ✅ (2026-04-21) @@ -300,6 +297,52 @@ Frontend : --- +## 3bis. Backlog gelé — post-MVP + +> Ces FTDs sont volontairement gelées : elles concernent des fonctionnalités non encore livrées (T2 Live, tests E2E) ou du confort utilisateur non bloquant (option `'system'` thème). Elles **ne comptent pas dans le cap de 15 FTD actives** et seront réactivées quand leur sprint arrive ou quand la condition de déblocage (post-MVP) est atteinte. + +### FTD-06 — AudioWorklet au lieu de ScriptProcessorNode (T2 Live) +**Priorité :** 🟢 Mineur +**Statut :** Gelé — post-MVP (T2 Live non encore implémenté) +**Estimation de session :** 1 jour +**Description :** Hérité du backend (TD-09). Côté frontend, le traitement audio pour la T2 Live (capture PCM 16kHz) devra probablement utiliser `AudioWorklet` au lieu de `ScriptProcessorNode` qui est déprécié. + +**Impact actuel :** fonctionne avec warnings dans la console. Peut poser problème sur certains navigateurs futurs. + +**À faire :** session dédiée après le lancement MVP, pour migrer le pipeline audio vers AudioWorklet. + +**Condition de résolution :** après 30 jours de production stable. + +--- + +### FTD-08 — Tests E2E non implémentés +**Priorité :** 🟢 Mineur +**Statut :** Gelé — post-MVP (accepté par design) +**Estimation de session :** 2 jours (Playwright setup) +**Description :** Actuellement, les tests de bout en bout sont manuels (via `GOLDEN_DATASET.md`). Une automatisation avec Playwright permettrait de détecter les régressions UI sans effort humain. + +**À faire :** session Playwright setup après MVP, pour automatiser au minimum les 10 scénarios du Groupe Z (smoke test). + +**Condition de résolution :** quand la maintenance manuelle du Golden Dataset devient trop chronophage. + +--- + +### FTD-15 — Option `'system'` manquante dans ThemeProvider +**Priorité :** 🟢 Mineur +**Statut :** Gelé — post-MVP +**Estimation de session :** 2h +**Description :** Le `ThemeProvider` est bi-state (`'light' | 'dark'`). L'option `'system'` (qui suit `prefers-color-scheme` en temps réel via `MediaQueryList.addEventListener`) a été volontairement différée (décision Sprint 0.5). + +**À faire :** +- Étendre le type `Theme` à `'light' | 'dark' | 'system'` +- Dans `ThemeProvider`, si `theme === 'system'` : écouter `matchMedia('(prefers-color-scheme: dark)')` et appliquer/retirer `.dark` dynamiquement +- `ThemeToggle` : cycle light → dark → system (ou un sélecteur 3 états) +- Mettre à jour `getInitialTheme()` pour retourner `'system'` si aucune préférence stockée + +**Condition de résolution :** après MVP — confort utilisateur, pas bloquant. + +--- + ## 4. Tests à renforcer ### FTD-09 — Tests de la state machine T2 Live non implémentés @@ -380,3 +423,4 @@ Frontend : | 1.12 | 2026-04-22 | Sprint 3.6a — Ajout FTD-23 🟡 (useAutosave fire après correction). 16 FTD actives → cap de 15 dépassé temporairement, à revoir au prochain clean. | | 1.13 | 2026-04-22 | Sprint 3.6b — Ajout FTD-24 🟡 (polling auto exercices/modèle pending). 17 FTD actives → cap dépassé, un clean 3.6.5 devra résoudre FTD-23/24 ensemble. | | 1.14 | 2026-04-23 | Triage : FTD-04, FTD-05, FTD-20, FTD-22 fermées. FTD-25, FTD-26 ajoutées. 15 FTD actives (cap respecté). | +| 1.15 | 2026-04-23 | Réorg sécurité : FTD-06, FTD-08, FTD-15 gelées (backlog post-MVP). FTD-27 🔴, FTD-28 🔴, FTD-29 🟡 ajoutées (sécurité). 15 FTD actives (cap respecté). |