capitalisation: intégrer 12 entrées depuis app-alexandrie et app-template-resto

- backend/risques/nestjs : guard multi-statut READ_METHODS avant statut
- backend/patterns/nestjs : fusionner lastSeenAt dans la réconciliation
- backend/risques/contracts : pas de process.env dans services/helpers
- backend/risques/nextjs : self-request Server Action + EXDEV atomic write
- backend/risques/prisma : champ enum-like stocké en String
- frontend/risques/general : Alert.prompt iOS-only
- frontend/risques/tests : 3 anti-patterns (helpers copiés, test indirect, test façade)
- workflow/risques/story-tracking : 2 entrées (hors périmètre, File List approximative)
- skill capitalisation-triage : nouveau format de rapport (tableaux par domaine)
- 95_a_capitaliser.md : purgé
This commit is contained in:
MaksTinyWorkshop
2026-03-31 14:47:42 +02:00
parent 80d9d0a48d
commit fc0bec0e2b
11 changed files with 325 additions and 89 deletions

View File

@@ -73,3 +73,50 @@ return buildLocalizedPath(locale, "home");
- Retourner `null` (accès non bloqué) plutôt que de boucler
- Contexte technique : Next.js App Router / feature flags tenant — app-template-resto 17-03-2026
---
<a id="risque-server-action-self-request"></a>
## Server Action : self-request / loopback HTTP vers sa propre API
### Risques
- Latence réseau inutile (aller-retour HTTP interne)
- Fragilité sur `APP_URL` en environnement Docker (loopback non résolu)
- Double authentification (cookies reconstitués manuellement)
- Surface d'attaque SSRF
### Symptômes
- `fetch(process.env.APP_URL + '/api/...')` dans une Server Action
- Reconstitution manuelle de cookies de session dans l'appel
### Bonnes pratiques / mitigations
- Une Server Action peut importer et appeler directement des modules marqués `server-only` sans `fetch` interne — les deux s'exécutent côté serveur.
- **Règle** : si tu te retrouves à reconstituer des cookies de session pour faire un `fetch` vers ta propre API depuis une Server Action, c'est le signal que l'appel doit être direct.
- Contexte technique : Next.js App Router / Server Actions — app-template-resto 31-03-2026
---
<a id="risque-exdev-atomic-write"></a>
## Écriture atomique (tmp + rename) : EXDEV si tmp sur device différent
### Risques
- `rename()` lève `EXDEV` si le fichier temporaire et la destination sont sur deux devices différents (cas courant Docker bind-mount).
- L'erreur survient uniquement en production (Docker) — invisible en dev local.
### Symptômes
- `Error: EXDEV: cross-device link not permitted, rename '/tmp/...' → '/data/...'`
- Upload de fichier fonctionnel en dev, cassé en production Docker
### Bonnes pratiques / mitigations
- Créer le fichier temporaire dans **le même répertoire** que la destination finale, pas dans `os.tmpdir()`.
- S'assurer que le répertoire cible existe avant l'écriture du fichier temporaire.
- **Règle** : `os.tmpdir()` est interdit pour les fichiers qui seront renommés vers un volume Docker bind-mounté.
- Contexte technique : Node.js / Docker / fichiers media — app-template-resto 31-03-2026