docs(knowledge): capitalisation frontend — intégration du triage local (mai-juin 2026)

Triage et intégration des propositions frontend du buffer 95_a_capitaliser.md
(lot local RL799_V2/Vue3 + app-alexandrie/RN-Expo, mai-juin 2026).

~73 entrées intégrées sur knowledge/frontend/ + 1 nouveau fichier, dont :
- patterns/state.md : race-token partagé latest-wins (fusion 3 props), capture sync anti-race,
  event bus timestamp, clé cache composite, état dérivé = computed
- risques/state.md : 9 risques Zustand/store (fetchId reset, useRef remount, re-fetch infini
  sur [], flag optimiste écrasé, cache détail/liste stale, latch sans reset, :key index)
- patterns/navigation.md : Expo Router (tab bar, useFocusEffect, Href typé, routing pur fusionné)
- patterns/general.md : helpers temps purs, composants génériques + skeleton, fail-fast, touch target
- risques/general.md : 24 risques (sweep statique, filtre client liste paginée, hooks avant return,
  a11y VoiceOver/disabled, redirection allowlist, RangeError toISOString, section i18n...)
- design-tokens (cluster theming light/dark MD3), tests, performance, react-native, nextjs
- NOUVEAU risques/responsive.md (gating par capacité d'input + checklist régressions mobile)
- READMEs patterns/risques mis à jour

Doublons inter-fichiers évités (vérifié : aucune ancre dupliquée introduite).
Rejets (doublons 91/9/87), reciblages workflow (156/257) et bloc 32 (CLAUDE projet) non intégrés ici.
Source 95_a_capitaliser.md non purgée (purge en fin de capitalisation complète).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
MaksTinyWorkshop
2026-06-25 15:31:53 +02:00
parent f1b783407a
commit 5f5c87296e
15 changed files with 2439 additions and 12 deletions
+21
View File
@@ -376,3 +376,24 @@ function handleToggle(id: string) {
- **Règle** : tout formulaire d'édition réutilisé pour plusieurs entités doit avoir une `key` distincte par entité
- Contexte technique : React / Next.js — app-template-resto 21-03-2026
---
<a id="risque-correlation-multi-onglets-sessionstorage"></a>
## Corrélation d'un retour multi-onglets : `localStorage`, pas `sessionStorage`
### Risques
- Un flux qui ouvre un NOUVEL onglet (checkout Stripe web, OAuth popup) devant renvoyer un signal corrélé (nonce anti-rejeu) pose le nonce en `sessionStorage`
- `sessionStorage` n'est PAS partagé entre onglets : l'onglet de retour a un `sessionStorage` vide → le nonce n'est jamais transmis → la validation doit être tolérante (accepte les messages sans nonce) donc **inopérante**
### Symptômes
- La corrélation anti-message-forgé devient une no-op silencieuse ; impossible d'exiger la présence du nonce
### Bonnes pratiques / mitigations
- Stocker le nonce en `localStorage` (partagé same-origin entre onglets), jamais en `sessionStorage`
- Avec `localStorage`, le nonce est réellement lisible côté retour → on peut **EXIGER** sa présence (mode strict) au lieu de la tolérer ; nettoyer la clé après usage
- `BroadcastChannel` reste le canal de transport (same-origin) mais ne porte pas l'état de session — d'où le besoin du storage partagé
- Contexte technique : Next.js / web — app-alexandrie (review ux-parcours-1/8 + bo-2), 04-06-2026