batchCooking/specs
Nicolas d98f3450c0 feat(convention): impose try/catch autour de chaque await/corps async
Nouvelle règle de dev : aucun await nu, et un corps de fonction/méthode
async doit intégralement vivre dans un try/catch (pas seulement la ou
les lignes qui awaitent). Documentée dans specs/dev-conventions.md avec
son périmètre (code applicatif — services/hooks/composants/middlewares
— routes *.routes.ts exemptées car déjà couvertes par
wrapAsyncHandler ; tests et scripts one-off exemptés aussi).

Appliqué rétroactivement à tout le code applicatif qui ne l'était pas
déjà :
- api : auth/house/profile/preferences/planning/reference/recipe/
  sources .service.ts, recipe-source-sync.ts, recipe-translation.ts,
  ingredient-matcher.ts, tech-step-matcher.ts, json-ld-recipe.ts,
  the-meal-db.ts — un try/catch par fonction async, rethrow simple
  (le middleware d'erreur logge déjà tout centralement, voir
  error-logger.ts) sauf quand un catch avait déjà une logique propre
  (ex. le retry de createHouse).
- web : api/client.ts (_request), AuthContext.tsx, ThemeContext.tsx,
  AppLayout.tsx (handleLogout), HouseholdSettingsPage.tsx (handleCopy/
  handleRemove/handleDelete/handleLeave) — la plupart des handlers de
  formulaire avaient déjà ce pattern, seuls ceux qui laissaient un
  await nu ont été corrigés.

lint/complexity/noUselessCatch désactivé dans biome.json (interdisait
justement le catch-qui-rethrow que cette convention impose).

Vérifié : tsc --noEmit (api+web), biome check (0 erreur, repo entier),
build complet, 303 tests API, vérification live navigateur (thème,
déconnexion, copie du code d'invitation).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 12:00:39 +02:00
..
backend-architecture.md refactor(api): regroupe lib/ par sous-domaine au lieu d'un dossier à plat 2026-08-21 11:21:49 +02:00
batch-cooking-architecture.md refactor(api): regroupe lib/ par sous-domaine au lieu d'un dossier à plat 2026-08-21 11:21:49 +02:00
batch-cooking-modele.md refactor(web): regroupe features/recipes/ par sous-domaine au lieu d'un dossier à plat 2026-08-21 11:15:17 +02:00
dev-conventions.md feat(convention): impose try/catch autour de chaque await/corps async 2026-08-21 12:00:39 +02:00
error-handling.md docs: met à jour README et specs/ avec l'état réel du code 2026-08-21 08:24:58 +02:00
frontend-architecture.md refactor(web): regroupe features/recipes/ par sous-domaine au lieu d'un dossier à plat 2026-08-21 11:15:17 +02:00