Skip to content

fix(ict,#17211): ICT-03-Robustness — 3 findings (lecture avant figure, empilement 10/12, épisodes lus comme durées) — redressement #17040 - #17354

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/ict03-robustness-audit-17211
Sep 25, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/ict03-robustness-audit-17211

Conversation

@jsboige

@jsboige jsboige commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

Grain: CONTENU/notebook-python -- lane myia-po-2026:CoursIA -- prev: CONTENU/notebook-python #17352

ICT-03-RobustnessDelayedGratification — 3 findings Hermes réparés (#17211, audit jsboige 12:41Z)

F1 — navigation-misplaced (cell 9, lecture « La visualisation confirme la dégradation gracieuse… ») : elle apparaissait avant la cellule 11 qui produit la figure — l'apprenant lisait un commentaire d'image inexistante (la sortie précédente, cell 8, est un tableau texte). Vérifié firsthand : l'errorbar passive/obstacle est bien en cell 11. F1 était aussi factuellement faux : « sans effondrement brutal » ne décrit que le panneau passive — le panneau obstacle chute justement de façon brutale (cf lecture cell 12 : « la chute est plus brutale dès les premiers pourcents »).

F2 — paraphrase-stack (cells 10 / 12) : la cell 10 paraphrasait le tableau de la cell 8 (0,75→0,59 contre 0,64→0,53), la cell 12 post-figure reprenait la même analyse en plus riche.

Résolution jointe F1+F2 (prescription de l'audit : repositionner 9 après la figure / fondre 10 dans 12 — repositionner 9 après 11 l'aurait empilée avec 12) : cells 9 et 10 supprimées, leur contenu unique fondu dans la lecture post-figure 12 — les ancrages numériques du tableau y sont intégrés (0,75→0,59 pour bubble, 0,86→0,62 pour insertion en passive ; trajectoire identique 0,64→0,53 des deux algotypes en obstacle, fait que seule l'ancienne cell 10 montrait). Le faux « sans effondrement brutal » disparaît avec la cell 9 : la lecture restante (12) distingue correctement les deux régimes. C'est l'application de la règle #13410 « réécrire l'existante » ; la suppression est une consolidation (contenu unique préservé), pas une perte.

F3 — output-uninterpreted (cell 20) : la sortie de la cell 19 compte des épisodes (delayed_gratification_events : moyenne=91,4 / 89,8) et la lecture les décrivait comme des durées (« épisodes… plus longs… avant de reprendre sa progression ») — contredite par la cell 22 qui dit correctement « ~90 épisodes en moyenne… bubble en exhibant marginalement plus ». Fix : « légèrement plus nombreux… ce sont des compteurs d'épisodes — le système s'offre un petit supplément de descentes locales en route vers l'ordre, pas des épisodes plus longs », avec la plage min–max (85–98 / 81–99) absente de la cell 22 — sans préempter sa conclusion paradigme (pas de nouvel empilement 20/22).

Signalé hors scope audit (non traité ici) : les cells 15/17 (section 2) présentent une ressemblance duale (15 relit le tableau, 17 la figure, chevauchement partiel « 24/24 réparés, médianes 1050 vs 1204 ») — l'organe ne la signale pas et la lecture 17 apporte un contenu distinct (distribution large vs constante) ; à réexaminer si un audit la flotte.

Validation

Preuve Résultat
Diff 2 cellules markdown supprimées (9, 10), 2 réécrites (12, 20) ; markdown-only → exception C.2
Sources code + outputs + execution_count byte-identiques à origin/main vérifié par script (11 cellules code, signature (source, ec, outputs) exacte)
Ordre post-edit vérifié figure (ex-11) puis sa lecture (ex-12) ; sortie compteurs (ex-19) puis sa lecture (ex-20)
detect_markdown_rendering.py 0 violation
check_split_reading_cells.py clean (le signal paire [9,10] de l'audit a disparu)
restore_accents_canonical.py --check 0 cure = base (stable ; formes hors table inchangées)
enrich_quality_ci.py (base blob main) RC=0
H.3 check_null_exec.py OK

Volets non couverts : le reste de la partition #17211 (ICT-08 livré #17352, ICT-03 livré ici — partition à suivre).

See #17211 (contribution partielle : volet ICT-03).

Requalification — correctif indépendant de la campagne gelée (#17040)

Le gel s'applique parce que le body cite #13410 (le filtre d'entrée lit titre et body). Mesure du diff à la tête aff5f2cafe1 : cette PR n'ajoute pas de contenu de campagne, elle en consolide les dégâts.

Mesure (notebook) base e8d76767e3 tête écart
cellules markdown 20 18 −2
lignes markdown 173 172 −1
mots markdown 1940 1916 −24
cellules code 11 11 0 (source byte-identique)
cellules markdown alignées par contenu — — +2 / −4

Les deux cellules supprimées (9 et 10) sont fusionnées dans la lecture post-figure : c'est la règle 1 du veto (une sortie = au plus une lecture, consolider plutôt qu'empiler), appliquée dans le sens de la réduction.

  • Organe objectif du veto : python scripts/notebook_tools/check_split_reading_cells.py <nb> → clean (rc=0) à cette tête.
  • Périmètre : 1 notebook de main. Aucune branche de PR #13410 n'est touchée.
  • Le seuil de densité n'est mentionné nulle part dans ce body (grep -c 1200 → 0).

🤖 Generated with Claude Code

…, empilement 10/12, episodes lus comme durees)

F1+F2 joints (prescription audit) : cells 9-10 supprimees, contenu unique
fondue dans la lecture post-figure 12 (ancres numeriques tableau 0.75->0.59 /
0.86->0.62 / 0.64->0.53). F3 : compteurs d'episodes (91,4/89,8) lus comme des
durees -> frequence/comptage + plage min-max. Markdown-only, exception C.2 :
code + outputs byte-identiques a origin/main (11 cellules code, verifie).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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.

@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 added variation-tag-malformed Tag Grain present mais TIER != DEEP|MED|LIGHT variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) labels Sep 22, 2026
@github-actions

github-actions Bot commented Sep 22, 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 9.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 8.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 9.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 12.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 7.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 79.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 12.9s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 11
  • 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 Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17354 (fix(ict,#17211): ICT-03-Robustness — 3 findings (lecture avant figure, empilement 10/12, épisodes lus comme durées) — redressement #17040) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 17354
head: aff5f2c
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: be27451c80b7a0aa108c117736d738551d373585cecf6eb71645b27f6b380fd0
diff-files: 1
diff-additions: 7
diff-deletions: 20
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Verifications firsthand : checks latest-wins vertes au head, B.0 rc=0, corps lu integralement (3 findings Hermes #17211 reparés, consolidation documentée cellule par cellule, suppression = fusion du contenu unique dans la lecture post-figure 12). Commentaires relus : advisory path-collision bot uniquement, aucune réserve d'auteur.

@jsboige jsboige changed the title fix(ict,#17211): ICT-03-Robustness — 3 findings (lecture avant figure, empilement 10/12, épisodes lus comme durées) fix(ict,#17211): ICT-03-Robustness — 3 findings (lecture avant figure, empilement 10/12, épisodes lus comme durées) — redressement #17040 Sep 25, 2026
@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Sep 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-25) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 25, 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).

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 17354
head: aff5f2c
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ebf4818c418408c8df00ab7b23818dee9909c589773e4b3620b623e683756ab0
diff-files: 1
diff-additions: 7
diff-deletions: 20
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Re-emission, pas un PATCH en place — deux raisons mesurees, dont aucune n'est reparee par une reecriture sur place :

  1. le surfaces-sha256 du dossier precedent (15:59:08Z, meme tete aff5f2cafe) ne matche ni l'algorithme courant ni l'ancien (les deux digests sont rendus par la fonction de l'organe) : une surface de sa fenetre a bouge apres son emission ;
  2. deux commentaires de bots lui sont posterieurs (github-actions[bot] 17:02:12Z et 17:04:44Z), et l'organe invalide alors sur l'ordre (« discussion changed after dossier ») — seul un commentaire neuf, pose apres eux, redonne un dossier en fin de discussion.

Attestation a la tete aff5f2cafe (mesure firsthand) :

  • pliage latest-wins : check_run_state.py --pr 17354 rc=0, aucun nom non vert ;
  • B.0 : check_unaddressed_nits.py 17354 rc=0, et le seul commentaire non evalue par cet organe est ce dossier lui-meme — rien a relire ;
  • domaine notebook, lu a la tete : 29 cellules dont 11 code, execution_count 1..11 tous presents, 0 sortie d'erreur, aucune erreur volontaire (C.1) ; la substance revendiquee par le body est verifiee dans la sequence — la figure (cellule 9) precede sa lecture (cellule 10), et la lecture du compteur d'episodes (cellule 18) dit bien « plus nombreux » et non « plus longs » ;
  • perimetre : 1 fichier, +7/-20, MyIA.AI.Notebooks/IIT/ICT-Series/ICT-03-RobustnessDelayedGratification-Python.ipynb, coherent avec le titre et le body (3 findings Hermes).

Non verifie par moi : je n'ai pas rejoue les organes de qualite listes dans le body (rendu markdown, cellules de lecture scindees, accents) ; je constate la tete de check-runs et le notebook a la tete.

@myia-ai-01
myia-ai-01 merged commit e40624f into main Sep 25, 2026
109 of 111 checks passed
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) variation-tag-malformed Tag Grain present mais TIER != DEEP|MED|LIGHT

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants