Skip to content

fix(genai-audio,#18053): ordre de lecture — 8 constats interprétation/annonce - #18073

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/18053-audio-interp-order
Sep 28, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/18053-audio-interp-order

Conversation

@jsboige

@jsboige jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: MED/docs #18020

Summary

Traite les 8 constats d'ordre de lecture de l'audit multi-agents #18053 sur la série GenAI/Audio (ma tranche assignée). Les 8 lignes étaient CONFIRMED à main : dans chaque cas, soit une annonce (« la cellule suivante… », « le code suivant… ») ne précédait plus la cellule qu'elle annonce, soit une interprétation précédait la sortie qu'elle cite.

Périmètre : 6 notebooks, déplacements de cellules markdown uniquement.

Verdicts ligne par ligne

# Notebook Cellule Constat Verdict Geste
1 01-Foundation/01-1-OpenAI-TTS-Intro.ipynb [30] INTERP_BEFORE_CODE — « ### Interpretation : Résultats session » précède la cellule de statistiques [31] CONFIRMED [30] déplacée après [31]
2 01-Foundation/01-5-Kokoro-TTS-Local.ipynb [33] INTERP_BEFORE_CODE — « ### Interpretation : Statistiques de session » précède la cellule de statistiques [34] CONFIRMED [33] déplacée après [34]
3 02-Advanced/02-2-XTTS-Voice-Cloning.ipynb [31] DANGLING_INTRO — « La cellule suivante recapitule les metriques de session… » annonce les stats, mais [32] = section éthique, stats en [33] CONFIRMED [31] et [32] échangées
4 02-Advanced/02-3-MusicGen-Generation.ipynb [4] DANGLING_INTRO — « La cellule suivante configure l'environnement et verifie la VRAM » mais [5] = « ## Introduction a MusicGen », setup en [6] CONFIRMED [4] déplacée après [5]
5 02-Advanced/02-3-MusicGen-Generation.ipynb [35] DANGLING_INTRO — « La cellule suivante recapitule les résultats… » mais [36] = « ## Bonnes pratiques », stats en [37] CONFIRMED [35] et [36] échangées
6 04-Applications/04-3-Music-Composition-Workflow.ipynb [25] DANGLING_INTRO — « ### Théorie des effets audio » clos par « La cellule suivante implemente ces effets… », alors que le code effets est au-dessus ([23]) CONFIRMED [25] déplacée avant [23]
7 04-Applications/04-4-Audio-Video-Sync.ipynb [11] DANGLING_INTRO — « ### Creation de contenu video avec moviepy » clos par « Le code suivant créé une video de test… », code au-dessus ([10]) CONFIRMED [11] déplacée avant [10]
8 04-Applications/04-4-Audio-Video-Sync.ipynb [21] DANGLING_INTRO — « ### Concept de timeline audio » clos par « Le code suivant implemente la stratégie… », code au-dessus ([20]) CONFIRMED [21] déplacée avant [20]

8/8 CONFIRMED, 0 FALSE POSITIVE. Aucune ligne de l'audit n'a été écartée.

Deux écarts assumés par rapport à la mécanique proposée par l'audit

  1. Constats 3 et 5 — l'audit proposait de déplacer la section (éthique pour 02-2, bonnes pratiques pour 02-3) après la cellule de statistiques. J'ai préféré échanger la cellule de transition avec la section, pour que la transition se retrouve immédiatement avant les stats. Raison : c'est le patron déjà en place dans les notebooks frères de la même série — 01-1 et 01-5 placent tous deux leur section « Bonnes pratiques » avant la cellule de clôture, et 02-2 était déjà dans ce patron (éthique [32] juste avant stats [33]) — le seul défaut était la transition intercalée au mauvais endroit. Déplacer la section après les stats aurait au contraire cassé ce patron.
  2. Aucune autre divergence : constats 1, 2, 4, 6, 7, 8 appliqués tels que proposés.

Correction supplémentaire imposée par le déplacement (constat 1)

Après déplacement, [30] a pour sortie adjacente les statistiques de [31]. Or la cellule citait 690.0 KB et ~12 secondes, quand la sortie committée de [31] porte 553.9 KB et 10.7 s. Laisser ces valeurs aurait créé une violation de C.4 (une interprétation ne cite que des valeurs présentes dans la sortie adjacente). Elles sont alignées sur la sortie réelle ; le temps conserve son marqueur *runtime machine-dep* (règle #9434). Aucune re-exécution n'a été faite — la valeur vient de la sortie déjà committée dans le notebook, pas d'un nouveau run.

Preuves d'exécution et de non-régression

Aucune cellule de code n'est modifiée, donc aucune ré-exécution n'est due (C.2/C.3). Les cellules déplacées sont entières : execution_count et outputs voyagent avec elles.

Contrôle Résultat
Invariant structurel (script de contrôle, HEAD vs arbre) 6/6 notebooks : nombre de cellules identique, jeu d'id identique, ordre des cellules de code identique, execution_count et outputs de chaque cellule de code inchangés. Seule cellule dont le contenu change : 03acbbd0 (01-1, le réalignement de valeurs déclaré ci-dessus).
scripts/notebook_tools/check_exec_sequence.py MyIA.AI.Notebooks/GenAI/Audio 39/39 CLEAN, 0 notebook DIRTY, 0 DUPLICATE / 0 UNORDERED / 0 NOT_FROM_1 / 0 GAP
scripts/notebook_tools/cell_order_ci.py --base <HEAD> --head <arbre> 6/6 notebooks : aucun finding
scripts/notebook_tools/check_cell_source_parses.py (les 6) 0 finding
scripts/notebook_tools/check_duplicate_sections.py (les 6) 3 porteurs (01-1 c.26/27, 01-5 c.17/18, 04-4 c.16/41) — tous pré-existants à main, aucun sur une cellule déplacée

Observations incidentes — signalées, non corrigées ici

  1. L'organe dédié ne couvre pas ce cas. scripts/notebook_tools/check_interp_positioning.py (EPIC EPIC: remise en ordre des cellules d'interpretation mal positionnees (desordre massif introduit par les enrichissements density #10488) #10678) rend 0 finding sur GenAI/Audio avant et après cette PR. Sa détection vise l'interprétation placée avant la section à laquelle appartient la sortie ; le cas traité ici est un cran plus fin — l'interprétation est bien dans sa section, mais placée avant le code de cette section. Les 8 constats ont donc été établis à la lecture, pas par l'organe : le trou est dans la couverture, pas dans les notebooks.
  2. Fuite de chemin machine dans une sortie committée. 01-5-Kokoro-TTS-Local.ipynb cellule [34] imprime OUTPUT_DIR en absolu, et la sortie committée porte <USER_PATH>\AppData\Local\Temp\claude\d--CoursIA\0c3b8a34-…\…\outputs\audio\kokoro. La réparation honnête est Stop & Repair — faire imprimer un chemin relatif puis re-exécuter — donc elle exige de toucher une cellule de code et sort du périmètre de cette PR (déplacements markdown). À traiter dans une PR dédiée.

Portée

Livraison partielle de #18053 : cette PR couvre la tranche GenAI/Audio (8 constats). La tranche GenAI/Image (3 constats) suit dans une PR distincte. See #18053.

🤖 Generated with Claude Code

…/annonce

Les constats d'ordre de lecture de l'audit multi-agents (#18053) sur la série
GenAI/Audio : 8 cellules markdown dont soit l'annonce ("la cellule suivante...",
"le code suivant...") ne précède plus la cellule annoncée, soit l'interprétation
précède la sortie qu'elle cite. Chaque ligne a été re-vérifiée à `main` avant
correction (règle audit-reassessment).

Déplacements (index = position dans le notebook avant correction) :

- 01-1-OpenAI-TTS-Intro        [30] interprétation session -> après [31] (stats)
- 01-5-Kokoro-TTS-Local        [33] interprétation session -> après [34] (stats)
- 02-2-XTTS-Voice-Cloning      [31] transition x [32] (éthique/bonnes pratiques)
- 02-3-MusicGen-Generation     [4] x [5] (Introduction MusicGen)
- 02-3-MusicGen-Generation     [35] transition x [36] (bonnes pratiques)
- 04-3-Music-Composition-Workflow [25] théorie des effets -> avant [23] (code effets)
- 04-4-Audio-Video-Sync        [11] théorie moviepy -> avant [10] (code création vidéo)
- 04-4-Audio-Video-Sync        [21] concept de timeline -> avant [20] (code alignement)

Aucune cellule de code n'est modifiée : l'ordre des cellules de code est
identique avant/après, et les `execution_count` et `outputs` sont inchangés
(cellules déplacées entières). Le contrôle de séquence d'exécution reste
39/39 CLEAN, 0 notebook DIRTY. Aucune ré-exécution n'est donc due (C.2/C.3).

Ré-alignement de valeurs imposé par le déplacement de 01-1 [30] : la cellule
citait 690.0 KB et ~12 s alors que la sortie committée de [31] porte 553.9 KB et
10.7 s. Une fois la cellule placée après [31], ces valeurs contrediraient la
sortie adjacente (C.4) ; elles sont alignées sur la sortie réelle, le temps
conservant son marqueur `runtime machine-dep`.

See #18053

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 6
  • Code cells validated: 86
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

github-actions Bot commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.4s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.0s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 15.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.7s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

Le gate bloquant `prose-counts` (bloquant depuis #17636) rougissait la PR sur
« **12 fichiers audio** » dans la cellule d'interpretation de 01-1 : un compteur
d'artefact en prose, exactement ce que #9377 interdit. Le compteur etait deja
present sur `main` -- c'est le deplacement de la cellule qui l'a fait apparaitre
comme ligne ajoutee dans le diff 3 points.

Correction : la mesure disparait de la prose, le predicat reste. Le detail
chiffre (6 voix / 5 formats / 5 vitesses) est deja porte par le tableau de
donnees de la meme cellule, qui se recalcule a l'execution.

Aucune cellule de code modifiee : aucune re-execution due (C.2/C.3).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Le deplacement de la lecture « Statistiques de session » apres son code
faisait monter de 1 a 2 le compte de lectures/prose rattachees a cette
sortie : la cellule separateur « *** » en tete de l'enonce d'exercice
compte comme prose pour la meme sortie. Le separateur est donc deplace en
fin de cellule d'interpretation -- il ferme le bloc qu'il suivait au lieu
d'ouvrir l'exercice -- ce qui ramene le compte a 1 et laisse la lecture
juste apres le code qu'elle commente.

Markdown seul, aucune cellule de code modifiee : pas de re-execution due.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

Le rouge bloquant du job Always-on guards etait Split-reading ratchet (base vs PR) (exit 2), reproduit en local :

python scripts/notebook_tools/check_split_reading_cells.py MyIA.AI.Notebooks/GenAI/Audio \
    --base-ref origin/main --head HEAD

Cause, mesuree. Le deplacement de la lecture « Statistiques de session » apres son code faisait monter de 1 a 2 le nombre de cellules « lecture ou prose » rattachees a cette sortie. La cellule qui portait deja le compte est le separateur *** en tete de l'enonce d'exercice : is_reading_or_prose compte toute cellule markdown dont la premiere ligne ne commence pas par #, donc une regle de separation compte comme prose pour la sortie au-dessus d'elle. Le geste prescrit par #18053 (mettre la lecture apres le code qu'elle commente) faisait donc apparaitre un doublon qui n'en etait pas un.

Correctif. Le separateur *** est deplace en fin de cellule d'interpretation : il ferme le bloc qu'il suivait au lieu d'ouvrir l'exercice. La lecture reste juste apres son code, le compte de la sortie revient a 1.

Verification (apres le dernier commit, tete f310806008) :

base origin/main | 6 carnet(s) modifie(s) | 0 en regression

Aucune cellule de code n'est modifiee : invariant verifie par assertion sur source + execution_count + outputs des cellules de code. Pas de re-execution due (C.2/C.3).

Le meme organe signalait la meme classe sur ma tranche GenAI/Image (PR #18075), corrigee de la meme facon : une cause, deux PRs.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw]
VERDICT: LGTM (vérifié: extraction intégrale base↔head des 6 notebooks — signatures de cellules diffées, les 8 sites de réordonnancement lus un à un avec leurs voisins, valeurs des lectures éditées ancrées dans les sorties committées)

Review protocole v2 : 6 notebooks GenAI/Audio, même nombre de cellules de part et d'autre (37/42/40/40/47/44). Comparaison par empreinte sha8 de chaque cellule : 4 notebooks à déplacements purs (multiset des empreintes identique — aucune source touchée, cellules code byte-identiques, execution_count préservé) ; 2 notebooks avec 3 cellules markdown éditées (diff exact lu : voir ci-dessous). Le compte du titre « 8 constats interprétation/annonce » tombe exact : 8 sites de réordonnancement, tous lus.

Vérifié site par site :

  • 01-1 (1 site) : la lecture « Résultats session » passe après la cellule de statistiques. La seule édition de texte remplace « 12 fichiers audio… 690.0 KB… ~12 secondes » (valeurs absentes de toute sortie committée) par 553.9 KB / ~10.7 s — imprimées mot pour mot par la sortie de la cellule C30 (6 générés, 12 sauvegardés) ✓
  • 01-5 (1 site) : statistiques remontées, lecture suit ; les 2 éditions sont exactement le déplacement du séparateur *** avec sa section (diff : +*** en fin de lecture, −*** en tête de l'exercice 3 — zéro autre octet changé) ; « VRAM 0.00 GB (observe, CPU) » est ancrée (« VRAM utilisee : 0.00 GB ») ✓
  • 02-2 (1) : la transition « La cellule suivante récapitule les métriques » précède désormais directement la cellule de statistiques C33 — en base le pointeur désignait la section éthique, déplacée au-dessus ✓
  • 02-3 (2) : la transition Papermill précède maintenant la cellule « Setup environnement » qu'elle annonce ; la transition de fin précède la cellule de statistiques ✓
  • 04-3 (1) : théorie des effets → code → interprétation (en base la théorie vivait APRÈS l'interprétation en annonçant « la cellule suivante implémente » — pointeur dans le vide) ✓
  • 04-4 (2) : les deux cellules d'annonce (« Le code suivant créé une video de test », concept de timeline) passent avant leur code ✓

Aucune duplication introduite (contenus déplacés, non recopiés), densité 1 lecture/1 output respectée partout, aucun output touché.

F1 — mineure (CI) : le rouge bloquant documenté par l'auteur à 19:37Z (« Split-reading ratchet (base vs PR) », exit 2, reproduit en local) porte sur l'ancien head ; le head actuel f3108060 (19:43Z) est en re-run — checks relevés exit 8 (pending) à l'instant, verdict CI à confirmer au vert avant merge. Le réordonnancement est précisément ce que ce ratchet mesure, donc vert attendu.

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18073
head: f310806
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3cfffdab14cdb3c35a1e090aa4b415c13460586f538f15df7ded2de029876157
diff-files: 6
diff-additions: 247
diff-deletions: 247
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Prévalidation tierce à la tête exacte, sans approbation ni décision de merge. Body complet, six commentaires dont le compte rendu du correctif split-reading, review NanoClaw COMMENTED/LGTM, zéro thread inline, diff intégral des six carnets et les huit constats GenAI/Audio de l'issue #18053 lus. La review signale un gate ancien encore pending ; la tête actuelle porte désormais un PR gate SUCCESS. Aucun nit B.0 non levé (rc=0).

Vérification directe des blobs origin/main et tête par identifiant : chacun des six carnets conserve son nombre et son jeu d'identifiants de cellules (37/42/40/40/47/44) ; les 86 cellules code conservent leurs sources, execution_count et outputs à l'identique. Les huit lectures/annonces visées sont désormais du bon côté de leur cellule code : les deux statistiques suivent leurs sorties (01-1, 01-5) ; les transitions XTTS et MusicGen précèdent directement leur code ; la théorie effets précède le code dans 04-3 et les deux annonces vidéo/timeline précèdent leur code dans 04-4. Dans 01-1, 553.9 KB et ~10.7 s correspondent à la sortie déjà committée. Le séparateur de 01-5 a été déplacé en fin de lecture afin d'éviter le faux doublon de prose. Aucun code ni output édité : C.2/C.3 n'impose pas de ré-exécution, et je n'ai pas exécuté les carnets.

Rejeu local du cliquet split-reading sur origin/main→origin/pr-18073 : six carnets, zéro régression. Les journaux exact-head Output-collapse et Source-collapse portent chacun 0 flagged ; check_run_state.py --pr 18073 mesure 88 jambes / 88 noms sans rouge récent, PR gate SUCCESS, B.0 rc=0. OPEN/MERGEABLE/CLEAN à la capture. La PR livre seulement la tranche Audio de #18053 ; l'issue conserve d'autres séries. Décision finale réservée à ai-01.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants