Skip to content

Fix(sl,#17793): SL-2 Python -- interpretation determinations alignee sur la sortie mesuree + defi Ex.2 rebranche - #19912

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/17793-sl2-python
Oct 9, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/17793-sl2-python

Conversation

@myia-po-2023

@myia-po-2023 myia-po-2023 commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Grain: MED/notebook-python — lane myia-po-2023:CoursIA — prev: MED/notebook-dotnet #19910

Audit de SL-2-KnowledgeBasedLearning.ipynb — carnet suivant de la partition #17793, après SL-1 Python (#19905) et SL-1 C# (#19910). Markdown-only : aucune cellule code touchée, aucune re-exécution due (exception C.2). Périmètre effectif : 3 fichiers — le carnet SL-2-KnowledgeBasedLearning.ipynb, le README.md de la série (1 ligne, même défaut propagé), et le sidecar d'attestation twin-pairs que l'outillage écrit sous scripts/notebook_tools/twin_pairs.d/sl-2-knowledgebasedlearning/.

F1 — L'interprétation des déterminations contredit la sortie mesurée (CONFIRMÉ)

La cellule d'interprétation (table « Determine langue ? », cell 1563) affirmait age = Non et city = Non — alors que la sortie commise de la cellule de vérification juste au-dessus rend :

age -> language         : True
city -> language        : True

True est correct pour cette implémentation (détermination = chaque combinaison de valeurs → une seule valeur cible) : les 12 âges et les 12 villes de l'échantillon sont tous distincts, donc chaque valeur isole une seule personne — dépendance fonctionnelle triviale. La prose était fausse pour CE jeu de données, et son témoin était de plus logiquement invalide (« Alice (30) et Ivan (33) parlent des langues différentes » — des âges différents ne témoignent pas d'une non-détermination).

Corrigé en conservant le point pédagogique : la table distingue désormais détermination non triviale (nationality — ses valeurs se répètent en groupes homogènes : France → Alice/Bob, Allemagne → Greta/Julia/Klaus…) vs détermination triviale (age/city — une valeur = une personne, contrainte jamais mise à l'épreuve). Chaque groupe cité est vérifié contre la table de données commise.

F2 — Intro de l'Exercice 2 : claim fausse répétée + fuite de référence interne (CONFIRMÉ)

« …tandis que age et city ne la determinent pas (table idx24) » — répétait la claim contredite (F1) et fuyait un index de cellule interne (idx24) dans la prose étudiante, incompréhensible dans un carnet rendu. Réécrit : « ne la determinent que trivialement (leurs valeurs, toutes distinctes, isolent chacune une seule personne) ». La prémisse de l'exercice reste cohérente (l'attribut bruité forecaster à 2 valeurs ne détermine pas la langue).

F3 — Ligne défi « Ex. 2 » débranchée de l'exercice réel (CONFIRMÉ)

La table « Défi presentation » étiquetait Ex. 2 « (filtrage des règles) » avec un twist sur les distributions de requêtes — or l'Exercice 2 réel est « RBL robuste face à un attribut bruité » ; aucun exercice du carnet ne porte ce twist (Ex. 3 couvre déjà le utility problem de Minton). Un groupe choisissant « Ex. 2 » pour le défi tombait sur un sujet sans rapport avec le twist annoncé. Ligne rebranchée sur l'exercice réel (régularité accidentelle vs véritable détermination) ; README parcours row 7 (copie fidèle de la ligne défi) alignée dans le même geste.

Ex. 1 et Ex. 3 vérifiés : leurs lignes défi correspondent bien aux exercices réels (Ex. 3 cite explicitement Minton 1990 comme son intro).

Non-findings vérifiés (mesure, pas supposition)

  • Contamination de la famille : jumeau C# (SL-2-KnowledgeBasedLearning-Csharp.ipynb) et SL-3-RelevanceLearning.ipynb — grep ne la determine = 0 occurrence chacun ; le défaut est contenu au présent carnet.
  • Cell [41] (Résumé) : « nationality seule suffit a predire la langue, rendant les autres attributs (age, ville) inutiles a l'apprentissage » — reste vrai (caractère suffisant, pas une claim de non-détermination) ; touché par aucun finding, inchangé.
  • Claims quantitatives vs sorties : Exemple guide 3 (101/67 étapes, 1.51x, -34 %, ~148/~336 µs) et Exemple guide 2 (8/2/1 utilisations, min_usage=2 → 2 conservées) — chaque chiffre cité apparaît dans la sortie précédente.
  • C.1 : 0 erreur volontaire ; les 3 stubs d'exercice sont conformes (sortie « Exercice a completer » + Étapes + Indices). C.2 : 15/15 cellules code execution_count non nul + outputs non vides (inchangées par ce diff).

Organes (tous rc=0, relancés APRÈS le commit 82a8be4f71)

