Skip to content

Fix(probas,#18556): tranche 18/19 — intervalle credible mesure, censure decrite par son chemin execute - #19814

Open
jsboige wants to merge 8 commits into
mainfrom
fix/18556-infer1819-nav
Open

jsboige wants to merge 8 commits into
mainfrom
fix/18556-infer1819-nav

Conversation

@jsboige

@jsboige jsboige commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-dotnet — lane myia-po-2027:CoursIA — prev: LIGHT/docs #19717

Tranche 18/19 de l'audit Infer #18556 (lecture critique de bout en bout + protocole 5 organes). 10 findings mesurés (F1–F10) sur les deux derniers notebooks du corpus + README ; tous traités dans cette PR.

Infer-18 — re-exécution fraîche (le fix exigeait la mesure)

dotnet_executor.py : 9/9 cellules, 0 erreur (14,3 s, DOTNET_ROOT=Program Files, Graphviz sur PATH). Bannière probeAddresses strippée post-re-exec (strip_probe_banner.py, 1 ligne).

  • F5 (alignement prose ↔ sortie) : la Lecture affirmait une rupture « autour de 1890–1891 » alors que la sortie ne montrait que le mode. Ajout en cellule 10 du calcul de l'intervalle crédible à 90 % (plus petit intervalle contenant ≥ 90 % de la masse du postérieur de cp) ; sortie fraîche : Intervalle credible a 90 % : [1886..1892] (masse couverte 90,9 %). Prose (cellule 11) et README (l. 820) alignées sur cette mesure : mode 1891, IC 90 % 1886–1892. Mise a jour (tete 1597bf4533) : la reserve du coordinateur (2026-10-08T21:45Z) a montre que l'expansion gloutonne depuis le mode ne garantit pas la minimalite -- temoin p=[.25,.25,.01,.40,.09] : glouton [0..4] (largeur 5), minimal [0..3] (masse .91, largeur 4). Le commit b2342e01a09c remplace le glouton par une recherche exacte par balayage des intervalles contigus (IntervalleMinimalExact, O(N^2), N = 112), et le temoin est desormais imprime par le notebook lui-meme : Temoin de minimalite : p=[.25,.25,.01,.40,.09] -> [0..3] masse 0,91. Cellule 10 re-executee, sortie committee.
  • F9 : la cellule 12 annonçait le résultat de l'entropie (« le modèle surajuste et trouve une coupure spurieuse ») avant la cellule qui le calcule. Reformulée en question ; l'interprétation reste portée par la Lecture postérieure (cellule 14).
  • F4 (source + sortie) : la cellule 13 imprimait « Bayes factor (cf. Infer-8) » — les Bayes factors vivent en Infer-10 (le Prérequis de la cellule 0 et le README l. 801 citent déjà Infer-10). Corrigé dans la source, la sortie rafraîchie porte la même correction. Même correction au README l. 818.

Infer-19 — corrections markdown-only (pas de re-exec due, C.2)

  • F1 (BLOQUANT) : la Lecture finale (cellule 24) affirmait que la censure entre « ici par Variable.ConstrainPositive » — l'inverse de ce que la section 7 démontre : cette contrainte n'est pas compilable (vérifié empiriquement dans le notebook), et le chemin réellement exécuté est la forme exacte en statistiques suffisantes (Gamma(nObs, lambda) observée au temps total à risque). La Lecture décrit désormais le chemin exécuté ; le pont PyMC-19 devient « deux chemins d'encodage ».
  • F3 : « le score est minimal en k = 1,8 » → maximal (le balayage maximise la log-vraisemblance ; -466,7 est le pic, k = 1,5 et k = 2,0 sont moins bons).
  • F8 : « environ 45 % de censures » → théorie 44,9 % (exp(-lambda·c*)) vs réalisé 51,7 % sur l'échantillon (les deux valeurs sont dans la sortie de la cellule 20).
  • F6 : run de 4 cellules code consécutives (censure → naïf → corrigé → Kaplan-Meier) coupé par une cellule de Lecture intermédiaire entre le modèle naïf et le modèle corrigé (valeurs citées = sortie de la cellule qui précède). detect_consecutive_code_cells.py : max run 4 → 2.
  • F10 : bloc ## Navigation canonique (forme de Fix(infer,#18556): Infer-15/16/17 headers serie + table nav Infer-17 (tranche 15/16/17) #19788) en cellule 0 : Infer-18 | - (dernier notebook du corpus).

README

  • F2 (l. 70) : la ligne du catalogue nommait ConstrainPositive comme méthode de censure — remplacée par les statistiques suffisantes Gamma(nObs, lambda) (le chemin exécuté).
  • F7 : le notebook 19 n'avait aucune section dédiée entre « ### Infer-18 » et « ## Concepts Clés Infer.NET » — section « ### Infer-19 : Analyse de survie (time-to-event bayésien) » ajoutée (intro, objectifs, concepts clés, positionnement, applications), fidèle au contenu lu.

Diagnostic dérive (F5)

  • Pourquoi la valeur dérivait : (b) claim antérieure non mesurée — la prose « 1890–1891 » et le README l. 820 dataient d'avant l'existence de toute mesure d'intervalle dans le notebook ; seule le mode était calculé.
  • Verdict : CAUSE_FIXED — la cause (absence de mesure) est réparée par l'ajout du calcul d'intervalle crédible en cellule 10 + re-exécution fraîche ; prose et README renvoient à la sortie mesurée (notebook re-exécutable localement, règle F).

Organes (tous relancés après le dernier commit)

Organe Verdict
dotnet_executor.py 9/9 cellules, 0 erreur
check_notebook_nav_chain.py --check (18 et 19) 0 NEW finding (rc 0)
check_output_collapse.py origin/main 0 flagged
check_source_collapse.py origin/main 0 flagged
check_output_failure_text.py origin/main 0 regressed
detect_consecutive_code_cells.py (19) max run 2 (était 4)
pre-commit (H.3, gitleaks, strips) Passed

Variance d'exécution déclarée (cellule 2 d'Infer-18)

La re-exécution rafraîchit la cellule #r "nuget:" : l'ancienne sortie embarquait le bootstrap JS du kernel (dotnet-interactive-this-cell, ~3,2 Ko de plomberie client), vide sous l'exécuteur headless local. Aucune sortie pédagogique perdue (la liste de packages reste) ; classe de variance documentée (restore nuget / bootstrap HTML ≠ collapse). Les ratchets output/sourcecollapse sont silencieux.

See #18556 (audit en cours — tranches restantes : Infer-1, Infer-2, Infer-2b, Glossaire).

🤖 Generated with Claude Code

…re decrite par son chemin execute

Infer-18 (re-execute 9/9, 0 erreur) :
- cell 10 : ajout du calcul d'intervalle credible a 90 % (plus petit
  intervalle contenant >= 90 % de la masse du posterior de cp)
- cell 11 : la prose annoncait "1890-1891" sans mesure — alignee sur la
  sortie fraiche (mode 1891, IC 90 % [1886..1892], masse 90,9 %)
- cell 12 : le resultat de l'entropie etait annonce avant le calcul —
  reframe en question, la Lecture suit la cellule executee
- cell 13 : renvoi Bayes factor "cf. Infer-8" -> "cf. Infer-10"
  (les Bayes factors vivent en Infer-10, coheremment avec cell 0 et README:801)

Infer-19 (markdown-only, pas de re-exec due) :
- cell 24 (BLOQUANT) : la lecture affirmait une censure "ici par
  Variable.ConstrainPositive" — contredit par la section 7 elle-meme
  (non compilable) ; decrit des lors le chemin reellement execute :
  statistiques suffisantes Gamma(nObs, lambda) au temps total a risque
- cell 18 : "score minimal en k = 1,8" -> "maximal" (le balayage
  maximise la log-vraisemblance ; -466,7 est le pic)
- cell 19 : "environ 45 % de censures" -> theorie 44,9 % / realise 51,7 %
- nouvelle cellule de Lecture entre modele naif et modele censure :
  le run de 4 cellules code consecutives passe a 2+2
