Repository navigation
fix(pedagogy,#13410): relay g53-probas-1 — Percolation-Lean + PyMC-09 (24 défauts corrigés) - #16954
Conversation
…09-Classification - Percolation-Lean.ipynb: 1055 -> 1201 (+146 chars de prose) - PyMC-09-Classification.ipynb: 828 -> 1200 (+372 chars de prose) Lectures ajoutees (5 + 27 = 32 cellules markdown de LECTURE ANCREE): - Percolation-Lean: 5 lectures ancrees sur cellules DEMONSTRATION (vocabulaire, monotonie, composantes, frontiere, isoperimetrique) - PyMC-09-Classification: 27 lectures ancrees sur cellules DEMONSTRATION (imports, donnees, frontiere, test AB, viz, CTR, jeu 2D, metrics, fiabilite, etc.) Conformite: - UTF-8 sans repli ASCII: accents conserves a l'octet pres - source conserve en forme liste: JAMAIS re-serialise - Markdown-only: cellules code, outputs, metadata byte-identiques - AUCUNE re-execution du notebook - detect_solution_leaks = 0 (aucune lecture apres cellule EXERCICE) - Aucune fabrication de chiffre: lectures citent outputs commites Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
…inverse, AUC/F1 fabriques
Percolation-Lean: borne two_le_boundary est INFERENCEURE (2 <= card), pas
majoration — contredite par #(d{0,2})=4 ; filler composante -> 4 #check verbatim ;
grammaire montrent/annonce.
PyMC-09: symbole pm.math.pb_better fabrique (reel: delta_post > 0) ; split
300/100 inverse en 50 train/150 test (mesure: 149/51 positifs) ; 'AUC et F1
surpassent' faux (AUC identique 0.923, F1 absent) x3 ; 'parfaitement calibre'
contredit par les bins (0.239->0.000, 0.8->1.000) x2 ; sensibilite =
taille d'echantillon, pas hyperparametres ; 2 lectures CTR relocalisees apres
leur cellule ; fillers remplaces par lectures verbatim (CTR 0.151/0.181/0.964,
bins, tableau).
Validation: multiset 24/24+27/27, 0 dup (4 niveaux), 0 prose-en-code,
densites 1277/1290 >= 1200, scan newlines vide, git status = 2 notebooks.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
[ADJOINT PREFLIGHT] schema: 1 Verification detail (third-party lane — porteuse myia-po-2025:CoursIA ; all firsthand at head 734783d) :
|
|
Justification du gel (protocole picker, --ignore-red) : PR de la campagne #13410 — veto utilisateur actif (STOP en tête du body #13410, renforcé le 2026-09-20 : une sortie = UNE lecture, on réécrit l'existante). La portée exacte (merges seuls vs pushes de levée) est pendante à l'arbitrage user (question Q4 du registre |
…2 du STOP #13410) `check_split_reading_cells.py` mesurait 22 violations sur la tete de cette PR (17 sur PyMC-09-Classification, 5 sur Percolation-Lean) alors que `origin/main` est `clean` sur les deux : la PR empilait jusqu'a 6 cellules de lecture sur une meme sortie de code. C'est le geste que la regle 2 du STOP #13410 interdit (« une sortie de cellule a UNE cellule de lecture ... on n'en ajoute jamais une seconde »). PyMC-09-Classification : 54 -> 36 cellules, 27 lectures ajoutees -> 10. 18 lectures supprimees, 8 reecrites pour absorber leurs faits (posterieurs mesures 12.31/5.79 + 18 divergences ; taux A/B 0.303/0.377 et P=0.880 ; P(B>A) de 0.961 a 0.996 non monotone ; CTR 0.151/0.181 et P=0.964 ; poids [0.52, 0.58] et biais 2.94 ; Brier 0.117/0.136 a AUC constante ; table de fiabilite bin par bin). La lecture preexistante `p9-cal-lecture` est conservee et absorbe les 5 lectures qui la redisaient. Percolation-Lean : 29 -> 24 cellules (= le compte de la base). Les 5 lectures ajoutees precedaient chacune une lecture preexistante : chacune est repliee dans celle qu'elle doublait, puis supprimee. Correction d'ordre : la lecture de PyMC-09 placee AVANT sa cellule de code (ex-index 32) est repliee dans la lecture de cette cellule de code. Aucune cellule de code ni aucune sortie n'est touchee : le multiset de SHA des cellules de code et celui des `outputs` sont identiques avant/apres (assertion du script de fusion). Delta net negatif : +33 / -220. Preuve : `check_split_reading_cells.py` rend `clean` sur les deux carnets. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…bas-9 Classification Le gate `Twin parity audit (#8057)` rougissait en `DRIFT-INTRO` sur cette PR : le contenu Python a change (fusion des lectures empilees) sans re-attestation. Audit de parite AVANT rebaseline (le `--update` du meme outil n'est sur qu'apres audit firsthand) : 1. Le jumeau C# `Infer-9-Classification.ipynb` n'est PAS touche : `csharp_sha` et `content_csharp_sha` enregistres sont bit-identiques a ceux de l'audit 0009 du 2026-09-03. La derive est unilaterale. 2. Le contenu Python ne bouge qu'en MARKDOWN : le multiset de SHA des cellules de code et celui des `outputs` sont identiques avant/apres la fusion (assertion du script). Aucun modele, aucune sortie, aucun claim de l'axe partage (« socle pedagogique commun : classification bayesienne ») ne bouge. 3. `parity_level: native-both` : le schema du registre rappelle que ce niveau « ne dit RIEN de la correspondance structurelle cellule-par-cellule ». Le jumeau C# porte 2 lectures pour 22 cellules de code -- aucun empilement a corriger de son cote, donc aucune edition en lockstep n'est due. Verdict : derive de parite PRESERVANTE, re-attestation legitime. Le `reason` de l'attestation porte les trois mesures, pour qu'un relecteur puisse les contester. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
[REPAIR] lane myia-po-2025:CoursIA — head Deux commits reparent cette PR sur la regle 2 du STOP #13410.
Divulgation. Le commentaire de gel du 2026-09-20T18:32Z (meme lane) est supersede, et la Le preflight |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
…rties, rebaseline PyMC-09 Les attestations ajoutees par #17028 (App-2, Search-05), #16685 (GT-2 Part2) et #16954 (PyMC-09) certifiaient les blobs densifies : Twin parity rendait 4 DRIFT-INTRO. Retirees, l'attestation precedente couvre de nouveau App-2, Search-05 et GT-2. PyMC-09 n'est pas une restauration exacte (le retrait garde les 3 corrections de cellules existantes de #16954, code et outputs inchanges) : nouvelle attestation apres audit firsthand. check_twin_parity --per-pair --base origin/main : INTRO=0, PRE=1 (deja sur main). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…es (#17463) * revert(density,#17040): strip cells added by post-veto density merges (autres) Mechanical: cells whose id did not exist before each density merge are removed; see PR body for the per-notebook table. Code cells, outputs and execution counts unchanged. See #17040 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * revert(density,#17040): Serre100-03 restored exactly to its pre-#16946 state The id-based strip left 2 of the 20 added cells: #16946 inserted cells reusing existing ids (19 duplicate ids on main). A content diff shows inserts only, no pre-existing cell modified, and no later commit touched the file, so the exact restore is the faithful reversal. See #17040 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * revert(density,#17040): retirer les attestations twin des merges reverties, rebaseline PyMC-09 Les attestations ajoutees par #17028 (App-2, Search-05), #16685 (GT-2 Part2) et #16954 (PyMC-09) certifiaient les blobs densifies : Twin parity rendait 4 DRIFT-INTRO. Retirees, l'attestation precedente couvre de nouveau App-2, Search-05 et GT-2. PyMC-09 n'est pas une restauration exacte (le retrait garde les 3 corrections de cellules existantes de #16954, code et outputs inchanges) : nouvelle attestation apres audit firsthand. check_twin_parity --per-pair --base origin/main : INTRO=0, PRE=1 (deja sur main). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(density,#17040): keep one anchored reading per output (autres) Restores, verbatim from 39c6557, one numbered reading for each output the strip left unread (adjoint review on #17463). Setup reading not restored. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(twin,#17040): rebaseline Probas-9 and Search-05 after reading restoration The restoration commit 65be731 adds markdown readings to PyMC-09 and Search-05 (Python side). Code cells, outputs, execution_count and notebook metadata are identical to the previous head; C# twins untouched. Firsthand audit recorded as append-only entries so the per-pair gate returns OK=156 INTRO=0 against origin/main. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Grain: MED/notebook-python -- lane myia-po-2025:CoursIA -- grain g53-probas-1 (densite #13410) -- prev: MED/notebook-python #16949
1. Reparation de la regle 2 du STOP #13410
L'organe de la campagne —
scripts/notebook_tools/check_split_reading_cells.py— mesurait22 violations sur la tete de cette PR :
Probas/PyMC/PyMC-09-Classification.ipynb[8,9] [14,15] [18,19] [19,20] [26,27] [27,28] [28,29] [29,30] [34,35] [35,36] [38,39] [39,40] [42,43] [43,44] [44,45] [45,46] [46,47]Probas/Applications/Percolation/Percolation-Lean.ipynb[3,4] [10,11] [14,15] [18,19] [22,23]origin/mainestcleansur les deux : les 22 violations sont introduites par cette PR.Le stacking allait jusqu'a 6 cellules de lecture sur une meme sortie de code (les 6 lectures
du diagramme de fiabilite, head 42-47).
C'est exactement le geste que la regle 2 du STOP #13410 interdit — mandat user du 2026-09-20
(relaye par ai-01) : « une sortie de cellule a UNE cellule de lecture. Si elle en a deja une, on
la REECRIT. On n'en ajoute jamais une seconde. » La PR de cette campagne qui viole 1, 2 ou 3 se
voit opposer
CHANGES_REQUESTED: la lane repare donc sa propre PR, avant tout grain neuf.Geste applique
Une seule lecture par sortie de code. La ou plusieurs lectures coexistaient, une survit et
absorbe les faits des autres, les autres sont supprimees. Delta net negatif : +33 / -220.
PyMC-09-ClassificationPercolation-LeanClassification mandatee de chaque lecture livree :
p9-cal-lecture, absorbe les 5 lectures du diagramme de fiabiliteDeux defauts structures corriges par la meme occasion, tous deux du meme genre (lecture
attachee au mauvais endroit) :
(ex-index 32, qui decrit la generation de
p9-cal-dataen 33). Ses faits sont replis dans lalecture qui suit reellement la cellule de code.
Brier / AUC / acc@0.5etait quotee deux fois verbatim(une fois comme lecture des metriques, une fois comme lecture du diagramme de fiabilite) ; la
liste des bins l'etait aussi. Chaque fait n'apparait plus qu'une fois.
2. Preuve
check_split_reading_cells.pyrendcleansur les deux carnets au head.multiset de SHA (JSON canonique) des 13 cellules de code et celui des
outputssontidentiques avant/apres. Le diff est markdown-only.
pour PyMC-09, 5 reecritures + 5 suppressions pour Percolation-Lean.
git diff -U0 734783d41a HEADrend 27 insertions / 151 deletions sur PyMC-09 (13 hunks)et 5 / 68 sur Percolation-Lean (10 hunks) ; total des deux carnets +33 / -220.
Les 5 insertions de Percolation-Lean sont exactement les 5 lectures reecrites, une ligne
chacune. Sur PyMC-09, les insertions mesurees sont inferieures au total des lignes des 8
lectures reecrites : la difference est faite des lignes de
p9-cal-lecturelaisseesidentiques, que le diff ne compte pas. Aucune ligne excedentaire n'appartient au conteneur
(newline final, indent, ordre de cles) — c'est ce que ce comptage verifie.
BASE = merge-base origin/main HEAD) :detect_md_content_loss.py→ findings=0 sur les deux carnets (md_cells base=14 head=23pour PyMC-09,
base=15 head=15 stable=Truepour Percolation-Lean) ;enrich_quality_ci.py,cell_order_ci.py,detect_markdown_deaccent.py→ rc=0. Le head porte plus demarkdown que la base : 13858 contre 9038 caracteres normalises (PyMC-09), 9420 contre 8011
(Percolation-Lean). La fusion retire de la redite, pas du contenu.
nbformat.validate()passe sur les deux (36 et 24 cellules) ; 10 lectures pour13 sorties de code et 6 pour 9 ; aucune paire de lectures consecutives ; C.1 respecte
(aucune erreur volontaire, aucune sortie en erreur).
3. Audit de parite jumelle —
Twin parity audit (#8057)etait rougeLe gate rougissait en
DRIFT-INTRO: le contenu Python a change sans re-attestation. Le--updatedu meme outil n'est sur qu'apres un audit firsthand (son propre
--help: « a lancer APRES uneaudit firsthand d'une paire ») : une re-attestation aveugle enterinerait une divergence au lieu
de la traiter. L'audit a donc ete fait d'abord, sur trois mesures :
csharp_shaetcontent_csharp_shaenregistres parl'attestation
0010sont bit-identiques a ceux de l'audit0009du 2026-09-03(
750e1ac5e3be…,04e774d05b15…). La derive est unilaterale.sortie, aucun claim de l'axe partage — « socle pedagogique commun : classification bayesienne
modelisee dans les deux stacks » — n'est modifie.
parity_level: native-both— le schema du registre rappelle que ce niveau « ne dit RIEN dela correspondance structurelle cellule-par-cellule ». Le jumeau C#
Infer-9-Classification.ipynbporte 61 cellules (22 code, 39 md) et 2 lectures ; l'empilement qui motivait cette PR
n'existe pas de son cote. Aucune edition en lockstep n'est donc due.
Verdict : derive de parite PRESERVANTE, re-attestation legitime → attestation
0010(
scripts/notebook_tools/twin_pairs.d/probas-9-classification/0010-2026-09-21-myia-po-2025-CoursIA.yaml),dont le
reasonporte les trois mesures pour qu'un relecteur puisse les contester.4. Scope reel au head
MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynbMyIA.AI.Notebooks/Probas/PyMC/PyMC-09-Classification.ipynbscripts/notebook_tools/twin_pairs.d/probas-9-classification/0010-…yaml5. Divulgation — le commentaire de gel du 2026-09-20T18:32Z
Un cycle anterieur de cette lane a poste sur cette PR un commentaire de gel : « Tant que Q4
n'est pas tranchee, la lane ne pousse ni correction ni densification ici : rouge/attente non
reparable par la lane au sens du picker » (protocole
--ignore-red). Ce cycle a pousse deuxcommits malgre ce gel. La lane le declare explicitement plutot que de le taire, et voici le
raisonnement qui l'a autorisee — a infirmer par le coordinateur ou le user si la lecture est
fausse :
du veto. La mesure du 2026-09-21 (cycle c.77, meme lane) a etabli l'inverse : le bloquant de
cette PR est une derive de parite, dont le remede est un audit de parite, plus la
fusion exigee par le mandat. Ni l'un ni l'autre n'ajoute de densite : le delta net est
-187 lignes. Aucun des deux n'est un « push de densification ».
commentaire de gel lui-meme nommait l'issue : « a la levee du veto, les levees se feront sous
le nouveau geste (classification NOUVELLE/REECRITE/FUSIONNEE, organe
check_split_reading_cells.py) ». C'est precisement le geste execute ici.--ignore-red, dont les deux causes prevues sont « garde casse sur main » et« dependance d'une autre PR ». Aucune des deux ne s'applique : la cause invoquee etait une
pause de politique, et cette PR est desormais reparable par la lane.
Si le coordinateur lit Q4 autrement (portee « merge ET push »), ces deux commits sont a
reverter :
git revert 44851353d6 dcc708fa27. La question Q4 reste ouverte au registreuser-question-registry.mdet n'est pas re-posee ici.6. Verdict de sequence (honnete)
cleanau head), 1 lecture mal ordonnee,1 redite litterale de table. Gardes base-vs-PR verts, nbformat valide, diff markdown-only
verifie par egalite de multisets de SHA.
0010.44851353d6sonten file (CodeQL
pendingau moment du push). Le preflight de l'adjoint(
[ADJOINT PREFLIGHT], lanemyia-po-2027:CoursIA, verdictREADY) porte le head734783d41a: il est perime par ces deux commits et doit etre rejoue au head courantavant toute review finale.
indefiniment a 2 lectures. Elle affirme que cette PR ne change pas l'axe de parite, et le
mesure.
Corps d'origine (relais `734783d41`, conserve intact — perimetre perime)
Scope
Contrat densité #13410 — relève de 2 notebooks probas (grain sur base
a1ff7fd4b, parent sur main, diff PR 3-dot = le commit du grain) :MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynbMyIA.AI.Notebooks/Probas/PyMC/PyMC-09-Classification.ipynbAnomalies réparées
Percolation-Lean
2 ≤ (boundary C3 full3 A).card(borne inférieure), et la base elle-même calcule#(∂{0,2}) = 4qui contredit une majoration. Réécrite : plancher atteint (#(∂{0,1}) = 2,#(∂{0,1,2}) = 2), opposés font mieux (4), 2 = minimum du profil.#checkverbatim (component_self,component_closed,component_iff_connected,mem_component_of_adj) + les 2 caractérisations du ω-fermé.PyMC-09-Classification
pm.math.pb_better» — le code réel est la part des tiragesdelta_post > 0du posterior dedelta = theta_b - theta_a. Corrigé + « les traces du posterior montrent » (aucune trace plotée dans la cellule) → tirages.SPLIT_PER_CLASS = 50en test,n_train = 300; mesure imprimée : « Train : 300 (149 positifs) | Test : 100 (51 positifs) ». Réécrit sur le code + la mesure (et sans « stratifié garanti » : la découpe est une permutation aléatoire, l'équilibre 149/151 et 51/49 est mesuré, pas construit).obs_old/obs_new, a priori Beta(1,1)) précédaient le header « ## 6. Application CTR » — déplacées après la cellule code CTR qu'elles décrivent, réécrites verbatim (CTR ancien 0.151, nouveau 0.181, amélioration 0.030, P = 0.964, lift 19.7 %).Validation relay (contrôles exécutés sur worktree, commit relais
734783d41)Edge,openAdj,openEdgeClosed,Component,boundary(b[2]) ✓ ;openAdj_mono,connected_mono,harris_kleitman_connected(b[8]) ✓ ; les 4 + 2 équivalences composante (b[11]) ✓ ;mem_boundary_iff,boundary_empty_iff_closed,C3_closed_iff,C4_closed_iff(b[14]) ✓ ; signature2 ≤ (boundary ...).card+#(∂{0,1}) = 2,#(∂{0,1,2}) = 2,#(∂{0,2}) = 4(b[17]) ✓. PyMC — seed 42, normal(0.3, 0.15, 20)/normal(0.7, 0.15, 20) = 40 points ✓ ; 30/100, 45/120 (=37.5 %), Beta(1,1),delta = theta_b - theta_a✓ ; Taux A 0.303 [0.218, 0.395], Taux B 0.377 [0.294, 0.464], Delta 0.074, P(theta_B > theta_A) = 0.880 ✓ ; P(B>A) par n : 0.961/0.979/0.988/0.997/0.983/0.996, seuil 95 % ✓ ; true_rate_a = 0.30, true_rate_b = 0.38 ✓ ; histogrammes A (30/100), B (45/120), delta, P(B>A) = 0.880 (b[13]) ✓ ; CTR 0.151/0.181/0.030/0.964/19.7 % ✓ ;N_PER_CLASS = 200,SPLIT_PER_CLASS = 50, « Train : 300 (149 positifs) | Test : 100 (51 positifs) » ✓ ; poids [0.52, 0.58], biais 2.94, 2000 tirages ✓ ; tableau « probit bayesien (calibre) 0.117 0.923 0.820 » / « contre-temoin p^5 (accentue) 0.136 0.923 0.820 » ✓ ; les 10 bins (13/10/7/5/8/12/10/10/9/16 ; 0.060→0.077, 0.239→0.000, 0.544→0.417, 0.762→1.000, 0.841→1.000, 0.954→1.000) ✓.fix_source_newlinesvide (exit 0) ;git status: 2 notebooks modifiés uniquement.Run
g53-probas-1(Mistral Vibe) — commit relais734783d41(2 fichiers).🤖 Generated with Claude Code