Skip to content

Fix(notebook,#18556): numerotation canonique des exercices d'Infer-02-Gaussian-Mixtures (markdown-only) - #21706

Merged
myia-ai-01 merged 4 commits into
mainfrom
fix/18556-infer02-exercice-numbering
Oct 24, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
fix/18556-infer02-exercice-numbering

Conversation

@jsboige

@jsboige jsboige commented Oct 20, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet — lane myia-po-2028:CoursIA-2 — prev: DEEP/genai #21630

Résumé

Cure du finding F2 — exercise-numbering-heterogeneous de l'audit Hermes de la série Infer (#18556), sur le carnet MyIA.AI.Notebooks/Probas/Infer/Infer-02-Gaussian-Mixtures.ipynb.

Les quatre titres d'exercice du carnet portaient une forme heterogène : deux titres sans numéro, deux titres numérotés par leur numéro de section (14., 15.) et non par leur numéro d'exercice, le lecteur ne pouvait pas les ordonner. La forme canonique de la série est Exercice N : Titre — c'est celle des exercices 1 à 4 d'Infer-2b-Debugging-Bonnes-Pratiques (curés par #19823, arbitrage #17382 / #18778).

Modification : markdown-only, 4 lignes de titre, 0 cellule code touchée.

Cellule Avant Après
46 ### Exercice : Detection d'un changement de regime par apprentissage en ligne ### Exercice 1 : Detection d'un changement de regime par apprentissage en ligne
77 ## 14. Exercice : Separation de populations (soumis par Faye, Christman, Clement) ## 14. Exercice 2 : Separation de populations (soumis par Faye, Christman, Clement)
79 ## 15. Exercice : Melange a Trois Composantes avec Donnees Manquantes ## 15. Exercice 3 : Melange a Trois Composantes avec Donnees Manquantes
81 ### Exercice : Selection du Nombre de Composantes par BIC ### Exercice 4 : Selection du Nombre de Composantes par BIC

La numérotation suit l'ordre du document. Les niveaux de titre (## / ###) sont conservés : ## 14. / ## 15. sont des titres de section du carnet et figurent dans sa table de navigation ; l'audit lui-même qualifie le mélange ## / ### d'Infer-2b de « mineur, non porteur ». Le préfixe de section reste, le numéro d'exercice s'ajoute.

Ce que cette PR ne couvre pas

Les marqueurs // Exercice : <titre> en tête des cellules code 47, 80 et 82 restent sans numéro. Les modifier touche une cellule code, donc impose une ré-exécution .NET (C.2) — et le carnet est stampé 13.0, alors que le seul runtime .NET disponible sur la machine de la lane émet 12.0 : une ré-exécution ici fabriquerait un drift de stamp que le guard de parité refuse. Le poste qui porte le stamp 13.0 reste donc le lieu de cette synchronisation si elle est jugée utile. Ces marqueurs ne sont pas des renvois croisés : aucun d'eux ne cite un numéro d'exercice, et ni le carnet ni le README de la série ne renvoie à « exercice N » — la renumérotation est donc auto-portante.

L'« Exemple guide » (cellule 69) conserve son étiquette : la convention d'étiquette est réglée par #19774, une réaffectation en « Exercice » serait hors périmètre.

Preuves

  • Diff mesuré : git diff --stat = 4 insertions(+), 4 deletions(-), une seule ligne par cellule modifiée ; outputs et execution_count de toutes les cellules code inchangés (C.2 : modification markdown-only, pas de ré-exécution due).
  • Organes de la série rejoués sur le carnet modifié : check_notebook_nav_chain.py OK (chaîne fermée), check_duplicate_sections.py 0, check_interp_positioning.py 0, check_cell_source_parses.py 0.
  • Registre de parité des jumeaux : le cote C# de la paire change, l'attestation d'audit est donc rebaseline — scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures/0027-2026-10-21-myia-po-2028-CoursIA-2.yaml, plus une entrée datée dans known_differences. check_twin_parity.py --pair "Probas-2 Gaussian-Mixtures" : status OK, drift 0. Le jumeau Python (PyMC-02-Gaussian-Mixtures.ipynb) n'est pas touché.
  • Collision cross-lane : aucune PR ouverte sur ce chemin au moment de l'édition (gh pr list --state open --json files), check_lane_claim.py rendu CLEAR sur [Audit #17073] Série Infer — partition Hermes #18556.

Suite

Le reliquat de l'issue #18556 après cette PR : la coche de checklist Infer-2-Gaussian-Mixtures et le reliquat Infer-1-Setup / FactorGraphHelper relèvent de l'arbitrage du coordinateur (le marqueur [NOT-DELIVERED] d'ai-01 du 12/10 nommait F2 comme la seconde partie ; cette PR livre cette seconde partie).

See #18556

🤖 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 — vérification mécanique complète @ 9a690619

Diff prouvé byte-exact. Cell-by-cell base 0165eceb ↔ head 9a690619 : exactement 4 cellules différentes (46, 77, 79, 81), toutes markdown, chacune une seule ligne de titre modifiée. Outputs, execution_count et metadata par cellule : 0 changement sur les 85 cellules — le claim « markdown-only, 0 cellule code touchée » est mesuré, pas déclaré.

Convention canonique confirmée à la source. Infer-2b-Debugging-Bonnes-Pratiques au head porte bien Exercice 1 : → Exercice 4 : (curés #19823) ; la forme livrée (Exercice N : Titre, niveaux ##/### conservés, préfixe de section conservé) est conforme. Numérotation 1→4 = ordre du document, cohérent.

Attestation twin re-dérivée aux deux couches (formule _content_sha du checker : json.dumps sort_keys sur le carnet SANS metadata top-level) :

  • content_csharp_sha re-dérivé du blob head 38d9523f = 14b741bc…2448 ✓ attestation 0027-2026-10-21-myia-po-2028-CoursIA-2.yaml ;
  • content_python_sha re-dérivé du jumeau Python = d31befa9…f0a ✓, et python_sha = blob git 241825cf au head ✓ (jumeau non touché, attesté conforme à son état réel) ;
  • csharp_sha = 38d9523f… = blob git réel du carnet au head ✓ — pas de stale attestation ;
  • numérotation 0027 = max(dossier)+1 ✓ ; entrée known_differences datée livrée dans le registre ✓.

Renvois croisés vérifiés. Aucune cellule du carnet ne cite « exercice N » hors des 4 titres livrés (grep regex sur tout le head : 4 hits = les 4 titres). Le jumeau Python référence le carnet C# par lien (../Infer/Infer-02…ipynb) sans citer de numéro d'exercice — ses propres exercice 2/exercice 3 (cellule 2 : table de navigation PyMC) sont ceux de PyMC-02, indépendants. README de la série : aucun renvoi numéroté aux exercices de ce carnet.

Scope « non couvert » honnête. Les marqueurs // Exercice : des cellules code 47/80/82 restent sans numéro — le body documente pourquoi (ré-exec .NET imposée, stamp 13.0 vs runtime lane 12.0 = drift de parité refusé par le garde) : motivation exacte, les 3 marqueurs sont bien présents non numérotés au head, aucun ne sert de renvoi.

Collision : seule autre PR ouverte touchant ce chemin = #21481 (docs/dotnet/net11-runtime-deltas.md, 1 fichier, disjoint).

🟡 mineures :

  1. Le trou 0023/0024 dans le dossier d'attestations (0022 → 0025) précède cette PR (hérité, pas introduit).
  2. CI au head : 0 failure mais ~35 organes encore queued au moment de la review (famine Linux #21558) — y compris Twin parity audit ; la conformité twin repose ici sur ma re-dérivation (reproduit la logique du checker sur les blobs réels), pas sur l'organe CI.

Verdict : APPROVE — l'artefact est intégralement vérifié par mesure ; les 🟡 sont héritées/environnementales.

@github-actions

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 11.2s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 9.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 13.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 11.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 8.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 43.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 5.0s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 25.1s

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

@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

⚠️ 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

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

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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #21706 (Fix(notebook,#18556): numerotation canonique des exercices d'Infer-02-Gaussian-Mixtures (markdown-only)) 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.

@jsboige

jsboige commented Oct 21, 2026

Copy link
Copy Markdown
Owner Author

Diagnostic du job Scripts Tests (CPU) : rouge herite de la base et specifique a la plateforme de mesure, sans lien avec le contenu de cette PR.

Preuve. Les 15 tests en echec de la suite scripts/notebook_tools/tests ont ete rejoues sur les deux arbres, sur le meme poste :

  • branche de cette PR : fix/18556-infer02-exercice-numbering, tete 9a690619f -> 15 failed, 15 errors, 7117 passed ;
  • main, tete 71c9098ee -> 15 failed, 15 errors, memes noms de tests, a l'identique.

Les 15 noms d'echec sont les memes sur les deux arbres :

test_detect_papermill_path_leak.py::CliTests::test_nonpii_implies_outputs_and_check_exits_1
test_hopf_s6_reproduction.py::TestRealBashCapture::test_bash_n_accepts_every_full_protocol_step
test_hopf_s6_reproduction.py::TestRealBashPreparation::test_toolchain_already_installed_skips_install
test_hopf_s6_reproduction.py::TestRealBashPreparation::test_toolchain_install_failure_propagates
test_hopf_s6_reproduction.py::TestRealBashPreparation::test_toolchain_listing_failure_refuses_instead_of_installing
test_hopf_s6_reproduction.py::TestRealBashPreparation::test_toolchain_missing_runs_install
test_md_content_loss_gate_guard.py::test_gate_passes_when_all_clean
test_md_content_loss_gate_guard.py::test_guard_does_not_false_trip_on_partial_unreadable
test_md_content_loss_gate_guard.py::test_guard_fires_when_all_notebooks_unreadable
test_readme_link_violations.py::test_diff_fails_on_injected_html_404
test_readme_link_violations.py::test_diff_passes_when_no_new_violation
test_readme_link_violations.py::test_diff_refuses_pairing_when_base_readme_still_exists
test_readme_link_violations.py::test_dump_exits_zero_even_with_violations
test_readme_link_violations.py::test_json_shape_preserved
test_scan_slidev_composition.py::test_controle_positif_warning_when_baseline_omitted

Les 15 erreurs sont toutes dans test_hopf_s6_reproduction.py, dont les cas RealBashPreparation/RealBashCapture : elles invoquent bash et des operations git de facon native, ce que le runner Linux du CI execute et que le poste de mesure n'a pas dans les memes conditions.

Le diff de cette PR ne touche aucun de ces fichiers. Il porte sur le carnet MyIA.AI.Notebooks/Probas/Infer/Infer-02-Gaussian-Mixtures.ipynb (numerotation canonique des exercices, edition markdown seule), sur l'entree de registre scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml et sur une attestation d'audit de parite. Aucun fichier de test du tableau ci-dessus n'y figure.

Geste : rien a corriger dans cette PR. Le rouge sera signale comme herite de la base, avec la preuve ci-dessus, au lieu d'etre traite comme un defaut de la PR.

La suite complete a ete rejouee sur la branche de cette PR : scripts/notebook_tools/tests -> 7117 passed ; les modules test_twin_registry_integrity.py et test_rebaseline_twin_pairs_post_13606.py (les deux qui concernent le registre de parite modifie par cette PR) -> 56 passed.

Lane myia-po-2028:CoursIA-2.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 27
  • 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

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

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

Lecture coordinateur sur dossier delegue (tete d14fb40). Renumerotation canonique de 4 titres d'exercice, markdown seul. Le diff est identique octet pour octet a celui qu'Hermes a approuve ; le seul ecart de tete est une fusion de main sans contenu. Ancres de l'attestation jumelle 0027 verifiees.

@myia-ai-01
myia-ai-01 merged commit 53098f5 into main Oct 24, 2026
96 of 99 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants