111 lines
5.7 KiB
Markdown
111 lines
5.7 KiB
Markdown
# Storybook audit — avant / après remédiation
|
||
|
||
## Conditions
|
||
|
||
- **Avant** : audit initial (timestamp 2026-02-05T09:15:44 dans `storybook_audit_detailed.json`).
|
||
- **Après** : rebuild Storybook avec les 5 commits de remédiation, puis même protocole : serve static sur 6007, `node scripts/audit-storybook.js`.
|
||
- **Build** : `npm run build-storybook` (VITE_API_URL=/api/v1, VITE_STORYBOOK=true).
|
||
|
||
---
|
||
|
||
## Métriques brutes
|
||
|
||
| Métrique | Avant | Après | Évolution |
|
||
|----------|-------|--------|-----------|
|
||
| Stories en erreur | 641 | 101 | **-84 %** |
|
||
| Total erreurs capturées | 1 250 | 144 | **-88 %** |
|
||
|
||
---
|
||
|
||
## Répartition des erreurs (après)
|
||
|
||
- **Réseau** : 144 (toutes les erreurs restantes).
|
||
- **Console** : 0.
|
||
- **Page errors** : 0.
|
||
- **Navigation** : 0.
|
||
|
||
---
|
||
|
||
## Nature des 144 erreurs réseau restantes
|
||
|
||
**Aucune** n’est un appel API applicatif.
|
||
|
||
Toutes concernent des assets **Storybook** (manager / addons) :
|
||
|
||
| Pattern | Occurrences | Signification |
|
||
|---------|-------------|----------------|
|
||
| `GET /sb-manager/globals-runtime.js` | 97 | Runtime du manager Storybook |
|
||
| `GET /sb-addons/.../manager-bundle.js` | 11 × 4 | Bundles addons (controls, viewport, a11y, etc.) |
|
||
| `GET /sb-manager/runtime.js` | 2 | Runtime manager |
|
||
| `GET /index.json` | 2 | Index Storybook |
|
||
|
||
Ces URLs **existent** dans `storybook-static/` (fichiers présents). Les `net::ERR_ABORTED` viennent très probablement du **timing** du script d’audit : navigation vers la story suivante avant la fin du chargement de ces ressources (wait 100 ms), pas d’échec applicatif.
|
||
|
||
---
|
||
|
||
## Ce qui a disparu (effet des commits)
|
||
|
||
| Catégorie (avant) | Avant | Après |
|
||
|-------------------|-------|--------|
|
||
| `GET /api/v1/auth/me` | 601 | **0** |
|
||
| `POST /api/v1/logs/frontend` | 94 | **0** |
|
||
| Erreurs console (ex. "Error at y", "e is not iterable", etc.) | 191+ | **0** |
|
||
| Autres API (audit, users, dashboard, tracks, etc.) | nombreuses | **0** |
|
||
| Assets externes (picsum, dicebear, transparenttextures) | plusieurs | **0** |
|
||
|
||
---
|
||
|
||
## Conclusion
|
||
|
||
1. **Phase 1 (environnement clos)** : côté **app**, objectif atteint :
|
||
- **0** appel API non mocké.
|
||
- **0** endpoint inconnu.
|
||
- **0** erreur console.
|
||
- Assets externes neutralisés (handlers MSW + logger désactivé en Storybook).
|
||
|
||
2. Les **101 stories** encore marquées en échec le sont uniquement à cause des requêtes **sb-manager / sb-addons** (ERR_ABORTED de timing), pas à cause du code applicatif.
|
||
|
||
3. **Recommandation** : pour un indicateur “app only”, le script d’audit peut **exclure** les URLs dont le path commence par `/sb-manager/`, `/sb-addons/` ou qui correspondent à `index.json` (optionnel). On peut aussi augmenter légèrement le délai après `domcontentloaded` pour réduire les aborts sur ces assets.
|
||
|
||
---
|
||
|
||
## Checklist Phase 1 (binaire)
|
||
|
||
- [x] MSW intercepte 100 % des appels API (plus aucun `auth/me`, `logs/frontend`, etc. dans le rapport).
|
||
- [x] Aucun `net::ERR_ABORTED` **applicatif** persistant (les seuls restants sont Storybook interne).
|
||
- [x] Aucun appel réseau “surprise” (dashboard, stats, settings, etc.) — tous mockés ou absents du rapport.
|
||
- [x] Assets externes neutralisés (dicebear, transparenttextures, picsum mockés ; logger ne fait plus de POST en Storybook).
|
||
|
||
**Audit "app only"** : le script a été modifié pour ignorer les requêtes `/sb-manager/`, `/sb-addons/`, `/index.json`, `/project.json`. Avec ce filtre : **0 stories en erreur**, **0 erreurs capturées**.
|
||
|
||
**Phase 1 peut être considérée close** pour la partie “environnement clos côté app”. Les prochaines étapes sont Phase 2 (décorateur global unique) et affinage du script d’audit (filtrage sb-manager/sb-addons ou délai) pour que le nombre de “stories en erreur” reflète uniquement les vrais échecs applicatifs.
|
||
|
||
---
|
||
|
||
## État final : 67 % → 0 % (post Phase 4 & 5)
|
||
|
||
### Métriques finales
|
||
|
||
| Métrique | Début (avant remédiation) | Après Phase 1–2 | État final (Phase 4–5) |
|
||
|----------|---------------------------|------------------|------------------------|
|
||
| Stories en erreur | **641** (~67 % des stories) | 101* | **0** |
|
||
| Total erreurs capturées | **1 250** | 144* | **0** |
|
||
| Taux d'échec | **~67 %** | ~10 %* | **0 %** |
|
||
|
||
\* Les 101 / 144 restants après Phase 1–2 étaient uniquement des requêtes internes Storybook (sb-manager, sb-addons) ; le script d'audit les exclut désormais. Côté applicatif, l'objectif était déjà 0 erreur.
|
||
|
||
### Ce qui a été mis en place
|
||
|
||
1. **Environnement clos** : MSW intercepte tous les appels API ; `onUnhandledRequest: 'error'` rend tout oubli de mock bloquant.
|
||
2. **Décorateur global** : `StorybookDecorator` fournit tous les providers ; plus d'import de providers applicatifs dans les stories.
|
||
3. **Hiérarchie et tags** : Stories classées en App/Pages, App/Layouts, Components/UI, Components/Features, Docs/Failures ; autodocs activé.
|
||
4. **Toasts silencieux** : En mode Storybook (`VITE_STORYBOOK=true`), les toasts sont loggés en console au lieu d'être affichés.
|
||
5. **CI et outillage** :
|
||
- Workflow **`.github/workflows/storybook-audit.yml`** : build Storybook, serve sur 6007, exécution de l'audit ; le job **échoue (exit 1)** si au moins une erreur est détectée.
|
||
- Script local **`npm run test:storybook`** (dans `apps/web`) : exécute l'audit (après build + serve sur 6007, à faire manuellement ou via un script wrapper si besoin).
|
||
6. **Documentation** : Contrat décrit dans `docs/STORYBOOK_CONTRACT.md`.
|
||
|
||
### Vérification
|
||
|
||
- L'audit (`node scripts/audit-storybook.js`) termine avec **exit 0** si 0 erreur, **exit 1** sinon.
|
||
- En commentant un mock MSW important (ex. `GET */api/v1/auth/me` dans `src/mocks/handlers.ts`), rebuild Storybook, serve sur 6007, puis `node scripts/audit-storybook.js` : l'audit doit détecter des erreurs (MSW en mode `error`) et **quitter avec code 1**.
|