[P1][session] Eviter le blocage du chunking live apres stop et echec STT #48

Closed
opened 2026-09-09 01:52:32 +00:00 by silex · 1 comment
Owner

Provenance

Suivi de la revue du 4 septembre 2026.
Chemin local : /home/mathieu/Projets/murmur/docs/code-review-2026-09-04.md.
Revue initiale sur 69a2e643, actualisee sur fcd52c78a765322ae60a8ab74bb30daa6f8f90c6.
Les liens ci-dessous sont figes sur f48f1bd4a6db1c488b8ccc0a87fefb547101db2b, HEAD local et distant verifie le 8 septembre 2026.
Les reproductions sont celles consignees dans la revue ; le comparatif Voxtype du 8 septembre a relu les chemins, sans relancer ces tests ni le desktop.
Tous les chemins relatifs Murmur partent de /home/mathieu/Projets/murmur/.

Constat et chemins revus

Apres stop, l'orchestrateur attend la finalisation audio sans continuer a surveiller la terminaison STT. Si le consommateur termine prematurement sur depassement de budget, le forwarder et le recorder peuvent rester bloques a emettre les derniers segments.

Reproduction documentee

Un worker, plusieurs segments en attente, puis reponse depassant max_text_bytes apres reception de SIGINT. Le STT retourne son erreur, mais la session reste stopping. Le microphone est arrete ; la session reste occupee et n'a pas de resultat final. Un cancel supplementaire debloque mais remplace l'erreur attendue par cancelled.

Le controle avec budget suffisant termine completed et livre une seule fois. La variante max_text_bytes a ete reproduite sous -race ; max_segments n'a pas ete executee separement lors de la revue.

Anciennes fixtures temporaires : /tmp/opencode/murmur-p1-overlay_test.go et /tmp/opencode/murmur-p1-overlay.json, non versionnees, presence actuelle non garantie. Commandes dans la section "Reproductions temporaires" de la revue.

Correction attendue

Surveiller simultanement l'arret audio et le resultat STT pendant tout le drainage. Si le consommateur termine prematurement, annuler/debloquer les producteurs tout en preservant la cause STT initiale. Ne pas masquer le blocage avec un timeout arbitraire plus long.

Criteres d'acceptation

  • Le scenario apres stop termine sans cancel supplementaire, avec l'erreur de limite d'origine.
  • Aucun sink appele apres depassement fatal, aucune goroutine ou capture abandonnee, session suivante possible.
  • Tests synchronises par barrieres, avec backlog et un worker, pour echec avant et pendant drainage.
  • Couvrir max_text_bytes, evaluer max_segments, verifier annulation concurrente.
  • Le controle dans le budget livre exactement une fois ; repetitions sous -race.

Validation cible : go test -race ./internal/audio/pwrecord ./internal/session ./internal/stt, puis suite complete.
Ne pas confondre ce correctif de terminaison avec l'optimisation de latence/segmentation.

## Provenance Suivi de la [revue du 4 septembre 2026](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/docs/code-review-2026-09-04.md). Chemin local : `/home/mathieu/Projets/murmur/docs/code-review-2026-09-04.md`. Revue initiale sur `69a2e643`, actualisee sur `fcd52c78a765322ae60a8ab74bb30daa6f8f90c6`. Les liens ci-dessous sont figes sur `f48f1bd4a6db1c488b8ccc0a87fefb547101db2b`, HEAD local et distant verifie le 8 septembre 2026. Les reproductions sont celles consignees dans la revue ; le comparatif Voxtype du 8 septembre a relu les chemins, sans relancer ces tests ni le desktop. Tous les chemins relatifs Murmur partent de `/home/mathieu/Projets/murmur/`. ## Constat et chemins revus Apres `stop`, l'orchestrateur attend la finalisation audio sans continuer a surveiller la terminaison STT. Si le consommateur termine prematurement sur depassement de budget, le forwarder et le recorder peuvent rester bloques a emettre les derniers segments. - [internal/session/orchestrator.go:301-305](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/session/orchestrator.go#L301-L305) : forwarder de segments. - [internal/session/orchestrator.go:354-377](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/session/orchestrator.go#L354-L377) : attente de finalisation apres stop. - [internal/audio/pwrecord/live.go:174-180](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/audio/pwrecord/live.go#L174-L180) : emission de segment. - [internal/audio/pwrecord/live.go:201-233](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/audio/pwrecord/live.go#L201-L233) : arret et attente. - [Revue, constat P1 n. 2](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/docs/code-review-2026-09-04.md#L82-L126). ## Reproduction documentee Un worker, plusieurs segments en attente, puis reponse depassant `max_text_bytes` apres reception de SIGINT. Le STT retourne son erreur, mais la session reste `stopping`. Le microphone est arrete ; la session reste occupee et n'a pas de resultat final. Un `cancel` supplementaire debloque mais remplace l'erreur attendue par `cancelled`. Le controle avec budget suffisant termine `completed` et livre une seule fois. La variante `max_text_bytes` a ete reproduite sous `-race` ; `max_segments` n'a pas ete executee separement lors de la revue. Anciennes fixtures temporaires : `/tmp/opencode/murmur-p1-overlay_test.go` et `/tmp/opencode/murmur-p1-overlay.json`, non versionnees, presence actuelle non garantie. Commandes dans la section "Reproductions temporaires" de la revue. ## Correction attendue Surveiller simultanement l'arret audio et le resultat STT pendant tout le drainage. Si le consommateur termine prematurement, annuler/debloquer les producteurs tout en preservant la cause STT initiale. Ne pas masquer le blocage avec un timeout arbitraire plus long. ## Criteres d'acceptation - [ ] Le scenario apres stop termine sans `cancel` supplementaire, avec l'erreur de limite d'origine. - [ ] Aucun sink appele apres depassement fatal, aucune goroutine ou capture abandonnee, session suivante possible. - [ ] Tests synchronises par barrieres, avec backlog et un worker, pour echec avant et pendant drainage. - [ ] Couvrir `max_text_bytes`, evaluer `max_segments`, verifier annulation concurrente. - [ ] Le controle dans le budget livre exactement une fois ; repetitions sous `-race`. Validation cible : `go test -race ./internal/audio/pwrecord ./internal/session ./internal/stt`, puis suite complete. Ne pas confondre ce correctif de terminaison avec l'optimisation de latence/segmentation.
Owner

Corrigé : PR #53, merge 1ee7178 sur main : surveillance STT pendant Stop et déblocage du producteur avec préservation de la cause. Les deux correctifs sont présents sur origin/main ; fermeture du ticket. Tests de validation et déploiement du commit fusionné en cours.

Corrigé : PR #53, merge 1ee7178 sur main : surveillance STT pendant Stop et déblocage du producteur avec préservation de la cause. Les deux correctifs sont présents sur origin/main ; fermeture du ticket. Tests de validation et déploiement du commit fusionné en cours.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
2027a/murmur#48
No description provided.