` conteneur avec des boutons séparés côte à côte
- Si toute la ligne doit être cliquable, séparer la zone de clic principale (bouton content) de l'action secondaire (bouton étoile/action)
- **Signal review** : dans tout composant liste avec actions inline, vérifier qu'aucun élément interactif n'est imbriqué dans un autre
- Contexte technique : HTML / accessibilité — RL799_V2 06-04-2026
---
## Fire-and-forget sans feedback sur actions non-critiques
### Risques
- Une action asynchrone non-critique (cache IndexedDB, analytics, sync) lancée en fire-and-forget sans feedback masque les échecs
- L'utilisateur croit que l'action est faite (ex: document disponible hors-ligne) alors qu'elle a échoué
### Symptômes
- `.then(...).catch(() => {})` sur une action secondaire
- `catch { /* ignore */ }` sans log ni feedback visuel
### Bonnes pratiques / mitigations
- Même si l'action est non-bloquante, afficher un feedback discret en cas d'échec (toast, badge absent)
- L'utilisateur doit pouvoir distinguer "fait" de "échoué silencieusement"
- **Signal review** : tout `.catch(() => {})` ou `catch { /* ignore */ }` mérite au minimum un log ou un feedback visuel
- Contexte technique : frontend / actions async — RL799_V2 07-04-2026
---
## Monorepo ESM — shim runtime `.js` désynchronisé de l'index TypeScript
### Risques
- Le typecheck passe mais le runtime navigateur casse (`named export not found`).
### Symptômes
- Erreur Vite/browser sur export absent alors que `index.ts` est correct.
### Bonnes pratiques / mitigations
- Si un shim `.js` est maintenu, imposer une mise à jour miroir à chaque nouvel export.
- Ajouter un test/guard de cohérence exports TS vs JS shim.
- Contexte technique : monorepo / ESM shim runtime — RL799_V2 15-04-2026
---
## ESLint flat config TypeScript sans `tsconfigRootDir`
### Risques
- Erreurs de parsing massives en IDE/monorepo selon CWD d'exécution.
### Symptômes
- `No TsConfigRootDir` / `Cannot read tsconfig.json` alors que le build TS passe.
### Bonnes pratiques / mitigations
- Toujours définir `tsconfigRootDir: import.meta.dirname` quand `parserOptions.project` est utilisé.
- Redémarrer le serveur ESLint après correction.
- Contexte technique : tooling / ESLint flat config — RL799_V2 17-04-2026
---
## PWA + auth cookie httpOnly — stratégie de cache non maîtrisée
### Risques
- Réponses sensibles servies depuis cache offline.
- Comportement d'auth incohérent entre réseau/cached.
### Symptômes
- Session/app state divergents après activation SW ou reprise réseau.
### Bonnes pratiques / mitigations
- Exclure explicitement les routes authentifiées sensibles du cache persistant.
- Définir une stratégie stricte par classe de route (auth, API privée, assets publics).
- Contexte technique : PWA / service worker / auth cookie — RL799_V2 18-04-2026
---
## PWA install prompt — capture tardive de `beforeinstallprompt`
### Risques
- Événement perdu au cold boot, prompt jamais proposé.
### Symptômes
- Implémentation correcte en apparence mais aucun déclenchement sur Android.
### Bonnes pratiques / mitigations
- Installer l'écouteur le plus tôt possible dans le cycle d'initialisation.
- Ne pas baser la détection iOS uniquement sur l'UA (cas iPad en mode desktop).
- Contexte technique : PWA / install prompt — RL799_V2 18-04-2026
---