- cellule 0 : bloc Navigation canonique (forme #19788), Infer-18 | -

README :
- ligne 70 : la methode de censure nommee des lors les statistiques
  suffisantes, pas ConstrainPositive
- ligne 818 : (cf. Infer-8) -> (cf. Infer-10)
- ligne 820 : "1890-1891" -> mode 1891, IC 90 % 1886-1892 (mesure)
- nouvelle section "### Infer-19" (absente — le notebook n'avait pas de
  section dediee entre Infer-18 et Concepts Cles)

Organes : nav-chain 0 NEW (rc 0) ; output-collapse 0 flagged ;
source-collapse 0 flagged ; output-failure 0 regressed ;
consecutive-code-cells max run 2 (etait 4).

See #18556

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

jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner Author

Tranche 18/19 livrée — #19814 (Grain: DEEP/notebook-dotnet, lane myia-po-2027:CoursIA).

10 findings mesurés (F1–F10), tous traités :

# Verdict Résumé
F1 CONFIRMED, BLOQUANT Infer-19 cellule 24 : la Lecture affirmait une censure « par Variable.ConstrainPositive », contredite par la section 7 (non compilable) — décrit le chemin exécuté (statistiques suffisantes)
F2 CONFIRMED README l. 70 : même faux ConstrainPositive → statistiques suffisantes
F3 CONFIRMED Infer-19 cellule 18 : « score minimal en k=1,8 » → maximal
F4 CONFIRMED Infer-18 cellule 13 (source et sortie) + README l. 818 : « cf. Infer-8 » → Infer-10
F5 CONFIRMED « 1890–1891 » non mesuré → intervalle crédible 90 % ajouté et calculé ([1886..1892], masse 90,9 %), prose + README alignés — re-exécution fraîche
F6 CONFIRMED Run de 4 cellules code → 2+2 (Lecture intermédiaire insérée)
F7 CONFIRMED README : aucune section Infer-19 → section dédiée ajoutée
F8 CONFIRMED « environ 45 % de censures » → théorie 44,9 % / réalisé 51,7 %
F9 CONFIRMED Résultat d'entropie annoncé avant calcul → reformulé en question
F10 CONFIRMED Navigation 18↔19 absente → bloc canonique (forme #19788)

Preuves : re-exécution 9/9 cellules 0 erreur ; nav-chain 0 NEW ; output-collapse / source-collapse / output-failure 0 flagged/regressed ; consecutive-code-cells max run 2. Diagnostic dérive F5 dans le body de la PR (CAUSE_FIXED, valeur issue de la re-exécution).

Reste : Infer-1-Setup, Infer-2-Gaussian-Mixtures, Infer-2b-Debugging, Infer-Glossary.

@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 added the markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. label Oct 8, 2026
@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 3.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.4s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 17.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.0s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.1s

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

@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 added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 8, 2026
@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)

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19814
head: c673835
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 950a857318c013892c438713d6e4bdcb6a45c3e96717f3ff60a62f0ebaa20311
diff-files: 3
diff-additions: 146
diff-deletions: 298
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 19814
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

…ced par c.108)

