mirror of
https://github.com/siop-spelev/siop2.git
synced 2026-08-08 12:41:54 +00:00
fix(mobile): dictée validée sur iPhone physique — 2 bugs réels corrigés
setAudioModeAsync({allowsRecording:true}) manquant avant recorder.record()
(RecordingDisabledException iOS) ; EXPO_USE_PRECOMPILED_MODULES/
RCT_USE_PREBUILT_RNCORE jamais persistés dans .env (documentés dans ADR-005
mais seulement exportés en shell ad-hoc) — corrigé pour que tout rebuild
depuis zéro ne reproduise plus le crash dyld. Recette terrain complète
vérifiée : dictée → note → clôture → réindexation → recherche sémantique.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -80,6 +80,18 @@
|
||||
- Implémentée et vérifiée le 22/07/2026 : transcription réelle (français, voix de
|
||||
synthèse) juste et rapide en local, bout en bout via l'API NestJS, et dans l'image
|
||||
Docker de production construite pour l'occasion (modèle embarqué, aucun téléchargement
|
||||
au démarrage). **Reste** : le test tactile sur iPhone physique (bouton dicter, permission
|
||||
micro) n'a pas pu se jouer — blocage USB persistant malgré câble/port/redémarrage
|
||||
multiples, reporté comme la recette Android (attend un accès matériel qui fonctionne).
|
||||
au démarrage). Le test tactile sur iPhone physique n'avait pas pu se jouer ce jour-là
|
||||
(blocage USB), reporté.
|
||||
- **Recette terrain sur iPhone physique complétée le 01/08/2026** : micro, dictée réelle,
|
||||
transcription fidèle, sauvegarde dans le bilan, clôture, puis retrouvée par la recherche
|
||||
sémantique après réindexation — la chaîne complète (D5) est validée sur vrai matériel.
|
||||
Deux bugs réels trouvés et corrigés en route :
|
||||
1. `expo-audio` sur iOS refuse `recorder.record()` tant que la session audio n'a pas
|
||||
été explicitement autorisée à enregistrer — `RecordingDisabledException`, corrigée
|
||||
par un appel à `setAudioModeAsync({ allowsRecording: true })` avant l'enregistrement
|
||||
(et remis à `false` après, par hygiène — le micro ne reste pas « armé »).
|
||||
2. Le contournement des modules Expo/RN précompilés (`EXPO_USE_PRECOMPILED_MODULES=0`,
|
||||
`RCT_USE_PREBUILT_RNCORE=0` — ADR-005) n'avait **jamais été rendu permanent** dans
|
||||
`apps/mobile/.env`, contrairement au correctif FormData voisin : une reconstruction
|
||||
ultérieure sans ces variables aurait reproduit le crash au lancement déjà documenté.
|
||||
Désormais committé aux côtés de `EXPO_PUBLIC_USE_RN_FETCH`.
|
||||
|
||||
@@ -4,6 +4,39 @@ Trace chronologique des sessions (la plus récente en premier). Le **playbook**
|
||||
|
||||
---
|
||||
|
||||
## 2026-08-01 — Pr. Daaif (+ Claude) — Dictée validée sur iPhone physique (ADR-004 §5)
|
||||
|
||||
**Actions**
|
||||
|
||||
- Reprise du reste laissé le 22/07 : le test tactile de la dictée sur iPhone, alors bloqué par une connexion
|
||||
USB qui ne se rétablissait pas. Diagnostic cette fois : `system_profiler` (l'outil utilisé pour vérifier la
|
||||
détection USB) était lui-même en panne et renvoyait un faux négatif silencieux — `ioreg` a révélé que
|
||||
l'iPhone était en réalité détecté. Le vrai câble/port n'a jamais été le problème.
|
||||
- Une fois l'app reconstruite (certificat gratuit expiré après plus d'une semaine — régénéré via le pipeline
|
||||
officiel `expo run:ios`, jamais par un contournement manuel), **deux bugs réels trouvés et corrigés** :
|
||||
1. `expo-audio` sur iOS refuse d'enregistrer sans un appel explicite à `setAudioModeAsync({ allowsRecording:
|
||||
true })` avant `recorder.record()` — absent du code initial, jamais détecté hors d'un vrai appareil.
|
||||
2. Le correctif des modules Expo/RN précompilés (ADR-005, `EXPO_USE_PRECOMPILED_MODULES=0` /
|
||||
`RCT_USE_PREBUILT_RNCORE=0`) n'avait **jamais été committé** dans `apps/mobile/.env`, contrairement au
|
||||
correctif FormData voisin déjà permanent — un vrai trou qui aurait refait planter l'app à la prochaine
|
||||
reconstruction depuis zéro. Corrigé : les deux variables vivent maintenant côte à côte dans `.env`.
|
||||
- **Recette réelle bout en bout** : micro → dictée d'une phrase → transcription fidèle (`faster-whisper` réel)
|
||||
→ relecture → sauvegarde dans le bilan → clôture de l'OT → réindexation du corpus → **le contenu dicté
|
||||
retrouvé par la recherche sémantique** (score 0,476). La boucle complète de l'idée d'origine (« cette
|
||||
transcription devrait alimenter le corpus ») est validée sur vrai matériel, vraie voix, vrai réseau.
|
||||
- Infra locale relancée depuis zéro après une semaine d'inactivité (Docker, conteneurs `siop2-*`, API,
|
||||
service IA) — occasion de vérifier que le redémarrage à froid fonctionne proprement.
|
||||
|
||||
**Décisions**
|
||||
|
||||
- Aucune — cette session referme un reste déjà décidé, sans nouvelle décision de conception.
|
||||
|
||||
**Prochaine étape** : recette Android sur appareil physique (toujours en attente d'un appareil) ; redéploiement
|
||||
Dokploy (`AI_SERVICE_TOKEN`) ; calibrage `AI_SEUIL_*` et qualité darija sur corpus SPELEV réel ; secret
|
||||
`DOKPLOY_WEBHOOK_URL`.
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-22 — Pr. Daaif (+ Claude) — Dictée implémentée : audio → transcription locale → corpus (ADR-004 §5)
|
||||
|
||||
**Actions**
|
||||
|
||||
Reference in New Issue
Block a user