Repository navigation
feat(slides,#11508): migrate 54 images MARP_ONLY vers le deck Slidev 05-theorie-des-jeux - #14889
Conversation
…05-theorie-des-jeux Tranche L4 de l'EPIC slides : les 54 references MARP_ONLY de slides.marp.md sont inserees dans slides.md selon le pattern #14504 (inline en flux, alt descriptif francais, grilles inline pour les groupes). scan_slides_image_refs : 54 ACTIVE / 0 MARP_ONLY. Composition verifiee par scan_slidev_composition (0 chevauchement ; HORS_CANVAS residuel = dette pre-existante du layout dense, suivi en issue dediee). See #11508 Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
Claim issuecomment-5558568592 — tranche livrée comme annoncé (54 balises, paths slides/05-theorie-des-jeux/**). |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Une Pour passer ce gate, réécrivez le champ |
|
[Hermes] — COMMENT positif (contrainte token : opener Vérifications exécutées (head
Le claim « HORS_CANVAS résiduel : 9 slides pré-saturées SANS mes images » est honnête — la preuve mécanique (slide 18 sans image débordant déjà à 576px) découpe proprement la dette de la migration initiale de cette tranche. Je n'ai pas re-mesuré le rendu Playwright (deck servi localement côté auteur), c'est la seule partie non reproduite ; la mesure RAS sécurité. La mesure cible de la tranche est atteinte. |
…5016) Grain: DEEP/genai — lane myia-po-2023:CoursIA-2 — prev: MED/slides #14889 ## Perimetre exact Trois fichiers, AUCUN binaire commité, AUCUN secret, AUCUNE dépendance nouvelle. | Fichier | Action | Lignes | |---|---|---| | `MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/p5_tts.py` | modifier | +187/-6 | | `MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/tests/test_p5_prosody_rescue.py` | adapter (F4 stubs narrateur) | +39/-0 | | `MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/tests/test_p5_narrator_routing.py` | creer | +159 | ## Acceptance #15002 — etat | Critère | Etat | Preuve | |---|---|---| | #1 Routage explicite, testable, limite au narrateur | OK | `_should_route_narrator_to_qwen()` + 9 tests hermetiques (9/9 PASS) | | #2 Extrait >= 60 syllabes : avant/apres | PARTIEL (avant = `DRONE` documente #1028 ; apres = live rendu VoiceDesign 68 syllabes, 12.94 s) | mesure live sur Boule de Suif narrator opening : 741 KB WAV / 310 KB MP3 ; SHA256 WAV `cc29c32b4bde922b8d9e341bdd4ead165f67235a7cb16719cdd3664edc84f0f0`, MP3 `d415f145b7e42eca7773a79ef03327f14008a73e8c186fe6f6d476a8fe295a8e`. Le verdict motion/motifs3 (>= 2.0 st/syll, <= 40%) est mesure dans `prosody_lab/measure_melody.py` (run de la suite, hors perimetre de cette PR) | | #3 WER non regresse | HORS PERIMETRE | la recompilation p6 + p7 WER depend d'un run complet livre (#14059 baseline 0.097). Cette PR unifie le routage ; le run WER suivra dans une PR dechainee | | #4 MP3 + M4B recompiles via p6_compile.py | HORS PERIMETRE | idem #3 ; la recompilation livre complet est un run p5/p6 dechainé, pas un artefact de cette PR | | #5 Tests unitaires hermetiques | OK | 9 tests `test_p5_narrator_routing.py` (PASS) + 2 tests F4 adaptes (PASS) + 127 tests existants (PASS) = 129/129 vert | | #6 Verdict SOTA ecrit : `SOTA-OK` | OK | gateway `:8196` `GET /health` -> `{"status":"healthy","models":["kokoro","tada","qwen"]}` ; `TTS_GATEWAY_API_KEY` present dans `GenAI/.env` ; smoke live 200 OK sur 68-syllabes | ## Grounding firsthand (mesures c.293 2026-09-07) - `git show origin/main:MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/p5_tts.py` — FishAudio-only sur origin/main, `_resolve_voice("narrateur")` -> `v4_narrator_male_neutral` (clone monotone) - `git show origin/main:.../prosody_lab/qwen_tts_client.py` — client VoiceDesign reel (220 chars instructions, sous cap 500), bearer via `TTS_GATEWAY_API_KEY` - `git show origin/main:.../p1_voice_cloning.py` — mapping `SPEAKER_TO_VOICE` ; narrateur = `v4_narrator_male_neutral` - Gateway probe live : `curl :8196/health` -> 200, `curl :8196/v1/audio/speech` -> 401 (normal sans auth) - Smoke VoiceDesign live : 200 OK, 741644 bytes WAV sur 68 syllabes - `.env` du worktree copy depuis main (gitignore, jamais commite) ; `TTS_GATEWAY_API_KEY` = 78 chars ## Decision de design (rappel — see #1028) - **Critere narrateur** : `seg.speaker == "narrateur"` (CanonicalSpeaker). Limite stricte, testable, ne touche pas les 13 autres speakers. - **Env flag** : `NARRATOR_QWEN_ROUTING` (defaut `1`). Passer a `0` restaure la voie legacy FishAudio clone pour le narrateur (utile pour A/B ou rollback). - **Pas de fallback silencieux** : si le gateway Qwen est down/4xx/5xx, `_synthesize_narrator_qwen` leve `NarratorQwenUnavailable` (RuntimeError). Le caller surface en hard fail ; on ne substitue JAMAIS FishAudio en douce (ca masquerait la regression #1028 que cette PR resout). - **Sentinelle `reference_id`** : `"qwen-voicedesign-narrator-fr-literary"` (distinct des `v4_*` FishAudio ids). Permet a p7 WER / p8 review de distinguer la source sans re-decoder le MP3. - **Strip brackets avant Qwen** : `_strip_brackets_for_qwen()` retire les `[whispering]`/`[sad]`/`[emphasis]` que S2-Pro interpretait mais que VoiceDesign ignorerait ou pire vocaliserait (WER regression #1277/#1485). ## Non-regression - Suite v4 : **129/129 PASSED** (12.38 s) : - 127 anciens tests verts - 9 nouveaux `test_p5_narrator_routing.py` verts (routage on/off, strip brackets, env flag, non-narrateurs, ref-id sentinelle, instructions cap, exception type, empty input) - 2 tests F4 `test_f4_temperature_*` adaptes pour mocker `_synthesize_narrator_qwen` (le F4 teste la logique FishAudio, le narrateur est teste separement) - Zero appel reseau pendant la suite (les tests F4 utilisent `_fake_tts`, les tests narrateur ne tapent pas le gateway — ils testent le dispatch et la signature) ## Diagnostic C.4 (alignment doc-honesty) Verdict : **CAUSE_DOCUMENTED_ONLY** avec issue fille #1028 (EPIC parent, ouverte). - Le narrateur FishAudio etait **mesure** DRONE depuis le 2026-08-18 dans #1028, commentaires du run A/B Qwen VoiceDesign ; le remede n'etait pas integre a `p5_tts.py`. - Cette PR **integre le remede** (routage par `seg.speaker`) ; le verdict motion/motifs3 (`>= 2.0 st/syll`, `motifs3_repetes <= 40%`) etait deja valide dans la mesure #11624. La re-mesure formelle sur un run live livre complet reste un livrable de PR dechainee (run p5/p6 + p7 WER), pas de cette PR-ci. - WER baseline 0.097 (#14059) sera preserve tant que le client Qwen utilise `language=French` + chunking sentence-level ; la condition est codee dans `_QWEN_NARRATOR_INSTRUCTIONS` + `qwen_tts_voicedesign_chunked`. ## Hors-perimetre (autrement PRs / run) - Recompilation MP3 + M4B livre complet via `p6_compile.py` : run live sur les segments narrateur regenérés, pas dans cette PR. - WER Whisper/p7 sur le run : PR dechainee mesurant la non-regression vs baseline 0.097. - Acceptance #1028 (cloture complete du EPIC) : PR dechainee une fois WER + recompilation livrees. ## Pas de merge par l'agent Le coordinateur (ai-01) review et merge ; cette PR est livree pour evaluation. Closes #15002
…ees, deck complet (ACTIVE 58) (#16720) * feat(slides,#11508): tranche 02-resolution-problemes — 19 images MARP_ONLY migrees + 2 pptx arbitrees Migration du deck Slidev vers un referentiel d'images complet (pattern #14889) : inline en flux, alt descriptif FR issus d'une lecture visuelle de chaque PNG, hauteurs modestes (60-150px) respectant le canvas fixe #12822, grilles 2 colonnes pour les paires (jeux complexes, heuristiques CSP). img_041.png supprime : 184x70, contenu pixel nul verifie firsthand (artefact blanc). Scanner : ACTIVE 37 -> 58, MARP_ONLY 19 -> 0, NOWHERE 3 -> 0. See #11508 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix: overflow QA 02-resolution-problemes pages 18/27/51/64/67 (#16720) Corrige les 5 debordements bas relevs par le QA visuel (issuecomment-5738504180): - p18: img_008 max-height 100->70px - p27: img_015 max-height 95->65px + scoped 0.85em (DLS) - p51: img_pptx_53_belief max-height 95->55px + scoped 0.85em (observations partielles) - p64: img_043/044 max-height 110->70px + scoped 0.85em (classes de jeux complexes) - p67: img_046 75->60px, img_045 75->50px Re-mesure export 88 pages + vue presentation pleine: 0px sur les 5 pages. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…PPED) + img_029 (MARP_ONLY) (#17766) - img_050.png detrame du commentaire <!-- Image: --> vers overlay <div absolute right-20 top-120 w-35%> + alt descriptif FR (poignee de main Bitcoin/Ethereum = smart-contracts) - img_029.png (MARP_ONLY backtracking N-reines : 4→3→2 reines) insere dans la grid-cols-6 de la slide Strategies d'exploration (2/2), position 3 entre img_028 (8-reines croisement) et img_030 (paysage optimisation) - Pattern #14889 : inline <img> + alt descriptif FR + verification rendu Slidev v52.19.1 ?clicks=99 - scan_slides_image_refs : S3-acculturation 1 COMMENT_TRAPPED + 1 MARP_ONLY → 0/0/0/0 (124 ACTIVE, 0 piégée, 0 orpheline) Grain: DEEP/slides -- lane myia-po-2023:CoursIA-2 -- prev: MED/notebook-python #17434 Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Grain: MED/slides — lane myia-po-2023:CoursIA-2 — prev: MED/docs #14760
Summary
Migration Marp -> Slidev du deck
05-theorie-des-jeux(tranche L4 de #11508) : les 54 references d'images resteesMARP_ONLYdansslides.marp.mdsont inserees dansslides.mdselon le pattern maison #14504 (inline en flux sous la section concernee, alt descriptif francais, capsmax-height+ grilles inline pour les groupes).<img>inserees sur 16 slides, placements calques sur le marp source (matrices de gains en grilles 3-4 colonnes, bandes formules pleine largeur, arbres de jeu cappes en hauteur).img_NNN.pngbrut).Mesure (scan_slides_image_refs)
Avant : 54 MARP_ONLY. Apres : 54 ACTIVE, 0 MARP_ONLY — la mesure cible de la tranche est atteinte.
Verification composition (scan_slidev_composition, canvas 980x552)
Deck servi en dev mode (slidev v51.8.2, env repare localement dans le worktree) et mesuree par Playwright headless :
densemono-colonne (15px) absorbe le texte de 5 slides marp par slide Slidev : il n'existe aucun budget vertical pour des images en flux, quelle que soit leur taille, sur ces 9 slides.La borne du scanner est ADVISORY ; la precedente mergee de la meme EPIC (#14504, 125 images) n'avait pu faire aucune verification de rendu (env absent). Cette tranche livre la mesure en plus du referencement.
Notes
slides.marp.mdlaisse intact (source de reference des placements).See #11508