Skip to content

Fix(notebook,#24661): barres de navigation des jumeaux C# SL-1/SL-2 et reconciliation des speedups EBL - #24772

Open
jsboige wants to merge 3 commits into
mainfrom
fix/24661-nav-chain-sl1-sl2
Open

jsboige wants to merge 3 commits into
mainfrom
fix/24661-nav-chain-sl1-sl2

Conversation

@jsboige

@jsboige jsboige commented Nov 5, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-dotnet — lane myia-po-2024:CoursIA-2 — prev: DEEP/qc #24631

Quatre défauts de la série SymbolicLearning, tous mesurés sur origin/main
(536cf43470) et tous fermés par des éditions markdown seul : aucune
cellule de code modifiée, aucune sortie touchée, aucun metadata modifié —
donc aucune ré-exécution due (C.2, exception markdown).

Les quatre défauts (avant)

1 — les jumeaux C# SL-1 et SL-2 n'avaient aucune barre de navigation.
Relevé des 28 carnets de la série, un par un : SL-1-Csharp et SL-2-Csharp
étaient les seuls jumeaux C# sans barre (SL-8-Csharp et SL-10-Csharp en
portent une, avec le lien « twin Python »), et les deux seuls de la série à
n'être désignés par aucune barre d'un autre carnet. Un lecteur qui ouvrait le
jumeau C# depuis le README n'avait aucun moyen de remonter à la piste Python ni
de descendre dans la piste C#.

2 — la piste Python était coupée après SL-2. SL-2 ne portait que
[<< SL-1](SL-1-LogicalLearning.ipynb), sans arête sortante ; la piste était
donc coupée en quatre segments {SL-1, SL-2} · {SL-3, SL-4} · {SL-5…SL-9} ·
{SL-10, SL-11}. L'organe de chaîne ne le voit pas : orphan_entry ne mesure
que l'absence de lien entrant.

3 — le premier exercice de SL-2-Csharp n'était pas numéroté. Le carnet
portait ## Exercice : EBL sur la différentiation symbolique suivi de
### Exercice 2 et ### Exercice 3 ; les deux stubs de code portent pourtant
EXERCICE 2 : et EXERCICE 3 :.

4 — les deux speedups affichés n'étaient pas réconciliés dans la prose. La
section 4 annonce 42/8 = 5.25x (coût simulé, facteur 3× posé par la
cellule) ; la section 4bis mesure 18 → 10 étapes réelles, soit 1.8x et
-44 %. Les deux chiffres coexistaient sans phrase qui les articule : un
lecteur pouvait prendre 5.25x pour la mesure et 1.8x pour une valeur
mineure. Le jumeau Python, lui, porte l'interprétation explicite de la
distinction (« le speedup de l'EBL est algorithmique, pas (toujours)
wall-clock »).

Ce que fait cette PR

Markdown seul — 4 carnets, 8 cellules markdown, 0 cellule de code.

carnet cellules contenu
SL-1-LogicalLearning.ipynb 0 barre : ajout du lien vers le jumeau C#
SL-2-KnowledgeBasedLearning.ipynb 0 barre : ajout du lien vers le jumeau C# et l'arête Suivant >> vers SL-3
SL-1-LogicalLearning-Csharp.ipynb 0 barre ajoutée (Index · Twin Python · Suivant >>)
SL-2-KnowledgeBasedLearning-Csharp.ipynb 0, 9, 15, 18, 22 barre ajoutée · §4 : paragraphe de réconciliation · §4bis : chiffres réels · ## Exercice : → ## Exercice 1 : · Bilan item 6

Les deux jumeaux C# sont bidirectionnellement liés à leur jumeau Python
(le lien « Twin C# » / « Twin Python »), conformément au critère d'acceptation
de #24661.

Les deux speedups, articulés (extrait de la prose ajoutée)

5.25x est un coût simulé, pas une mesure. Le facteur 3× appliqué par
étape de re-dérivation est conventionnel : il est posé par la cellule, il ne
correspond à aucun temps réel mesuré, et il sert à rendre visible le gain de la
compilation. La mesure réelle du §4bis ne rejoue pas ce protocole : elle
compte les étapes de simplification effectivement effectuées, sur un corpus
différent (10 expressions) et avec le pipeline EBL complet (3 règles apprises,
et non une règle codée à la main). Elle donne 18 → 10 étapes, soit 1.8x et
-44 % d'étapes. Les deux chiffres ne se contredisent pas : le premier mesure
l'écart de coût simulé entre deux stratégies sur 8 expressions, le second
mesure l'algorithme — une règle compilée remplace deux réécritures par un
lookup.

Les trois chiffres cités sont ceux des sorties committées du carnet
(cellule 10 : Coût SANS règles apprises (re-derive) : 42, Coût AVEC règles apprises (compilé) : 8, Speedup = 42/8 = 5,25x ; cellule 14 : TOTAL | 18 | 10 | -8, Speedup moyen : 1,8x, Reduction d'etapes : 44%). Aucune valeur
fabriquée, aucun chiffre ré-écrit.

Vérifications

  • check_notebook_nav_chain.py --json : 237 → 234 findings au total,
    13 → 10 sur la série SymbolicLearning. Les deux orphan_entry cibles
    (SL-1-LogicalLearning-Csharp, SL-2-KnowledgeBasedLearning-Csharp) sont
    fermés
    , et 0 nouveau finding n'apparaît (l'organe ne peut que supprimer
    des findings en ajoutant des arêtes, jamais en créer).
  • check_notebook_navlinks.py --check : 0 NEW broken navlink vs baseline
    (1739 notebooks scannés) — toutes les cibles existent.
  • check_link_label_agreement.py : 1 désaccord sur 2800 fichiers, hors
    périmètre
    (ICT-13b-DecroisementDynamiqueObservable-Python.ipynb, absent de
    ce diff) — aucun désaccord sur les 4 carnets touchés.
  • check_prose_quantitative_claims.py --diff origin/main...HEAD : [OK] aucun compteur quantitatif en prose.
  • check_activity_leak.py --diff origin/main...HEAD : [OK] aucun passage d'activité dense ajouté — la prose teachée, pas le récit de correction.
  • nbformat.validate : les 4 carnets valident (nbformat 4).
  • Périmètre markdown prouvé cellule par cellule contre origin/main :
    cellules modifiées = {0} (SL-1 Python), {0} (SL-2 Python), {0} (SL-1
    C#), {0, 9, 15, 18, 22} (SL-2 C#) — toutes de type markdown ; aucune
    divergence de outputs, de metadata de cellule ni de metadata de
    notebook.

Hors périmètre (et pourquoi)

  • Les jumeaux C# SL-3, SL-4, SL-5, SL-6, SL-8, SL-10 portent la même
    absence de barre : même classe de défaut, mais l'audit pédagogique qui leur
    correspond n'est pas dans le périmètre de la tranche [Audit #17073] Série SymbolicLearning — partition Hermes #17793 — ils relèvent de
    la tranche qui leur est propre.
  • scripts/tests/baseline_nb_nav_chain.json : les entrées SymbolicLearning
    du baseline deviennent périmées pour les deux carnets corrigés, mais le
    fichier n'est pas touché (il est partagé par plusieurs PRs ouvertes
    d'autres lanes) ; l'organe ne bloque que les nouveaux findings, la
    correction est donc complète sans cette mise à jour.

Conformité

  • C.2 / C.3 : markdown seul — aucune ré-exécution due, aucun carnet dont
    les sources seraient hors périmètre.
  • C.1 : aucune cellule de code touchée, donc aucun stub modifié.
  • Règle E : documentation en français, pas d'emoji.
  • Grain : MED/notebook-dotnet — un carnet de la série DOCUMENTATION
    n'est pas un grain DEEP de CONTENU (le plancher du cycle reste porté par
    Mesure A/B : la copie gelée du PCM face au canonique (TrendWeatherPointInTime) #24631, DEEP/qc).

See #24661
See #17793
See #24224

🤖 Generated with Claude Code

…t reconciliation des speedups EBL

Quatre defects de la serie SymbolicLearning, tous mesures sur origin/main
(536cf43) et tous fermes par des editions markdown seul (aucune cellule de
code, aucune sortie, aucun metadata : aucune re-execution due, C.2 exception
markdown).

1. SL-1-LogicalLearning-Csharp et SL-2-KnowledgeBasedLearning-Csharp ne
   portaient aucune barre de navigation : seuls jumeaux C# de la serie dans ce
   cas, alors que la convention existe (SL-8-Csharp, SL-10-Csharp).
2. La piste Python etait coupee apres SL-2 : SL-2 ne pointait que vers << SL-1.
   Il pointe desormais son "Suivant >>" vers SL-3.
3. Le premier exercice de SL-2-Csharp n'etait pas numerote ("## Exercice :")
   alors que SL-2 et SL-3 le sont ; il porte desormais "## Exercice 1 :".
4. Les deux speedups affiches par SL-2-Csharp n'etaient pas reconcilies dans
   la prose : 42/8 = 5.25x (cout simule, facteur 3x pose par la cellule) et
   18 -> 10 etapes reelles, soit 1.8x et -44 % (section 4bis, corpus de 10
   expressions, pipeline EBL complet). Les deux coexistaient sans phrase qui
   les articule.

Verifications :
- check_notebook_nav_chain.py --json : 237 -> 234 findings, 13 -> 10 sur la
  serie, les 2 orphan_entry cibles fermes, 0 nouveau finding.
- check_notebook_navlinks.py --check : 0 nouveau lien casse.
- check_prose_quantitative_claims.py et check_activity_leak.py : OK.

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

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

Copy link
Copy Markdown
Contributor

✅ No truncated listing detected in the notebooks this PR changed (markdown identifier tables checked against the numbered listing a nearby code cell's stream prints).

Scope = notebooks CHANGED in this PR, not the whole corpus. The listing-coherence-report run artifact holds the structured JSON.
Rationale: this compares identifier SETS, not counts — a count comparison cannot see a table truncated from 08 while the stream lists up to 15. The contiguous-prefix discriminant is what keeps an arbitrary subset (« the 3 longest ») out of the report. See python scripts/check_listing_coherence.py --help.

@github-actions

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 4
  • Code cells validated: 55
  • 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 Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Verdict reutilise pour la cle 08d6ac4361e66eaa — run 41946116399 sur refs/pull/24772/merge (6b26322d4ea3) ; aucune execution ce tour.

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.4s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.7s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 58.1s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.0s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 15.5s

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

jsboige and others added 2 commits November 5, 2026 02:27
…rebaseline apres la correction nav-chain

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…0014 -- collision d'index avec la PR #24663 ouverte

Le gate #23208 mesure que les ordinaux 0012 (sl-1) et 0013 (sl-2) sont deja
revendiques par la PR #24663 (encore ouverte) : git mv PUR vers le premier
index libre de chaque paire, aucun contenu touche.

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

@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 pr-review lane ai-01 — review sur artefact de rejeu]

Vérifié au head 209bc2ca par extraction des 4 blobs base (536cf43470) / head et comparaison cell-by-cell en Python :

  • Défaut 1 (barres nav) — confirmé : base SL-1-C# et SL-2-C# = aucune barre **Navigation** ; head en porte une chacune. Tous les liens ajoutés résolvent dans l'arbre au head (SL-3-C#, SL-3-Python, SL-2-C#, README, jumeaux croisés) — 7/7 cibles présentes.
  • Défaut 2 (piste coupée après SL-2) — la barre SL-2-Python gagne bien [Suivant >>](SL-3-RelevanceLearning.ipynb) + [Twin C#] ; le claim « le jumeau Python explicite déjà » est exact : « algorithmique, pas (toujours) wall-clock » est présent dans la BASE de SL-2-Python (hérité, non ajouté).
  • Défaut 3 (Exercice 1 non numéroté) — base ## Exercice : → head ## Exercice 1 : dans SL-2-C# ; les stubs EXERCICE 2/3 existants s'alignent.
  • Défaut 4 (réconciliation 5.25x vs 1.8x) — les valeurs d'ancrage existent dans les outputs committés de SL-2-C# : 42/8 (§4) et le tableau TOTAL | 18 | 10 | -8 avec « Speedup moyen : 1,8x / Reduction d'etapes : 44% » (§4bis). La prose ajoutée distingue coût simulé/mesure réelle sans contredire l'artefact.
  • Claim md-only — vérifié mécaniquement : cellules code et outputs byte-identiques base↔head sur les 4 carnets (10/18/12/15 cellules code), seul le markdown bouge — aucune ré-exécution due, cohérent avec l'exception C.2.
  • Attestations 0013/0014 — les 4 shas par fichier (python_sha/csharp_sha = blobs git réels, content_*_sha re-dérivés par sha256 du notebook sans metadata) sont exacts au head ; numérotation 0013/0014 suite la séquence des registres (pas de 0012 dupliqué sur sl-1 : le registre saute déjà à 0013 pour cette lane, pas de collision d'ordinal).

🟡 mineur : la barre SL-2-C# pointe [<< SL-1 C#] vers le jumeau C# et [Twin Python] vers le jumeau Python — cohérent avec la convention SL-1-C#, juste noté pour la convention de la série.

COMMENT (fond sain, défauts mesurés fermés) — pas d'APPROVE car les 3 check-runs neutral/absents (Link-label agreement advisory, Reading-anchor) restent à relire par la fast-lane au merge.

@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #24772 (Fix(notebook,#24661): barres de navigation des jumeaux C# SL-1/SL-2 et reconciliation des speedups EBL) 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.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Nov 5, 2026
@jsboige

jsboige commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

[ACTION] 3e rejou du child — terminée en 13 min 31 s, unique échec = rouge de base via #24764

Les deux premiers rejeux sont tombés sur le timeout déclaré de 30 min du job Scripts Tests (CPU) (30 m 53 s, puis 32 m 12 s) alors que les PRs sœurs terminent la même suite en 11–15 min : variance de runner, pas un défaut du diff. Le troisième rejeu (run 41950775721) vient de terminer en 13 min 31 s :

1 failed, 24427 passed, 381 skipped, 9 xfailed

L'unique échec est le rouge de base de flotte :

scripts/lean/tests/test_check_lean_inventory.py::test_repo_inventory_covers_every_declared_library — {'lake': 'MyIA.AI.Notebooks/GameTheory/game_theory_lean', 'lib': 'CongestionGames'}

Mécanisme complet ce matin dans le [ACTION] 6648397961 sur #24627 : lean_lib CongestionGames a été ajoutée sur main par #24443 après la dernière re-dérivation de LEAN_INVENTORY.md, et le test rougit Scripts Tests (CPU) de toutes les PRs ouvertes. La correction est déjà livrée par #24764 (ouverte, lane myia-po-2023:CoursIA, organe check_lean_inventory.py → OK rc=0 mesuré ce cycle).

Geste : aucun sur la branche — le périmètre de cette PR (nav-chain SL1/SL2) ne porte aucun fichier GameTheory, et la PR gate n'agrège que cet enfant. Le rouge tombe au merge de #24764 ; un rejeu du child + de la gate à ce moment refermera la PR.

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

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants