5.5 KiB
5.5 KiB
Changelog — Expria Backend
Toutes les modifications notables du backend sont documentées dans ce fichier.
Format basé sur Keep a Changelog.
[Unreleased] — 2026-04-25 — Fix health check keepalive Supabase
Changed
- Route
GET /: ajout d'un ping Supabase (profiles.select('id', { head: true }).limit(1)) à chaque appel. Garde le pool de connexions DB actif via les pings UptimeRobot (toutes les 5 min). Réponse enrichie :{ message, db: 'connected' | 'error' }. Toujours 200 (liveness, pas readiness).
[Unreleased] — 2026-04-22 — Sprint 3.6a — Qualité correction Backend
Added
- Nouveaux prompts DeepSeek spécifiés dans
docs/Prompt_maître.mdetdocs/Prompt_production_modèle.md— builders dynamiquesbuildCorrectionPrompt,buildModelPrompt,buildExercicesPromptdanssrc/lib/deepseek.ts. expria-frontend/docs/TAXONOMIE_ERREURS.md— 63 codes d'erreurs TCF Canada sur 4 critères + 4 codes « autre ». Validation runtime viasrc/lib/taxonomieErreurs.ts(isValidCode,isValidCritere,buildTaxonomyPromptSection). Codes invalides retournés par DeepSeek sont filtrés ; le codeautresans description est rejeté.- Génération parallèle correction + modèle — option (b) :
generateProductionModeledémarre en même temps quecorrectEEavecnclcObtenu = nclcCible - 1comme estimation provisoire,awaituniquement sur la correction pour répondre à la requête HTTP. - Exercices personnalisés fire-and-forget déclenchés après la résolution de la correction (dépendent de
rapport.erreurs_codesetrapport.criteres). Format aligné sur les captures d'écran :{difficulte, theme, diagnostic, consigne, extrait, indice, correction, explication}. - Nouveaux champs dans
productions:revelation(JSONB),diagnostic(TEXT),conseil_nclc(JSONB),erreurs_codes(JSONB),exercices(JSONB),modele(JSONB),nclc_cible(INTEGER),exercices_status/modele_status(TEXT, 'pending'/'ready'/'error'). - Migration SQL
supabase/migrations/004_sprint_3_6a_qualite_correction.sql— première migration versionnée du projet (cf. backend TD-06) ; idempotente grâce àIF NOT EXISTS. - Paramètre
nclc_cibleoptionnel surPOST /corrections/ee(défaut 9, valeurs acceptées : 9 ou 10 ; sinon 400 VALIDATION_ERROR). - Index GIN sur
erreurs_codespour préparer l'agrégation du Sprint 3.6c (analyse patterns). - Nouveau fichier de tests
src/controllers/__tests__/correctionController.test.ts— 8 tests (parallélisme option b, statuts ready/error, nclc_cible propagé, simulation introuvable, autre utilisateur). - 2 tests ajoutés à
simulationController.test.ts—getByIdrenvoienclc_cible,exercices,modele+ statuts. - Logs d'erreur détaillés :
callDeepSeekclassifie TIMEOUT / ABORT / JSON_PARSE / NETWORK / OTHER ;correctionController.correctEElogue{simulationId, tache, nclcCible, message, stack}avant de retourner 500. - FTD-23 🟡 ajoutée dans
expria-frontend/docs/TECH_DEBT.md—useAutosavepeut fire un PATCH/simulations/:id/contenuaprès correction, ce qui retourne 400 VALIDATION_ERROR. À corriger dans une session dédiée (préexistant au Sprint 3.6a, détecté lors des tests manuels).
Changed
correctEEdanssrc/lib/deepseek.ts— nouvelle signaturecorrectEE(CorrectionInput)(contenu, tache, sujet, sourceDoc1/2, nclcCible) et nouvelle forme de retourCorrectionRapport(revelation, diagnostic, criteres avec exemple/suggestion/astuce, conseil_nclc, erreurs_codes).EERapportdevient alias deCorrectionRapport. EO inchangé.correctionController.correctEE— charge le sujet + documents T3 depuis Supabase pour alimenter le prompt maître ; persiste les nouveaux champs (revelation, diagnostic, conseil_nclc, erreurs_codes, nclc_cible) + statuts pending initiaux ; lancerunModeleJoben parallèle (option b) etrunExercicesJobaprès correction.simulationController.getById— retourne désormaisnclc_cible,exercices,exercices_status,modele,modele_statusen plus durapportenrichi ; fallback'pending'si les colonnes sont absentes (compat avec productions pré-migration).- Timeout DeepSeek côté backend :
callDeepSeekabort à 55 s viaAbortSignal.timeout(55_000)(avant : aucun timeout) ; timeout frontend corrections monte de 30 s à 60 s — marge de 5 s entre abort backend et abort client. - Routes
/simulations/*: réorganisation défensive — lesPATCH /:id/contenuetPATCH /:id/sujetsont déclarées avantGET /:idpour éviter tout risque de masquage. deepseek.test.tsréécrit (25 tests) — couvre correctEE nouvelle signature, generateProductionModele, generateExercices, helpers post-traitement, EO inchangé.
Notes
- Option A retenue pour la compatibilité frontend : backend renvoie uniquement la nouvelle forme. Le Sprint 3.6b (frontend) est immédiatement suivant et corrige l'écran blanc sur
RapportPage. - Option (b) retenue pour le parallélisme : modèle en parallèle avec correction (nclcObtenu estimé), exercices strictement après correction.
- Migration SQL à exécuter manuellement via
supabase db pushou SQL Editor du dashboard (cf. Règle F) — aucune exécution automatique. - Tests : 174 tests verts (+19 vs baseline 155), 18 fichiers de tests.
- TD-15 🟡 ouvert : si le process redémarre pendant un job fire-and-forget (modèle/exercices), le statut reste
pendingindéfiniment. À traiter après observation en production.