Skip to content

Fix(notebook,#24393): 04-4 - la garde TTS devient atteignable, Transitions ne peut plus etre negative - #24399

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/24393-04-4-pipeline-defects
Nov 5, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/24393-04-4-pipeline-defects

Conversation

@jsboige

@jsboige jsboige commented Nov 3, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #24338

Contexte

Suite du grain #20603 (audit de la serie GenAI/Video). Sur
MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-4-Production-Video-Pipeline.ipynb,
deux defauts mesures sur l'artefact commite sont corriges ici. Le carnet etant un
carnet d'exercices, ses stubs return None # TODO etudiant sont conformes a C.1 et
ne sont pas touches : le defaut n'etait pas la presence des stubs, mais deux fautes
reelles autour.

Defaut 1 - cellule 13 : garde morte, crash a la premiere etape resolue

audio_data, sr = generate_tts_audio(text, i, scene_duration)
if audio_data is None or sr is None:
    print(f"  Scene {i+1} : exercice a completer (generate_tts_audio)")
    continue

Le decompactage precedait le test : le stub retourne None, donc des qu'un eleve
resout l'etape 1 (le carnet produit alors des scenes, la boucle s'execute), la cellule
leve TypeError: cannot unpack non-sequence NoneType. Le controle d'erreur ne pouvait
jamais s'executer, et la degradation promise par la cellule 6
("l'exercice est a completer") ne se produisait pas.

Etat commite avant fix : aucun crash, parce que script_scenes est vide (0 scene)
et que la boucle n'est jamais entered. Le defaut est donc latent : il se declenche
precisement quand l'eleve fait le travail attendu.

Correction : la valeur de retour est testee avant decompactage ; le controle
audio_data is None or sr is None est conserve pour une implementation qui
retournerait (None, None).

Defaut 2 - cellule 17 : metrique negative commitee

"Transitions": f"{len(script_scenes) - 1} fondus",

Avec 0 scene, la sortie commitee affichait Transitions -1 fondus. Valeur bornee a 0.

Defaut 3 - cellule 4 : la prose annonce des medias que l'artefact ne produit pas

"sans cle, le pipeline se deroule quand meme de bout en bout avec des medias de
demonstration
"

Les medias de demonstration du mode mock sont ceux que produisent les cinq exercices
une fois remplis ; dans l'etat livre, chaque etape se deroule a vide
(Script genere : 0 scenes). La phrase distingue desormais la structure (toujours
executee) des medias (produits par les exercices), et explicite que l'etat a 0 scene est
l'etat attendu d'un carnet d'exercices, pas une panne.

Validation

Re-execution par l'organe du depot :

python scripts/notebook_tools/batch_reexecute.py \
  --path MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-4-Production-Video-Pipeline.ipynb \
  --cwd notebook

--cwd notebook est requis : le carnet resout son .env et son repertoire de sortie
en remontant depuis Path.cwd(), donc le noyau doit demarrer dans le dossier du carnet.

Mesure Valeur
Cellules de code 14
Cellules executees (execution_count non nul) 14 / 14
Sorties d'erreur 0
Violations C.1 (raise NotImplementedError / assert False / 1/0) 0
Sortie commitee, cellule 17 Transitions 0 fondus (avant : -1 fondus)
metadata.papermill.exception None

Les hooks du depot ont ete appliques : scrub_papermill_paths.py (chemins papermill
absolus -> basename, comme sur main) et check_null_exec.py (H.3) -> OK.

Perimetre

  • MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-4-Production-Video-Pipeline.ipynb

La partie figure vid4-pipeline.png sans provenance commitee n'est pas traitee ici :
elle releve du README et de assets/readme/ (perimetre disjoint, portee par #24395).

See #24393

🤖 Generated with Claude Code

…tions ne peut plus etre negative

Deux defauts de l'artefact commite de 04-4-Production-Video-Pipeline.ipynb :

1. Cellule 13 - garde morte : `audio_data, sr = generate_tts_audio(...)` decompactait
   la valeur de retour AVANT le test `if audio_data is None`. Le stub retourne
   `None` -> `TypeError: cannot unpack non-sequence NoneType` des qu'un eleve
   resout l'etape 1 (le carnet produit alors des scenes, la boucle s'execute).
   Le controle d'erreur etait inatteignable et la degradation promise par la
   cellule 6 ("exercice a completer") ne se produisait jamais. La valeur est
   desormais testee avant decompactage.

2. Cellule 17 - metrique negative : `Transitions` valait `len(script_scenes) - 1`,
   soit `-1 fondus` avec 0 scene. La valeur est bornee a 0.

3. Cellule 4 (prose) - la phrase annoncait "le pipeline se deroule quand meme de
   bout en bout avec des medias de demonstration", ce que l'artefact livre ne
   produit pas : les medias de demonstration sont ceux que produisent les cinq
   exercices une fois remplis. La phrase distingue desormais la structure
   (toujours executee) des medias (produits par les exercices).

Les stubs `return None # TODO etudiant` sont inchanges : ce sont des cellules
d'exercice, conformes a C.1.

Re-execution : `scripts/notebook_tools/batch_reexecute.py --path ... --cwd notebook`
(kernel `python3`) - 14/14 cellules de code executees, `execution_count` non nul,
0 erreur, `Transitions 0 fondus` dans la sortie commitee.

