docs(tech-debt): réorg sécurité v1.15 — FTD-06/08/15 gelées, FTD-27/28/29 ajoutées
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
2a6ea10978
commit
04dfbe2731
1 changed files with 84 additions and 40 deletions
|
|
@ -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é). |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue