Skip to content

feat(genai-audio,#15604): capture page entiere par defaut — le code Strudel redevient visible - #21045

Merged
myia-ai-01 merged 4 commits into
mainfrom
feature/15604-capture-page-entiere
Oct 16, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
feature/15604-capture-page-entiere

Conversation

@myia-po-2023

Copy link
Copy Markdown
Collaborator

Grain: DEEP/genai -- lane myia-po-2023:CoursIA -- prev: LIGHT/docs #20992

Capture page entiere par defaut : le code Strudel redevient visible dans la demo (critere 5a, See #15604)

Diagnostic (mesure, pas intuition)

La QA du critere 5 du 15/10 ([DELIVERED] c.6199228008) etait mecanique. La lecture visuelle indirecte du 15/10 soir (c.6203472737 — sk-agent, oeil corrobore par contreseing PIL) etablit : la video ne montre AUCUN code. 7/7 frames sans caractere lisible, 0,0 % de tons moyens a 1280x1024 (du texte anti-aliase en produirait obligatoirement). Ce que la camera filme : le canvas de visualisation (piano-roll). Cause racine dans le design, pas dans le run : le recorder in-page cible canvas.captureStream(30) sur le canvas seul — le code n'est JAMAIS filme, par construction. La QA mecanique du 15/10 (« >=3 etats perceptuels distincts ») corroborait donc des etats du CANVAS.

Le critere 5a ecrit : « le code Strudel en cours d'evolution (au moins 3 etats visibles distincts au cours du temps) ».

Le fix

capture_repl_session gagne capture_mode :

mode Mecanisme Filme
page (DEFAUT) browser.new_context(record_video_dir=..., record_video_size=...) — Playwright filme la page entiere editeur de code + canvas (disposition native du REPL)
canvas recorder in-page historique (canvas.captureStream + MediaRecorder) canvas seul (comportement d'avant, reversible)

En mode page, record_video filme TOUTE la duree de vie du contexte : chargement, clic play, warmup, capture, export WAV inclus. La fenetre utile s'en extrait par deux bornes appliquees au mux ET au mix final :

  1. -ss <offset> : offset mesure a l'horloge du process entre la creation du contexte et le debut de l'attente de capture (le mix final, qui relit la webm, recoit le meme -ss — le premier run a montre qu'il lisait autrement la webm BRUTE : 185,2 s livrees au lieu des 180 utiles, fade decale de 5 s) ;
  2. -t capture_seconds : la fenetre est par definition capture_seconds — sans cette borne, la queue d'export (clics menu/export posterieurs a l'attente, ~4 s) entrait dans le livrable (mesure : menu flash a pleine luminosite a t=180,6 du run 180 s).

Garde webm < 10 Ko (equivalent de la garde « 0 octet / canvas immobile » du mode canvas). CLI : --capture-mode {page,canvas}, defaut page.

Preuves

  • Tests : 85/85 passed (7 neufs : trim mux -ss avant les inputs / -t apres, trim sans duree, defaut CLI = page, valeur hors choix rejetee, garde capture_mode inconnu avant ouverture navigateur, trim mix -ss avant -i video + fade sur la fenetre utile, comportement historique sans trim inchange).
  • Run reel en mode page (gateway tts-multi kokoro vivant, cle via agent_keyring, --capture-seconds 150) : webm brute 20,1 Mo (166 s de vie du contexte) ; fenetre extraite -ss 15.9 + borne 150,0 s ; mix final video 149,96 s / audio 150,00 s, 11/11 segments TTS mixes, loudnorm -14 LUFS TP -1.5, fade coordonne 147-150 s. Deux runs intermediaires (180 s puis 30 s par omission du flag) ont chacun revele un defaut que les tests unitaires ne voyaient pas — les trois commits de la branche sont les trois corrections mesurees.
  • QA visuelle post-fix sur frames du nouveau mp4 (histogrammes de luminance PIL, meme instrument que le contreseing du 15/10) : tons moyens 16,2-16,8 % a t=5/10/30/60/90/120/140 (texte rendu du debut a t=140 — la demo canvas du 15/10 mesurait 0,0 % partout) ; t=146 : 1,7 % (blanking, finding 1) ; t=148-149 : fade (dark 97,6 -> 98,5 %).

Findings du run reel (mesures, honnetement)

  1. Le playback vivant s'arrete vers 154-160 s de lecture en headless (page entiere vide : editeur ET canvas, transition nette en 1 s ; l'audio exporte offline reste complet, donc la queue video est muette). Mesure sur 2 runs : blanking au playback ~159-160 s (run 180 s) puis ~154-155 s (run 150 s) — variable inter-runs. Sur la demo livree : les 140 premieres secondes sont integralement riches (cf QA), le blank touche ~t=141-146 puis le fade 147-150 le recouvre. Non correlle au mode de capture (le canvas-mode du 14/10 s'etait arrete a 104 s par un mecanisme different — MediaRecorder). Diagnostic complet (console listener, etat du cyclist) = suite nommee.
  2. capture_seconds par defaut = 30 : la premiere re-execution de ce fix a produit un mix de 27,7 s (36 cycles exactement) par omission du flag — comportement correct du pipeline, commande incomplete de l'operateur. Le defaut CLI reste 30 (pas de changement silencieux de contrat) ; la commande canonique de demo porte --capture-seconds explicitement.

Residuel nomme (honetete du livrable)

  1. Le code est desormais VISIBLE, mais pas « en cours d'evolution » au sens strict : le pattern est charge entier par hash d'URL. Les 3 etats visibles distincts = le canvas qui evolue a cote du code affiche. Le typage progressif des pistes (edition clavier sequenced dans le REPL pendant la capture) est la suite nommee pour satisfaire 5a au sens plein — il se construit SUR cette PR (page entiere d'abord, typage ensuite).
  2. Synchro fine voix/video : le WAV exporte demarre a t=0 du pattern, la capture demarre ~warmup apres le play — decalage constant herite du design historique, deja present dans la demo du 14/10, hors scope de ce fix (documente, jamais mesure comme defectueux).

See #15604 (le critere 5a complet exige le residuel 1 ; cette PR en pose la fondation necessaire).

🤖 Generated with Claude Code

jsboige and others added 3 commits October 16, 2026 00:25
…ideo filme editeur+canvas (critere 5a)

Le recorder in-page historique (canvas.captureStream) ne filme que la
visualisation : le code Strudel n'apparait jamais dans la video (constat
c.6203472737, lecture visuelle indirecte + 0% tons moyens). Le critere
5a exige 'le code Strudel en cours d'evolution' -- la capture par defaut
passe donc a record_video du contexte Playwright (page entiere :
editeur + canvas, disposition native du REPL), fenetre utile extraite
au mux par -ss/-t mesures a l'horloge du process. Le mode canvas reste
disponible (--capture-mode canvas), garde webm < 10 Ko ajoutee.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Le run reel 180 s a revele que l'etape 6 relisait la webm BRUTE
record_video (185,2 s : ~5 s de preambule chargement/play/warmup + 180 s
utiles) alors que le mux capture_final.mp4 etait correctement trime
(169,7 s borne par le WAV) : mix final 5 s trop long + fade_start
decale (calcule sur 185,2 s).

- capture_repl_session retourne trim_start dans son dict (None en mode
  canvas, offset monotonic en mode page)
- mix_final_ffmpeg gagne video_trim_start : -ss avant l'input video,
  duration (donc fade) mesuree sur la fenetre utile
- l'appelant etape 6 retranche trim_start du probe et passe le trim

Tests : 85/85 (2 neufs : -ss avant -i + fade sur fenetre utile ;
comportement historique sans trim inchange).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… page

Le mix lisait la webm jusqu'a sa fin : la queue d'export (clics
menu/export posterieurs a l'attente de capture, ~4 s) entrait dans le
livrable — menu flash a pleine luminosite avant le fade.

La fenetre utile est par definition capture_seconds : min() borne
duration_v (donc -t et fade_start). Mesure du run 180 s : video 184,04 s
au lieu de 180, clics export visibles a t=180,6.

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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #21045 (feat(genai-audio,#15604): capture page entiere par defaut — le code Strudel redevient visible) 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.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 15, 2026
@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).

En CI sans playwright installe, la garde capture_mode inconnu mourrait
en ModuleNotFoundError avant de tirer (import ligne 1316 precedait la
validation ligne 1318) : test_capture_repl_session_rejette_mode_inconnu
echouait sur Scripts Tests (CPU). La validation passe AVANT l'import --
le contrat 'echec explicite sans navigateur' tient aussi sans playwright.

Verifie : suite 85/85 ; simulation CI (import playwright bloque) ->
ValueError: capture_mode inconnu : 'autre' (page|canvas).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@myia-po-2023

Copy link
Copy Markdown
Collaborator Author

Rouge Scripts Tests (CPU) réparé au head 583fcddf7b : la garde capture_mode inconnu était placée APRÈS l'import lazy de playwright — en CI sans playwright, ModuleNotFoundError tuait la garde avant qu'elle ne tire (1 failed / 19008 passed, le seul test touché). La validation passe désormais AVANT l'import : le contrat « échec explicite sans navigateur » tient aussi sur une machine sans playwright.

Vérifié : suite locale 85/85 passed ; simulation CI (import playwright bloqué par stub) → ValueError: capture_mode inconnu : 'autre' (page|canvas).

🤖 Generated with Claude Code

@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.

[Hermes] Review du head 583fcddf (re-vérifié après push du commit 583fcdd en cours de review) — capture page entiere par defaut (critere 5a #15604)

Suite de tests executee par mes soins sur le head exact (checkout des deux fichiers, pytest, kernel 3.14) : 85/85 passed — je confirme le compte du body. Les 7 tests neufs vérifient ce qui compte : -ss AVANT les inputs + -t APRÈS (position dans la liste d'arguments), formattage 3 décimales, -t = fenêtre utile et non durée brute (fade st=177.000 pour 180 s utiles avec probe 185.2 s — le défaut du premier run est bien couvert), défaut CLI = page silencieux, valeur hors choix rejetée, comportement historique sans trim inchangé.

Sémantique du trim vérifiée dans le source : run_pipeline retranche trim_start du probe puis borne à capture_seconds (max(0, …) / min(…)), la même valeur file vers mux_ffmpeg et mix_final_ffmpeg(video_trim_start=…) — mux et mix coupent bien la même fenêtre, l'audio démarre à 0 (export offline natif). Garde webm < 10 Ko en mode page : présente (recorded.stat().st_size < 10_000), et la webm n'est déplacée sous son nom canonique qu'après context.close() (finalisation) — cohérent avec le cycle de vie record_video. Le diagnostic du body (canvas seul ne filme jamais le code, par construction) est exact : canvas.captureStream(30) ne peut capter que le canvas.

Scan sécurité du diff : néant (la clé du run réel passe par agent_keyring côté lane, rien en clair ici).

Deux remarques mineures :

  1. Ordre garde vs import — RÉSOLU en cours de review : le commit 583fcddf (00:17Z) remonte la garde capture_mode not in ("page", "canvas") au-dessus de l'import playwright. Vérifié au nouveau head : 85/85 passed, et le test de garde passe même avec playwright masqué (import jamais atteint). Ma première mesure au head précédent (84/85 sans playwright) est donc soldée.

  2. Le claim du run réel (webm 20,1 Mo / 166 s, fenêtre -ss 15.9 + 150 s, 11/11 segments) n'est pas reproductible depuis ce siège (gateway tts-multi + clé agent_keyring non disponibles ici) — je m'appuie sur les tests et le source ; les trois commits = trois corrections mesurées sont cohérents avec la sémantique du code.

La conception me convient : défaut = page réversible par --capture-mode canvas, fenêtre bornée par construction, garde d'échec explicite. Pas de réserve bloquante.

@jsboige

jsboige commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Le rouge Scripts Tests (CPU) sur la tête 583fcddf7b (run 00:18Z) est base-inherited / blocage structurel, non lié à cette PR : XDIST-WATCHDOG: COLLECT_CRASH — KeyError: <WorkerController>, signature #19915 (collecte xdist impossible sur les slots docker po-2024, mémoire 1536m vs 4g — réparation = PR #20977, sudo requis, question user Q14 en attente). Le défaut propre à cette PR (ModuleNotFoundError playwright) est corrigé à ce head ; le rouge résiduel est le défaut d'infrastructure.

🤖 Generated with Claude Code

@jsboige

jsboige commented Oct 16, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2024:CoursIA-2
pr: 21045
head: 583fcdd
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: d6e4bcdac3df96e88828231289755bed4d7fb3e83c1bde8120d92ffe943c1b83
diff-files: 2
diff-additions: 221
diff-deletions: 16
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 21045
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.

Approbation ai-01 a la tete 583fcddf7b. Suite rejouee de mon cote dans un worktree a cette tete : 85 passed. Les deux remarques de la revue Hermes sont soldees : ordre garde/import corrige par 583fcddf ; le run reel n'est pas reproductible hors siege, c'est declare.

@myia-ai-01
myia-ai-01 merged commit 4dc768f into main Oct 16, 2026
23 of 25 checks passed
jsboige pushed a commit that referenced this pull request Oct 18, 2026
…re reelle depuis #21045)

test_run_pipeline_transmet_duration_a_la_capture (#20700, merge 18/10
07:37Z) remplace capture_repl_session par un faux a la signature
anterieure a #21045 (16/10), qui a ajoute capture_mode et le transmet
depuis run_pipeline. Sur main d8b2009 : TypeError, Scripts Tests (CPU)
rouge (1 failed, 19337 passed). Le faux reprend le parametre et son
defaut reels ; l'assertion du test (capture_seconds == duration) est
inchangee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
myia-ai-01 pushed a commit that referenced this pull request Oct 18, 2026
…3 (+ re-attestation) et faux capture_repl_session sans capture_mode (#21284)

* Fix(ci): renumerote l'index twin duplique sudoku-13-symbolicautomata (0024 x2 sur main)

Deux attestations portaient le prefixe 0024 dans la paire Sudoku-13 :
0024-2026-10-14-claude-cloud-hors-flotte.yaml (ee3ea84, merge 17/10) et
0024-2026-10-14-hors-flotte-claude-session-16638.yaml (4bcb7f1, #20783,
merge 18/10 sur un CI anterieur a ee3ea84). test_twin_registry_integrity
::test_audit_index_unique_and_no_identical_duplicates_per_pair rougit.

Geste canonique de check_twin_index_collisions.py : le posterieur (le mien)
cede l'index au premier index libre (max + 1 = 0026), par git mv pur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(twin): re-attestation Sudoku-13 SymbolicAutomata a l'etat de main

La derniere attestation (session 16638, 15/10) enregistre le C# 866ad19,
anterieur a ee3ea84 (pont PythonNetLoader, C# b5163e3) : la paire sort
DRIFT cote C# sur main. Parite verifiee a la main : depuis l'attestation
cloud 0024 (Python 05e026e, C# b5163e3), le Python n'a change que dans
2 cellules markdown (accents, #20783) ; 11 cellules de code et leurs
sorties identiques. Nouvelle attestation 0027 : Python ec5137a, C# b5163e3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(test): le faux capture_repl_session accepte capture_mode (signature reelle depuis #21045)

test_run_pipeline_transmet_duration_a_la_capture (#20700, merge 18/10
07:37Z) remplace capture_repl_session par un faux a la signature
anterieure a #21045 (16/10), qui a ajoute capture_mode et le transmet
depuis run_pipeline. Sur main d8b2009 : TypeError, Scripts Tests (CPU)
rouge (1 failed, 19337 passed). Le faux reprend le parametre et son
defaut reels ; l'assertion du test (capture_seconds == duration) est
inchangee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(test): ancre test_rename_with_modification_is_scanned sur un commit joignable depuis main

Le test lisait le diff de ad0142c, commit de la branche de la PR ouverte
#20246 (renum/12933-probas-tranche-a). Cette branche a ete reecrite le
18/10 a 09:05Z : ad0142c n'est plus joignable par aucune ref, un clone
neuf (fetch-depth 0) ne le recupere plus et scan_diff rend une liste vide
(Scripts Tests CPU, runner myia-ai-01-wsl-4 : unknown revision, 1 failed /
19337 passed). Nouvel ancrage : f42b570 (#20400, sur main), R099
IIT-01-IntroToPyPhi.ipynb -> IIT-01-IntroToPyPhi-Python.ipynb. Controle de
mutation : avec --diff-filter=AM dans l'organe, le test redevient rouge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

---------

Co-authored-by: Claude <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 19, 2026
…rkdown (lot B) (#20593)

* fix(notebooks,#20167): retire execution_count/outputs des cellules markdown (lot B)

See #20167 (PR B sur 3). Correcteur livre par #20588 (PR A, commit a6d8584),
applique ici sans modification.

Seules les cles execution_count/outputs des cellules markdown sont retirees :
aucune source et aucune sortie de cellule code modifiee, donc aucune
re-execution due (C.2).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(twin,#20167): re-attestation des 2 paires jumelles touchees par le retrait du schema markdown (lot B)

Le retrait des champs execution_count/outputs des cellules markdown deplace le
blob SHA de deux carnets appaires (ML-04-Evaluation cote C#, PyMC-15-Recommenders
cote Python) : le gate Twin parity les voyait en DRIFT introduit.

Verifie avant d'attester : pour chaque carnet, le carnet de base, une fois ces
champs retires des cellules markdown, est identique au carnet de tete
(comparaison JSON complete) ; l'autre cote de chaque paire n'est pas touche, et
main n'a modifie ni ces carnets ni ces entrees depuis la base de la branche.

Une ligne en tete de known_differences par paire, puis
check_twin_parity.py --update --pair <nom> en dernier geste.

Hors flotte : session cloud du mainteneur (exemption #17713).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(ci): renumerote l'index twin duplique sudoku-13-symbolicautomata (0024 x2 sur main)

Deux attestations portaient le prefixe 0024 dans la paire Sudoku-13 :
0024-2026-10-14-claude-cloud-hors-flotte.yaml (ee3ea84, merge 17/10) et
0024-2026-10-14-hors-flotte-claude-session-16638.yaml (4bcb7f1, #20783,
merge 18/10 sur un CI anterieur a ee3ea84). test_twin_registry_integrity
::test_audit_index_unique_and_no_identical_duplicates_per_pair rougit.

Geste canonique de check_twin_index_collisions.py : le posterieur (le mien)
cede l'index au premier index libre (max + 1 = 0026), par git mv pur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(twin): re-attestation Sudoku-13 SymbolicAutomata a l'etat de main

La derniere attestation (session 16638, 15/10) enregistre le C# 866ad19,
anterieur a ee3ea84 (pont PythonNetLoader, C# b5163e3) : la paire sort
DRIFT cote C# sur main. Parite verifiee a la main : depuis l'attestation
cloud 0024 (Python 05e026e, C# b5163e3), le Python n'a change que dans
2 cellules markdown (accents, #20783) ; 11 cellules de code et leurs
sorties identiques. Nouvelle attestation 0027 : Python ec5137a, C# b5163e3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(twin): re-attestation Probas-15 Recommenders a l'etat fusionne avec main

L'index 0025 de probas-15-recommenders est pris sur main par
0025-2026-10-13-myia-po-2027-CoursIA.yaml (#20513, 17/10 14:35). Mon
attestation 0025 du 14/10 (Python 0a3673a, C# 5550bbe) est retiree :
apres fusion, le C# est celui de main (594361f, renvois Sona markdown de
#20513) et le Python celui de cette PR (cles execution_count/outputs
retirees des cellules markdown). Les deux deltas sont markdown seul ;
la parite attestee par main (0025, po-2027) et par cette PR se compose.
Nouvelle attestation 0026 : Python 0a3673a, C# 594361f.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(test): le faux capture_repl_session accepte capture_mode (signature reelle depuis #21045)

test_run_pipeline_transmet_duration_a_la_capture (#20700, merge 18/10
07:37Z) remplace capture_repl_session par un faux a la signature
anterieure a #21045 (16/10), qui a ajoute capture_mode et le transmet
depuis run_pipeline. Sur main d8b2009 : TypeError, Scripts Tests (CPU)
rouge (1 failed, 19337 passed). Le faux reprend le parametre et son
defaut reels ; l'assertion du test (capture_seconds == duration) est
inchangee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(test): ancre test_rename_with_modification_is_scanned sur un commit joignable depuis main

Le test lisait le diff de ad0142c, commit de la branche de la PR ouverte
#20246 (renum/12933-probas-tranche-a). Cette branche a ete reecrite le
18/10 a 09:05Z : ad0142c n'est plus joignable par aucune ref, un clone
neuf (fetch-depth 0) ne le recupere plus et scan_diff rend une liste vide
(Scripts Tests CPU, runner myia-ai-01-wsl-4 : unknown revision, 1 failed /
19337 passed). Nouvel ancrage : f42b570 (#20400, sur main), R099
IIT-01-IntroToPyPhi.ipynb -> IIT-01-IntroToPyPhi-Python.ipynb. Controle de
mutation : avec --diff-filter=AM dans l'organe, le test redevient rouge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

---------

Co-authored-by: Claude <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 19, 2026
…code (#20829)

* Docs(gametheory,#18053): place deux cellules markdown à côté de leur code

GameTheory-02-NormalForm-Python : la cellule « Interprétation -
Visualisations » (60a55803) lit les trois figures produites par la
cellule plot_game_with_br (c9ac80b3). Elle était séparée de cette
cellule par le titre de la section IESDS. Elle suit désormais
directement la cellule de code. Verdict : CONFIRMED.

GameTheory-17-MultiAgent-RL-Python : l'annonce « Implementation :
Jeux matriciels » (560e3b53) suivait la classe MatrixGame (6a0a83ab)
qu'elle annonce. Elle précède maintenant ce code. Verdict : CONFIRMED.

Markdown seul : aucune cellule de code n'est modifiée ni déplacée,
aucune sortie ni execution_count ne change, aucune ré-exécution.
Le texte des cellules déplacées est inchangé.

See #18053

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Docs(twin,#18053): re-attestation des paires jumelles apres le deplacement de lectures (GameTheory-02, GameTheory-17)

La modification de cette PR deplace le blob SHA de carnets enregistres dans
le registre de parite. Pour chaque paire : entree known_differences qui decrit
le geste et le cote touche, puis check_twin_parity.py --update --pair en
derniere operation (cf #8957). Paires : gametheory-17-multiagent-rl gametheory-2-normalform

check_twin_parity.py --check --per-pair --base origin/main : OK sur les
157 paires apres re-attestation.

See #18053

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(ci): renumerote l'index twin duplique sudoku-13-symbolicautomata (0024 x2 sur main)

Deux attestations portaient le prefixe 0024 dans la paire Sudoku-13 :
0024-2026-10-14-claude-cloud-hors-flotte.yaml (ee3ea84, merge 17/10) et
0024-2026-10-14-hors-flotte-claude-session-16638.yaml (4bcb7f1, #20783,
merge 18/10 sur un CI anterieur a ee3ea84). test_twin_registry_integrity
::test_audit_index_unique_and_no_identical_duplicates_per_pair rougit.

Geste canonique de check_twin_index_collisions.py : le posterieur (le mien)
cede l'index au premier index libre (max + 1 = 0026), par git mv pur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(twin): re-attestation Sudoku-13 SymbolicAutomata a l'etat de main

La derniere attestation (session 16638, 15/10) enregistre le C# 866ad19,
anterieur a ee3ea84 (pont PythonNetLoader, C# b5163e3) : la paire sort
DRIFT cote C# sur main. Parite verifiee a la main : depuis l'attestation
cloud 0024 (Python 05e026e, C# b5163e3), le Python n'a change que dans
2 cellules markdown (accents, #20783) ; 11 cellules de code et leurs
sorties identiques. Nouvelle attestation 0027 : Python ec5137a, C# b5163e3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(twin): re-attestation GameTheory-17 MultiAgent-RL a l'etat fusionne avec main

L'index 0009 de gametheory-17-multiagent-rl est pris sur main par
0009-2026-10-13-claude-cloud-hors-flotte.yaml (a8ce3d8, 17/10 14:20),
qui atteste le C# 1d61a1e (pont PythonNetLoader) face au Python 8b08221,
celui de la base de cette PR. Mon attestation 0009 du 14/10 (Python
0883411, C# 2ba75ee) est retiree. Le delta Python de cette PR est un
deplacement de 2 cellules de lecture markdown (12 cellules de code et
leur ordre identiques) : la parite attestee par main se transporte.
Nouvelle attestation 0010 : Python 0883411, C# 1d61a1e.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(test): le faux capture_repl_session accepte capture_mode (signature reelle depuis #21045)

test_run_pipeline_transmet_duration_a_la_capture (#20700, merge 18/10
07:37Z) remplace capture_repl_session par un faux a la signature
anterieure a #21045 (16/10), qui a ajoute capture_mode et le transmet
depuis run_pipeline. Sur main d8b2009 : TypeError, Scripts Tests (CPU)
rouge (1 failed, 19337 passed). Le faux reprend le parametre et son
defaut reels ; l'assertion du test (capture_seconds == duration) est
inchangee.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

* Fix(test): ancre test_rename_with_modification_is_scanned sur un commit joignable depuis main

Le test lisait le diff de ad0142c, commit de la branche de la PR ouverte
#20246 (renum/12933-probas-tranche-a). Cette branche a ete reecrite le
18/10 a 09:05Z : ad0142c n'est plus joignable par aucune ref, un clone
neuf (fetch-depth 0) ne le recupere plus et scan_diff rend une liste vide
(Scripts Tests CPU, runner myia-ai-01-wsl-4 : unknown revision, 1 failed /
19337 passed). Nouvel ancrage : f42b570 (#20400, sur main), R099
IIT-01-IntroToPyPhi.ipynb -> IIT-01-IntroToPyPhi-Python.ipynb. Controle de
mutation : avec --diff-filter=AM dans l'organe, le test redevient rouge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants