Skip to content

fix(pedagogy,#13410): relay g53-probas-1 — Percolation-Lean + PyMC-09 (24 défauts corrigés) - #16954

Merged
myia-ai-01 merged 4 commits into
mainfrom
wt/vibe-g53-probas-1
Sep 22, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
wt/vibe-g53-probas-1

Conversation

@jsboige

@jsboige jsboige commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python -- lane myia-po-2025:CoursIA -- grain g53-probas-1 (densite #13410) -- prev: MED/notebook-python #16949

Etat au 2026-09-21 — reparation de la regle 2 du STOP #13410. Deux commits depuis le
relais : dcc708fa27 (fusion des lectures empilees) et 44851353d6 (attestation de parite
jumelle). Le corps d'origine est conserve tel quel en fin de message ; ses deux tableaux
de scope y sont desormais perimes (le tableau corrige est ci-dessous, section
« Scope reel au head »).

1. Reparation de la regle 2 du STOP #13410

L'organe de la campagne — scripts/notebook_tools/check_split_reading_cells.py — mesurait
22 violations sur la tete de cette PR :

Notebook findings detail
Probas/PyMC/PyMC-09-Classification.ipynb 17 paires [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 5 paires [3,4] [10,11] [14,15] [18,19] [22,23]

origin/main est clean sur 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.

Notebook avant apres
PyMC-09-Classification 54 cellules, 27 lectures ajoutees 36 cellules, 10 lectures (18 supprimees, 8 reecrites)
Percolation-Lean 29 cellules 24 cellules = le compte de la base (5 fusions, 5 reecritures)

Classification mandatee de chaque lecture livree :

Classification PyMC-09 Percolation-Lean
NOUVELLE (la sortie n'avait aucune lecture en base) 9 — version PyMC ; donnees synthetiques + posterieurs ; frontiere de decision ; test A/B ; taille d'echantillon ; distributions A/B ; CTR ; calibration (generation/split) ; calibration (Brier/AUC) 0
REECRITE (la lecture preexistante, enrichie des faits des doublons) 1 — p9-cal-lecture, absorbe les 5 lectures du diagramme de fiabilite 5 — chacune absorbe l'ajout qui la doublait
FUSIONNEE (supprimee, ses faits replies dans la survivante) 18 5
Total de lectures au head 10 6

Deux defauts structures corriges par la meme occasion, tous deux du meme genre (lecture
attachee au mauvais endroit) :

  • Ordre : une lecture de PyMC-09 etait placee AVANT la cellule de code qu'elle decrit
    (ex-index 32, qui decrit la generation de p9-cal-data en 33). Ses faits sont replis dans la
    lecture qui suit reellement la cellule de code.
  • Redite litterale : la table Brier / AUC / acc@0.5 etait 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

  1. Organe : check_split_reading_cells.py rend clean sur les deux carnets au head.
  2. Aucune cellule de code, aucune sortie touchee — assertion du script de fusion : le
    multiset de SHA (JSON canonique) des 13 cellules de code et celui des outputs sont
    identiques avant/apres. Le diff est markdown-only.
  3. Budget de lignes (mesure, pas estimation) : 8 lectures reecrites + 18 cellules supprimees
    pour PyMC-09, 5 reecritures + 5 suppressions pour Percolation-Lean.
    git diff -U0 734783d41a HEAD rend 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-lecture laissees
    identiques, 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.
  4. Gardes base-vs-PR rejoues au head (BASE = merge-base origin/main HEAD) :
    detect_md_content_loss.py → findings=0 sur les deux carnets (md_cells base=14 head=23
    pour PyMC-09, base=15 head=15 stable=True pour Percolation-Lean) ; enrich_quality_ci.py,
    cell_order_ci.py, detect_markdown_deaccent.py → rc=0. Le head porte plus de
    markdown que la base : 13858 contre 9038 caracteres normalises (PyMC-09), 9420 contre 8011
    (Percolation-Lean). La fusion retire de la redite, pas du contenu.
  5. nbformat : nbformat.validate() passe sur les deux (36 et 24 cellules) ; 10 lectures pour
    13 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 rouge

Le gate rougissait en DRIFT-INTRO : le contenu Python a change sans re-attestation. Le --update
du meme outil n'est sur qu'apres un audit firsthand (son propre --help : « a lancer APRES une
audit 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 :

  1. Le jumeau C# n'est PAS touche. csharp_sha et content_csharp_sha enregistres par
    l'attestation 0010 sont bit-identiques a ceux de l'audit 0009 du 2026-09-03
    (750e1ac5e3be…, 04e774d05b15…). La derive est unilaterale.
  2. Le contenu Python ne bouge qu'en markdown (point 2 ci-dessus) : aucun modele, aucune
    sortie, aucun claim de l'axe partage — « socle pedagogique commun : classification bayesienne
    modelisee dans les deux stacks » — n'est modifie.
  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# Infer-9-Classification.ipynb
    porte 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 reason porte les trois mesures pour qu'un relecteur puisse les contester.

4. Scope reel au head

Notebook Base Head Nature du delta
MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynb 24 cellules 24 cellules 5 lectures reecrites, 0 cellule ajoutee
MyIA.AI.Notebooks/Probas/PyMC/PyMC-09-Classification.ipynb 27 cellules 36 cellules 9 lectures nouvelles, 1 reecrite, 18 fusionnees
scripts/notebook_tools/twin_pairs.d/probas-9-classification/0010-…yaml — +21 lignes attestation d'audit de parite

5. 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 deux
commits 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 :

  • Le gel se justifiait par « le remede serait un push de densification » — donc dans le champ
    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 ».
  • Le user a durci la regle 2 le 2026-09-20 (campagne « remaniee, pas annulee »), et le
    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.
  • Le gel invoquait --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 registre
user-question-registry.md et n'est pas re-posee ici.

6. Verdict de sequence (honnete)

  • Repare : 22 violations de la regle 2 (organe clean au 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.
  • Repare : la derive de parite jumelle, par audit + attestation 0010.
  • NON verifie a l'heure de cette redaction : les checks CI au nouveau head 44851353d6 sont
    en file (CodeQL pending au moment du push). Le preflight de l'adjoint
    ([ADJOINT PREFLIGHT], lane myia-po-2027:CoursIA, verdict READY) porte le head
    734783d41a : il est perime par ces deux commits et doit etre rejoue au head courant
    avant toute review finale.
  • Ce que cette PR n'affirme pas : elle ne pretend pas que le jumeau C# doive rester
    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) :

Notebook État
MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-Lean.ipynb 24 → 29 cellules (5 lectures grain, 3 réécrites au relais)
MyIA.AI.Notebooks/Probas/PyMC/PyMC-09-Classification.ipynb 27 → 54 cellules (27 lectures grain, 19 réécrites + 2 relocalisées au relais)

Anomalies réparées

Percolation-Lean

  1. Inégalité inversée (ADDED après le profil isopérimétrique) : la lecture disait « la frontière d'une composante ouverte est majorée par 2 » — la signature imprimée est 2 ≤ (boundary C3 full3 A).card (borne inférieure), et la base elle-même calcule #(∂{0,2}) = 4 qui contredit une majoration. Réécrite : plancher atteint (#(∂{0,1}) = 2, #(∂{0,1,2}) = 2), opposés font mieux (4), 2 = minimum du profil.
  2. Filler vide (« Les propriétés de la composante ouverte sont fondamentales ») → les 4 #check verbatim (component_self, component_closed, component_iff_connected, mem_component_of_adj) + les 2 caractérisations du ω-fermé.
  3. Grammaire : « montre » → « montrent » ; « annoncée » → « annoncé ».

PyMC-09-Classification

  1. Symbole fabriqué : « calculée via pm.math.pb_better » — le code réel est la part des tirages delta_post > 0 du posterior de delta = theta_b - theta_a. Corrigé + « les traces du posterior montrent » (aucune trace plotée dans la cellule) → tirages.
  2. Split inversé ×2 : « exactement 50 échantillons dans le train et 150 dans le test » et « split 50/150 train/test » — le code fait SPLIT_PER_CLASS = 50 en 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).
  3. « AUC et F1 surpassent » ×3 (FAUX) : l'output donne AUC identique (0.923 des deux côtés — transformation strictement croissante) et ne contient aucun F1 ; l'une citait la conclusion à l'envers. Réécrites, dont une en citation verbatim : « Meme AUC (transformation strictement croissante : l'ordre des scores est inchange), Brier degrade : la discrimination est preservee, la calibration ne l'est pas. »
  4. « Parfaitement calibré » ×2 (contredit par les bins) : bin 2 prédit 0.239 pour 0.000 observé, bins 7-9 prédisent 0.762-0.954 pour 1.000 observé. Réécrites bin par bin, grammaire (« une prise de décision confiance ») corrigée.
  5. Mismatch de sujet : « analyse de sensibilité aux hyperparamètres Beta » — la cellule fait varier la taille d'échantillon (n = 10 → 500), l'a priori Beta(1,1) est fixe. Réécrite avec les 6 valeurs imprimées (0.961/0.979/0.988/0.997/0.983/0.996), non-monotonie conservée.
  6. Liste de métriques fabriquée : « précision, rappel, F1, AUC » → les métriques réelles sont Brier, AUC, acc@0.5.
  7. 2 relocalisations : les lectures CTR (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 %).
  8. Fillers (« B > A. », « Beta très efficace. », « Modèle robuste et fiable. », « Bien. Très bien. !!! Cette optimisation atteint enfin le seuil. », « Diagramme parfaitement calibré. », « Données bien équilibrées. ») → lectures ancrées sur les outputs verbatim.

Validation relay (contrôles exécutés sur worktree, commit relais 734783d41)

  1. Cellules : multiset full-JSON — 24/24 et 27/27 originales préservées byte-identiques, 0 perdue.
  2. Anti-doublon : full-JSON 0, préfixe-380 0, source-level 0, clash base 0.
  3. Chiffres tracés — exacts au verbatim : Percolation — 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]) ✓ ; signature 2 ≤ (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) ✓.
  4. Détecteur densité : re-mesuré après correctifs — 2/2 ≥ 1200 (Percolation : 1277, PyMC-09 : 1290).
  5. Listes source : scan fix_source_newlines vide (exit 0) ; git status : 2 notebooks modifiés uniquement.
  6. Arithmétique inline : 45/120 = 0.375 ✓ ; distance des moyennes √(1.5² + 1.5²) ≈ 2.1 ✓ ; 300 + 100 = 400 ✓ ; 149 + 151 = 300, 51 + 49 = 100 ✓.

Run g53-probas-1 (Mistral Vibe) — commit relais 734783d41 (2 fichiers).

🤖 Generated with Claude Code

jsboige and others added 2 commits September 20, 2026 00:32
…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>
@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 added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 20, 2026
@github-actions

github-actions Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 7.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 33.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.8s

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

Notebook PR Validation: PASS

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

@jsboige

jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT] schema: 1
lane: myia-po-2027:CoursIA pr: 16954 head: 734783d
complete: true
body: read comments-reviewed: 4 reviews-reviewed: 0 threads-reviewed: 0 threads-unresolved: 0
surfaces-sha256: f0f0fed6dcf2de44b7ec6f2b5d3c35df9eb42ae6066a54cd6c5b60f92ad9d7ec
diff-files: 2 diff-additions: 257 diff-deletions: 25
checks: latest-wins-green
b0: clear
scope: pass domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Verification detail (third-party lane — porteuse myia-po-2025:CoursIA ; all firsthand at head 734783d) :

  • Surfaces lues integralement : body (5790 c, contrat densite densite pedagogique : 430 notebooks sous le plancher 1200 — surface majoritairement non suivie #13410 grain g53-probas-1, 2 notebooks probas, anomalies reparees linees une a une), 4 commentaires (tous bots CI : H.4 PASS, Golden-Set 8/8 PASS, advisory prose-output ⚠️, Notebook PR Validation PASS 22/22), 0 review, 0 thread inline (GraphQL), 0 check en vol, 0 failure au head.
  • B.0 : check_unaddressed_nits.py 16954 → OK.
  • Advisory prose/output ⚠️ QUALIFIE (7 findings, FP par lecture directe) : detecteur rejoue localement au head (scripts/check_markdown_claims_output.py --json) → Percolation-Lean CLEAN ; PyMC-09 FABRICATION_DETECTED 7 findings. Lecture de chaque finding contre le body : les valeurs citees (0.3/0.7 = parametres normal(0.3,0.15) ; 37.5 % = arithmetique 45/120 documentee ; 0.30/0.38 = true_rate_a/b parametres de code) sont ancrees a la SOURCE ou derivees par arithmetique inline, tracees verbatim au point 3 du body (« Chiffres traces — exacts au verbatim »). Aucune valeur fabriquee non documentee au head — les anomalies du titre (« AUC/F1 fabriques ») sont celles que la PR REPARE.
  • Spot-check mecanique (worktree detache head) : Percolation-Lean 9 code — 0 ec-null, 0 sans-outputs, 0 error, 0 pattern C.1 ; PyMC-09 13 code — idem tout vert.
  • Scope : 2 fichiers probas exactement, +257/-25, coherent avec le contrat densite (lecteurs relayes, 0 cellule source touchee — diff markdown-only a verifier par le reviewer final sur le diff brut, les ratchets source/output du head sont verts).
  • Grain tag : MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-python #16949 present et bien forme.

@jsboige

jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

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 user-question-registry.md, restituée en fin de session). Tant que Q4 n'est pas tranchée, la lane ne pousse ni correction ni densification ici : rouge/attente non réparable par la lane au sens du picker. À la levée du veto, les levées se feront sous le nouveau geste (classification NOUVELLE/RÉÉCRITE/FUSIONNÉE, organe check_split_reading_cells.py).

jsboige and others added 2 commits September 21, 2026 07:29
…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>
@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

[REPAIR] lane myia-po-2025:CoursIA — head 44851353d6

Deux commits reparent cette PR sur la regle 2 du STOP #13410.

  • dcc708fa27 — fusion des lectures empilees. L'organe check_split_reading_cells.py
    mesurait 22 violations au head precedent (17 sur PyMC-09, 5 sur Percolation-Lean), alors
    que origin/main est clean sur les deux. PyMC-09 : 54 -> 36 cellules (27 -> 10
    lectures) ; Percolation-Lean : 29 -> 24 cellules (= le compte de la base). Delta net
    +33 / -220. Organe clean au head ; 0 cellule de code et 0 sortie touchees
    (multiset de SHA identique avant/apres, assertion du script de fusion).
  • 44851353d6 — attestation de parite jumelle 0010, apres audit et non rebaseline
    aveugle : jumeau C# non touche, csharp_sha/content_csharp_sha bit-identiques a l'audit
    0009 du 2026-09-03 ; contenu Python markdown-only ; parity_level: native-both ne mesure
    pas la correspondance cellule-par-cellule, et le jumeau C# porte 2 lectures pour 22 cellules
    de code. Le reason de l'attestation porte les trois mesures.

Divulgation. Le commentaire de gel du 2026-09-20T18:32Z (meme lane) est supersede, et la
lane le declare plutot que de le taire. Le gel se justifiait par « le remede serait un push de
densification ». La mesure du 2026-09-21 (cycle c.77, meme lane) a etabli que le bloquant de
cette PR est une derive de parite, et le geste mandate par le durcissement user de la regle 2
est la fusion : ni l'un ni l'autre n'ajoute de densite (-187 lignes nettes). Le gel
invoquait les deux causes d'--ignore-red (garde casse sur main, dependance d'une autre PR) —
aucune ne s'applique. Si le coordinateur lit Q4 autrement (portee « merge ET push »),
git revert 44851353d6 dcc708fa27 defait l'ensemble.

Le preflight [ADJOINT PREFLIGHT] (head 734783d41a, verdict READY) est perime par ces deux
commits
: la porte d'entree est exact-head, il doit etre rejoue au head courant avant la review
finale. Q4 reste au registre user-question-registry.md, non reposee ici.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Sep 21, 2026
@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 16954
head: 4485135
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 7ea0181832729e5272f79491e4b1270d6ccd9a1448033b38206ec298c05ad9cf
diff-files: 3
diff-additions: 137
diff-deletions: 71
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 16954
head: 4485135
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9afbcb385031528c1a1ab89fa7be87d17629a890848c75d71f84e898d27c6873
diff-files: 3
diff-additions: 137
diff-deletions: 71
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit c64b850 into main Sep 22, 2026
88 of 107 checks passed
jsboige added a commit that referenced this pull request Sep 23, 2026
…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>
myia-ai-01 added a commit that referenced this pull request Sep 23, 2026
…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>
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