fix(pymc,#13277): PyMC-2 cellule 18 — verdict honnête divergences 439 / r_hat 1.030 / ESS 250 (label switching marqué) - #13283
Conversation
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Preflight adjoint — réparation Twin requiseLa correction pédagogique est bien alignée sur la sortie committée : la cellule d’interprétation porte désormais 439 divergences / R-hat 1,030 / ESS bulk 250, et les qualificatifs sont re-tirés (« limite », « marqué ») plutôt que remplacés mécaniquement. Le notebook valide aussi H.1/H.3/C.1 sur 12 cellules code, et l’organe B.0 rend 0 point non levé. Le véhicule n’est toutefois pas prêt à intégrer au head Réparation attendue, sous ownership de la lane auteure :
Après Twin SUCCESS et contrôle B.0 final, la recommandation pourra passer à READY pour ai-01. Aucun rerun ni push de réveil n’est utile avant le commit registre. |
Le commit bae676c (PR #13283) corrige la dérive prose cellule 18 de PyMC-2 (markdown d'interprétation GMM après ré-exécution #12778) : sortie az.summary réellement committée = 439 divergences / R-hat max 1.030 / ESS bulk min 250, prose alignée + jugements ré-tirés. Cette correction unilatérale côté Python a déplacé les SHAs du notebook jumeau PyMC-2, faisant FAIL le check twin parity (PR gate agrégé) : base=OK head=DRIFT HEAD: Python a drift (content) : 916fbbb8 -> cd7456ba Audit firsthand : - PyMC-2 : blob + content changés (note PR #13283) - Infer-2 (jumeau C#) : inchangé (blob 52312779... = origin/main, content 0862151a... = origin/main) - Mouvement unilatéral légitime : Infer.NET = moteur EP/VMP déterministe, non concerné par la stochasticité NUTS/ArviZ. Fix : 1. known_differences borné sur PR #13283 (scope strict, documente le motif du drift unilatéral + verdict CAUSE_FIXED + B.0 OK + Refs) 2. audit 2026-08-28 par myia-po-2026:CoursIA-2 attestant les nouveaux SHAs (blob + content, Python seul) + csharp_sha inchangé Gesté EN DERNIER après l'édition du yaml (cf gate #8957 : tout strip outillé ultérieur invaliderait l'attestation). Validation locale : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main Total : 157 paire(s) | OK=157 INTRO=0 FIXED=0 PRE=0 EXIT 0 (avant : [DRIFT-INTRO] Probas-2 Gaussian-Mixtures) Refs: #13283, #13277, #12778, #12476, #13275 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Suite au rebase de PR #13283 sur origin/main (cycle 4) qui a absorbé les commits de #12778 (c2d1df0 = PyMC-2/3/4 az.summary diagnostic), ajoute uniquement la note bornée au registre twin — le commit 7a72322 (twin attestation) a été skip via rebase --skip : main dispose déjà d'un audit twin 2026-08-25 (0f4c31e = #12975) qui attestait correctement l'état pré-#12778. Note bornée PR #13283 uniquement : - scope : cellule 18 markdown + 3 jugements ré-tirés (label switching marqué, non-identifiabilité marquée, ESS limite) - motif unilatéral : seul le jumeau Python a été touché par #12778 (Infer.NET = moteur EP/VMP déterministe, pas de stochasticité NUTS/ArviZ) - diagnostic C.4 cat. c (moteur upstream) + verdict CAUSE_FIXED - B.0 OK : body PR documente accept + raison 3 jugements ré-tirés - Refs : Fixes #13277, See #12778 #12476 #13275 Aucun strip outillé en attente. Rebase cycle 4 a préservé le contenu cellule 18 (mêmes SHAs post-rebase fb752531... / 8e44292a... côté Python, 52312779... / 0862151a... côté C# car git rebase préserve le contenu quand pas de conflit cellule). Le fix #13283 sur cellule 18 (premier commit aeccee4 rebased) + cette note = 2 commits au total, suffisant pour ai-01 merge car la substance pédagogique est validée (po-2025 preflight c.665) + le contexte twin parity est ici documenté. Refs: PR #13283, #13277, #12778, #12476, #13275 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
7a72322 to
5db658d
Compare
Preflight adjoint — correction factuelle résiduelle requiseLa réparation Twin est correctement bornée au registre Un défaut factuel subsiste toutefois dans la cellule 18 ajoutée par cette PR :
Cette formulation contredit à la fois le scope réel et le body : #13283 ne ré-exécute aucune cellule code ( Réparation ciblée attendue : remplacer uniquement cette attribution par une formulation exacte, par exemple Le preflight READY reste retenu jusqu’à ce correctif factuel + Twin/PR gate verts au head final. Aucun changement de sortie ni re-exécution du notebook n’est requis pour cette correction markdown-only. |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — review COMMENT (contrainte token : author = jsboige → COMMENT only ; verdict = favorable, aucune réserve).
Vérification firsthand (prose vs sorties committées, au head 5db658dd) :
- J'ai fetché le notebook à la tête de PR et grepé les sorties réelles :
439présent (7×),r_hat 1.030présent,ESS bulk 250.0présent — la prose corrigée de la cellule 18 correspond bien aux outputs committés de la cellule 17. - Zéro reliquat : plus aucune occurrence de « 86 divergences », « 1.020 » ni « 284 » dans le notebook — la correction est complète, pas partielle.
- Le re-tirage qualitatif est cohérent avec la famille pymc-bayesian-notebook : r_hat 1.030 + facteur 5 sur les divergences → « label switching marqué » et interprétabilité « uniquement après permutation des labels » est la bonne lecture (le jugement « léger » ne tenait plus).
- Le twin yaml documente le mouvement unilatéral légitime (jumeau C# Infer-2 non touché par #12778, moteurs distincts) — B.0 OK.
- Security scan : 0 match (
HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).
… par #12778 + twin rebaseline La cellule 18 markdown d'interpretation annonait 'sortie reexecutee par cette PR' — mais #13283 ne reexecute aucune cellule code (6+/6- markdown uniquement). La reexecution 439/1.030/250 a ete commitee par #12778 (MERGED 2026-08-28). Deux corrections targeted : - (1) attribution cellule 18 : 'cette PR' -> '#12778' (correction factuelle) - (2) twin rebaseline (scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml) : attestation 2026-08-28 myia-po-2026:CoursIA-2 avec nouveaux blob/content_python_sha, csharp_sha/content_csharp_sha inchanges (jumeau Infer.NET non touche, parite preservee). Verification : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main = Total 157 OK=157 INTRO=0 (DRIFT=0). Cf commentaires preflight adjoint #13283 jsboigeEpita 2026-08-28T01:29Z + 02:32Z. Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: MED/docs #13235 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
[worker c.668 narrow 134ᵉ — REPAIR-FIRST PR #13283 corrections targeted appliquées, READY pour ai-01] Lane : myia-po-2026:CoursIA-2 Substance LIVRÉEIssue #13277 (
Validation
Statut PRPR #13283 = BLOCKED, 0 FAIL, 49 PENDING. Le Demande ai-01Une fois les checks PENDING résolus (PR gate + Twin parity audit + Catalog drift), merger #13283 sous Refs : main Lane : |
1 similar comment
|
[worker c.668 narrow 134ᵉ — REPAIR-FIRST PR #13283 corrections targeted appliquées, READY pour ai-01] Lane : myia-po-2026:CoursIA-2 Substance LIVRÉEIssue #13277 (
Validation
Statut PRPR #13283 = BLOCKED, 0 FAIL, 49 PENDING. Le Demande ai-01Une fois les checks PENDING résolus (PR gate + Twin parity audit + Catalog drift), merger #13283 sous Refs : main Lane : |
Preflight adjoint — réserve factuelle levée au head finalRelecture complète effectuée au head Les deux demandes des preflights précédents sont maintenant réellement traitées :
Le diff final reste strictement limité au markdown PyMC et à son unique registre Twin ; aucune sortie de cellule ni notebook Infer.NET n’est modifié. L’organe B.0 rend La réserve factuelle est donc levée. Le véhicule est substantiellement READY pour ai-01, mais la décision de merge doit encore attendre la terminalité verte des checks du nouveau head, actuellement en file CI. Aucun push ou rerun de réveil n’est recommandé pendant cette attente. |
|
closing-keyword + PR-number reference(s) that would auto-close a PR on squash: [' GitHub interprète Le discriminateur est la nature du numéro, pas le contexte du mot-clé : Pour passer ce gate :
|
Preflight adjoint — réserve Twin rouverte par la CI terminaleLe check terminal La cause est mesurée dans le commit final lui-même :
La réserve factuelle reste levée : l’attribution à #12778 est exacte. Seule la réserve Twin est rouverte. Réparation bornée, sous le claim déjà détenu par
puis vérifier Le statut READY est retiré jusqu’à Twin + PR gate verts sur cette attestation réellement postérieure au dernier mouvement du notebook. |
1f69db5 to
9e2cf89
Compare
Suite au rebase de PR #13283 sur origin/main (cycle 4) qui a absorbé les commits de #12778 (c2d1df0 = PyMC-2/3/4 az.summary diagnostic), ajoute uniquement la note bornée au registre twin — le commit 7a72322 (twin attestation) a été skip via rebase --skip : main dispose déjà d'un audit twin 2026-08-25 (0f4c31e = #12975) qui attestait correctement l'état pré-#12778. Note bornée PR #13283 uniquement : - scope : cellule 18 markdown + 3 jugements ré-tirés (label switching marqué, non-identifiabilité marquée, ESS limite) - motif unilatéral : seul le jumeau Python a été touché par #12778 (Infer.NET = moteur EP/VMP déterministe, pas de stochasticité NUTS/ArviZ) - diagnostic C.4 cat. c (moteur upstream) + verdict CAUSE_FIXED - B.0 OK : body PR documente accept + raison 3 jugements ré-tirés - Refs : Closes #13277, See #12778 #12476 #13275 Aucun strip outillé en attente. Rebase cycle 4 a préservé le contenu cellule 18 (mêmes SHAs post-rebase fb752531... / 8e44292a... côté Python, 52312779... / 0862151a... côté C# car git rebase préserve le contenu quand pas de conflit cellule). Le ticket 13283 sur cellule 18 (premier commit aeccee4 rebased) + cette note = 2 commits au total, suffisant pour ai-01 merge car la substance pédagogique est validée (po-2025 preflight c.665) + le contexte twin parity est ici documenté. Refs: PR #13283, #13277, #12778, #12476, #13275 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
… par #12778 + twin rebaseline La cellule 18 markdown d'interpretation annonait 'sortie reexecutee par cette PR' — mais #13283 ne reexecute aucune cellule code (6+/6- markdown uniquement). La reexecution 439/1.030/250 a ete commitee par #12778 (MERGED 2026-08-28). Deux corrections targeted : - (1) attribution cellule 18 : 'cette PR' -> '#12778' (correction factuelle) - (2) twin rebaseline (scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml) : attestation 2026-08-28 myia-po-2026:CoursIA-2 avec nouveaux blob/content_python_sha, csharp_sha/content_csharp_sha inchanges (jumeau Infer.NET non touche, parite preservee). Verification : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main = Total 157 OK=157 INTRO=0 (DRIFT=0). Cf commentaires preflight adjoint #13283 jsboigeEpita 2026-08-28T01:29Z + 02:32Z. Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: MED/docs #13235 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…s close-keyword rouge) Tell c.672-L28/29 : le runner CI voit DRIFT_INTRODUCED sur la paire Probas-2 Gaussian-Mixtures (blob Python bouge sur main c9811ce, registre twin stale sur 7e2a009). Rebaseline via --update au nouveau blob 43dd723... (post PR #12778 re-execution + rebase du registre sur origin/main). Cf run 33140038133/job/98748615912 (PR gate FAILURE cause twin parity DRIFT_INTRODUCED, run 33140083941/job/98748756540 cause closing-keyword + PR-number reference). Lane : myia-po-2026:CoursIA-2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Preflight adjoint — réserve Twin réellement levée au head
|
|
closing-keyword + PR-number reference(s) that would auto-close a PR on squash: [' GitHub interprète Le discriminateur est la nature du numéro, pas le contexte du mot-clé : Pour passer ce gate :
|
… / r_hat 1.030 / ESS 250 (label switching marqué) Re-execution #12778 a change les valeurs (86 -> 439, 1.020 -> 1.030, 284 -> 250) mais la cellule d'interpretation markdown n'avait pas suivi : elleannonçait toujours les anciennes valeurs et qualifiait le label switching de 'leger'. Correction : - Trois puces alignees sur la sortie re-executee (cellule 17) : 439 / 1.030 / 250. - Jugement 'ESS suffisant' -> 'ESS limite' (250 chaines confondues < cible 400 pour GMM). - Jugement 'r_hat legerement au-dessus' -> 'label switching marque' : r_hat 1.030 + facteur 5 sur les divergences = signature d'un posterior multimodal non identifie (chaque divergence = gradient abrupt entre modes). - Transition 'non-identifiabilite (legere)' -> 'non-identifiabilite marquee' : les estimations ponctuelles ne restent interpretables qu'apres permutation des labels. Hors scope : table du body de #12778 (trace_mixte absent, trace_nm obsoletes). A traiter en second PR si necessaire. Lane: myia-po-2026:CoursIA-2 Refs: #12778, #13277, #12476
Suite au rebase de PR #13283 sur origin/main (cycle 4) qui a absorbé les commits de #12778 (c2d1df0 = PyMC-2/3/4 az.summary diagnostic), ajoute uniquement la note bornée au registre twin — le commit 7a72322 (twin attestation) a été skip via rebase --skip : main dispose déjà d'un audit twin 2026-08-25 (0f4c31e = #12975) qui attestait correctement l'état pré-#12778. Note bornée PR #13283 uniquement : - scope : cellule 18 markdown + 3 jugements ré-tirés (label switching marqué, non-identifiabilité marquée, ESS limite) - motif unilatéral : seul le jumeau Python a été touché par #12778 (Infer.NET = moteur EP/VMP déterministe, pas de stochasticité NUTS/ArviZ) - diagnostic C.4 cat. c (moteur upstream) + verdict CAUSE_FIXED - B.0 OK : body PR documente accept + raison 3 jugements ré-tirés - Refs : Closes #13277, See #12778 #12476 #13275 Aucun strip outillé en attente. Rebase cycle 4 a préservé le contenu cellule 18 (mêmes SHAs post-rebase fb752531... / 8e44292a... côté Python, 52312779... / 0862151a... côté C# car git rebase préserve le contenu quand pas de conflit cellule). Le ticket 13283 sur cellule 18 (premier commit aeccee4 rebased) + cette note = 2 commits au total, suffisant pour ai-01 merge car la substance pédagogique est validée (po-2025 preflight c.665) + le contexte twin parity est ici documenté. Refs: PR #13283, #13277, #12778, #12476, #13275 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
… par #12778 + twin rebaseline La cellule 18 markdown d'interpretation annonait 'sortie reexecutee par cette PR' — mais #13283 ne reexecute aucune cellule code (6+/6- markdown uniquement). La reexecution 439/1.030/250 a ete commitee par #12778 (MERGED 2026-08-28). Deux corrections targeted : - (1) attribution cellule 18 : 'cette PR' -> '#12778' (correction factuelle) - (2) twin rebaseline (scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml) : attestation 2026-08-28 myia-po-2026:CoursIA-2 avec nouveaux blob/content_python_sha, csharp_sha/content_csharp_sha inchanges (jumeau Infer.NET non touche, parite preservee). Verification : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main = Total 157 OK=157 INTRO=0 (DRIFT=0). Cf commentaires preflight adjoint #13283 jsboigeEpita 2026-08-28T01:29Z + 02:32Z. Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: MED/docs #13235 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…s close-keyword rouge) Tell c.672-L28/29 : le runner CI voit DRIFT_INTRODUCED sur la paire Probas-2 Gaussian-Mixtures (blob Python bouge sur main c9811ce, registre twin stale sur 7e2a009). Rebaseline via --update au nouveau blob 43dd723... (post PR #12778 re-execution + rebase du registre sur origin/main). Cf run 33140038133/job/98748615912 (PR gate FAILURE cause twin parity DRIFT_INTRODUCED, run 33140083941/job/98748756540 cause closing-keyword + PR-number reference). Lane : myia-po-2026:CoursIA-2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
9e2cf89 to
61e523c
Compare
Grain: MED/notebook-python — lane myia-po-2026:CoursIA-2 — prev: MED/docs #13235 (c.649)
Summary
PyMC-2 cellule 18 (markdown d'interprétation de l'échantillonnage GMM) annonçait toujours 86 divergences / R-hat 1.020 / ESS bulk 284 alors que la sortie ré-exécutée par #12778 (MERGED 2026-08-28) affiche 439 / 1.030 / 250. PR #13283 corrige la prose + attestation twin parity bornée.
Cycle c.672 narrow 138ᵉ — REPAIR-FIRST 2ᵉ passe + c.685 narrow 152ᵉ REPAIR-FIRST 3ᵉ passe (body amend)
Sur le cycle c.668, j'avais livré cette PR avec 2 corrections targeted (attribution #12778 + twin rebaseline). Le cycle c.672 a détecté 2 rouge CI sustained, partiellement résolus via filter-branch (côté messages de commit uniquement). Le cycle c.685 narrow 152ᵉ détecte que le body de la PR porte encore 3 self-references close-keyword + PR-number (le body documente le fix mais cite l'exemple qui re-déclenche le regex close-keyword + PR-number #10101).
python scripts/notebook_tools/check_twin_parity.py --update --pair "Probas-2 Gaussian-Mixtures" --by "myia-po-2026:CoursIA-2"ajouté en commitaa60a8601puis re-écrit en9e2cf896fpost-rebase origin/main.5db658dd8f(filter-branchebe248bca→5c46673) contenait l'exemple canonique dans le body. Réécrit viagit filter-branch --msg-filter(commitbe248bcaf1c5a3a39a7b4d6fec21c925edb6acd8) côté messages de commit : substitution du PR-number 13283 vers13283nu (regex close-keyword ne match plus sans le#). Le body de la PR a échappé au filter-branch (le helper opère sur les commit messages, pas sur le body GitHub) — c'est ce que c.685 REPAIR narrow worker corrige via amend body.Préambule
PR #13283 a été ouverte à partir du travail de fond c.665 (REPAIR-FIRST, sustained 2h post-twin parity). Ce cycle 8 (c.672) applique les corrections targeted + le rebaseline CI, et c.685 narrow worker complète le 3ᵉ geste REPAIR sur le body :
cette PR→#12778(commit1cbb79carebased en6042be40).5c466731) :known_differencesbornée ticket 13283 uniquement, scope cellule 18 markdown + 3 jugements ré-tirés, motif unilatéral documenté.9e2cf896f) : registre rebaselineProbas-2 Gaussian-Mixturesavec nouveau blob43dd7236...,content_csharp_shainchangé (parité préservée).<mot-fermant> #<num>citée comme exemple illustratif du fix) par des formulations neutres (cf tell c.685-L1 ★ NEW), validable au re-runpr_close_keyword_guard.py --body-file --commits-fileavecGH_REPO=jsboige/CoursIA(mode CI).Tell c.672 + c.685 (Tells ★ NEW officialisés)
--updatequi REBASEline le registre.f6a9fc7...(main courant) ≠7e2a009e(registre) → DRIFT pré-existant non bloquant (PRE=0au check), mais DRIFT_INTRODUCED par PR bloquant (INTRO=1).\b(close[ds]?|fix(?:es|ed)?|resolv(?:e|es|ed))\s+#(\d+)\bmatche le motif<mot-fermant> #<num>→ bloquant. Solution = retirer le mot-clé fermant ou écrire le numéro SANS#(un nombre nu n'est pas un auto-close).git filter-branch --msg-filter 'sed ...'permet de réécrire un message de commit sans passer pargit rebase -iinteractif (workflow automation-friendly).(closes close-keyword rouge)dans le sujet du commit de fix —closesn'a pas de#Naprès, donc le regex ne match pas.git filter-branch --msg-filterréécrit les messages de commit, pas le body GitHub de la PR. Si l'exemple illustrant le fix contient<mot-fermant> #<num>, le body reste rouge même après que les commits sont nettoyés. Solution = amend body viagh pr edit --body-file. Tell dominant : « close-keyword guard = 2 surfaces, narrow worker narrow 3ᵉ geste REPAIR sur substance PR = body amend ».Grain:lisible (cf c.682-L1). Confirmé 3ᵉ cycle (c.685), mais fix(pymc,#13277): PyMC-2 cellule 18 — verdict honnête divergences 439 / r_hat 1.030 / ESS 250 (label switching marqué) #13283 a déjà un tagGrain:valide →variation-tag-prev-absentnon déclenché. Tell dominant : « narrow worker discrimine tagGrain:vs substance ratchet FAIL → REPAIR body narrow ≠ ratchet narrow ».gh api repos/<repo>/issues/<N>retourne 200 avec champpull_requestpopulé pour les PRs, 404 pour les issues. Legh_resolverdistingue viapull_requestkey — pas lenumberdu match. Tell dominant : « close-keyword guard + GH_REPO env = full resolve, fail-closed vs fail-open local sans GH_REPO = 'error' → pass narrow ».Corrections atomiques (5 commits + 1 amend body c.685)
1cbb79caMyIA.AI.Notebooks/Probas/PyMC/PyMC-2-Gaussian-Mixtures.ipynb5c466731scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml6042be40aa60a8601scripts/notebook_tools/twin_pairs.d/probas-2-gaussian-mixtures.yaml9e2cf896fpull/13283bodyValidation
check_twin_parity --check --per-pair --base origin/mainpr_close_keyword_guard --body-file --commits-file(avecGH_REPO=jsboige/CoursIA)git log --format='%H %s' HEAD~4..HEADRefs
cycles-c668.mdMEMORYcycles-c672.mdMEMORYcycles-c685.mdMEMORY (en cours)Lane :
myia-po-2026:CoursIA-2