[P1][audio] Ne jamais conserver la capture d'une session annulee #47

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

Avec audio.keep_recordings=true ou policy.retain_diagnostics=true, une annulation apres l'arret de la capture peut laisser un WAV conserve. Release() applique la retention sans tenir compte du resultat terminal ; pendant processing, la copie diagnostique peut deja exister.

Reproduction documentee

Matrice batch/live x annulation pendant transcription/processing, retention active : resultat cancelled, zero appel sink, mais un WAV de 64 044 octets conserve (capture synthetique de deux secondes). Les controles avec retention desactivee passent. La revue indique des repetitions sous -race.

Les anciennes reproductions par overlay etaient sous /tmp/opencode/murmur-p1-overlay_test.go et /tmp/opencode/murmur-p1-overlay.json. Elles ne sont pas versionnees et leur presence actuelle n'est pas garantie. Leurs commandes sont dans la section "Reproductions temporaires" de la revue ; convertir les scenarios en tests du depot.

Correction attendue

Lier la decision de retention a la fermeture atomique de la fenetre d'annulation ou au resultat terminal. Un test ponctuel de ctx.Err() autour de l'appel actuel ne suffit pas : il laisserait une course et manquerait l'annulation pendant processing. Clarifier la propriete et la finalisation de l'audio sans ajouter un framework.

Criteres d'acceptation

  • Les quatre combinaisons batch/live x transcription/processing ne conservent aucun WAV apres annulation, avec chacune des deux options de retention.
  • Aucune livraison apres annulation ; nettoyage des captures et copies diagnostiques appartenant a la session.
  • La retention des sessions non annulees garde le comportement documente.
  • Tests de combinaison versionnes et repetes sous -race, y compris controles retention desactivee.

Validation cible : go test -race ./internal/audio ./internal/audio/pwrecord ./internal/session, puis suite complete.
Connexes : #8 (finalisation et erreurs de nettoyage), #9 (retenir le snapshot valide). Ces tickets ne couvrent pas a eux seuls la decision de retention apres annulation.

## 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 Avec `audio.keep_recordings=true` ou `policy.retain_diagnostics=true`, une annulation apres l'arret de la capture peut laisser un WAV conserve. `Release()` applique la retention sans tenir compte du resultat terminal ; pendant processing, la copie diagnostique peut deja exister. - [internal/audio/recorder.go:44-51](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/audio/recorder.go#L44-L51) : decision de retention dans `Release`. - [internal/session/orchestrator.go:376-390](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/session/orchestrator.go#L376-L390) : finalisation live. - [internal/session/orchestrator.go:490-493](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/internal/session/orchestrator.go#L490-L493) : liberation batch avant processing. - [Revue, constat P1 n. 1](https://git.2027a.net/mathieu/murmur/src/commit/f48f1bd4a6db1c488b8ccc0a87fefb547101db2b/docs/code-review-2026-09-04.md#L43-L80). ## Reproduction documentee Matrice batch/live x annulation pendant transcription/processing, retention active : resultat `cancelled`, zero appel sink, mais un WAV de 64 044 octets conserve (capture synthetique de deux secondes). Les controles avec retention desactivee passent. La revue indique des repetitions sous `-race`. Les anciennes reproductions par overlay etaient sous `/tmp/opencode/murmur-p1-overlay_test.go` et `/tmp/opencode/murmur-p1-overlay.json`. Elles ne sont pas versionnees et leur presence actuelle n'est pas garantie. Leurs commandes sont dans la section "Reproductions temporaires" de la revue ; convertir les scenarios en tests du depot. ## Correction attendue Lier la decision de retention a la fermeture atomique de la fenetre d'annulation ou au resultat terminal. Un test ponctuel de `ctx.Err()` autour de l'appel actuel ne suffit pas : il laisserait une course et manquerait l'annulation pendant processing. Clarifier la propriete et la finalisation de l'audio sans ajouter un framework. ## Criteres d'acceptation - [ ] Les quatre combinaisons batch/live x transcription/processing ne conservent aucun WAV apres annulation, avec chacune des deux options de retention. - [ ] Aucune livraison apres annulation ; nettoyage des captures et copies diagnostiques appartenant a la session. - [ ] La retention des sessions non annulees garde le comportement documente. - [ ] Tests de combinaison versionnes et repetes sous `-race`, y compris controles retention desactivee. Validation cible : `go test -race ./internal/audio ./internal/audio/pwrecord ./internal/session`, puis suite complete. Connexes : #8 (finalisation et erreurs de nettoyage), #9 (retenir le snapshot valide). Ces tickets ne couvrent pas a eux seuls la decision de retention apres annulation.
Owner

Corrigé : PR #54, merge e6dda84 intégré à main via PR #53 (1ee7178) : rétention décidée après le résultat terminal, Discard en cas d’annulation. 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 #54, merge e6dda84 intégré à main via PR #53 (1ee7178) : rétention décidée après le résultat terminal, Discard en cas d’annulation. 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#47
No description provided.