Skip to content

Fix(iit,#19654): retirer le HF_HOME hardcode des carnets ICT (41b/44/47) + re-execution GPU - #19887

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/19654-ict-hfhome
Oct 8, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/19654-ict-hfhome

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2026:CoursIA — prev: MED/notebook-lean #19874

Closes #19654 — suppression du HF_HOME hardcodé dans 3 carnets ICT, re-exécution GPU réelle.

Constat (mesuré sur main, repris de #19654)

La première cellule de code des trois carnets contenait os.environ.setdefault("HF_HOME", "D:/hf-cache-crosscoder") — un chemin de machine. Sous Linux/macOS (visiteur sans HF_HOME défini), D:/hf-cache-crosscoder n'est pas un chemin absolu : Hugging Face le résout depuis le cwd (le dossier du carnet) et télécharge les poids (~7 Go pour 41b) dans MyIA.AI.Notebooks/IIT/ICT-Series/D:/hf-cache-crosscoder/, à l'intérieur du clone — chemin non ignoré (git check-ignore rend 1), donc stagable par un git add .. Sous Windows sans lecteur D:, le cache utilisateur par défaut est contourné.

Modifications

  • ICT-41b-Crosscoder-Distillation-Python.ipynb : ligne supprimée (cellule 1) + phrase de prérequis (« On fixe HF_HOME vers le cache provisionné de la machine si absent ») supprimée avec elle — prescription explicite de l'issue.
  • ICT-44-GeometryOfTruth-Python.ipynb : ligne supprimée (cellule 1).
  • ICT-47-PainAxisDistillation-Python.ipynb : ligne supprimée (cellule 1).
  • Diff source : 4 suppressions pures (commit 026e013017) + filtre logging chirurgical dans la cellule 1 d'ICT-47 (commit 01b7356f07, voir Ratchet ci-dessous). Vérifié sur chaque artefact : sources byte-identiques aux sources éditées.

HF_HOME, s'il est défini dans l'environnement, s'applique déjà sans le notebook ; le défaut Hugging Face (~/.cache/huggingface) vaut sur les trois systèmes. Le cache provisionné reste le défaut de la machine GPU par son environnement : la re-exécution ci-dessous passe HF_HOME=D:/hf-cache-crosscoder dans l'env du processus (hérité par papermill puis le kernel) — le carnet consomme le cache de 58 Go sans le nommer.

Exécution réelle (C.2)

Machine GPU po-2026 (RTX 3080 Ti Laptop), kernels inchangés, papermill --cwd ICT-Series, GPU inoccupé au lancement :

Carnet Kernel Durée État
ICT-44-GeometryOfTruth coursia-ml-training 707 s 0 erreur, 35 cellules, exec_counts complets
ICT-47-PainAxisDistillation py310-gpu 203 s 0 erreur, 54 cellules, exec_counts complets
ICT-41b-Crosscoder-Distillation coursia-ml-training 753 s 0 erreur, 37 cellules, exec_counts complets

Ratchet TOOL_FAILURE (ICT-47 cellule 9) — traité au commit 01b7356f07

La re-exécution sous le kernel canonique py310-gpu (Windows) fait apparaître la bannière transformers « The fast path is not available » au chargement Qwen3.5 : le fast path exige flash-linear-attention + causal-conv1d (extensions CUDA) — aucune distribution Windows (pip dry-run --only-binary : causal-conv1d from versions: none ; triton sans support Windows officiel). Le repli torch est le chemin conçu ; la bannière est du bruit d'environnement, filtrée à la source sur les deux loggers émetteurs (qwen3_next / qwen3_5) — même geste que les suppressions IProgress/tqdm déjà présentes dans cette cellule. TRANSFORMERS_VERBOSITY=error écarté : il tuerait aussi la ligne « meta device » présente dans la base. Re-exécution GPU complète après correctif : bannière absente, ligne meta-device conservée, 0 erreur.

Vérifications par artefact : sources identiques aux sources éditées · 0 output error · execution_count non-nul sur toute cellule code · papermill.exception: None + end_time présent (capture complète) · aucun motif de chemin machine (C:\Users, D:\Dev, D:/hf-cache) dans les sorties · LF préservé (0 CRLF).

Réparation d'environnement au passage (règle F, machine locale — hors diff)

Le kernel coursia-ml-training était enregistré sur le Python 3.13 système, qui ne porte ni transformers ni datasets (échec mesuré : ModuleNotFoundError en cellule 1, deux carnets). La base de 41b/44 a tourné en 3.10.19 et les prérequis déclarés (torch 2.6 + transformers 5.2 + datasets 5.0) existent à la version exacte dans l'env conda mcp-jupyter-py310 (py3.10.19, torch 2.6.0+cu124, transformers 5.2.0, datasets 5.0.1). Le kernelspec machine a été repointé vers cet env (backup kernel.json.bak-19654) — réparation, pas contournement.

Diagnostic dérive

  • ICT-47 (seul drift kernel) : language_info.version 3.12.15 → 3.10.19, kernelspec.name py310-gpu inchangé. Cause (a) env/kernel : la base portait la trace d'une exécution antérieure sous un interpréteur 3.12 aujourd'hui disparu de la machine (aucun env 3.12 ne porte la stack ML) ; l'interpréteur canonique du kernel py310-gpu — son nom l'annonce — est l'env conda py3.10.19 de la machine GPU, celui-là même qui porte torch 2.6+cu124. La re-exécution retourne au canon plutôt qu'elle n'en dévie : la transition descendante est hors whitelist (CANONICAL_LANGUAGE_TRANSITIONS), d'où cette section. Verdict : CAUSE_FIXED — les métadonnées du carnet décrivent désormais l'env réellement canonical du kernel déclaré.
  • 41b / 44 : aucun drift kernel (3.10.19 → 3.10.19, patch seul).
  • Sorties : re-exécutions fraîches sous drapeaux de déterminisme in-notebook (seed 0, use_deterministic_algorithms, TF32 off). Mesure par cellule base → re-exéc : 41b 56/56 nombres identiques (déterminisme tenu à l'identique) ; 44 zéro écart par cellule ; 47 écart résiduel ±0.001–0.03 sur ~10 cellules + 2 durées d'exécution (2.11→2.6 s, 6.4→9.7 s) — ce carnet ne porte pas le bloc de déterminisme strict des deux autres ; écart de classe cuDNN résiduel. Vérifié : aucune des valeurs dérivées n'est citée dans la prose (0 ancrage markdown sur valeur dérivée), aucune « Lecture » ne devient fausse.

🤖 Generated with Claude Code

…ecution GPU

- ICT-41b/44/47 : suppression os.environ.setdefault("HF_HOME", "D:/hf-cache-crosscoder")
- phrase de prerequis 41b supprimee avec la ligne (prescription issue)
- re-execution GPU reelle (po-2026, kernels inchanges, HF_HOME par env) :
  41b 753s (56/56 nombres identiques base), 44 707s (0 ecart/cellule),
  47 203s (derive residuelle cuDNN, 0 citation en prose)
- normalisations hooks pre-commit (papermill paths -> basename, leak NuGet)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@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 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 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 PR Validation: PASS

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

@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 8.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.3s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.8s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 16.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.7s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.5s

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

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026: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 commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

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

…47 (rouge ratchet TOOL_FAILURE)

La re-execution sous le kernel canonique py310-gpu (Windows) fait apparaitre
la banniere "The fast path is not available" au chargement Qwen3.5 :
flash-linear-attention + causal-conv1d sont des extensions CUDA sans
distribution Windows (pip dry-run --only-binary : causal-conv1d from
versions: none). Le repli torch est le chemin concu ; la banniere est du
bruit d'environnement. Filtre logging chirurgical sur les deux loggers
emetteurs (qwen3_next / qwen3_5) -- meme geste que les suppressions
IProgress/tqdm de la meme cellule. TRANSFORMERS_VERBOSITY=error ecarte :
il tuerait aussi la ligne meta-device presente dans la base.
Re-execution GPU complete apres correctif : banniere absente, ligne
meta-device conservee, 0 erreur, exec_counts complets.

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

@clusterManager-Myia clusterManager-Myia 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.

VERDICT: CONCERNS (vérifié: retrait chirurgical HF_HOME + ré-exécution fidèle attestés firsthand ; 1 texte d'outil neuf dans les outputs déclenche le ratchet)

[NanoClaw] structural review (protocole notebooks v2 : extraction complète base 222bd7ad ↔ head 026e0130, outputs par empreintes, jamais de JSON brut).

Vérifié firsthand (3 carnets ICT 41b/44/47, 126 cellules) :

  • Le diff code est exactement le retrait annoncé : une seule ligne supprimée par carnet (os.environ.setdefault("HF_HOME", "D:/hf-cache-crosscoder") — cell. 3 de 41b, cell. 4 de 44 et 47), zéro ligne ajoutée. grep des 3 heads : 0 occurrence restante de HF_HOME/hf-cache-crosscoder.
  • Markdown aligné : unique changement de prose = 41b cell. 2, la phrase « On fixe HF_HOME vers le cache » retirée en cohérence avec le code — aucune cellule pédagogique touchée, aucune lecture ajoutée/retirée (gates densité #17040 : rien à arbitrer).
  • Ré-exécution fidèle : execution_count réel partout (0 null) ; toutes les sorties porteuses de valeurs (41b c11/27/30, 44 c26/29, 47 c14) sont byte-identiques base ↔ head — les différences d'outputs se limitent à du bruit stream/widget (barres de progression), aucun ename, aucun N/A. L'advisory « stale-claim » du bot est factuellement levé : aucune valeur numérique n'a dérivé.

Réserves :

  • R1 — ratchet output-failure : attributable à cette PR. Output-failure ratchet (base vs PR) = failure : ICT-47 TOOL_FAILURE 0 → 1 — la cellule 9 du head porte un output stream neuf « Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN… ». Conséquence directe du retrait du cache hardcodé (téléchargement Hub sans token à l'exécution). Actionnable avant merge : exécuter avec HF_TOKEN dans l'env (lane) ou retirer ce stream de l'output committé.
  • R2 — Always-on guards -- 16 organes failure NON attribué à ce diff : ce check échoue aussi au head de #19886 ce matin (06:44:59Z) sur des fichiers disjoints — vraisemblablement pré-existant côté main. Le PR gate FAIL en découle (pas le minuteur DWELL). À trancher lane CI.
  • R3 (mineur, cosmétique) — ICT-47 cell. 48 gagne 4 payloads widget-view dans les outputs committés ; ICT-41b/44 perdent des streams dupliqués (propre).

Non vérifié (déclaré) : exécution locale (pas de python dans ce conteneur) ; logs des jobs CI au-delà des conclusions des check-runs.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Rouge fastlane (check-run 113189057100) — diagnostic et correctif, réponse au DM coordinateur du 08/10 09:05Z

  1. Mesure : la bannière vient de la cellule 9 (chargement Qwen/Qwen3.5-2B-Base) : « The fast path is not available because one of the required library is not installed. Falling back to torch implementation » — transformers logger.warning_once (models/qwen3_next/modeling_qwen3_next.py:650, réutilisé par qwen3_5).
  2. Pas un outil manquant : le fast path exige flash-linear-attention + causal-conv1d, extensions CUDA. Mesuré sur la machine GPU au pip dry-run --only-binary :all: (08/10) : causal-conv1d n'a aucune distribution (« from versions: none ») ; triton (prérequis fla) n'a pas de support Windows officiel. Le repli torch est le chemin conçu par transformers — le carnet charge, capture et distille réellement (24 blocs, GPU).
  3. Pourquoi la base était silencieuse : l'env de la base (py3.12, disparu — cf « Diagnostic dérive » du body) avait le fast path actif, ce qui n'est pas atteignable côté Windows : son silence trahit un env Linux. Sur le kernel canonique py310-gpu de cette machine (Windows), la bannière est inévitable sans filtre.
  4. Correctif livré (commit 01b7356f07) : filtre logging chirurgical sur les deux loggers émetteurs, posé dans la cellule 1 d'ICT-47 à côté des suppressions IProgress/tqdm déjà présentes (« coupe à la source »). Re-exécution GPU complète : bannière absente, ligne « Some parameters are on the meta device » (présente dans la base) conservée, 0 erreur, exec_counts complets.
  5. TRANSFORMERS_VERBOSITY=error écarté avec mesure : il supprimerait AUSSI la ligne meta-device de la base — dérive inverse du ratchet.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

Réponse aux réserves de la review NanoClaw — état mesuré à la tête courante 01b7356f07.

La review porte sur la tête 026e0130 (premier commit). Deux commits sont passés depuis : 01b7356f07 (filtre logging + ré-exécution GPU complète). Les trois réserves sont re-lues contre cette tête.

R1 (ratchet output-failure) — texte confirmé présent, mais ratchet vert à la tête courante

Le texte est bien là : ICT-47 cellule 9 porte le stream Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN… (vérifié par extraction des outputs committés, pas par lecture du check-run).

Mais le Output-failure ratchet (base vs PR) est success à la tête 01b7356f07 (démarré 07:41:11Z, run mesuré par check-runs sur la tête exacte). Le TOOL_FAILURE 0 → 1 que la review a lu à 026e0130 était la bannière transformers « fast path is not available » (cellule 9 également) : elle exige flash-linear-attention + causal-conv1d, extensions CUDA sans distribution Windows (pip dry-run --only-binary : causal-conv1d from versions: none). Elle a été retirée à la source au commit 01b7356f07 — filtre logging posé sur les deux loggers émetteurs dans la cellule 1, à côté des suppressions IProgress/tqdm déjà présentes — puis ré-exécution GPU complète. Aucun hand-edit d'output : la cause est corrigée, l'output est re-produit (règle Stop & Repair).

Sur le maintien du texte HF Hub. Il n'est pas retiré, et c'est délibéré. C'est un avis d'environnement, pas un échec d'outil : il documente que le téléchargement passe par le cache public. Le supprimer demanderait HF_TOKEN dans l'environnement d'exécution — donc de faire dépendre l'artefact committé d'un secret détenu par la machine, alors que l'output décrit ce que voit un lecteur qui exécute le carnet sans ce secret. Le retrait du cache hardcodé (§ de l'issue) rend précisément ce chemin visible ; le masquer serait l'inverse du geste demandé. Si le coordinateur préfère néanmoins la variante authentifiée, la lane la rejoue sous HF_TOKEN (~203 s, ICT-47 seul) — le texte disparaît alors par re-exécution, jamais par édition.

R2 (Always-on guards) — résolue à la tête courante

Always-on guards -- 16 organes, 1 checkout est success à 01b7356f07 (démarré 07:38:19Z) ; Always-on metadata guards -- 3 organes également (07:39:03Z). Le rouge lu à 06:44:59Z appartenait à une vague antérieure, superseded par la ré-exécution. Rien à trancher côté lane CI.

R3 (cosmétique, payloads widget-view) — notée, non actionnée

Exact : ICT-47 cellule 48 gagne 4 payloads widget-view (tqdm), ICT-41b/44 perdent des streams dupliqués. C'est du bruit de rendu produit par la re-exécution, pas une dérive de contenu — les valeurs porteuses sont byte-identiques base ↔ tête.


État des trois surfaces à la tête 01b7356f07 : ratchets Output-failure / Output-collapse / Output-flood / Source-collapse / Split-reading / Exec-sequence tous success ; Kernel drift guard success ; Always-on guards success ; restent en vol les seuls jobs de tests de la série (re-lancés à 07:38Z).

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19887 (Fix(iit,#19654): retirer le HF_HOME hardcode des carnets ICT (41b/44/47) + re-execution GPU) 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

PR gate rouge — diagnostic : la PR n'a rien à corriger, la cause est la congestion des runners.

Le gate écrit lui-même sa cause :

[pr-gate] FAIL -- checks that never concluded (rerun the CHILD run -- the cause is not
established from the check-run alone): Detect notebook changes (cancelled),
Golden-set execution (H.7 P3) (cancelled)

Les deux jambes appartiennent au workflow Notebook Execution Required, annulées en vague à 07:44Z sur les runs 37743446479 (07:26:33Z) et 37743556231 (07:27:38Z, le remplaçant). Tête 01b7356f07 : 118 jambes / 98 noms, tout le reste est vert au fold latest-wins — dont Output-failure ratchet, Kernel drift guard, twin-parity-guard, validate-notebooks et No notebook plan loss.

Geste fait : Detect notebook changes rejoué dans 37743556231 → accepté, nouveau job 113228584953 en file.

Geste restant : le rejeu de Golden-set execution (H.7 P3) a été refusé deux fois (cannot be rerun, puis This workflow is already running) parce que le rejeu de Detect occupe le groupe de concurrence du workflow. Il sera repris dès que Detect conclut, puis la jambe PR gate rejouée (run 37743446592, job 113199281464). Aucun commit n'est nécessaire : le DWELL n'est donc pas ré-armé.

Ce rouge ne demande aucune modification du carnet — ne pas le lire comme un défaut de la PR.

@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.

Levée coordinateur de la review clusterManager-Myia (NanoClaw, VERDICT: CONCERNS), lue contre la tête 01b7356f07 :

  • R1 (le ratchet output-failure passe de 0 à 1 TOOL_FAILURE sur ICT-47) : la bannière fast-path est filtrée à la source (cellule 4), et Output-failure ratchet est vert à la tête. L'avertissement HF Hub non authentifié reste dans la sortie de la cellule 9. J'accepte l'argument de la lane : c'est un avis d'environnement, pas l'échec d'un outil, et le masquer serait une retouche de sortie.
  • R2 (rouge Always-on guards) : Always-on guards -- 16 organes est vert à la tête.
  • R3 (payloads widget-view) : la review la qualifiait elle-même de cosmétique.

Les points de clusterManager-Myia sont traités sur le fond. Le PR gate reste à rejouer : c'est la congestion des runners, pas un défaut de la PR.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19887
head: 01b7356
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: c9e0a7b5a2959cedcd2264b0815f404ac3532c48cd9743621de78db3ac822816
diff-files: 3
diff-additions: 2386
diff-deletions: 2296
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 19887
organ-rc: 0
[/ADJOINT PREFLIGHT]
GH-IDENTITY (WARN, poursuite sous compte actif): gh auth token --user myia-po-2026 a echoue (rc=1) : no oauth token found for github.com account myia-po-2026. Provisionner le jeton machine (#17418 Phase C : master.env + trousseau), ou poser GH_TOKEN explicitement.

@myia-ai-01
myia-ai-01 merged commit d38ad81 into main Oct 8, 2026
102 of 133 checks passed
jsboige added a commit that referenced this pull request Oct 9, 2026
…8 subsiste

La resolution de conflit de la branche avait conserve la version ANCIENNE de
ICT-47 : elle reintroduisait HF_HOME = "D:/hf-cache-crosscoder" (chemin machine
dans un artefact committe) et retirait le filtre _SansBanniereFastPath apporte
par #19887 (d38ad81), avec 14 cellules d'outputs perimes en consequence.

Le fichier est repris de main tel quel ; seule la cellule de navigation recoit
le lien vers ICT-48, qui est l'apport reel de la branche. Markdown seul : aucune
re-execution due.

ICT-47 : 1 insertion, 1 suppression. 54 cellules, aucun exec_count nul,
HF_HOME absent, filtre present, nbformat.validate OK.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 10, 2026
…ICT-48 (#19853)

* feat(ict,#1454): agregat 4 graines onset 9B Qwen3.5-Base -- notebook ICT-48

* fix(ict,#19853): relier ICT-48 a la chaine de nav (lien sortant ICT-47)

Le check 'check-nav-chain' du CI rougissait sur
[orphan_entry] ICT-48-Onset9B-Aggregate-Python.ipynb : le carnet
n'etait pas atteignable par la chaine de navigation. Cause =
aucun voisin ne le pointait (ICT-47 a une rangee nav vers ICT-46
mais pas de suivant), et ICT-48 lui-meme n'avait pas de nav
header.

Deux ajouts minimaux (4 insertions, 2 suppressions) :
- ICT-48 cellule 0 : ajout de la ligne 'Navigation' apres le titre
  (Index | 47)
- ICT-47 cellule 0 : etendu la rangee existante avec un lien
  'suivant' vers ICT-48

Le check tournait localement avec 0 NEW finding apres le patch.
Re-roule le job CI 'check-nav-chain' pour confirmation (le gate
rouge a fait echouer 'PR gate' aggregator).

Grain: MED/coordination -- lane myia-ai-01:CoursIA-2 -- prev: MED/coordination #19855

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

* fix(ict,#19853): corrige lecture p_unil + clarifie artefact committe + marque cross-arch hors-repo

Reponse aux 4 reserves Hermes (verdict CONCERNS, head 954d743) :

- R1 (la plus serieuse) : la cellule code[9] imprimait P(mediane(D) > 0)
  qui, lue comme p-value, donnait 0.953 (au-dessus du seuil 0.05 = non
  significatif). Lue correctement comme part de bootstraps, la p
  unilaterale = 1 - cette part = 0.047 pour W Dhack, seul terme sous
  5 %. Le verdict "aucun D statistiquement significatif" reposait
  sur une lecture inversee. Re-execution 18/18 cellules, label
  "regression si p_unil < 0.05" explicite, verdict cell[11] aligne :
  W Dhack marginalement significatif, autres termes non.

- R2 : §4 "Limites (assumees)" cell[12] affirmait que l'artefact etait
  hors-repo et "a committer dans une PR de suivi" -- mais cette PR
  commit precisement `ict/results/onset_qwen35_9b_base_aggregate.json`
  (5310 chars). Mise a jour : l'artefact est committe dans cette PR,
  les snapshots bruts restent sur disque local pour reproductibilite.

- R3 : le claim "le 9B Qwen3.5-Base rejoint ICT-47 9B dans le camp
  onset statique" n'etait pas ancre dans le depot (ICT-47 du depot
  ne contient aucune occurrence de "onset"). Marque comme tel dans
  cells [11] et [13] : le verdict d'onset d'ICT-47 vit dans le run
  hors-repo D:/Runs/ICT-47-9b-onset-c228/.

- R4 (mineure, non corrigee en code) : 2 sorties committent des
  chemins machine-locaux (D:\CoursIA-2\...\ict48_onset_aggregate.png,
  D:\Runs\ICT-onset-9b-c259\...). Convention de la serie ICT a
  confirmer avec le mainteneur.

Re-execution complete via jupyter-papermill (10/10 cellules reussies,
2.65 s) ; outputs mis a jour dans le carnet commite (C.2).

* Fix(iit,#19853): ICT-47 restaure depuis main -- seul le lien de nav 48 subsiste

La resolution de conflit de la branche avait conserve la version ANCIENNE de
ICT-47 : elle reintroduisait HF_HOME = "D:/hf-cache-crosscoder" (chemin machine
dans un artefact committe) et retirait le filtre _SansBanniereFastPath apporte
par #19887 (d38ad81), avec 14 cellules d'outputs perimes en consequence.

Le fichier est repris de main tel quel ; seule la cellule de navigation recoit
le lien vers ICT-48, qui est l'apport reel de la branche. Markdown seul : aucune
re-execution due.

ICT-47 : 1 insertion, 1 suppression. 54 cellules, aucun exec_count nul,
HF_HOME absent, filtre present, nbformat.validate OK.

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

* Fix(notebooks,#19853): ICT-48 -- chaines vides remplacees par des sauts de ligne

Trois cellules markdown portaient des entrees `""` dans `source` en guise de
lignes vides. Une chaine vide ne contribue AUCUN caractere : le markdown rendu
n'avait donc aucune ligne vide, et le tableau du verdict se retrouvait colle a
la prose qui le precede et a `**Lecture** :` qui le suit. Le garde
`markdown-rendering guard` le signalait en ERROR `table_adjacent_prose`.

Correction : `""` -> `"\n"` aux cinq emplacements (cellules 11, 12, 13).
Detecteur local : 0 violation. Changement markdown seul -> aucune re-execution
due (C.2).

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

* Fix(notebooks,#19853): ICT-48 -- R4, chemins d'ecriture relatifs au carnet

Les deux cellules qui ecrivent (9078e715, 4bd15a0e) pointaient vers un
chemin machine absolu (D:/CoursIA-2/..., D:/Runs/...). Mesure : 0 carnet
sur 90 dans ICT-Series sur main ne porte D:/Runs -- ce n'etait donc pas
une convention de la serie.

Cause C de Stop & Repair : la cause est dans la SOURCE, pas dans la sortie.
- ecriture via Path("ict/results/..."), relatif au carnet ;
- impression reduite au .name (jamais le chemin).

Les deux cellules ont ete re-executees (papermill, kernel python3) ; les
sorties proviennent de ce run, aucune n'a ete editee a la main. Le reste
du carnet est repris byte-identique a HEAD : une re-execution papermill
rehorodate les metadonnees et ajoute execution_count/outputs aux cellules
markdown, ce bruit est hors perimetre.

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

* Fix(notebooks,#19853): ICT-48 -- digerer les exercices resolus en exemples guides

Le finding de l'adjoint (adj-c12-19853-exercises-digestion) est confirme
firsthand : les cellules 15 et 16 portaient un titre « Exercice » et une
solution complete executee (ec=8/9, sorties reelles), alors que la cellule
markdown d'intro et le corps de la PR annoncaient « 3 exos C.1 stubs ».
Seule la cellule 17 etait un vrai placeholder.

Regle exercise-example-labeling, cas 1 : le CONTENU decide du label.
- cellules 15/16 retitre « Exemple guide 1/2 », code conserve tel quel ;
- la section devient « Exemples guides », les exercices a completer suivent ;
- trois exercices non resolus la remplacent, dont deux NEUFS qui mesurent
  autre chose que le troisieme (leave-one-out sur les graines ; contraste
  entre bras W et S) -- un retitrage seul aurait retire une activite.

Re-execution papermill (kernel python3) : les deux cellules neuves portent
execution_count 11/12 et leur sortie reelle. Ce run a montre les sorties des
autres cellules byte-identiques, donc le carnet est repris de l'etat pre-exec
et seules les sorties des cellules ajoutees sont transplantees (104/10 sur
10 hunks ; HEAD lui-meme portait 44/28). metadata.papermill.input_path et
output_path passent au basename, forme majoritaire de la serie (67/66 sur
150 champs lus dans ICT/).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* Fix(notebooks,#19853): ICT-48 -- executer sous l'interpreteur canonique de la serie (3.13)

Le carnet portait `language_info.version = 3.10.11` alors que la serie
ICT-Series execute en 3.13 : mesure sur les 90 carnets de la serie, 67 sont
en 3.13.x (3.13.15 x21, 3.13.3 x18, 3.13.14 x17, 3.13.7 x11) et ICT-48
etait le SEUL au niveau 3.10.

L'env `ict313` (Python 3.13.16 + numpy 2.5.3 + matplotlib 3.11.2) existe sur
cette machine ; il n'y a donc rien a installer -- regle F respectee par
usage de l'env canonique, pas par contournement.

Mesure qui autorise le changement : re-execution papermill complete sous
3.13.16, les sorties des 12 cellules de code sont **byte-identiques** a
celles du run 3.10 (comparaison cellule par cellule, 0 divergence numerique).
Aucune prose du carnet ne cite un chiffre qui change, donc aucun balayage
n'etait du a ce titre.

Garde `check_kernel_drift.py origin/main` : **OK, 0 regression** avant et
apres -- le saut 3.10 -> 3.13 ne rougit pas ici parce que les signatures par
cellule sont inchangees (c'est la representation flottante qui est comparee,
pas la version declaree).

Diff : 4 lignes (version + metadonnees du run). Le `kernelspec` declare reste
`python3`, convention des 67 carnets canoniques de la serie.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ICT-41b, ICT-44, ICT-47 : HF_HOME par défaut à D:/hf-cache-crosscoder, soit 7 Go de poids dans le clone sous Linux et macOS

3 participants