check_duplicate_sections   : 0 porteurs
check_split_reading_cells  : clean
check_interp_positioning   : 0 misplaced
check_cell_source_parses   : findings 0
check_output_failure_text  : 0 changed notebooks regressed (base origin/main)
check_prose_quantitative   : aucun compteur quantitatif en prose
nbformat.validate          : VALID
pre-commit H.3             : Passed

Portée

See #17793 (pas Closes) : 2 carnets de 28 audités ce cycle (SL-1 C# #19910, SL-2 Python ici) — 22 restent. Veine #17793 du jour : 3 PRs créées, 0 mergées — le cap d'umbrella (organe variation_light_cap, ensemble de comptage = mergés du jour) n'est pas atteint.

🤖 Generated with Claude Code

…sur la sortie mesuree + defi Ex.2 rebranche

- F1: la table de determination contredisait la sortie mesuree (age ->
  language : True, city -> language : True -- 12 ages et 12 villes tous
  distincts dans l'echantillon) en affirmant Non pour age/city, avec un
  temoin logiquement invalide (Alice 30 / Ivan 33 : ages differents).
  Reecrite en point pedagogique determination triviale vs non triviale,
  coherente avec la sortie commise.
- F2: intro Exercice 2 repetait la claim fausse et fuyait une reference
  interne "(table idx24)" dans la prose etudiante.
- F3: ligne defi "Ex. 2 (filtrage des regles)" + twist utilite des regles
  ne correspondaient a aucun exercice reel (l'Exercice 2 est RBL bruit) ;
  rebranchee sur l'exercice reel ; README parcours row 7 alignee.

Markdown-only : aucune cellule code touchee, aucune re-execution due
(exception C.2). Jumeau C# et SL-3 verifies : 0 occurrence de la claim
defectueuse (defaut contenu au present carnet).

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

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

…9 -- cote Python aligne (#19912), cote C# inchange (defaut absent du jumeau, containment verifiee 0 occurrence)

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

github-actions Bot commented Oct 8, 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 4.3s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.6s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.5s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 20.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.1s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.2s

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

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19912
head: 359ea17
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3ab6d3daf04889e4be859e71e503521bf9f5abf81fa21661e2936f580f55ef7c
diff-files: 3
diff-additions: 20
diff-deletions: 7
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19912
organ-rc: 3
[/ADJOINT PREFLIGHT]

myia-ai-01 pushed a commit that referenced this pull request Oct 8, 2026
…raphQL (#19938)

`gh pr view --json headRefOid` est GraphQL : sous throttle l'instrument
mourait entierement (`instrument error`) alors que `core` etait ouvert
(5000/5000) et que REST sert le meme champ.

Consequence mesuree : `pick_idle_grain.py`, qui appelle cet organe, classait
trois PR de la lane en « organe non lisible -- pas pu trancher, le rouge
RESTE a la lane ». Une panne de transport devenait une categorie de
diagnostic sur la PR.

REST en tete, GraphQL en repli -- meme SHA, redondance de transport.
Mesure apres correctif : #19912/#19913/#19917 passent de `instrument error`
a 101/4/20 jambes lues, et le rouge REEL de #19912 (`Always-on guards`
failure 12:10:46Z) etait invisible tant que l'organe etait mort.

3 tests : le fondateur (GraphQL throttle, REST debout), son inverse, et un
controle negatif (les deux chemins tombes doivent lever, pas rendre vide).

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19912
head: 359ea17
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 7aa627d3076bd498d4707da118b69f485ac9acd195e5ba6e6897639771ad5976
diff-files: 3
diff-additions: 20
diff-deletions: 7
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 19912
organ-rc: 0
supersedes: 8
supersedes-why: auto -- covers BLOCKED dossier from jsboige (2026-10-08T15:43:26Z) at the same head; re-attestation derived by check_adjoint_prevalidation.py (organ-rc 0); replace this line with the proof that changed (or the old dossier's error)
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Recoupement sortie/prose (lecon ai-01 03:39Z) : le blob sha du carnet SL-2-Python a la tete 359ea17 = d3c9bc06d9d4de0611c986f84bd1bd1197d97700, exactement le python_sha du jumeau yaml 0009, et le jumeau C# (blob 90ecbe92) vit dans l'arbre — concorde.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19912
head: 359ea17
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 8d793b69ddbb1a727f3d9c0644f871648a2ea87ece5e869ef02be431f02f1f95
diff-files: 3
diff-additions: 20
diff-deletions: 7
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 19912
organ-rc: 0
supersedes: 8
supersedes-why: re-stamp demande par ai-01 (DM msg-20261009T025911 fichier sans-dossier) ; derive vivant
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 5032da7 into main Oct 9, 2026
121 of 125 checks passed
@jsboige
jsboige deleted the fix/17793-sl2-python branch October 16, 2026 12:32
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