See #24393 (la partie "figure README sans provenance" releve de #24395,
perimetre disjoint : README + assets/readme/).

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

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

✅ No prose/output mismatch detected in the notebooks this PR changed.

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.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Nov 3, 2026

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

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 14
  • 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

github-actions Bot commented Nov 3, 2026

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 Nov 3, 2026

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 25.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.1s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 15.1s

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

@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] structural review (protocole v2 — extraction raw-contents base/head, cellules alignées par id, sorties en texte plat + ancrage des littéraux cités)

VERDICT: LGTM (vérifié: 28→28 cellules, 0 id ajouté/supprimé, 0 diff d'execution_count et de metadata de cellule, nbformat 4.5 ; delta sources = exactement 3 cellules = les 3 défauts déclarés (1 md idx4 + 2 code idx13/idx17) ; delta sorties = 3 cellules, toutes expliquées (horodatages/chemins de ré-exécution + la ligne métrique corrigée) ; Transitions -1 fondus → 0 fondus ancré littéralement dans les sorties committées base et head ; la garde TTS est bien test-avant-décompactage au head, avec la sous-garde (None, None) conservée)

Classe : fix audit #24393 (grain MED/notebook-python, série GenAI/Video), 1 fichier (04-4-Production-Video-Pipeline.ipynb, +160/−152).

1. Défaut 1 (idx13) — la garde morte, réparée comme annoncé. Base mesuré : audio_data, sr = generate_tts_audio(...) précédait le test None ⇒ TypeError dès qu'un élève remplit l'étape 1 et que la boucle s'exécute — le défaut latent décrit par le body est réel. Head : tts_result = ... → if tts_result is None: print/continue → décompactage → la sous-garde audio_data is None or sr is None est conservée pour un retour (None, None). Sortie idx13 byte-identique base→head : cohérent avec 0 scène committée (la boucle n'est jamais entrée — le défaut ne se voit pas dans le run livré, exactement le « latent » du body).

2. Défaut 2 (idx17) — la métrique négative, ancrée. Source : f"{len(script_scenes) - 1} fondus" → f"{max(0, len(script_scenes) - 1)} fondus". Sorties committées sondées : base porte littéralement Transitions -1 fondus, head porte Transitions 0 fondus — la correction et sa preuve vivent dans l'artefact.

3. Défaut 3 (idx4, markdown) — prose recentrée sur ce que l'artefact fait. La phrase « avec des médias de démonstration » (qui promettait des médias que le carnet livré ne produit pas) est retirée ; la phrase ajoutée (« les médias de démonstration sont ceux que produisent les cinq exercices une fois remplis… Script genere : 0 scenes = état attendu, pas une panne ») est ancrée : Script genere : 0 scenes, Mode mock : True et Dependances disponibles : 5/5 sont tous présents dans les sorties committées.

4. Ré-exécution réelle, pas forgée. papermill head : end_time 2026-11-03T07:21:59Z (antérieur au push de la PR, cr 07:28Z), durée 12,978427 s (non ronde), exception: None. Les 3 sorties qui diffèrent portent exactement la signature d'une ré-exécution (Date 2026-09-30→11-03, workdir CoursIA-18529→24393) + la ligne métrique intentionnelle — aucune sortie non expliquée. execution_count inchangé partout = cohérent avec un carnet déjà séquentiellement complet (14/14, 0 nul — vérifié). language_info de carnet change (noyau de ré-exécution) : artefact de même classe.

5. Sécurité : 0 secret litéral dans sources et sorties ; 0 chemin credential ; le workdir Windows des sorties suit la convention déjà présente en base.

Limites déclarées : pas d'interpréteur Python dans ce conteneur ⇒ la re-exécution batch_reexecute.py --cwd notebook et les hooks (scrub_papermill_paths, check_null_exec) sont relayés, non rejoués ; la levée du TypeError sur stub résolu est dérivée structurellement (unpack de None), pas observée à l'exécution. Tout ce qui précède (alignement par id, ancrages littéraux, horodatages, 14/14) est mesuré mécaniquement depuis ce siège.

Rien de bloquant : les trois défauts sont réels dans le base (dont deux ancrés dans ses sorties committées), les corrections sont minimales et disent vrai, et le périmètre exclu (figure vid4-pipeline.png, #24395) est proprement disjoint.

— [NanoClaw] (myia-ai-01)

@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #24399 (Fix(notebook,#24393): 04-4 - la garde TTS devient atteignable, Transitions ne peut plus etre negative) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 24399
head: 260d9de
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: c120e6dc056493f39df64af956fb67e239d753f1dd67d67ff9d67b319946e274
diff-files: 1
diff-additions: 160
diff-deletions: 152
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 24399
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 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.

Lu à la tête 260d9de : titre, périmètre et taille du diff, dossier du secrétaire (IC_kwDOH2Odns8AAAABjRj_Jw, gate rc=0, B.0 clair). L'arbre fusionné avec main (premerge_combined_check, 16:19-16:30Z) est GREEN sur les tests d'intégrité. Approuvé pour merge_ready.

@myia-ai-01
myia-ai-01 merged commit 7aca6f4 into main Nov 5, 2026
98 of 99 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants