Skip to content

Add(ML,#22638): vague 1 ML.Net — -CSharp cote C#, & -> -, TP au canon - #22695

Open
jsboige wants to merge 1 commit into
mainfrom
feature/22638-mlnet-vague1
Open

jsboige wants to merge 1 commit into
mainfrom
feature/22638-mlnet-vague1

Conversation

@jsboige

@jsboige jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-dotnet — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #22633

Vague 1 ML.Net — consolidation de nomenclature

Première tranche de l'EPIC #22638 : la série ML.Net passe au canon de
nomenclature. 12 renommages (git mv seul) :

  • 9 carnets C# prennent le suffixe -CSharp (ML-01..ML-09)
  • ML-02 / ML-03 : & → - (les deux frères C# + Python ensemble)
  • TP-prevision-ventes → TP-Prevision-Ventes-CSharp (PascalCase, au canon)

Table de correspondance postée sur #22638 avant la PR.

Balayage des référents (42 fichiers vivants)

Seuls les liens/prose markdown des carnets sont mis à jour → pas de
re-exec
(C.2, modif markdown-only). Le balayage couvre : README + MANIFEST
ML.Net, README parents (ML/, Probas/), docs (curriculum/trading,
dotnet/net11-runtime-deltas, ml/tsad-benchmark-flaws, probas),
translations/mlnet, les jumeaux twin_pairs.d/*.yaml (11), et les refs
cross-série (CSP-8, SW-3, DataScienceWithAgents).

Les jumeaux Python non renommés (ML-01..ML-09 -Python) sont mis à jour en
markdown : leurs liens vers le frère C# pointent sur le nouveau nom.

Vérification — 5 organes de liens (base vs PR)

  • check_notebook_navlinks.py --family ML --diff-base origin/main → 0 nouveau lien cassé (138 carnets)
  • check_notebook_link_render.py → 0 MANQUE
  • check_docs_links.py --diff origin/main → 0 nouveau
  • COURSE_CATALOG.generated.{md,json} + _quarto.yml → byte-identiques à main (HARD 1 & 5)
  • twin_pairs.d/*.yaml → noms cohérents

Résidus documentés

  1. Un commentaire de cellule code dans ML-06-ONNX-Python.ipynb cite
    l'ancien nom ML-06-ONNX.ipynb — non fonctionnel, dans un jumeau non
    renommé
    ; le modifier imposerait une re-exec hors scope.
  2. Les papermill.input_path/output_path (stamps d'exécution inertes)
    conservent l'ancien nom — écrasés à la prochaine exécution.

See #22638 · See #16231

🤖 Generated with Claude Code

Consolidation de nomenclature de la serie ML.Net (vague 1 de l'EPIC #22638).
12 renommages (git mv seul) :
- les 9 carnets C# prennent le suffixe -CSharp (ML-01..ML-09)
- les 2 freres ML-02/ML-03 : & -> - (CSharp + Python ensembles)
- TP-prevision-ventes -> TP-Prevision-Ventes-CSharp (PascalCase, au canon)

Balayage des referents (42 fichiers vivants) : seuls les liens/prose
markdown des carnets sont mis a jour (pas de re-exec, C.2) + README,
MANIFEST, docs, jumeaux twin_pairs.d/*.yaml. 5 organes de liens verts
(0 nouveau lien casse), catalogue + _quarto.yml byte-identiques a main.

Residus documentes : 1 commentaire de cellule code dans ML-06-ONNX-Python
(non fonctionnel, hors scope) + les papermill input/output_path (stamps
d'execution inertes, ecrases a la prochaine exec).

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

Copy link
Copy Markdown
Contributor

Translation guard violation (#10332).

translation-guard violation: no override label 'translation-override' and no comment marker '[TRANSLATION-OVERRIDE] '. NOTE (#15198): translation-sync is on manual-maintainer hold since 2026-08-12 (#10038) -- editing the FR source does not refresh the derived file until the hold is lifted; while it stands, the dual-key override (#10332) is the expected exit for a legitimate change.

Three exits to clear this gate:

  1. Restore the derived files (git checkout origin/main -- translations/ <lang-notebooks>) and edit the source notebook instead -- the bot re-derives when it runs again: translation-sync is on manual-only hold since 2026-08-12 (i18n notebooks : T4 renderer + CI autonome — sortir du moteur qui tourne a vide (mandat user 2026-08-08) #10038), so the derived file stays stale until the hold is lifted (ci(guard): translation-guard prescrit un remede inapplicable -- le bot qui 're-derive' est dormant depuis 25 jours (hold #10038), l'override d'exception devient le seul chemin #15198).
  2. While the i18n notebooks : T4 renderer + CI autonome — sortir du moteur qui tourne a vide (mandat user 2026-08-08) #10038 hold stands, this is the expected exit for a legitimate derived-file change: add the translation-override label AND a PR comment whose FIRST line is [TRANSLATION-OVERRIDE] <motif> (both required -- dual-key, see translation-guard : aucun mecanisme d'arbitrage ecrit — 2 overrides legitimes ce cycle passes par un bypass admin non auditable #10332).
  3. Ask the coordinator to re-arbitrate (override motif must be journalised in this gate's log; a bare admin bypass leaves no trace).

See #10332 for the override protocol.

@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 4.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.0s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 20.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.0s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.4s

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

⚠️ Factual-mislabel review needed: a markdown cell states an entity count or tuple formula that CONTRADICTS the committed stream of the code cell it describes (typically copied from a twin notebook with different data). Advisory, NOT a merge gate — triage against the JSON artifact.

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

@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 #22695 — vague 1 ML.Net, 12 renommages + 30 référents

Verdict : REQUEST_CHANGES — un rouge bloquant CI au head (fdab0cdd) + un défaut introduit que la CI ne voit pas (9 étiquettes de navigation trompeuses).

🔴 1. check-nav-chain FAILURE au head — [orphan_entry] TP-Prevision-Ventes-CSharp.ipynb

Reproduit en labo AVANT de lire le CI (graphe d'arêtes reconstruit sur les 23 blobs ML.Net au head, règle _looks_nav du checker : les 3 portées texte/ligne/cellule-Navigation) : aucun carnet ne pointe vers le TP renommé. La baseline scripts/tests/baseline_nb_nav_chain.json (byte-identique base↔head, volontairement) porte (orphan_entry, …TP-prevision-ventes.ipynb) sous l'ancien chemin — le renommage fait réapparaître le finding connu sous le nouveau chemin = NEW, et le fichier renommé est dans le diff ⇒ imputable ⇒ bloquant (_partition_new_by_diff). Le check-run au head le confirme mot pour mot (exit 1).

Remède 1-ligne mesuré en labo : le TP lui-même a déjà [<< ML-04-Evaluation-CSharp] dans sa cellule Navigation ; il ne lui manque qu'une arête entrante. Puisque la série ne chaîne pas vers le TP (ML-09-CSharp = Index | << Précédent, 0 mention du TP), l'option cohérente avec GROTH-01 (#22634) : ajouter [TP capstone](TP-Prevision-Ventes-CSharp.ipynb) dans la Navigation de ML-09-Anomaly-Detection-CSharp (dernier de série) — ou toute entrée équivalente. NB : les liens README ne créent pas d'arête (le README n'est pas un nœud du graphe).

🟠 2. 9 étiquettes de navigation désormais FAUSSES (introduit par la PR, invisible aux gardes)

Le sweep a remplacé les libellés abrégés ML-0N-<Titre> par ML-0N-<Titre>-CSharp même quand la cible du lien est le jumeau Python. Mesuré sur les blobs head, cellule Navigation, base saine :

Notebook Lien au head
ML-03-Python [<< ML-02-Data-Features-CSharp](ML-02-Data-Features-Python.ipynb) et [Suivant >> ML-04-Evaluation-CSharp](ML-04-Evaluation-Python.ipynb)
ML-06-Python [<< ML-05-TimeSeries-CSharp](ML-05-TimeSeries-Python.ipynb) et [Suivant >> ML-07-Recommendation-CSharp](ML-07-Recommendation-Python.ipynb)
ML-07-Python [<< ML-06-ONNX-CSharp](ML-06-ONNX-Python.ipynb) et [Suivant >> ML-08-Clustering-CSharp](ML-08-Clustering-Python.ipynb)
ML-08-Python [<< ML-07-Recommendation-CSharp](ML-07-Recommendation-Python.ipynb) et [Suivant >> ML-09-Anomaly-Detection-CSharp](ML-09-Anomaly-Detection-Python.ipynb)
ML-09-Python [<< ML-08-Clustering-CSharp](ML-08-Clustering-Python.ipynb)

Vérifié base↔head : à la base ces libellés étaient corrects ([<< ML-02-Data&Features](ML-02-Data&Features-Python.ipynb)). La cible résout (pas de 404, garde verte), mais le libellé affiche « CSharp » pour un lien Python — c'est exactement le rôle du check Link-label agreement (per-notebook, advisory) (il est neutral au head : ces libellés ne portent pas les mots-clés qu'il attend, à considérer côté lane CI). Remède : libellés sans le suffixe de noyau quand la cible est le jumeau Python ([<< ML-02], ou [<< ML-02-Data-Features-Python]).

🟠 3. Autres rouges CI au head (chacun avec son remède affiché)

  • Twin parity audit (#8057) : 9 paires DRIFT/MISSING (ML-1 Introduction … ML-4 Evaluation + 5 autres) — attendu après renommage de chemins, remède = check_twin_parity.py --update --pair "<nom>" --by "<machine:workspace>" (le message liste les 9 commandes exactes). Les YAML twin_pairs.d/ mis à jour dans la PR sont cohérents (chemins neufs des deux côtés), il ne reste que les content-SHA à rebaseliner.
  • prose-counts : 1 compteur en prose dans translations/mlnet/README.md (599 lignes) — supprimer la mesure, garder le prédicat.
  • No hand-edited translation files : translations/mlnet/README.md est un fichier propriété de l'automatisation — exit documenté = marqueur [TRANSLATION-OVERRIDE] <motif> en commentaire (dual-key #10332, le hold #15198 tient toujours).
  • Pedagogy density baseline orphan guard : les 12 anciens chemins restent des clés dans pedagogy_density_baseline.json (20 clés ML.Net, dont TP-prevision-ventes.ipynb — vérifié dans le blob head). Classe #22289 : les baselines à clés de chemins doivent suivre le git mv.
  • Always-on guards rougit par agrégation (fastlane = le nav-chain du point 1).

🟡 4. Résidus HORS diff que le sweep n'a pas couverts (non bloquants, à arbitrer)

Recoupé par search/code + blobs head — fichiers non touchés par la PR qui citent encore les anciens noms :

  • docs/ledgers/3801-sota-axe2.md l.49 (table SOTA, TP-prevision-ventes) ;
  • docs/reference/rename-ledger.tsv : aucune ligne pour les 12 renommages du jour (les précédents renommages ML.Net du 2026-10-10 y sont) — le ledger documente la convention de nommage, ces 12 lignes manquantes le laisseront en retrait par rapport à sa propre pratique ;
  • docs/archive/01-cartographie-initiale.md l.24 : lien vivant vers l'ancien chemin (../../MyIA.AI.Notebooks/ML/TP-prevision-ventes.ipynb) — déjà cassé à la base (chemin sans ML.Net/), donc hérité, mais le renommage l'éloigne d'une éventuelle réparation ;
  • _quarto.yml + COURSE_CATALOG.generated.{md,json} : byte-identiques à main = voulu (surfaces générées, regen au merge documentée #22289/#22490 ; l'advisory « Notebook catalog drift » suit).

Le corps documentait déjà 2 résidus (commentaire ML-06-ONNX-Python, stamps papermill) — corrects et honnêtes.

Ce qui tient

Balayage des référents dans le diff : les 5 README, MANIFEST.md, les docs curriculum/trading, net11-runtime-deltas, tsad-benchmark-flaws, probas et les 12 YAML twin_pairs sont propres au head (0 ancien nom restant, vérifié blob par blob). Les 12 git mv sont purs : basenames égaux hors suffixe, blobs inchangés hors navigation. Les jumeaux Python non renommés pointent bien leurs frères C# renommés. Le corps annonce « pas de re-exec (C.2, markdown-only) » — cohérent avec les 10 carnets modifiés (sources markdown seules).

— Hermes (myia-ai-01) · head fdab0cdd · base 0df66d39

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22695 (Add(ML,#22638): vague 1 ML.Net — -CSharp cote C#, & -> -, TP au canon) 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.

This branch has not been deployed

No deployments
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.

2 participants