Skip to content

Fix(ml,#17387): Lab5 — nav/H1 au canon, exercices avant Conclusion, lecture ancrée, accents - #19625

Merged
myia-ai-01 merged 4 commits into
mainfrom
fix/17387-audit-lab5
Oct 7, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
fix/17387-audit-lab5

Conversation

@jsboige

@jsboige jsboige commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: LIGHT/docs #19533

Objet

Audit correctif de la campagne #17073 sur Lab5-Viz-ML — le déficit de série explicitement laissé en attente par la livraison de Lab6 (PR #17392) : « Le déficit de série Lab5 (même pattern nav/Exemple guidé) reste à la tranche Lab5 — non touché ici. »

See #17387 — tranche bornée à un seul carnet (claim amendé en conséquence).

Canon mesuré, pas supposé

Sur les 7 labs du track, 6 portent un unique Index = ../../README.md en cellule 0, un seul H1 et aucun titre H2 répliqué. Lab5 était le seul outlier — et Lab6 (corrigé) donne la forme cible, reproduite ici.

Findings corrigés

# Défaut Constat Correction
1 navigation-misplaced cellules 0 et 1 : deux blocs de nav divergents (Index → ../../../../README.md d'un côté, ../../README.md de l'autre) et le titre du lab répliqué en H2 sous le H1 cellule 0 au canon Lab6 (H1 puis nav, Index unique) ; H2 dupliqué et second bloc de nav retirés
2 progression-break ## Exemple guidé et ses exercices arrivaient après ## Conclusion exercices avant ; puis ## Conclusion, ## References, bloc de retour
3 exercise-mismatch la section ## Exemple guidé annonçait un exemple résolu mais son corps et la cellule suivante étaient le premier exercice, non numéroté (les suivants l'étaient 2, 3, 4) renommée ### Exercice 1 : Prix moyen par catégorie et classification binaire
4 lecture non ancrée l'interprétation du score proposait des seuils (> 0,7 / 0,4-0,7 / < 0,4) sans lire la sortie committée elle lit la précision réellement mesurée (1.00) et déclare pourquoi elle ne mesure rien — transactions.csv ne porte que 6 lignes (4 entraînement, 2 test)
5 accents 1 forme canonique + 8 formes hors table du cureur (comprehension, cote a cote, Evaluation, evaluer, detaillee, entraine, detaille, evaluation) 1 cure canonique + 8 cures manuelles, markdown uniquement

classe (×2) reste signalé par le détecteur : faux positif vérifié — « la classe LogisticRegression » est correctement orthographié.

Ce qui n'est pas corrigé ici

Le finding 4 a sa cause racine dans transactions.csv (Lab4, 6 lignes de données) : élargir ce fichier touche un autre carnet et un autre artefact, hors du périmètre du claim. Signalé par l'issue #19624 (trois voies d'arbitrage).

Validation

  • check_split_reading_cells · check_interp_positioning · check_output_failure_text · check_cell_source_parses · check_duplicate_sections · restore_accents_canonical : propres après édition.
  • Structure : 1 seul H1, navigation en cellule 0 uniquement, 0 execution_count nul, 0 sortie d'erreur, exec 1..10 monotone, 5/5 liens internes résolvent.
  • Markdown-only (exception C.2) : aucune cellule de code touchée, execution_count et outputs inchangés, ré-exécution non due.

Plan-loss -- section assumee

plan-loss: section assumee -- Lab5-Viz-ML.ipynb section: Exemple guide : section renommee en Exercice 1 -- le titre annoncait un exemple guide alors que son corps etait le premier exercice non numerote ; substance conservee mot pour mot et enrichie d une consigne.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 7, 2026 02:11
…16056 clos) et compte de prose

Audit correctif de la campagne #17073 sur deux carnets non encore audites de la
checklist : 3.6e (dernier membre non audite de la famille 3.6) et 3.9g (capstone
compression, absent de la checklist).

Cinq findings, tous mesures contre les artefacts -- pas de survol :

1. 3.6e -- le renvoi "suivi ouvert, issue #16137" est perime : #16137 est
   CLOSED/COMPLETED depuis le 2026-09-15, et le 3.6c porte desormais le protocole
   de mesure (5 bandes passantes x 4 seeds x 2 budgets) dont le verdict imprime
   est INCONCLUSIVE. Le renvoi pointe maintenant le resultat mesure.

2. 3.6e -- "est l'objet du bloc B de l'issue #16056" : #16056 est CLOSED depuis
   le 2026-09-18, et le pendant industriel est LIVRE sous la forme du
   3.10-Modeles-Generatifs-Diffusion-SOTA.ipynb, qui se nomme lui-meme le pendant
   SOTA de 3.6c/3.6d/3.6e. Le renvoi pointe le carnet.

3-4. 3.6e -- la liste de navigation melait liens (3.6, 3.6b) et backticks
   (3.6c, 3.6d) : les deux cibles existent, elles sont maintenant liees.

5. 3.9g -- "Les six notebooks precedents" alors que sept sont cites (3.9, 3.9a,
   3.9b, 3.9c, 3.9d, 3.9e, 3.9f) ; le repertoire en porte huit avec le 3.9g.

6. 3.9g -- 3.9f est decrit "globale contre uniforme" en c.[23] et "globale contre
   random" en c.[34] : l'enonce-titre de 3.9f est "local vs global" (allocation
   par couche contre allocation par importance), le random local n'en est que le
   plancher probant (3.9f, c.[33]). Les deux mentions sont alignees.

Method : les 6 organes de la campagne, puis verification programmatique des
chiffres cites en prose contre les sorties committes. Croises et exacts (aucun
finding) : tableau 3.9g contre sa sortie, 0,9019 de 3.9a, 1071 -> 267 Ko et
21,4 -> 12,1 ms de 3.9e, 40,81 M de 3.9b.

Correctifs markdown-only (exception C.2, aucune cellule de code touchee) :
execution_count et outputs inchanges, 0 sortie d'erreur, tous les liens internes
resolvent. Re-execution non due.

See #17379

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…lecture ancree, accents

Audit correctif de la campagne #17073 sur Lab5-Viz-ML, le deficit de serie laisse
explicitement en attente par la livraison de Lab6 (PR #17392 : "Le deficit de serie
Lab5 (meme pattern nav/Exemple guide) reste a la tranche Lab5 -- non touche ici").

Canon mesure, pas suppose : sur les 7 labs du track, 6 portent un unique
Index = ../../README.md en cellule 0, un seul H1 et aucun titre H2 replique. Lab5
etait le seul outlier.

Findings corriges :

1. navigation-misplaced -- deux blocs de nav divergents (Index vers
   ../../../../README.md d'un cote, ../../README.md de l'autre) et le titre du lab
   replique en H2 sous le H1. Cellule 0 remise au canon Lab6 (H1 puis nav, Index
   unique) ; le H2 duplique et le second bloc de nav sont retires.

2. progression-break -- "Exemple guide" et ses exercices arrivaient APRES
   "## Conclusion". Les exercices passent avant ; Conclusion, References puis bloc
   de retour ferment le carnet (forme Lab6).

3. exercise-mismatch -- la section "Exemple guide" annoncait un exemple resolu mais
   son corps et la cellule suivante etaient le PREMIER exercice, non numerote, les
   suivants etant numerotes 2, 3, 4. Renommee "Exercice 1".

4. lecture non ancree -- l'interpretation du score proposait des seuils de lecture
   (> 0,7 / 0,4-0,7 / < 0,4) sans lire la sortie committee. Elle lit desormais la
   precision reellement mesuree (1.00) et dit pourquoi elle ne mesure rien :
   transactions.csv ne porte que 6 lignes (4 entrainement, 2 test).

5. accents -- 1 cure par le curer canonique, plus 8 formes hors table curees a la
   main dans le markdown (comprehension, cote a cote, Evaluation, evaluer, detaillee,
   entraine, detaille, evaluation). "classe" (x2) reste signale par le detecteur :
   faux positif, "la classe" est correctement orthographie.

Correctifs markdown-only (exception C.2) : aucune cellule de code touchee, l'ordre
relatif des cellules de code et leurs execution_count (1..10) sont preserves, 0
sortie d'erreur, 5/5 liens internes resolvent.

La cause racine du point 4 est la taille de transactions.csv (Lab4, 6 lignes) :
hors perimetre de ce claim, signalee par l'issue #19624.

See #17387

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

github-actions Bot commented Oct 7, 2026

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

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

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 Oct 7, 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 Oct 7, 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 3.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 16.3s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.7s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.3s

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

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 7, 2026
@github-actions

github-actions Bot commented Oct 7, 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 Oct 7, 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 Oct 7, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 3
  • Code cells validated: 37
  • 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)

@jsboige

jsboige commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner Author

[INFO] Rouge impute a la base — prose-counts (non reparable par cette lane)

Au head f4566f442984, la PR gate n'echoue que sur prose-counts (son message FAIL le nomme seul). Ce rouge est herite de main, pas produit par ce diff :

La lane ne peut pas le reparer (la cause est sur main, hors de ce diff). Tache coordinateur : trier prose-counts sur main.

Pour le reste, ce cycle a deja traite ce qui etait a la lane :

  • la section perdue ## Exemple guide est assumee par marqueur plan-loss: dans le body (renommee en ### Exercice 1 — substance conservee, verifie cellule a cellule) ;
  • update-branch a rafraichi la base (6aa6ba8 → dac0d48) pour rejouer les gardes avec le body frais.

Rien d'autre n'est attendu de la lane sur cette PR tant que prose-counts (base) n'est pas tranche.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19625 (Fix(ml,#17387): Lab5 — nav/H1 au canon, exercices avant Conclusion, lecture ancrée, accents) 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.

…la taille affichee

prose-counts refusait la ligne ajoutee `**6 lignes**` (les donnees quantitatives
sont tenues par le CI, #9377) : la phrase porte desormais le predicat sans le
compte, formulation proposee par ai-01 (DM 2026-10-07T02:21Z). Markdown only,
aucune cellule code touchee, pas de re-execution due.

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

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19625
head: 42c6162
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 5c7e08c8a9ca8ca5fc31a0ae114a95faa2a8aa8d52d44e74313fb498b2eefbb9
diff-files: 3
diff-additions: 8
diff-deletions: 8
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 19625
organ-rc: 0
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19625
head: 42c6162
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3ff623df66cc0222c94bf82a7c5db7d598a1b6b5edfa6c479584d7d735ce4421
diff-files: 3
diff-additions: 78
diff-deletions: 68
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 19625
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 5607042 into main Oct 7, 2026
94 of 95 checks passed
jsboige added a commit that referenced this pull request Oct 7, 2026
…19672)

main avait recu #19625 (Lab5 : nav/H1 au canon, exercices avant Conclusion,
lecture ancoree, accents) sur LE MEME carnet que cette branche reecrit.

Resolution cellule par cellule -- l'ordre et la structure viennent de main
(le reordonnancement pedagogique de #19625 est une decision deliberee, on ne
la defait pas), le contenu de mes 7 cellules est substitue dessus :

- 18 cellules identiques, 6 changees par main seul (prises), 5 par moi seul
  (gardes) ;
- `5e3a09e6` (interpretation du score) -- les DEUX cotes avaient diagnostique
  le meme defaut : main ecrivait « ici 1.00, mefiez-vous, transactions.csv est
  minuscule », devenu FAUX apres la bascule (le score est desormais 0.981
  contre une baseline de 0.389). Composition : mon interpretation contre la
  baseline (vraie) + la lecon de methode de main, qui reste vraie : « un score
  ne se lit qu'avec le volume de test qui le porte » ;
- `e9fe6ce9` (Exercice 4) -- texte de main (accents, bloc Reference Fawcett)
  avec mon re-ancrage (`alcool_eleve` sur `df_ml`) applique par-dessus.

Re-execution complete post-fusion (C.2) : py -3.13 -m papermill -k python313,
--cwd du carnet ; 10 cellules code, sequence CLEAN 1..10, sorties coherentes
(124/54, precision 0.981, baseline 0.389, ecart +0.593).

prose-counts-guard (bloquant, #17636) attrapait trois « N lignes » chiffres :
les comptes decrivent un fichier de DONNEES pedagogique, pas un artefact du
depot -- passes en lettres (« sept lignes »), mention redondante de la
cellule de code supprimee. Rejeu --strict : rc=0.

Gardes passees sur la tete fusionnee : C.2 conforme, sequence CLEAN,
source parse 0 finding, 0 fuite de chemin machine, nav-chain 0 NEW finding,
positionnement des interpretations OK.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige
jsboige deleted the fix/17387-audit-lab5 branch October 7, 2026 07:53
myia-ai-01 pushed a commit that referenced this pull request Oct 7, 2026
…_reds (#19652)

Le picker imputait a la base les rouges d'organes qui ne lisent QUE les
lignes ajoutees par la PR (cas fondateur prose-counts-guard, aussi
readme-ipynb-links-guard, pip-leak-guard, solution-leak-guard et les
gardes delta). L'imputation disait aux 4 lanes bloquees (po-2023, po-2025,
po-2026, ai-01 -- PRs #19614, #19625, #19626, #19634) « pas le votre »,
donc de ne rien faire, alors que la cause est forcement dans le diff.

Source de verite : fast_lane_registry.Guard.argv (drapeau --diff
{base_ref}...HEAD) et Guard.delta_argv (comparaison explicite base/head).
Le helper _diff_bounded_check_names() lit les tranches du registre sans
recopier une liste de noms ; un nouvel organe borne au diff declare dans
la voie rapide est exclu automatiquement, sans patch picker.

Le splitter split_base_corroboration recoit l'ensemble diff_bounded et
place les cles correspondantes dans undecided SEUL (jamais dans base) :
la mesure « check absent du rollup de main » n'est pas un « je ne sais
pas » mais un « il ne peut pas venir de la base ».

Test : 2 lanes, prose-counts rouge, findings differents -> aucune
imputation a la base (le ticket fondateur). Scripts Tests (CPU) rouge
sur main reste impute a la base (regression guard). Cas agregateur
PR gate :: prose-counts-guard beneficie du filtre via le suffixe
:: organ. None (defaut) preserve le comportement d'avant #19645.

Co-authored-by: ai-01 <ai-01@anthropic.com>
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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants