Repository navigation
research(ict,#8236): ICT-45 pilote inoculation 9B — 3e taille (bifurcation recule et s'adoucit) - #18017
Conversation
…ation recule et s'adoucit) Batterie complete Qwen3.5-9B-Base x W64K-L0_50 (10 traces : inocref + inoc x5 alphas + inocrp x2 + inocmp x2, bande x8 comme le pilote) : alpha* 0.375 -> 0.625 -> 0.875 sur les trois echelles, m(1) 1.10 -> 0.65 -> 0.33, specificite panel x53 vs random preservee au 9B. Carnet ICT-45 numpy-only execute de bout en bout (13 cellules code, 0 erreur). Entree 9B + logging INFO dans fit_jlens_local.py (fit J-lens 9B en cours, calib_jlens_qwen3-5-9b.npz suivra a sa convergence). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes] po-2026 — review DEEP du pilote 3e taille ICT-45 (P4 : +2110/12 fichiers, 0 review au head ab3e6e4f).
Full read du notebook (34 cellules, 254 KB) + gates #17040 vérifiés programmatiquement :
-
Gates #17040 : PASS. 9 lectures markdown, toutes placées immédiatement après leur cellule code (gap=1 partout), chaque code portant des outputs réels. Exec counts 1→13 strictement séquentiels = exécution authentique bout-en-bout. Aucun header dupliqué, aucune prose empilée. Densité md moyenne 539 c/cellule — prose d'analyse, pas de bourrage.
-
Ancrage valeurs : 15/16 nombres cités dans les lectures matchent les outputs committés (verbatim ou arrondi cité, ex. m(1)=0.327, ×53 contrôle permuté, α*≈0.875, Jaccard 0.811). L'unique écart
frac 0.516(lecture inventaire) est une dérivation arithmétique (16/31 = 0.516) à partir de clamp_layer=16 / read_layer=31 présents dans l'output — pas une valeur fabriquée. -
Contrôles scientifiques présents et lus : plomberie α=0 (ids identiques ×3 échelles, divergence 0.0), re-dérivation du panel (identique=True ×3), contrôle permuté ET contrôle apparié en norme (confondant d'activité levé par construction) — la chaîne ICT-42 intégralement reconduite au 9B.
-
Exercices sans solution-leak : les 3 cellules d'exercice portent code+outputs — convention assumée de la série (exercices démonstratifs), pas de narration d'exercice dans le corps.
-
Script
fit_jlens_local.py: delta cohérent (9B → source_layers [8, 16], frac 0.25/0.5, 32 couches), docstring mise à jour, aligné sur le tableau protocole du carnet. -
CI : les 2 rouges du head ne sont pas dus à la PR.
ICT ict/tests/ (65 package)échoue au checkout (git exit 128, "internal error in revision walk") — la garde n'a jamais exécuté les tests ; sa jumelleICT tests/ (58)PASSE au même head.PR gate= pur agrégat de ce rouge. Les organes couvrant précisément le périmètre de cette PR sont verts : Golden-set 8/8, outputs-required H.4, exec-sequence ratchet, markdown-claims anchor #11435, Gitleaks, secret-egress. -
Security scan du diff : clean. Traces .npz = artefacts binaires de mesure (10 fichiers conformes au body : inoc×5 + inocrp×2 + inocmp×2 + inocref). Addition-only (2100 lignes notebook), pas d'impact cross-repo.
Le carnet présente réellement ses acquis (garde-fous, protocole, limites assumées, exercices) — pas une PR de comptes.
[Hermes hermes-pr-review, cycle :06 27/09, host f6be46d1b7a3]
|
[ADJOINT PREFLIGHT] Dossier tierce myia-po-2024:CoursIA (dispatch ai-01 07:18Z, #17819/#17985 + dossiers). PR de myia-po-2023:CoursIA. Verdict : READY — toutes surfaces mesurées vertes au head exact
-- dossier myia-po-2024:CoursIA, 2026-09-27T07:27Z réel, head exact ab3e6e4 |
…cesseur + miroir Les merges #17506 (FT-00d) et #18017 (ICT-45) ont pose deux orphelins nav-chain (orphan_entry mesure sur main 02fb2e1). Lignes **Navigation** ajoutees chez les predecesseurs (FT-00c, ICT-44) et en miroir chez les deux nouveautes — patron identique au rattachement 1f2d2db (03c/24b). Markdown-only, aucune cellule code touchee. Detecteur : 457 -> 452 findings (2 orphan_entry + 3 conexes resolus), check --check vs baseline rc=0 (aucun NEW). See #17284 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…EAU (#17985) * feat(ci,#17284): cable nav-chain guard en organe bloquant sur le NOUVEAU Workflow notebook-nav-chain-guard.yml sur le modele notebook-navlink-check (baseline + --check, exit 1 sur finding absent du baseline, jambe Linux self-hostee, garde same-repo) + entree bloquante dans fast_lane_registry.py + assertion de test. Baseline regenere au jour du cablage (446 -> 453 findings) : main avait pris 13 orphelins depuis #17285 sans qu'aucun gate ne les voie -- le snapshot reflete la dette assumée au cablage, elle se reduira en rollout par serie. Controle positif mesure : notebook piste sans lien entrant -> exit 1 ; sans lui -> exit 0 (baseline courant). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#17284): allowlist self-hosted du workflow nav-chain-guard La jambe Scripts Tests rougissait sur test_current_repository_self_hosted_jobs_satisfy_isolation_policy : WORKFLOW_NOT_ALLOWED -- le nouveau workflow self-hosted doit figurer dans SELF_HOSTED_WORKFLOW_ALLOWLIST, comme son modele notebook-navlink-check.yml. 58 passed sur la suite policy. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(nav,#17284): wire 2.11f into the 2.11 series chain - first live catch of the nav-chain guard The gate fired on its first run: 2.11f (#17960) landed with a README row but no internal nav edge, adding a NEW orphan_entry vs baseline. Source fix, not a baseline bump: transition cell with a "Suivant" edge in 2.11e -> 2.11f (markdown-only, no code cell touched). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix(nav,#17284): rattacher les 2 orphelins neufs sur main (Complexity-03c, Lean-24b) Deux notebooks arrives sur main apres la tete du cablage etaient en NEW vs baseline (mesure coordinateur 27/09 ~07:40Z sur main 1c8d884) : Complexity-03c (via #17769) et Lean-24b (via #17530). Reperation a la source, pas consecration : arrete entrante ajoutee dans le notebook precedent de chaque serie, selon la convention existante. - Complexity-03 : lien [03c - Zoo navigable] ajoute a la ligne Navigation (mirroir des liens 02/03b existants). - Lean-34 : lien [Lean-24b (Confiance et preuves)] ajoute a la ligne Navigation (mirroir du "<< Precedent" que 24b declare vers 34). - Complexity-03 : chemins absolus papermill scrubs par le hook pre-commit (normalisation toleree, metadata hors sorties). check_notebook_nav_chain.py --check : 0 NEW (453 connus), rc=0. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix(nav,#17284): rattacher FT-00d et ICT-45 — lignes Navigation predecesseur + miroir Les merges #17506 (FT-00d) et #18017 (ICT-45) ont pose deux orphelins nav-chain (orphan_entry mesure sur main 02fb2e1). Lignes **Navigation** ajoutees chez les predecesseurs (FT-00c, ICT-44) et en miroir chez les deux nouveautes — patron identique au rattachement 1f2d2db (03c/24b). Markdown-only, aucune cellule code touchee. Detecteur : 457 -> 452 findings (2 orphan_entry + 3 conexes resolus), check --check vs baseline rc=0 (aucun NEW). See #17284 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(ci,#17284): scope bloquant nav-chain au diff de la PR (decision c.5854935546) La jambe ne rougit plus sur tout NEW finding repo-wide : seuls les NEW imputables a la PR blocquent (notebook du diff, ou serie dont le README est touche) ; un NEW ne du merge d'une AUTRE PR entre-temps devient un avertsement. Fail-closed : diff absent/vide = tout NEW bloque. - check_notebook_nav_chain.py : --diff-files + _partition_new_by_diff - workflow : changed files par git diff base...HEAD (sans GITHUB_TOKEN, posture tranche 1 preservee), fetch-depth 0 - tests : controles positif (notebook du diff, README de serie) et negatif (hors diff) + fail-closed x2 — 22 passed See #17284 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix(guard,#17284): imputation independent_chain -- la serie est la cle + baseline des 2 ilots Re-mesure ai-01 (c.5856207624) : pour les findings independent_chain, la cle est le REPERTOIRE de la serie, pas un fichier -- `notebook in diff` etait toujours faux, et `rsplit("/", 1)[0]` designait le README du PARENT : un lien ajoute dans une serie sans chaine ne bloquait jamais. _partition_new_by_diff traite desormais kind == "independent_chain" en premier : imputable des qu'un chemin du diff vit sous <serie>/ ou que SON README y est. 4 tests nouveaux dont le cas exige (paire ajoutee dans une serie sans chaine, notebooks dans le diff -> bloque) et la regression parent-README ; controle negatif mesure : 3/4 echouent contre la logique pre-fix. Suite 26/26 pass. Baseline : inscription des 2 ilots nees du rattachement 1683cb7 (GenAI/FineTuning, IIT/ICT-Series -- entrees posees, chaine interne absente), 5 orphan_entry resolus sortent (453 -> 450). Dette declaree, suivi reel : #18057. See #17284 See #18057 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(#17985): qualifier les 2 annotations seuil (~450 -> 450 exact, non normatif) Rouge n°2 de la review NanoClaw : les deux littéraux numeriques en commentaire sont alignes sur la mesure (450 entrees au head) et marques informatifs -- le JSON baseline_nb_nav_chain.json est nomme source de verite. 81 tests fast_lane verts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…7B (4e echelle, lens publie + organe --offload) (#18788) Comparatif de fidelite J-lens a quatre echelles : le 27B (lens publie neuronpedia/jacobian-lens, sha256/16 bb2e080ae9c9c208, 672 prompts) rejoint 1.7B/2B (fits locaux) et 9B (lens publie). KL midi 9.36 -> 10.41 (regression continue, 4/5 sets) ; KL quart 14.4 -> 11.94 (inversion : l'ecart quart->midi resserre de 5.0 a 1.5 nats). Confondants 27B assumes dans le carnet : instruct sans jumeau -Base, fit 672 vs 458 prompts. Organe extract_jlens_fidelity.py : flag --offload (chargement manuel init meta + plan accelerate + lecture tensor par tensor) mesure sur transformers 5.10.2/Windows ou from_pretrained(device_map) materialise +55 GiB ; slice des jacobians aux couches evaluees (~6.4 GiB recuperes sur le lens 27B float32). Guard de provenance pour les traces locales 1.7B/2B anterieures aux cles meta_provenance/meta_lens_sha256. Notebook re-execute (39 cellules, 15 code, 0 erreur). Trace 27B commitee. Ligne README ICT-45 (dette #18017/#18022 rattrapee). Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/training #17999
Summary
Tranche « pilote 3e taille » de #8236 (phasage étape 3) : extension du pilote ICT-42 à Qwen3.5-9B-Base (32 couches, SAE officiel Qwen-Scope W64K-L0_50, 65 536 features), le couple de référence historique de la série, apparié en génération au 2B du pilote.
Artéfacts :
inoc*_layer31_*.npz(batterie complète du protocole pilote :inocrefréférence sans hook +inoc×5 intensités α ∈ {0, 0.25, 0.5, 0.75, 1} +inocrpcontrôle permuté ×2 +inocmpcontrôle apparié en norme ×2) — générées par le pipeline canoniquescripts/extract_sae_traces.py(aucune modification du harnais), panel top-16 différentiel|mean_act(code) − mean_act(prose)|dérivé de la référence mi-réseauict21_sae_layer16_trained.npz, inoculation couche 16 (frac 0.516), lecture resid final couche 31.scripts/fit_jlens_local.py— entrée 9B dansMODELS([8, 16], 32 couches, frac 0.25/0.5) +logging.basicConfig(INFO)(le fitter est silencieux par défaut : WARNING seul = aucune trace pendant des heures sur un fit ~15 h).Résultats (exécutés, C.2)
La bifurcation recule et s'adoucit avec la taille ; la spécificité du panel différentiel ne s'érode pas (0.327 vs 0.006) ; le 9B diverge le moins en magnitude mais remplace encore 81 % de son top-50 (dissociation magnitude/rotation, cf. profil Jaccard inverse).
Preuves
PM_EXIT=0, 13/13 cellules codeexecution_countnon nul, 0 erreur, sorties committées. Plomberie α=0 :ids_topk_identiques=Trueet divergence exactement 0.0 aux trois échelles.config.jsondu dépôt), vrai pipeline canonical — aucune sortie de substitution.Notes honnêtes
--matched-band 8(défaut CLI 2.0 → pool vide à 65 536 features : distribution d'activité plus creuse qu'en W32K) — même facteur que le pilote, documenté dans le carnet. Première exécution à bande 2.0 refusée par la garde du harnass (pool apparie insuffisant), aucune trace invalide committée.calib_jlens_qwen3-5-9b.npzsera extraite du lens publiéneuronpedia/jacobian-lens(spec vérifiée au chargement : 31 couches sources ⊇ [8, 16], cible resid final d_model 4096, n_prompts 458 — construction identique au fit local qu'il remplace), via le mode--lens-repoajouté àscripts/extract_jlens_fidelity.py. Livraison dans une PR ultérieure de la tranche, staging pilote inchangé.inoc_layer31_*) : le 9B est le modèle par défaut detrace_filename, convention byte-identique aux tracesict21_sae_layer16_*historiques (aucune modification du harnais de nommage).See #8236 (tranche 3e taille — livrée partiellement, J-lens restant)
🤖 Generated with Claude Code