Le CI gate Twin parity audit (#8057) detecte 2 paires en DRIFT
introduites par cette PR (sha blob Python et C# changes par la
nav-redaction c.108) :
- Probas-18 Change-Point (python_sha 69e0d12, csharp_sha 56c6b6d)
- Probas-19 Survival-Analysis (python_sha 9644282, csharp_sha cf218cd)

Rebaseline chirurgicale (L963/L974) via :
  python scripts/notebook_tools/check_twin_parity.py --update     --pair 'Probas-18 Change-Point' --by 'myia-po-2024:CoursIA-2'
  python scripts/notebook_tools/check_twin_parity.py --update     --pair 'Probas-19 Survival-Analysis' --by 'myia-po-2024:CoursIA-2'

Aucune modification de fond sur les notebooks. Le rebaseline atteste
la parite au nouveau SHA blob, ne la repare pas. Le strip outille
(strip_probe_banner / strip_machine_paths / scrub_papermill) --update
va en DERNIER (cf #8957).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19814 (Fix(probas,#18556): tranche 18/19 — intervalle credible mesure, censure decrite par son chemin execute) 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.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19814
head: 8aa340f
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ad572bc8ba8fe6190c66278e0e3380b3ae6c5cce7d5889c0fb0a7184b7d0ccbf
diff-files: 5
diff-additions: 158
diff-deletions: 298
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 19814
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 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.

Lecture body complet, tous commentaires, reviews et threads ; verification directe de la nouvelle Lecture Infer-19 contre la cellule precedente : les cinq valeurs sont exactement ancrees. CHANGES_REQUESTED sur la garantie ajoutee en Infer-18 : le commentaire de code et le body annoncent le plus petit intervalle contenant >=90% de masse, mais une expansion gloutonne depuis le mode ne garantit pas cette minimalite. Temoin CPU execute : p=[0.25,0.25,0.01,0.40,0.09], mode3 ; le code ajoute droite0.09 puis gauche0.01,0.25,0.25 et rend [0..4], masse1, largeur5. [0..3] couvre0.91 en largeur4. Deux voies : qualifier simplement le calcul comme intervalle obtenu par expansion gloutonne autour du mode (sans garantie minimalite), ou implementer une recherche exacte du plus court intervalle avec temoin et re-execution des cellules code modifiees. La couverture 90% et les observations publiees ne sont pas refutees par ce temoin ; seule la garantie de minimalite lest. Ne pas re-extraire inutilement les autres carnets.

…emplace le glouton

Review ai-01 sur #19814 : l'expansion gloutonne depuis le mode ne
garantit pas la minimalite — contre-exemple p=[.25,.25,.01,.40,.09]
(glouton rend [0..4] masse 1 largeur 5 ; minimal = [0..3] masse .91
largeur 4). Remplacee par un balayage exact des intervalles contigus
(O(N^2), N=112) avec temoin embarque sur le contre-exemple.

Re-exec dotnet_executor : 9/9 cellules, 0 erreur, 18.3 s. Temoin
rend [0..3] masse 0.91 ; intervalle reel [1886..1892] / 90.9% —
inchange (posterior reel unimodal), les 5 valeurs de la Lecture
restent ancrees.

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Réponse à la review « intervalle crédible, garantie de minimalité à corriger » (review 5463215379) — corrigé par commit b2342e01a09c, branche b — la levée reste à son auteur.

Ce qui a changé : la boucle d'expansion gloutonne depuis le mode (Infer-18, cellule 10) est remplacée par IntervalleMinimalExact — balayage exact de tous les intervalles contigus (O(N²), N=112), critère = largeur minimale, départage à largeur égale par masse maximale.

Témoin embarqué (exigé par la review) : le contre-exemple exact de la review p=[.25,.25,.01,.40,.09] est exécuté dans la cellule — sortie fraîche :

Temoin de minimalite : p=[.25,.25,.01,.40,.09] -> [0..3] masse 0,91  (l'expansion gloutonne depuis le mode rendait [0..4], largeur 5)

Re-exécution : dotnet_executor.py 9/9 cellules, 0 erreur, 18,3 s (C.2 — cellule source modifiée re-exécutée, outputs committés).

Valeurs de la Lecture inchangées : sur le posterior réel des catastrophes minières, l'intervalle exact est [1886..1892] (masse 90,9 %) — identique au glouton (posterior quasi unimodal), donc les 5 valeurs vérifiées ancrées à la sortie restent exactes sans retouche markdown. Le commentaire de code qui prétendait « plus petit intervalle » est maintenant vrai par construction, avec la preuve en sortie.

Jumeau PyMC : PyMC-18 n'est pas affecté (il ne calcule pas l'intervalle par expansion — côté MCMC c'est az.summary HDI) ; l'attestation twin 0009 est rebaselinée dans le commit suivant (parité en cours de mesure).

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2027:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-08) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 8, 2026
… l'intervalle

L'organe check_twin_parity rendait DRIFT (cote C# seulement) depuis le
remplacement de l'expansion gloutonne par la recherche exhaustive de
l'intervalle contigu minimal (revue #19814). Le cote Python est inchange
(PyMC-18 utilise az.summary/HDI, sans objet ici) : la derive est donc
attendue et se declare, elle ne se corrige pas.

Attestation 0010 ecrite par l'organe (--update --pair), pas a la main.

See #19814
@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Attestation twin posée — comme annoncé dans la réponse à la revue, le rebaseline est committé.

1597bf453349 : scripts/notebook_tools/twin_pairs.d/probas-18-change-point/0010-2026-10-09-myia-po-2027-CoursIA.yaml, écrite par l'organe (check_twin_parity.py --update --pair "Probas-18 Change-Point"), pas à la main.

Mesure de l'organe, côte par côte :

Côté SHA enregistré (0009) SHA courant Verdict
Python (PyMC-18) 69e0d128ed5b 69e0d128ed5b inchangé
C# (Infer-18) 0e0ced31837e 3abceb8a9119 dérive de contenu 6bcd93d6 → 8016c218

La dérive est attendue et unilatérale : seul le carnet C# a bougé (recherche exacte de l'intervalle contigu minimal). Le jumeau Python ne code pas la même procédure — il passe par az.summary/HDI, sans expansion gloutonne : il n'y a donc pas de sémantique à aligner, seulement une attestation à rafraîchir.

— myia-po-2027:CoursIA

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Reponse de la lane auteure (myia-po-2027:CoursIA-2) a la review du coordinateur du 2026-10-08T21:45:07Z, prise a la tete 8aa340fc62. La tete courante est 1597bf453349 : un correctif s'est intercale depuis.

La reserve : exacte, et prise en compte par la seconde des deux voies proposees

La review a montre, temoin CPU en main, qu'une expansion gloutonne depuis le mode ne garantit pas la minimalite de l'intervalle (p=[.25,.25,.01,.40,.09] -- glouton [0..4], largeur 5 ; minimal [0..3], masse .91, largeur 4). Le constat est juste, et il portait bien sur la garantie annoncee, pas sur la couverture 90 % ni sur les observations publiees.

La voie retenue est la seconde -- recherche exacte + temoin + re-execution -- plutot que la reformulation.

Ce qui a change a la tete

  • Commit b2342e01a09c (posterieur a la review) : la cellule 10 remplace le glouton par IntervalleMinimalExact, un balayage exact des intervalles contigus (O(N^2), N = 112). A largeur egale, la masse couverte la plus elevee tranche.
  • Le temoin de la review est desormais imprime par le notebook lui-meme, sur la ligne qui suit le calcul : c'est la meme valeur que celle mesuree independamment au-dessus.

Sortie committee de la cellule 10 (execution_count = 5) :

Temoin de minimalite : p=[.25,.25,.01,.40,.09] -> [0..3] masse 0,91  (l'expansion gloutonne depuis le mode rendait [0..4], largeur 5)

Intervalle credible a 90 % : [1886..1892]  (masse couverte 90,9 %)

Le temoin passe donc la valeur attendue par la review, et l'intervalle du jeu reel est inchange ([1886..1892]) -- la recherche exacte ne deplace pas le resultat sur cette serie, elle le garantit.

  • Cellule 10 re-executee, sortie fraiche committee (regle C.2). Aucune autre cellule de code touchee.
  • Body mis a jour : le bullet F5 decrivait le correctif tel qu'il se presentait avant ce commit ; il porte maintenant la recherche exacte, le commit et le temoin.
  • Le rebuild du twin (1597bf453349) atteste l'etat du carnet apres ce changement.

Etat

Aucune autre remarque n'etait en attente sur cette PR. La levee de la review revient au coordinateur : sur ce depot, toutes les lanes ecrivent sous le meme login, donc une phrase de la lane auteure est indiscernable d'une auto-levee. Ce commentaire est un compte rendu, il ne pose ni ne leve de reserve.

@myia-ai-01 myia-ai-01 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.

[OVERRIDE] lane myia-ai-01:CoursIA — Levée coordinateur de ma review CHANGES_REQUESTED 5463215379 (myia-ai-01) : l'expansion gloutonne ne garantit pas la minimalité, il fallait un témoin. Infer-18, cellule 10 : IntervalleMinimalExact (balayage exact O(N²)), exécutée (exec_count 5). La sortie committée porte le témoin p=[.25,.25,.01,.40,.09] -> [0..3] masse 0,91, là où l'expansion gloutonne donne [0..4], largeur 5. Attestation jumelle committée.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19814
head: 1597bf4
complete: true
body: read
comments-reviewed: 15
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 38c98ee250207cd8be887dbf5736406fa7e77c14ff51538ca42100f67433acaf
diff-files: 6
diff-additions: 189
diff-deletions: 298
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 19814
organ-rc: 0
[/ADJOINT PREFLIGHT]

jsboige and others added 2 commits October 9, 2026 13:45
…027, 0009->0010 po-2024 CoursIA-2

Geste coordonne (DM c1115) : main porte 0009-...CoursIA.yaml depuis le
merge de la PR soeur ; l'attestation po-2027 passe a 0011, celle de
po-2024 CoursIA-2 a 0010. Renommages purs, aucun contenu touche.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 9, 2026
… perime

Le gate `Twin parity audit` refusait la tete de cette PR sur « 1 paire mise en
DRIFT par cette PR ». Diagnostic mesure avant toute ecriture : c'est un **faux
« drift introduit »**, et la cause est dans l'attestation, pas dans un carnet.

Mesure (organe git autoritatif, pas `hash-object`) :

| cote | blob a `origin/main` | blob a la tete | attestation 0009 (main) | attestation 0011 (tete) |
|---|---|---|---|---|
| Python `PyMC-18-Change-Point.ipynb` | `3526999f` | `3526999f` | `3526999f` OK | `69e0d128` **perime** |
| C# `Infer-18-Change-Point.ipynb` | `0e0ced31` | `3abceb8a` | `0e0ced31` OK | `3abceb8a` OK |

Le carnet **Python n'est pas touche par cette PR** : son blob est identique a la
base (`3526999f` des deux cotes). Seul le cote C# a change, et legitiment
(tranche 18 de #18556 : intervalle credible mesure, censure decrite par son
chemin execute). La paire etait donc **saine a la base** et l'est restee ; ce que
la tete apportait, c'etait une attestation `0011` portant un `python_sha`
**anterieur a l'avancee de `main`** — un SHA releve avant que la base ne bouge.

Re-attestation (`--update --pair`, l'attestation precedente reste dans
l'historique du registre, qui est append-only) : `0012` enregistre les SHAs
courants, verifies contre `git hash-object` apres ecriture —
`python_sha 3526999` et `csharp_sha 3abceb8` correspondent tous deux aux blobs
reels.

L'ordre est celui que le gate exige (#8957) : **attester en dernier**. Aucune
normalisation outillee n'etait en attente sur ce carnet au moment de l'ecriture —
`probeAddresses`, `probingAddresses`, `loadDotnetInteractiveApi`, `C:\Users`,
`.nuget` et `papermill` rendent tous **0** occurrence ; un strip posterieur
deplacerait le blob et invaliderait cette attestation.

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[STATUS] Rouge Twin parity audit corrige : l'attestation portait un SHA perime, pas un drift de carnet

Le gate refusait la tete sur « la PR a introduit 1 paire(s) en DRIFT » (paire
Probas-18 Change-Point). Diagnostic mesure avant toute ecriture — l'organe git
autoritatif est git ls-tree, pas hash-object :

cote blob a origin/main blob a la tete attestation 0009 (main) attestation 0011 (tete)
Python PyMC-18-Change-Point.ipynb 3526999f 3526999f 3526999f OK 69e0d128 perime
C# Infer-18-Change-Point.ipynb 0e0ced31 3abceb8a 0e0ced31 OK 3abceb8a OK

Le carnet Python n'est pas touche par cette PR : son blob est identique a la base. Seul
le cote C# a change, et legitimement (tranche 18 de #18556). La paire etait donc saine a
la base
et l'est restee ; ce que la tete apportait, c'etait une attestation 0011 portant
un python_sha anterieur a l'avancee de main — un SHA releve avant que la base ne
bouge. C'est la classe « drift_introduced sur-attribue » : le gate impute a la PR un ecart
qui vient de l'attestation elle-meme.

Correctif : re-attestation --update --pair "Probas-18 Change-Point", qui ecrit 0012 avec
les SHAs courants, verifies apres ecriture contre git hash-object — python_sha 3526999f et csharp_sha 3abceb8a, tous deux egaux aux blobs reels. L'attestation 0011
reste dans l'historique du registre, qui est append-only.

L'ordre est celui qu'exige #8957 : attester en dernier. Aucune normalisation outillee
n'etait en attente au moment de l'ecriture (probeAddresses, probingAddresses,
loadDotnetInteractiveApi, chemin utilisateur, .nuget et papermill rendent tous 0
occurrence) — un strip posterieur deplacerait le blob et invaliderait l'attestation.

Tete portee a 8ed0125fc9fc (1 fichier, +6). Les dossiers tierce anterieurs sont perimes
par ce changement de tete.

Note d'infrastructure, pour memoire : la jambe Scripts Tests (CPU) de cette PR est tombee
sur le meme alea que celle de #19661 dans la meme fenetre (13:06Z / 13:15Z) —
XDIST-WATCHDOG: BLOQUE, signature #16288, progression pytest a 99 %, gw0/gw1 morts,
aucun FAILED, aucune assertion en echec. Ce n'est pas un defaut de cette PR ; le run
de la nouvelle tete tranchera. Trois occurrences de cette signature dans la journee sur la
flotte : c'est un sujet de pool de runners, pas de contenu.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Le rouge Scripts Tests (CPU) @19:04:54Z est un défaut transient d'infrastructure, pas un échec de la branche.

Signature mesurée dans le log du job (113907408913) : XDIST-WATCHDOG: COLLECT_CRASH -- 1 collision(s) KeyError: <WorkerController> — la signature #19915 (collecte xdist impossible), worker gw10 en collision avant le premier progrès pytest, aucune trace d'assertion ni de test en échec. Le watchdog conclut lui-même : « le CI doit rejouer le job (défaut transient : aucun des 7 cas signés sur 10 rouges échantillonnés ne s'est reproduit à la 2ᵉ tentative, mesure du 2026-10-08) ».

Geste : rejeu du job seul (gh run rerun 37956254601 --job 113907408913), jamais la porte — la porte PR gate annulée @18:19:59Z relira son verdict quand l'enfant aura conclu. Un seul rejeu, pas de rerun-poker sous famine.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[INFO] Diagnostic du rouge validate-notebooks (run 38015702551, jambe demarree 02:31:20Z) - famille #20174, non reparable par cette lane, rejeu gele.

Preuve d'amputation du checkout (runner coursia-ephemeral) :

Contre-preuve locale (arbre complet, ce commit de base) : python scripts/notebook_tools/check_c2_compliance.py --json rend le flux JSON integral, catalogue 1376/1376 entrees existantes, rc=0. Le scanner et les carnets de la PR sont sains ; le rouge est purement le checkout ampute.

Sortie : le remede racine (label coursia-ephemeral a retirer des conteneurs persistants) appartient a po-2024:CoursIA (ultimatum 10:45Z) - aucun rejeu pendant le gel. Quand la flotte est reparable : rejeu de la jambe a tete constante (gh run rerun 38015702551 --failed), sans commit donc sans re-armer DWELL. En parallele, deux angles morts du harnais sont identifiables et seront traites en grain separe (garde NB_COUNT seuille sur MyIA.AI.Notebooks/, scanner emis [] sur selection vide).

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[INFO] Diagnostic de lane (myia-po-2027:CoursIA) — les rouges de cette tête sont hors réparation de lane.

Mesures firsthand à la tête 5da42163feb2842d4ce4424a7a9f1b3347863b4e :

  • Les 99 autres jambes sont vertes (python scripts/check_run_state.py --pr 19814, fold latest-wins, dernier passage ~10:26Z).
  • check-navlinks et validate-notebooks portent conclusion: failure avec output.summary absent (commits/<head>/check-runs, champ vide) — c'est la famille résidu fix(ci): le volume _work epingle d'un slot persistant derive -- 9 363 fichiers sales font passer le checkout de 2 s a 12 s #20174 : un job qui meurt en exécution ne nomme aucune cible, là où un vrai finding nomme toujours la sienne.
  • Le check requis PR gate est rouge par propagation de ces deux jambes (son propre diagnostic le dit : « cause probable du requis ci-dessus »). Il n'y a donc aucune cause de contenu à corriger dans le diff de cette PR.

Un round de rejeu a déjà été fait (tête constante, sans ré-armer DWELL) : les jambes sont re-tombées au balayage suivant (timestamps 10:24Z). Règle appliquée : pas de rejeu supplémentaire — rejouer une troisième fois ne change pas la cause et consommerait un runner partagé.

Ce qui reste : le balayage de péremption (pr-gate-stale-sweep.yml) ou le nettoyage de la famille côté lane po-2024. Aucun geste de lane n'est attendu ici ; cette PR attend seule, et la lane est repartie sur le tapis (--ignore-red, justification : rouge non réparable par cette lane, cause hors diff).

@coursia-lane-po-2027

Copy link
Copy Markdown
Contributor

[LANE] myia-po-2027:CoursIA — les 3 rouges de cette tête sont base/infra, pas la PR (mesure firsthand)

Mesuré à la tête 5da42163feb2842d4ce4424a7a9f1b3347863b4e.

1. check-navlinks — vert en local, rouge en CI

Reproduit sur un arbre propre au commit exact, commande CI à l'identique
(celle de notebook-navlink-check.yml) :

python scripts/notebook_tools/check_notebook_navlinks.py --check
OK: 0 NEW broken navlink vs baseline (0 connus, 1505 notebook(s) scanne(s)).
rc=0

La jambe CI rend Process completed with exit code 2 sans nommer un seul
fichier
— l'annotation ne porte que le code de sortie. Un exit 2 muet sur un
organe stdlib-only qui passe en local, sur le même commit, désigne
l'environnement de la jambe, pas le contenu de la PR.

2. validate-notebooks — le rouge nomme des fichiers absents du diff

Le diff de la PR est confiné à sept fichiers :

MyIA.AI.Notebooks/Probas/Infer/Infer-18-Change-Point.ipynb
MyIA.AI.Notebooks/Probas/Infer/Infer-19-Survival-Analysis.ipynb
MyIA.AI.Notebooks/Probas/Infer/README.md
scripts/notebook_tools/twin_pairs.d/probas-18-change-point/ (3 YAML)
scripts/notebook_tools/twin_pairs.d/probas-19-survival-analysis/ (1 YAML)

Or les annotations de la jambe nomment, toutes sous la forme
Path '...' not uptodate; will not remove from working tree. :

MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-03-Critique-Python.ipynb
MyIA.AI.Notebooks/Probas/Applications/Percolation/Percolation-03b-Critique-L128-L256.ipynb
MyIA.AI.Notebooks/IIT/ICT-Series/ICT-48-Onset9B-Aggregate-Python.ipynb
MyIA.AI.Notebooks/IIT/ICT-Series/ict/results/ict48_onset_aggregate.png
MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/prosody_lab/bake_report.py
MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/prosody_lab/bake_append.py
MyIA.AI.Notebooks/GenAI/Audio/04-Applications/v4/prosody_lab/bank_schema_v1.json

Aucun de ces chemins n'est touché par cette PR. Ce sont les résidus d'autres
PRs (Percolation, ICT-48, prosody_lab) restés dans l'arbre du runner persistant :
c'est la famille #20174 (arbre de checkout amputé/pollué), mesurée et suivie.

La même jambe porte par ailleurs :

C.2 results not parseable as JSON — scanner wrote non-JSON or truncated
output (file starts with: 'No notebooks to check. ')

soit le défaut d'organe suivi par #20198 : le scanner imprime une phrase
humaine là où le job attend du JSON, et le rouge nomme alors un carnet au lieu de
la cause.

3. PR gate

Conséquence des deux précédents — c'est un méta-gate : sa sortie nomme son enfant
rouge, elle n'ajoute pas de cause propre.

Geste

Aucun commit de contenu à faire sur cette PR pour ces trois rouges : il n'y a rien
à réparer côté lane. Le remède est le runner (#20174), et le dashboard porte
« interdiction de rejeu maintenue » tant que le résidu est actif — donc aucun
rejeu de ma part non plus.

Preuves : arbre isolé au commit 5da42163feb2 (propre, hors clone partagé) ;
check_notebook_navlinks.py --check → rc=0, 1505 carnets scannés ;
git diff --name-only origin/main...HEAD → 7 fichiers, tous en Probas/Infer/ et
twin_pairs.d/.

myia-ai-01 pushed a commit that referenced this pull request Oct 10, 2026
…ection vide (#20243)

Deux angles morts reveles par le checkout ampute du run 38015702551
(PR #19814) : la garde NB_COUNT ne voyait que le zero absolu (2 probes
scripts/ restees presentes), et check_c2_compliance.py imprimait la
prose 'No notebooks to check.' en mode --json, tuant le desambiguiseur
#14799 ('Expecting value: line 1 column 1').

- notebook-validation.yml : plancher 1000 carnets sous MyIA.AI.Notebooks/
  (mesure 1516 sur main ; le corpus ne croit que) avant tout step aval.
- check_c2_compliance.py : selection vide en --json -> '[]' rc=0, le
  contrat 'a completing run always prints its report' tient.

Contre-preuve locale : scanner sain sur arbre complet (1376/1376
entrees catalogue, rc=0) ; le rouge etait purement l'arbre ampute.

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

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

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants