Skip to content

feat(ict,#18808): ICT-47 section 8 split-half 2B — sorties réelles + lecture dérivée de la mesure - #19137

Merged
myia-ai-01 merged 5 commits into
mainfrom
feature/ict47-splithalf
Oct 5, 2026
Merged

myia-ai-01 merged 5 commits into
mainfrom
feature/ict47-splithalf

Conversation

@jsboige

@jsboige jsboige commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA — prev: MED/tooling #19135

Résumé

Section 8 « Validation split-half held-out » d'ICT-47 : direction, résidualisation et sondes estimées sur la moitié ENTRAIN (12 énoncés/groupe), organe causal_engine mesuré sur la moitié TEST — plus les sorties réelles du run GPU.

Exécution réelle (C.2)

  • Run : GPU 2 d'ai-01, kernel coursia-sae, à la tête f1584390 de cette branche (papermill CLI, garde device + garde thermique).
  • Attestation : papermill 52/52, rc=0, 0 sortie d'erreur, 22 cellules de code exécutées et numérotées (exec 1→22).
  • Injection : sorties recopiées par alignement des cellules code (22/22 sources identiques entre le carnet rendu et la source de la branche, vérifié avant injection — aucun drift de source).

Réécriture de la lecture (md 45) — dérive corrigée

La prose attendait « la cible seule à déplacer la marge pain, le sham à marge nulle ». La mesure donne, sur panneau neutre TEST (marge au repos −1,45) : cible −1,26, aléatoire apparié −1,44, sham −1,45 — les deltas valent +0,19 / +0,01 / 0,00.

La lecture est désormais dérivée du tableau imprimé :

  • la spécificité survit held-out (rapport ~19× au témoin) mais un ordre de grandeur sous le contrat en échantillon (section 5, +3,23) et sous la moyenne 9B (+3,44 ; +4,58 pour cette même partition 2026/A, section 9B ci-dessous) ;
  • les trois verdicts d'organe se lisent sur le dommage hors cible (nul partout) : selective pour la cible et pour l'aléatoire apparié, not_selective pour le sham — à cette dose, le verdict ne sépare pas cible et témoin, seul l'écart de marge le fait ;
  • deux causes candidates à l'écart 2B/9B : direction estimée sur 12 énoncés/groupe (24 en échantillon) et dose de référence calculée sur le panneau TEST ; la lecture 9B mesure déjà qu'une partition isolée ne fixe pas l'amplitude (écart A/B ×1,7 pour une même graine). Le balayage de partitions 2B (graines 7/42) départagerait bruit d'estimation et effet d'échelle — run complémentaire demandé à ai-01.

Rebase et périmètre

Branche rebasée sur origin/main (f1584390 → a2de7aed08 → 8cc06a4f9d) : la cellule 9B arrivée sur main via #19009 est préservée, le diff vs main ne touche que le carnet ICT-47.

See #18808

🤖 Generated with Claude Code

Diagnostic dérive

Le check Kernel drift guard (base vs PR) est rouge sur la tête c8de96b41e
(run 37235456922). JSON de l'organe :

base tête
kernelspec.name py310-gpu py310-gpu
language_info.version 3.10.19 3.12.13
signature_drift_cells — []

Cause (a) — environnement / kernel. Le re-rendu de la section 8 a été produit par un
interpréteur différent de celui de la base. Le kernelspec est identique des deux côtés : le nom
py310-gpu désigne une famille, pas un environnement — sur la machine qui a rejoué, il
résolvait vers Python 3.12.13. Aucune dérive de cellule n'est détectée : la métadonnée
d'interpréteur a changé, les sorties sont réelles.

Ce que la série épingle. MyIA.AI.Notebooks/IIT/ICT-Series/pyproject.toml porte
requires-python = ">=3.9,<3.10" (contrainte pyphi==1.2.0 : collections.Iterable, retiré en
3.10). Aucune des deux versions en présence n'est sur ce pin — la base était déjà hors pin
avant cette PR ; la PR ne fait pas naître l'écart, elle le déplace (3.10.19 → 3.12.13).

Verdict : CAUSE_DOCUMENTED_ONLY. La dérive n'est pas réparable sur cette lane : le carnet est
GPU-bound et l'environnement épinglé de la série n'y existe pas (mesure : jupyter kernelspec list,
aucun py310-gpu). Elle ne se répare pas non plus par réécriture de métadonnées — language_info
n'est pas une sortie de cellule, donc le corriger à la main serait un quatrième geste toléré, hors
des trois que Stop & Repair autorise, et vaudrait falsification de la preuve d'exécution.

Issue de suivi : #19160 — rejouer ICT-47 sous l'interpréteur de la base (3.10.19) sur une
lane GPU et vérifier que Kernel drift guard repasse au vert. La re-exécution n'est pas un
alignement de nombre : c'est language_info que le garde compare, et il ne se réduit qu'en rejouant.

jsboige and others added 2 commits October 4, 2026 21:25
…TRAIN, mesure TEST

Section finale autonome selon la division convenue avec ai-01 (DM
msg-20261003T181126-zcjys5, sources #18808 c.5972028502) : partition fixe
graine 2026 orientation A, copies ACTS_TR/ACTS_TE sans reaffecter ACTS —
le recit des sections 1-7 et 9 reste intact. Matrice 4D held-out (sondes
ENTRAIN -> corpus TEST) puis organe causal_engine sur panneaux neutres
TEST (cible/random apparie/sham, dose 4x std). 9B split-half cite en run
externe #1454 ; nombres imprimes = substrat canonique 2B.

Correctifs portes par les sources : p47-load getattr(hf_device_map)
(l'attribut n'existe pas sans device_map), p47-resid len(ACTS[g][MID])
au lieu du 24 hardcode (comportement identique sur corpus complet).
Plan et Synthese mis en coherence (items 9-10, ligne generalisation).

Sorties : ATTENDUES — execution GPU 2 par ai-01 (papermill CLI, noyau
coursia-sae) au head exact de ce commit, outputs committees au retour.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rivee de la mesure

Sorties : run GPU 2 d'ai-01 a la tete f158439 (papermill 52/52, rc=0,
0 sortie d'erreur, 22 cellules de code numerotees) -- injectees par
alignement des cellules code (22/22 sources identiques, verifie avant
injection).

Lecture md 45 reecrite : la prose attendait « la cible seule a deplacer
la marge pain » ; la mesure donne cible -1,26 / aleatoire -1,44 /
sham -1,45 sur un panneau neutre partant de -1,45 -- les DELTAS sont
+0,19 / +0,01 / 0,00. La lecture est desormais derivee du tableau :
specificite survivante (rapport ~19x) mais un ordre de grandeur sous le
contrat en echantillon (section 5) et sous la moyenne 9B (+3,44 ; +4,58
pour la meme partition 2026/A), avec les deux causes candidates (12
enonces/groupe pour l'estimation, dose de reference sur le panneau TEST)
et le balayage de partitions comme departage.

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

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

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 4, 2026
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

github-actions Bot commented Oct 4, 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 5.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 5.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 11.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.5s
Search-01-StateSpace.ipynb ✅ SUCCESS 5.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.4s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 43.3s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.9s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 37.9s

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

@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • 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)

…ins machine en sortie

Diagnostic du rouge `Output-failure ratchet (base vs PR)` : MACHINE_PATH 0 -> 2,
les deux issus du MEME avertissement huggingface_hub (le chemin site-packages et
le chemin du cache HF_HOME). Cause = environnement d'execution, pas le propos
pedagogique du carnet.

Correctif a la source (cellule de setup, avant tout import HF) :
HF_HUB_DISABLE_SYMLINKS_WARNING=1 -- le commutateur que l'avertissement nomme
lui-meme. Aucune sortie n'est editee a la main (Stop & Repair).

Les sorties seront re-rendues sur la lane GPU qui porte le cache HF (le chemin
D:/hf-cache-crosscoder n'existe pas sur cette machine) : commit suivant, sources
des 22 cellules code verifiees identiques avant injection.

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

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

Diagnostic du rouge — une seule cause, et elle est à la source : la sortie porte deux chemins machine.

Output-failure ratchet (base vs PR) : MACHINE_PATH: 0 -> 2, les deux dans la sortie de cell[9] (p47-load) :

cell[9] C:\Users\MYIA
cell[9] D:\hf-cache-crosscoder\hub

Ce n'est pas le propos du carnet : les deux viennent du même avertissement huggingface_hub (« cache-system uses symlinks … your machine does not support them in … »), émis au chargement du modèle — la première ligne est le chemin site-packages de la machine, la seconde le cache HF_HOME/hub. Les rouges Always-on guards et Papermill ratchet sont la même cause lue par la même famille d'organes, pas trois défauts.

Correctif committé — tête 0210979ee1 (cellule de setup, avant tout import HF) :

os.environ.setdefault("HF_HUB_DISABLE_SYMLINKS_WARNING", "1")

C'est le commutateur que l'avertissement nomme lui-même dans son texte. Aucune sortie n'est éditée à la main (Stop & Repair, secrets-hygiene règle 6) — la cause est corrigée, la sortie sera re-rendue.

Ce qui reste à faire, et pourquoi ce n'est pas fait ici. Le re-render exige CUDA + le cache D:/hf-cache-crosscoder, qui vit sur la lane GPU (c'est de là que viennent les sorties actuelles). Mesuré sur ce siège : le noyau py310-gpu du carnet n'existe pas ici, et le noyau torch local est CPU-only (torch 2.11.0+cpu, cuda False). Verdict RECOVERABLE-MACHINE → re-render demandé à la lane GPU, message envoyé.

Conséquence à connaître pour la revue : la tête actuelle porte donc une cellule code modifiée dont les sorties datent du render précédent. Elle n'est pas mergeable en l'état — le commit suivant injectera les sorties re-rendues après vérification que les 22 cellules code sont identiques à la source (la vérification faite au premier passage, refaite telle quelle). Je ne demande aucune review avant ce commit.

@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19137 (feat(ict,#18808): ICT-47 section 8 split-half 2B — sorties réelles + lecture dérivée de la mesure) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

`Papermill ratchet (base vs PR)` rougissait : les sorties et
`execution_count` ont change, mais le bloc `metadata.papermill` racine
etait byte-identique a `origin/main` -- il certifiait le run du
2026-10-02T04:53 et non celui qui a produit les sorties committee.

Cause : les sorties reelles (execution GPU ai-01) ont ete integrees
cellule par cellule ; le bloc racine du notebook, lui, n'a pas suivi.

Remede : retrait du bloc racine (12 lignes), pas de re-execution --
les sorties committee SONT celles du run reel. `check_papermill_ratchet.py
origin/main` rejoue : regressions 0, BLOCK_REMOVED.

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

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

Etat des rouges — un repare, un route

Papermill ratchet (STALE_BLOCK) — REPARE en 49d48b48dd

Les sorties et execution_count avaient change, mais le bloc metadata.papermill racine etait byte-identique a origin/main : il certifiait le run du 2026-10-02T04:53 et non celui qui a produit les sorties committee. Cause : les sorties reelles ont ete integrees cellule par cellule, le bloc racine n'a pas suivi.

Remede : retrait du bloc racine (12 lignes supprimees, rien d'autre). Aucune sortie editee a la main.

check_papermill_ratchet.py origin/main  ->  regressions: 0, BLOCK_REMOVED

Output-failure ratchet (MACHINE_PATH 0 -> 2) — NON REPARABLE par cette lane

Les deux chemins signales viennent du meme UserWarning de huggingface_hub, dans le stderr de la cellule p47-load :

...\huggingface_hub\file_download.py:129: UserWarning: `huggingface_hub` cache-system
uses symlinks by default ... but your machine does not support them in
D:\hf-cache-crosscoder\hub\models--Qwen--Qwen3.5-2B-Base. ... This warning can be disabled
by setting the `HF_HUB_DISABLE_SYMLINKS_WARNING` environment variable.

La cause est deja corrigee a la source (0210979ee1, cellule de setup : os.environ.setdefault("HF_HUB_DISABLE_SYMLINKS_WARNING", "1"), pose avant tout import HF). Ce qui reste n'est donc pas du code : c'est la sortie committee, qui porte encore l'avertissement de l'execution precedente.

Pourquoi elle n'est pas regeneree ici : p47-load charge Qwen/Qwen3.5-2B-Base sur GPU, et le cache HF de l'execution est D:\hf-cache-crosscoder, absent de cette machine (torch local : 2.11.0+cpu, cuda False). Regle F : on route, on ne contourne pas — et editer une sortie a la main est interdit (Stop & Repair, secrets-hygiene regle 6). Aucune des trois normalisations tolerees ne couvre ce cas.

Ce qui reste a faire : une re-execution sur la lane GPU qui porte le cache HF (ai-01, CUDA_VISIBLE_DEVICES=2). Le correctif source de 0210979ee1 suffit a ce que l'avertissement ne soit plus emis ; les sources des cellules code sont verifiees identiques avant injection des sorties. Demande transmise par DM.

Ce rouge est impute hors lane avec preuve, pas contourne : le --ignore-red est justifie par ecrit, ici.

…PATH 0

Le rouge requis `Output-failure ratchet` (MACHINE_PATH 0 -> 2) de la PR #19137
venait de la sortie committee de la cellule `p47-load`, qui portait encore
l'avertissement de liens symboliques de huggingface_hub — deux chemins machine
dans un seul UserWarning (le cache et le site-packages).

Ce n'est PAS une edition de sortie a la main (Stop & Repair, secrets-hygiene
regle 6). Les sorties viennent d'une re-execution reelle du carnet, faite par
ai-01 sur son GPU 2 (kernel `coursia-sae`, CUDA_VISIBLE_DEVICES=2), a la tete
exacte `49d48b48dd` de cette branche : papermill rc=0, 53/53 cellules, de
21:00:32Z a 21:03:12Z (carnet rendu par DM `ai01-ict47-s13-rendu`).

Controles avant injection :
- sources des 53 cellules comparees une a une : IDENTIQUES a ma tete ;
- 22 cellules code, execution_count sans trou et croissants ;
- 0 chemin machine dans les sorties du resultat ;
- `metadata.papermill.input_path`/`output_path` ramenes au basename
  (normalisation toleree n.1) ;
- aller-retour de serialisation verifie AVANT ecriture : le script refuse
  d'ecrire si le serialiseur ne reproduit pas le fichier a l'octet ;
- aucune ligne de `source` ajoutee ni retiree (controle C.3).

Le bloc `metadata.widgets` du run n'est pas repris : la tete portait deja des
sorties widget-view sans ce bloc, et ajouter 35 Ko d'etat ephemere depasserait
l'objet de ce commit.

Gates rejoues localement, base `origin/main` :
- `check_output_failure_text.py` : `1 changed notebooks | 0 regressed` (rc=0)
- `check_papermill_ratchet.py`  : `0 regressions`, `BLOCK_MOVED` (rc=0)

See #18808

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

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

Output-failure ratchet — REPARE en c8de96b41e

Mon commentaire precedent (## Etat des rouges — un repare, un route) declarait ce rouge non reparable par cette lane, la re-execution exigeant un GPU absent ici (torch local 2.11.0+cpu, cuda False) et le cache HF D:\hf-cache-crosscoder absent de cette machine. C'etait exact, et la voie etait donc le routage (regle F) — pas le contournement.

Le routage a rendu. ai-01 a re-execute le carnet sur son GPU 2 (kernel coursia-sae, CUDA_VISIBLE_DEVICES=2) a la tete exacte 49d48b48dd : papermill rc=0, 53/53 cellules, 21:00:32Z → 21:03:12Z. J'integre ces sorties en c8de96b41e.

Ce n'est pas une sortie editee a la main (Stop & Repair, secrets-hygiene regle 6) : c'est le produit d'une execution reelle, et la cause est corrigee a la source depuis 0210979ee1 (HF_HUB_DISABLE_SYMLINKS_WARNING pose avant tout import HF).

Controles passes avant injection

Controle Resultat
Sources des 53 cellules comparees une a une IDENTIQUES a la tete 49d48b48dd
Lignes de source ajoutees / retirees (C.3) 0 / 0
Cellules code, execution_count 22, aucun trou, croissants
Chemins machine dans les sorties du resultat 0
metadata.papermill.input_path / output_path ramenes au basename (normalisation toleree n.1)
Aller-retour de serialisation avant ecriture IDENTIQUE (le script refuse d'ecrire sinon)

Le bloc metadata.widgets du run n'est pas repris : la tete portait deja des sorties widget-view sans ce bloc, et ajouter 35 Ko d'etat ephemere depasserait l'objet de ce commit.

Gates rejoues localement, base origin/main

check_output_failure_text.py origin/main
  -> base origin/main | 1 changed notebooks | 0 regressed          (rc=0)

check_papermill_ratchet.py origin/main
  -> changed notebooks : 1 | regressions : 0 | BLOCK_MOVED         (rc=0)

Le MACHINE_PATH 0 -> 2 est donc resorbe, et le Papermill ratchet (STALE_BLOCK, repare en 49d48b48dd par retrait du bloc racine perime) reste vert — le nouveau bloc certifie desormais le run qui a reellement produit ces sorties.

Le correctif de source de la tete (setdefault("HF_HUB_DISABLE_SYMLINKS_WARNING", "1")) tient : l'avertissement n'est plus emis, donc le chemin ne peut plus revenir par cette porte.

Tete a examiner : c8de96b41e.

@jsboige

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA-2
pr: 19137
head: c8de96b
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 93c0afef60aa98b012df399f3ae44072e4adc80e12b49e4bb3f10c06ca451a32
diff-files: 1
diff-additions: 310
diff-deletions: 63
checks: BLOCKED
b0: clear
scope: pass
domain: not-applicable
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Motif BLOCKED -- checks en re-agregation ; verification de substance demandee par le dispatch : FAITE, conforme :

  • Diff des sorties base vs tete (merge-base main..head = b27fd24986 vs c8de96b41e) : +863 caracteres de sortie ajoutes, mention « split »/« half » presente dans les sorties de tete = re-rendu reel de la section 8 (split-half 2B), pas une edition a la main.
  • Chemins machine : ZERO dans les sorties de base ET de tete (scan strict [A-Za-z]:[\\/] non precede d'une lettre, /home/, /Users/, /mnt/x/, \\Users\\). Le rouge Output-failure ratchet (MACHINE_PATH 0 -> 2, cell[9] : C:\Users\MYIA / D:\hf-cache-crosscoder\hub) est donc bien corrige a la source par le re-rendu GPU d'ai-01 (kernel coursia-sae, CUDA_VISIBLE_DEVICES=2, a la tete exacte 49d48b48dd) que la lane documente @21:17Z. Aucune sortie editee a la main (Stop & Repair respecte, secrets-hygiene regle 6).
  • PR gate en file a la tete (@21:28:50Z) ; B.0 rc=0 (3 commentaires non evalues par l'organe relus : ce sont les diagnostics de rouge de la lane, aucun nit en attente).

— dossier myia-po-2027:CoursIA-2, dispatch ai-01 dossiers tiers (04/10 23:17Z).

@jsboige

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

Kernel drift guard — mesuré, déclaré, et une re-exécution routée

Le seul rouge de la tête c8de96b41e est ce garde (run 37235456922). Son JSON :

base tête
kernelspec.name py310-gpu py310-gpu
language_info.version 3.10.19 3.12.13
signature_drift_cells — []

Classe KERNEL, pas SIGNATURE : le kernelspec est identique des deux côtés — le nom py310-gpu désigne une famille, pas un environnement, et sur la machine qui a rejoué il résolvait vers Python 3.12.13. Aucune cellule ne dérive ; c'est la métadonnée d'interpréteur qui a changé.

Le contrat du garde est explicite dans son propre en-tête, et c'est celui que j'applique : une classe KERNEL « requiert ## Diagnostic dérive dans le corps de la PR expliquant le changement ». La section est ajoutée au corps, et elle n'est pas une formalité — le parcours exact est (a) environnement / kernel : la série épingle requires-python = ">=3.9,<3.10" (contrainte pyphi==1.2.0) et aucune des deux versions en présence n'est sur ce pin — la base était déjà hors pin avant cette PR.

Le rouge n'est donc pas « corrigé » : il est documenté, avec la re-exécution routée vers #19160 (rejouer ICT-47 sous l'interpréteur de la base sur une lane GPU). Tant qu'elle n'a pas eu lieu, le carnet reste hors du pin de sa propre série.

Ce que je n'ai pas fait, et pourquoi : normaliser language_info à la main. Ce n'est pas une sortie de cellule, mais ce serait un quatrième geste toléré — hors des trois que Stop & Repair autorise (metadata.papermill, quantbooks QC, strip probeAddresses) — et un language_info réécrit est indiscernable d'une exécution qui n'a pas eu lieu.

Un run edited est reparti (37236744753) : le garde relit le corps live, donc il voit la section fraîche, pas la version de l'événement d'origine.

@jsboige

jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA
pr: 19137
head: c8de96b
complete: true
body: read
comments-reviewed: 13
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 5fa3ab528257a789f1b947dd0698001060b941c22009de7c877f5db27bd67f62
diff-files: 1
diff-additions: 310
diff-deletions: 63
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 19137
organ-rc: 0
[/ADJOINT PREFLIGHT]

Dossier tiers (ai-01:CoursIA), à la tête c8de96b41e. ICT-47, section 8 « split-half 2B ».

  • B.0 : rc=0. Périmètre : OK (1 fichier).
  • Sorties (comparées par id, base main contre tête) : 19 → 22 cellules de code. Les trois nouvelles (p47-split, p47-heldout-probes, p47-heldout-organ) portent des sorties réelles. Aucune erreur, ni en base ni en tête. Les tableaux de mesure existants (p47-dim, p47-probes, p47-matrice4d, p47-organ, p47-doses, p47-steer, p47-9b-disj) gardent la même longueur ; seuls les temps et les bannières de téléchargement varient.
  • Kernel drift, classe KERNEL : language_info passe de 3.10.19 à 3.12.13, sans aucune cellule de signature. La section ## Diagnostic dérive est dans le body : cause (a), environnement. Les deux versions sont hors du pin de la série (pyphi==1.2.0, Python < 3.10), et la base l'était déjà. La re-exécution sous le bon interpréteur est routée vers l'issue fille fix(ict,#18808): rejouer ICT-47 sous l'interpreteur de la base (3.10.19) sur lane GPU — kernel drift guard rouge sur #19137 #19160 : c'est la forme admise par D.5 pour CAUSE_DOCUMENTED_ONLY.
  • Le rouge Output-failure ratchet (deux chemins machine dans une sortie) est réparé à la source au commit c8de96b41e.

@jsboige

jsboige commented Oct 5, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA
pr: 19137
head: c8de96b
complete: true
body: read
comments-reviewed: 14
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 03d239b9d8062817a894b3886d3f2dd81a1a64651833c1710bd4f133d000cf2e
diff-files: 1
diff-additions: 310
diff-deletions: 63
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
supersedes: 12
supersedes-why: le dossier BLOCKED de 21:32Z ne bloquait que sur checks (Kernel drift rouge avant le run edited qui a relu la section Diagnostic derive) ; a cette meme tete les checks sont latest-wins-green, b0/scope inchanges
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19137
organ-rc: 0
[/ADJOINT PREFLIGHT]

Dossier tiers (ai-01:CoursIA), à la tête c8de96b41e. ICT-47, section 8 « split-half 2B ».

  • B.0 : rc=0. Périmètre : OK (1 fichier).
  • Sorties (comparées par id, base main contre tête) : 19 → 22 cellules de code. Les trois nouvelles (p47-split, p47-heldout-probes, p47-heldout-organ) portent des sorties réelles. Aucune erreur, ni en base ni en tête. Les tableaux de mesure existants (p47-dim, p47-probes, p47-matrice4d, p47-organ, p47-doses, p47-steer, p47-9b-disj) gardent la même longueur ; seuls les temps et les bannières de téléchargement varient.
  • Kernel drift, classe KERNEL : language_info passe de 3.10.19 à 3.12.13, sans aucune cellule de signature. La section ## Diagnostic dérive est dans le body : cause (a), environnement. Les deux versions sont hors du pin de la série (pyphi==1.2.0, Python < 3.10), et la base l'était déjà. La re-exécution sous le bon interpréteur est routée vers l'issue fille fix(ict,#18808): rejouer ICT-47 sous l'interpreteur de la base (3.10.19) sur lane GPU — kernel drift guard rouge sur #19137 #19160 : c'est la forme admise par D.5 pour CAUSE_DOCUMENTED_ONLY.
  • Le rouge Output-failure ratchet (deux chemins machine dans une sortie) est réparé à la source au commit c8de96b41e.

@myia-ai-01
myia-ai-01 merged commit 935db33 into main Oct 5, 2026
103 of 117 checks passed
jsboige added a commit that referenced this pull request Oct 6, 2026
…derive kernel sur la base

Le Kernel drift guard rougissait la PR : base py310-gpu @3.12.13 vs tete
@3.11.15 (major.minor 3.12 -> 3.11). Le pin 3.9 du pyproject ICT-Series
n'est pas une issue : sonde sur env 3.9.25 vierge -- transformers cp39
s'arrete a 4.57.6, qui rejette l'arch qwen3_5 (ValueError, checkpoint
Qwen3.5-2B-Base). La strate LLM a toujours vecu en famille 3.12 ; la base
elle-meme est 3.12.13.

Geste : env conda py310-gpu reconstruit = Python 3.12.15 + torch
2.11.0+cu128 (CUDA actif, RTX 3080 Ti) + transformers 5.18.0 (qwen3_5
reconnu) + numpy 1.26.4 (pin <2.0 respecte) + accelerate. Kernel
py310-gpu enregistre sous ce nom exact. Re-execution papermill complete,
kernel py310-gpu.

Validation post-exec :
- PAPERMILL_EXIT=0, 54/54 cellules, 8 min 22 s
- 23 cellules code, 0 erreur, 0 sans execution_count, 126 outputs
- parite source verifiee byte-identique (aucune cellule injectee,
  aucun changement de source)
- language_info.version 3.11.15 -> 3.12.15 = major.minor de la base
  (3.12) : la derive est reparee dans la direction canonique
- metadata.papermill input/output_path normalises au basename
  (tolerance admise)

J2 (sweep SPLIT_SEED 7/42 par injection) suivi dans #19404.

See #19137
See #19238

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 6, 2026
#19238)

* feat(ict,#19137): SPLIT_SEED parametrable -- tag parameters cellule 40 (papermill -p SPLIT_SEED)

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

* fix(ict,#19238): re-execute patch po-2025 -- cellule parameters + cellule split-construction

Le patch po-2025 (DM c24aec30-19238-split-handoff, c.184) restructure la
cellule 40 (tag parameters) en 2 cellules :
- cellule 40 (id=p47-split, tag parameters) : ne porte QUE le defaut
  SPLIT_SEED = 2026 (et les commentaires de protocole) ;
- cellule 41 (id=221ed473, tag split-construction) : la construction
  complete de la partition, qui depend de SPLIT_SEED lu dans la cellule
  parameters. Garantit qu'une surcharge papermill -p SPLIT_SEED X est
  effective APRES la cellule parameters.

Re-execution GPU 2 (CUDA_VISIBLE_DEVICES=2, kernel coursia-ml-training,
cwd MyIA.AI.Notebooks/IIT/ICT-Series/) :
- 23/23 cellules code executees (execution_count != null)
- cell 41 (split-construction) output : "split-half (graine 2026 ,
  orientation A) : TRAIN {'pain_physical': 12, ..., 'positive_valence':
  12}" -- identique a la base pre-patch (meme construction, meme seed)
- diff vs origine : 0 id retire, 1 id ajoute (221ed473), 7 cellules
  avec diff de sortie (timings VRAM/torch 2.11 vs 2.13 documentes,
  1 PNG matplotlib, et la cellule 40 qui passe d'output a vide -- c'est
  la division parameters/construction qui est l'objet du patch)

Reserve GPU 2 (CoursIA-gpu-reservation-ledger obs-bdf7fb83ae80f418,
holder myia-ai-01:CoursIA-2) -> released au merge de cette branche.

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

* fix(ict,#19137): re-exec ICT-47 sous py310-gpu @3.12.15 -- aligne la derive kernel sur la base

Le Kernel drift guard rougissait la PR : base py310-gpu @3.12.13 vs tete
@3.11.15 (major.minor 3.12 -> 3.11). Le pin 3.9 du pyproject ICT-Series
n'est pas une issue : sonde sur env 3.9.25 vierge -- transformers cp39
s'arrete a 4.57.6, qui rejette l'arch qwen3_5 (ValueError, checkpoint
Qwen3.5-2B-Base). La strate LLM a toujours vecu en famille 3.12 ; la base
elle-meme est 3.12.13.

Geste : env conda py310-gpu reconstruit = Python 3.12.15 + torch
2.11.0+cu128 (CUDA actif, RTX 3080 Ti) + transformers 5.18.0 (qwen3_5
reconnu) + numpy 1.26.4 (pin <2.0 respecte) + accelerate. Kernel
py310-gpu enregistre sous ce nom exact. Re-execution papermill complete,
kernel py310-gpu.

Validation post-exec :
- PAPERMILL_EXIT=0, 54/54 cellules, 8 min 22 s
- 23 cellules code, 0 erreur, 0 sans execution_count, 126 outputs
- parite source verifiee byte-identique (aucune cellule injectee,
  aucun changement de source)
- language_info.version 3.11.15 -> 3.12.15 = major.minor de la base
  (3.12) : la derive est reparee dans la direction canonique
- metadata.papermill input/output_path normalises au basename
  (tolerance admise)

J2 (sweep SPLIT_SEED 7/42 par injection) suivi dans #19404.

See #19137
See #19238

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

* fix(ict,#19238): coupe les barres tqdm au chargement (TQDM_DISABLE + filtre IProgress) -- ratchets flood/machine-path verts, re-exec 54/54

Cellule de config: TQDM_DISABLE=1 + warnings.filterwarnings IProgress not found.
La barre transformers Loading weights s'emettait en ~27 outputs stream par modele
sous kernel IPC (33+72 outputs sur les deux chargements -> 3+3), et tqdm.auto
imprimait le chemin site-packages machine dans son warning. Aucune cellule
n'affiche de barre volontairement (verifie). Re-exec complete py310-gpu @3.12.15,
0 erreur, 23 cellules code executees, parite source byte-identique 54/54.

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

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants