- New ADR-007: architecture decision to migrate T1+T2 Live audio
from Gemini Live to decoupled Deepgram (STT nova-3 + DeepSeek
LLM + Aura-2 TTS), following conclusive POC. Two-phase plan:
parallel module behind EO_STT_PROVIDER flag, then full cutover
with Gemini Live code removal (no long-term dual-stack intent).
- ROADMAP.md: new Sprint 7c (migration, high-level entry, detailed
breakdown deferred to dedicated planning session). Note added
on Sprint 7e (TD-23 caveat resolved once Deepgram is live,
streaming-native transcription).
- TECH_DEBT.md v1.32: FTD-45/46 stay frozen (§3bis), resolution
path now points to ADR-007. No active FTD cap breach (15
unchanged) — deliberate choice to defer reopening until
Sprint 7c execution begins.
Docs only, no code changes.
- TECH_DEBT.md v1.31: FTD-44 resolved (audio hooks relocated to
shared/lib/audio/, see d9160c4). New FTD-47 (T1 Live sessions
untagged in historique, discovered during doc review). 14 -> 15
active FTD, cap reached.
- CHANGELOG.md: new Sprint 7.5 Clean entry.
- GOLDEN_DATASET.md v1.1: Groupe D extended with D12-D16 (T1 Live
manual test coverage), documenting the tache tag divergence
(EO_T1 vs expected EO_T1_LIVE) and the probabilistic
interruption caveat (cross-ref FTD-45/46).
No code changes.
Move useAudioCapture, useAudioPlayback, useAudioRecording (+ test)
from features/t2-live/hooks/ to shared/lib/audio/. Update imports
in useT2LiveSession.ts and useT1LiveSession.ts, remove TODO(FTD-44)
markers. No functional change ("Voie A" audio pipeline intact).
Dérogation Règle B assumée pour useAudioRecording (4 fichiers/vague
au lieu de 3) : hook et test déplacés ensemble pour préserver le
chemin d'import relatif (../useAudioRecording), condition nécessaire
au respect de Règle C (jamais rouge entre étapes).
Validated manually: T2 Live D2-D5, T1 Live full flow (private
browsing). 301/301 tests, 0 typecheck errors.
- scripts/sync-roadmap.mjs : copie ROADMAP frontend (source de verite) vers backend (copie generee).
- Garde sens-unique : identite de chemins resolus + refus si cible dans le repo source + casse win32.
- Validation source (existe, non vide, header attendu) ; diff + confirmation y/N ; flag --check (dry-run).
- Banniere auto-generee en tete de la copie backend (NE PAS EDITER A LA MAIN), ignoree au diff (idempotent).
- Pas de commit auto : rappelle la marche a suivre manuelle.
- alias npm sync:roadmap.
- Reconciliation des deux copies divergentes (frontend/backend) en version canonique.
- Sprint 6 marque complet (6b/6c/6d backend/6e), note 6d backend reinjectee (commits 94387a7/5f7e52d).
- Sprint 7a (T1 Live backend) marque livre : commits 868bd09/3722e2a, dettes tracees TD-23/24/25.
- Sprint 7e (transcription live a l'ecran) reinjecte + annote post-7a (caveat TD-23 : incremental cote candidat a reconcevoir, flush a activityEnd en VAD manuel).
- Voie A WAV : AudioContext unique au rate natif, tap AudioWorklet sur mixGain, uplink rate-aware 16k, alignement par horloge unique (fin offset/resample/concat). Anti-echo candidat. Cycle start=ws.onopen / stop=Terminer / cancel=aucun WAV.
- Bug 4 : 'Voir le rapport' route vers le rapport (navigatingAwayRef).
- Bug 5 : 'Annuler' (cancelDialogue) - arret sans evaluation, sans WAV, sans production.
- Bug 6 : 'Nouvelle simulation' route selon le type via champ tache propage (Report).
- Indicateur de prise de parole : state machine USER_SPEAKING/USER_SILENT (RMS + hysteresis).
- Cleanup : retrait instrumentation [BISECT] ; ref VAD renomme lastAiChunkTsRef.
- Removed : code mort mixTracksToInt16, resample16kTo24k + tests.
handleIdees envoyait la consigne du sujet comme contenu_partiel, déclenchant
l'anti-blanc sans effort du candidat et provoquant un 400 sur les sujets à
consigne courte (< 30 mots). Envoie désormais les notes réelles du candidat
et désactive le bouton sous 30 mots (tooltip), aligné sur le comportement EE.
Le modal IdeesSuggestions reste le filet VALIDATION_ERROR.
Test: T2PreparationPage.test.tsx (bouton désactivé < 30 mots ; fetchIdees
reçoit les notes ≥ 30 mots).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Inclut le retrait du padding de AppLayout et le wrapper standardisé
(mx-auto w-full max-w-[1100px] px-5 py-6 lg:px-9 lg:py-9) ajouté sur
11 pages (Dashboard, Progression, 9 pages Simulation EE/EO/T1) pour
laisser chaque page gérer son max-width.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Render Starter tier has occasional >5s latency on first authenticated
requests after DB idle period. 15s absorbs cold-path latency without
masking real failures.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- FTD-23: propagate enabled=false to useAutosave when step is done/correcting, preventing 400 PATCH after correction
- FTD-24: add conditional refetchInterval (3s) in useRapport for pending exercices/modele, 2min timeout with retry UI
- 7 new tests (2 regression + 5 polling), 122/122 green
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>