capitalisation: intégration 28 entrées knowledge + 2 CLAUDE.md RL799_V2 (triage branche mcp_v1)

28 nouvelles sections intégrées dans 12 fichiers knowledge (backend risques/patterns,
frontend risques/patterns, workflow risques). Couvre rate limiting, RGPD, CSP Next.js,
refresh token TOCTOU, catch-all Prisma, distinction 401/403, tests E2E Playwright, etc.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
MaksTinyWorkshop
2026-04-08 20:11:02 +02:00
parent 72758c1adc
commit 7767f1f947
12 changed files with 662 additions and 0 deletions

View File

@@ -112,3 +112,26 @@ if (user === null || user.role !== 'ADMIN') return <View />;
- **Règle** : tout guard de rôle dans un composant React Native doit utiliser `useEffect` + redirect + rendu vide, jamais un return conditionnel direct
- Contexte technique : React Native / Expo Router / Zustand auth — app-alexandrie 24-03-2026
---
<a id="risque-tests-structurels-obsoletes-migration-auth"></a>
## Tests structurels obsolètes après migration du mécanisme d'auth
### Risques
- Lors de la migration d'un pattern `Authorization: Bearer` vers des cookies httpOnly, les tests structurels (qui mocquent `getSession()` et assertent sur les headers) deviennent tous faux sans que TypeScript ne détecte rien
- Les mocks ne matchent plus le code réel, les tests passent ou échouent silencieusement
### Symptômes
- Tests frontend qui mocquent `getSession()` et assertent `Authorization: Bearer` sur les appels `fetch`, alors que le code utilise désormais `apiFetch` avec cookies (`credentials: 'include'`)
- Faux positifs : les tests ne testent plus rien de réel
### Bonnes pratiques / mitigations
- Après toute migration d'un mécanisme d'auth frontend, auditer systématiquement les tests de services pour vérifier que les assertions portent sur le bon mécanisme (cookies vs headers)
- Adapter les mocks pour patcher `apiFetch` au lieu de `getSession` + `fetch` brut
- **Signal review** : `Authorization: Bearer` dans les tests alors que le code production utilise `credentials: 'include'`
- Contexte technique : Vue 3 / auth migration — RL799_V2 08-04-2026

View File

@@ -254,3 +254,26 @@ const routes = [
- Ajouter un test qui valide la synchro sur changement de query param (même composant réutilisé, navigation intra-page)
- Contexte technique : Vue 3 / Vue Router 4 — RL799_V2 02-04-2026
---
<a id="risque-vue-router-tests-textuels-guards"></a>
## Vue Router — faux sentiment de sécurité avec tests textuels sur guards
### Risques
- Des assertions de type `content.includes("requiresRoles: ['admin']")` valident la présence de configuration mais pas le comportement réel du `beforeEach`
- Un changement dans le guard redirige mal (`login` vs `home`) ou ignore un cas RBAC sans casser les tests
### Symptômes
- Les tests passent alors qu'un changement dans le guard redirige vers la mauvaise page
- Régressions de guard runtime invisibles aux tests
### Bonnes pratiques / mitigations
- Ajouter au moins un test runtime qui exécute effectivement la logique du guard (session admin/non-admin) et vérifie la valeur retournée par le guard (`true` ou `{ name: 'home' }`)
- Les tests textuels (`includes`) sont acceptables comme smoke structurel mais ne doivent pas être la seule couverture des guards de navigation
- **Signal review** : guards de navigation couverts uniquement par des tests `includes()` sans test comportemental
- Contexte technique : Vue 3 / Vue Router 4 / node:test — RL799_V2 08-04-2026

View File

@@ -148,3 +148,26 @@ source_projects: [app-alexandrie, app-template-resto, RL799_V2]
- **Règle** : si un test vérifie un *comportement* (ex: "le menu se ferme après clic"), il doit monter le composant, pas chercher une string dans le source
- Contexte technique : Vue 3 / node:test — RL799_V2 02-04-2026
---
<a id="risque-catch-false-test-skip-e2e"></a>
## Anti-pattern : `.catch(() => false)` + `test.skip` dans les tests E2E
### Risques
- Le pattern `await locator.isVisible().catch(() => false)` suivi de `test.skip(true, ...)` masque les erreurs réelles (sélecteur cassé, timeout, changement de structure) derrière un skip silencieux
- Un AC peut rester perpétuellement non testé sans qu'aucun rapport ne le signale comme problème
### Symptômes
- Tests skippés en permanence dans les rapports CI
- AC marqués `[x]` dans la story mais jamais réellement validés
### Bonnes pratiques / mitigations
- Pour vérifier si un élément optionnel est présent (données dépendantes du seed), utiliser `await locator.count()` qui retourne 0 sans lancer d'exception, puis `test.skip` uniquement si count === 0
- Réserver `.catch()` aux cas où une exception est réellement attendue et documentée
- **Signal review** : `.catch(() => false)` suivi de `test.skip` dans un test E2E
- Contexte technique : Playwright / E2E — RL799_V2 08-04-2026