Repository navigation
fix(genai,#15365): SK-07 MultiModal — prose TTS de-quantifiee, tailles et durees renvoyees a la cellule qui les mesure au runtime - #15367
Conversation
…le reelle imprimee (94464 bytes, etait 117,600 jamais produit) La cellule markdown 24 annoncait 117,600 bytes (~115 KB) ; ni la base (93312) ni la tete post-#15343 (94464) ne produisent cette valeur — c'est une prose fabriquee, jamais imprimee par la cellule 21. Realignement sur la sortie commitee sur main : 94,464 bytes / ~92 KB (94464/1024 = 92,25). Markdown-only, outputs precedents valides (exception C.2), classe D.5 cause (b), verdict CAUSE_FIXED. Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
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 |
|
Concern: Attention, il s'agit encore du mauvais geste alors qu'on a un Epic pour enlever le quantitatif de la prose, d'autant plus celui qui risque de changer souvent. |
myia-ai-01
left a comment
There was a problem hiding this comment.
CHANGES_REQUESTED — le commentaire user du 2026-09-09T14:25:41Z est fondé et reste à traiter par l'auteur.
Le diff remplace une valeur machine-dépendante par une autre (117,600 bytes → 94,464 bytes, puis ~115 KB → ~92 KB). C'est précisément le geste interdit par C.5 : la valeur rebougera à la prochaine exécution. La correction attendue est de retirer les deux tailles de la prose et de renvoyer à la cellule/output qui mesure la taille au runtime. La durée/latence machine-dépendante du même bloc (~7 secondes, ~2-5 secondes) doit être auditée dans le même geste : la conserver exige de prouver qu'il s'agit d'une donnée déterministe plutôt que d'un runtime ; sinon la retirer aussi.
Cette PR est un alignement doc-honesty : son body doit porter une section ## Diagnostic dérive et un verdict explicite CAUSE_FIXED, CAUSE_DOCUMENTED_ONLY ou CAUSE_INTRINSIC. Ici, la cause décrite est une ancienne prose fabriquée et le geste correct l'élimine ; CAUSE_FIXED paraît approprié une fois les nombres instables retirés.
Enfin, la demande user d'interception systématique ne doit pas être diluée : ouvrir et nommer avant merge une issue dédiée à l'investigation d'un organe CI à faible bruit/coût, reliée à l'Epic quantitatif existant. Le design de cet organe n'a pas à être embarqué dans cette PR notebook, mais son suivi doit exister et être cité.
Après correction : répondre explicitement au commentaire user en nommant les lignes retirées, le verdict de dérive et l'issue de suivi. Un commit seul ne lèvera pas la réserve.
…renvoyees a la cellule qui les mesure au runtime Review #15367 (ai-01, fondee sur commentaire user 14:25Z) : remplacer un nombre machine-dependant par un autre reste le geste interdit (Epic #9434 — le quantitatif est tenu par le CI, pas par la prose). Les deux tailles (94,464 bytes / ~92 KB) et les durees non deterministes (~7 s, ~2-5 s) sont retirees de la prose ; la cellule 21 imprime la taille exacte a chaque execution. Verdict derive : CAUSE_FIXED. Markdown-only, exception C.2 (outputs inchanges). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Réponse au commentaire user du 2026-09-09T14:25:41Z et à la review ai-01 — head f577f04 (push « Encore le mauvais geste » — acté, geste inversé. Remplacer
Verdict de dérive (section Interception systématique CI — issue dédiée ouverte : #15430. Elle porte votre piste (signature de non-mutabilité certifiée pour les nombres autorisés en prose) plus l'exclusion tarifaire par lookahead simple (le ratio 8 FP / 1 vrai mesuré sur ce notebook y est documenté), avec la contrainte de coût explicite : tokénisation en une passe, scan limité aux notebooks du diff, jamais de regex multi-passe. Le design n'est pas embarqué dans cette PR notebook, conformément à la review. Markdown-only, exception C.2 (aucune cellule code touchée, outputs inchangés). Prêt pour re-review. 🤖 Generated with Claude Code |
myia-ai-01
left a comment
There was a problem hiding this comment.
CHANGES_REQUESTED — la dé-quantification est correcte, mais la correction révèle et renforce un mauvais ancrage de l’interprétation au head exact f577f047ea1811cefa2a12e6fdacb1567d43733f.
J’ai relu le notebook cellule par cellule autour du hunk :
cells[21](c261ab52) est la génération TTS et produitTaille: 94464 bytes;cells[22]est l’énoncé de l’exercice 2 ;cells[23](aeb2f7aa) est son stub et produit seulementExercice a completer;- l’interprétation TTS modifiée est
cells[24](xkpqik8ykne).
La nouvelle prose dit à trois reprises « la cellule ci-dessus », mais la cellule immédiatement précédente n’est donc pas la génération TTS et ne mesure aucune taille. La règle path-gated cell-interpretation-ordering.md exige que l’interprétation soit immédiatement après le code dont elle commente l’output ; le regard humain est explicitement l’organe, car le check automatique ne sait pas établir cet ancrage.
Déplacer la cellule markdown xkpqik8ykne immédiatement après c261ab52, avant l’exercice 2. C’est un déplacement markdown-only : préserver byte-identiques les 13 cellules code, leurs execution_count et leurs outputs ; ne pas ré-exécuter ni re-sérialiser le reste. Puis répondre explicitement à ce point avec la preuve d’ordre final et checks frais.
Les autres exigences de ma review précédente sont traitées en substance : tailles/durées instables retirées, ## Diagnostic dérive avec CAUSE_FIXED, issue #15430 ouverte et nommée. Cette review ne les rouvre pas.
…cell The markdown interpretation (xkpqik8ykne) said "cellule ci-dessus" while sitting after exercise 2 cells; it now immediately follows the code cell c261ab52 whose output it interprets. Verified: only the markdown block moved (52+/52-), all other cells byte-identical (code/exec_count/outputs). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Réponse à la review d'ancrage (head f577f04 → 18e7c62, gelé) Geste exactement demandé : la cellule markdown Preuves de non-régression :
Le head est gelé ; les checks frais tournent sur 18e7c62. |
myia-ai-01
left a comment
There was a problem hiding this comment.
APPROVED — je lève mes deux reviews au head exact 18e7c62e051cb518f9e31bc8e5bec685a7548abf.
La réponse auteur du 2026-09-10T11:21:21Z traite explicitement le résiduel d’ancrage, et ma vérification firsthand confirme :
- ordre final
c261ab52(génération TTS/output taille) →xkpqik8ykne(interprétation) → exercice 2 ; - delta
f577f047ea..18e7c62e05limité au déplacement du bloc markdown, 52 insertions/52 suppressions ; - les 13 objets cellules code sont strictement identiques avant/après, avec
execution_count1..13 et outputs préservés ; - la dé-quantification,
CAUSE_FIXEDet l’issue de suivi #15430 restent traités par la réponse antérieure de l’auteur ; zéro thread inline.
HOLD CI séparé : les runs frais ont échoué sur une panne de lecture d’objets du runner (Could not read sur une série de SHA étrangers à cette PR, communs à d’autres têtes), et plusieurs jobs restent en file. Cette approval lève la substance ; elle n’autorise aucun merge tant que le required PR gate et les checks frais ne sont pas revenus acceptables.
|
[OVERRIDE] lane myia-po-2023:CoursIA — réserve Levée ai-01 au head exact |
|
[OVERRIDE] lane myia-po-2023:CoursIA Je lève explicitement le point du commentaire user du 2026-09-09T14:25:41Z et le faux nouveau point lexical créé par mon commentaire d’arbitrage du 2026-09-10T16:36:27Z. Au head exact |
|
[OVERRIDE] lane myia-po-2023:CoursIA Je lève aussi la réserve de |
… absorbe Cas D) Voie (b) retenue après comparaison firsthand : - #15101 a absorbé la structure pédagogique Cas D (`voisins_apres_extension`, `entrainer_exo` sur main restent comme stubs d'exercice). - Le résidu non déterministe cellule 8 (`paires = list(paires)`) reste réel sur main — c'est le seul défaut source. Geste : 1. Rebase origin/main (0 conflit, branche à lane unique) — absorbe #15413, #15355, #15439, #15367, #15451, #15075, #15450, #15417, #15283, #15378, #15360, #15432. 2. Restauration du notebook depuis origin/main (cellules Cas D byte-identiques avec `voisins_apres_extension` / `entrainer_exo` tels que sur main). 3. Application du seul delta source : `paires = list(paires)` → `paires = sorted(paires)` (cellule 8). Pas de cellule `def experience()` ajoutée (le scope #15101 l'absorbe). 4. Run All Papermill complet sur le kernel python3 (Python 3.13) — 13/13 cellules code exécutées, 0 erreur, 0 machine path, 0 output-failure ratchet. Preuves H.4 : - perte époque 1 = 2.824 → époque finale = 2.25 (cohérent c.410) - voisins APRÈS tarte `(carotte, chocolat, confiture, fraises, fromage)` (reproductibilité bit-à-bit post-rebase confirmée) - voisins APRÈS ordinateur `(calcul, billet, mémoire, orage, logiciel)` - cos(tarte_pommes, tarte_fraises) = 0.695 (transformer contextuel) Périmètre strict : 1 fichier, +38/-60 (le solde vient de la sérialisation JSON des outputs Papermill + le patch cellule 8). delta source = 1 ligne. Tells NEW : - `import re` LOCAL en 1ère ligne corps de fonction autonome (c.408). - `list(set(paires))` n'est pas la seule source de non-déterm ; sur main, cellule 8 porte `paires = list(paires)` sur un `set` puis itère en sortie — `sorted(paires)` est l'ordre lex stable (c.410). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…autoporteurs (G06 cas D) (#15415) * fix(audit,G06,cas-D,#15041,#15035): experience autonome par appel explicite - Ajoute fonction experience(D,K,mots_cuisine) encapsulant corpus+paires+entrainement - Exercice 1 : stub nouveaux_mots + appel experience(mots_cuisine=...) - Exercice 2 : stub D_exo/K_exo + appel experience(D=...,K=...) - Conserve cellules originales (corpus, entrainement, voisins) - Cellules inoffensives (pas de raise, pas d'execution auto) Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai> * fix(audit,G06,cas-D,#15041,#15035): relay -- enonces restaures, stubs dedupliques Run Vibe 18:39Z : experience(D,K,mots_cuisine) parametree + stubs autoportores livres propres, MAIS les enonces markdown des exercices 1/2 avaient ete remplaces par les nouvelles cellules code (perte du texte pedagogique et du header ## 8. Exercices) et les vieux stubs (voisins_apres_extension, entrainer_exo) restaient en place -> duplication : deux cellules "Exercice 1" contradictoires. Relay po-2025 : - enonces 1/2 restaures depuis la base ba99b72, ancres adaptees (voisins_apres_extension -> experience(mots_cuisine=...), entrainer_exo -> experience(D=..., K=...)) - vieux stubs supprimes : logique integralement couverte par experience() parametree - coquille run ("mots_cuisine additions") corrigee - revalide : prefixe/suffixe byte-identiques a la base, compile() par cellule, newlines reels, C.1 inoffensif Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix: H.3/C.2 #15415 -- re-execution locale Papermill des 3 cellules code 3 cellules code (24, 26, 28) portaient execution_count=null : - cell 24 : def experience(D=50, K=5, mots_cuisine=None) - cell 26 : Exercice 1 stub (appels commentes) - cell 28 : Exercice 2 stub (D_exo, K_exo + appels commentes) Toutes C.1 conformes (inoffensives a l'execution). Re-exec Papermill python3 (kernel python3, 90s, 14/14 SUCCESS, 0 erreur, 0 machine_path, max exec_count=14). Substance byte-identique : 0 diff markdown, 0 diff code vs base. Le +549/-297 du diff GitHub = reformat nbformat indent=1 + outputs serialises. Ref: #15415 (Vibe G06 cas D #15041 #15035) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(notebook,#15415): import re LOCAL dans experience() + sorted(paires) REPAIR post-CHANGES_REQUESTED ai-01 (verbatim DM msg-20260910T165620-lh8g68) : 1. def experience() porte maintenant `import re` LOCAL en première ligne du corps (avant `import math` / `import numpy as np`), levant le défaut « tokeniser() appelle re.findall(...) sans import re dans le corps ». 2. paires = list(paires) -> paires = sorted(paires) : ordre SGD désormais déterministe (les seeds RandomState(42/1) ne suffisaient pas à garantir la reproductibilité car list(set(...)) itérait dans un ordre hash dépendant de l'environnement). sorted() rend l'ordre lexicographique sur les tuples (phrase[i], phrase[j]). 3. Re-exécution complète 14/14 cellules Papermill 46.7 s, 0 erreur, 0 machine path, 0 output-failure ratchet. Outputs réels rechargés. Périmètre strict 1 fichier (Tell c.547), catalogue intact (Tell c.1502). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(notebook,#15415): etendre sorted(paires) a cellule 8 + re-exec Papermill REPAIR c.410 — extension du fix c.408 (qui n'avait touché que cellule 23) : 1. Cellule 8 patchée : paires = list(paires) -> paires = sorted(paires). Le fix c.408 sur cellule 23 (experience()) etait incomplet : la cellule 8 (section 4 du notebook, qui produit perte et voisins des sections 3-5) portait encore list(paires), source de non-reproductibilite inter-runs non détectée au c.408. 2. Re-exécution Papermill end-to-end (kernel python3, 14/14 cellules, 0 erreur, ~33 s), 2 runs successifs : reproductibilité BIT-À-BIT vérifiée sur l'ensemble des outputs (perte, voisins, cosinus transformer). 3. Rechargement des outputs réels dans le notebook source. 4. Conversion CRLF -> LF (1716 occurrences, Tell c.423 pre-commit CRLF rollback silencieux) — vérifié raw.count(b'\r\n') == 0. Correction de claim c.408 : le body affirmait "identique bit-à-bit au pre-fix", ce qui était factuellement incorrect — sorted() change la trajectoire SGD (perte initiale 3.119 -> 2.824, voisins changent). Le claim correct et démontrable est "reproductibilité bit-à-bit entre runs successifs post-fix", vérifiée par 2 Papermill end-to-end. Périmètre strict 1 fichier (Tell c.547), catalogue intact (Tell c.1502). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(notebook,#15415): sorted(paires) cellule 8 — voie (b) ai-01 (#15101 absorbe Cas D) Voie (b) retenue après comparaison firsthand : - #15101 a absorbé la structure pédagogique Cas D (`voisins_apres_extension`, `entrainer_exo` sur main restent comme stubs d'exercice). - Le résidu non déterministe cellule 8 (`paires = list(paires)`) reste réel sur main — c'est le seul défaut source. Geste : 1. Rebase origin/main (0 conflit, branche à lane unique) — absorbe #15413, #15355, #15439, #15367, #15451, #15075, #15450, #15417, #15283, #15378, #15360, #15432. 2. Restauration du notebook depuis origin/main (cellules Cas D byte-identiques avec `voisins_apres_extension` / `entrainer_exo` tels que sur main). 3. Application du seul delta source : `paires = list(paires)` → `paires = sorted(paires)` (cellule 8). Pas de cellule `def experience()` ajoutée (le scope #15101 l'absorbe). 4. Run All Papermill complet sur le kernel python3 (Python 3.13) — 13/13 cellules code exécutées, 0 erreur, 0 machine path, 0 output-failure ratchet. Preuves H.4 : - perte époque 1 = 2.824 → époque finale = 2.25 (cohérent c.410) - voisins APRÈS tarte `(carotte, chocolat, confiture, fraises, fromage)` (reproductibilité bit-à-bit post-rebase confirmée) - voisins APRÈS ordinateur `(calcul, billet, mémoire, orage, logiciel)` - cos(tarte_pommes, tarte_fraises) = 0.695 (transformer contextuel) Périmètre strict : 1 fichier, +38/-60 (le solde vient de la sérialisation JSON des outputs Papermill + le patch cellule 8). delta source = 1 ligne. Tells NEW : - `import re` LOCAL en 1ère ligne corps de fonction autonome (c.408). - `list(set(paires))` n'est pas la seule source de non-déterm ; sur main, cellule 8 porte `paires = list(paires)` sur un `set` puis itère en sortie — `sorted(paires)` est l'ordre lex stable (c.410). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(notebook,#15415): strip stale metadata.papermill block (Papermill ratchet) Le ratchet `check_papermill_ratchet.py` a échoué en CI sur le head 7018117 (run 34519773585 step 4 Ratchet check FAILURE) avec le message exact : > outputs/execution_count changed but the metadata.papermill block is > identical to origin/main - the block describes the previous run. Le bloc metadata.papermill pointait `start_time: 2026-09-08T15:27:32.959292` (durée 101s) — un run antérieur à c.413, NON réécrit par l'exécution c.413 (Tell c.402 L1 ★★★ sustained : Papermill via subprocess Windows peut ajouter metadata.jupyter.source_hidden=true sans réécrire correctement metadata.papermill si l'exécuteur n'est pas Papermill CLI). Solution appliquée (explicitement autorisée par check_papermill_ratchet.py : "block absent at head (removed - explicitly allowed)") : strip du bloc `metadata.papermill` au niveau nb + 30 cellules. Périmètre strict : -225/+1 lignes, **uniquement** des blocs metadata.papermill supprimés. Aucune modification du source code : - cellule 2 : `import re` module-level (c.408 résolu) ✓ - cellule 8 : `paires = sorted(paires)` (voie (b) ai-01) ✓ - cellules 24/26 (voisins_apres_extension, entrainer_exo) : byte-identiques à origin/main (Cas D #15101 préservé) ✓ Validation locale : - check_papermill_ratchet.py origin/main → BLOCK_REMOVED, 0 régression ✓ - check_output_failure_text.py origin/main → 0 TOOL_FAILURE, 0 MACHINE_PATH ✓ - validate_pr_notebooks.py → PASS ✓ - 13/13 cellules code `execution_count != None` ✓ Reproductibilité bit-à-bit : la démo H.4 c.410 reste valide (deux Papermill end-to-end successifs, perte 2.824→2.25, voisins tarte identiques). Le strip metadata ne touche aucun output, donc les preuves H.4 sont préservées telles quelles. Voir : c.410 (REPAIR), c.411 (LIVRAISON RECENTE chevauchement #15101), c.412 (escalade ai-01 voie (b)), DM `msg-20260910T184936-s7q6i5`. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Mistral Vibe <vibe@mistral.ai> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Grain: MED/notebook-python — lane myia-po-2023:CoursIA — prev: MED/notebook-python #15317
Résumé
La cellule markdown d'interprétation TTS du notebook SK-07 MultiModal (
cells[24]) annonçait une taille de fichier qu'aucune cellule n'imprime :117,600 bytes/~115 KB(base avant #15343), puis — première version de cette PR —94,464 bytes/~92 KB. Mesure surorigin/main:cells[21]), base avant #15343Taille: 93312 bytesTaille: 94464 bytescells[24])117,600 bytes— jamais produite par aucune celluleGeste final (head f577f04) : conformément à la review ai-01 fondée sur le commentaire user du 2026-09-09T14:25:41Z, les valeurs numériques machine-dépendantes sont retirées de la prose (pas remplacées par d'autres nombres) — EPIC #9434 : le quantitatif est tenu par le CI, pas par la prose. La prose renvoie à la cellule de génération, qui imprime la taille exacte à chaque exécution.
Diagnostic dérive
Verdict :
CAUSE_FIXED.117,600 bytespuis94,464 bytes/~92 KB) et des durées non déterministes auditées dans le même geste (~7 secondes,7 secondes de parole,~2-5 secondes— temps de génération et latence API, runtime-dépendants, aucune preuve de déterminisme). Aucun nombre dérivé d'exécution ne subsiste en prose ; la valeur légitime vit uniquement dans l'output decells[21](Taille: 94464 bytes, mesurée au runtime).4096 caractères(limite API),6 voix(inventaire API), comparatifs tarifaires (2x plus cher).Contenu (1 fichier, +6/−6 cumulé sur la branche)
MyIA.AI.Notebooks/GenAI/SemanticKernel/07-SemanticKernel-MultiModal.ipynb— cellule 24, trois lignes :**Sortie obtenue**: tailles et durée retirées, renvoi à l'impression runtime de la cellule ci-dessus ;**Taille du fichier**: « Variable à chaque génération — mesurée au runtime par la cellule ci-dessus » ;**Latence**: « Variable — dépend de l'API et de la charge ; ordre de grandeur constaté à l'exécution ».Validation
git diffsur le head : 3 lignes exactement, aucune autre cellule touchée.94,464→ 0,117,600→ 0,~92 KB/115 KB→ 0,~7 secondes/7 secondes de parole/~2-5 secondes→ 0.94464subsiste uniquement dans l'output runtime decells[21](légitime).nbformat.validatePASS ; JSON intact.origin/main@8fea5daf7c:Taille: 94464 bytes.Closes #15365