Skip to content

feat(genai,#17540): TV-03 v4 -- indirection a chaine CoT informative, resultat negatif mesure - #19059

Merged
myia-ai-01 merged 4 commits into
mainfrom
feature/17540-tv03-cot-multiseed
Oct 4, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
feature/17540-tv03-cot-multiseed

Conversation

@jsboige

@jsboige jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2027:CoursIA-2 — prev: DEEP/notebook-python #18936

Périmètre : 3 fichiers : MyIA.AI.Notebooks/GenAI/Texte/TransformerVariants/tv/task.py, MyIA.AI.Notebooks/GenAI/Texte/TransformerVariants/tv/init.py, MyIA.AI.Notebooks/GenAI/Texte/TransformerVariants/TV-03-Internalisation-CoT.ipynb

See #17540 (cinquième tranche de l'arc B Russell&Norvig — internalisation CoT). Pas de Closes : l'EPIC reste ouverte.

Ce que cette tranche livre

La v3 avait mesuré une comparaison dégénérée : la chaîne CoT supervisée était constante (préfixe identique pour tout item, aucune information d'entrée), rapport 1.032 = bruit. La v4 corrige le protocole avec des tâches d'indirection où la chaîne est informative :

  • Indirection simple (2 lectures dépendantes) : [M_0..M_3, remplissage, QUESTION_IND, REQUETE], la valeur de M_0 est un pointeur v, cible = M_v. La seconde lecture dépend du résultat de la première. Chaîne CoT : [v, cible] — chaque token dépend de l'entrée.
  • Double indirection (3 lectures dépendantes) : M_v pointe à son tour w, cible = M_w. Chaîne : [v, w, cible] — deux pas intermédiaires informatifs.

Résultat mesuré — verdict honnête : NO GAP (négatif, mesuré deux fois)

Multi-seed 4 graines (0/1/7/42), 300 pas, batch 32, hasard 0.125, valeurs citées depuis les sorties commitées :

Tâche answer-only CoT informatif pas intermédiaires Rapport
Indirection (2 lectures) 0.7043 ± 0.0144 0.6406 ± 0.0207 v : 0.9985 0.910
Double indirection (3 lectures) 0.8279 ± 0.0251 0.6694 ± 0.0367 v : 0.9995, w : 0.9023 0.809
  • La supervision de chaîne fonctionne (pas v appris à 0.999) — la chaîne informative est bien produite, contrairement à la chaîne constante v3.
  • Answer-only compose 2-3 lectures dépendantes en un seul forward (0.70-0.83) : le transformer jouet 2 couches n'est pas dépassé par la composition à cette échelle (Q=4).
  • La chaîne n'aide pas : rapports 0.809-0.910 < 1. Mesuré d'abord au scratchpad (2 designs principes, 4 graines chacun) puis en production — les deux mesures concordent.

Cause de design (mesurée, écrite dans le bilan §9) : chaque étape de chaîne embarque le même binding valeur→position que la composition directe — la chaîne ne décompose pas le calcul difficile en étapes plus simples. La séparation de Huang et al. 2026 exige une tâche dont chaque pas de chaîne est individuellement plus simple que la composition complète ; la famille marqueur/pointeur ne satisfait pas cette précondition. Une tranche suivante visant la séparation devrait construire des pas strictement plus simples (p.ex. copies locales chaînées) plutôt qu'escalader la profondeur d'indirection — c'est une conclusion falsifiable, pas un renoncement.

Détails techniques

  • tv/task.py +228 : question_indirection, vocab_indirection, tirages (pointeurs contraints à [1,Q) — cible jamais le porteur), lots AO/CoT, évaluateurs (prédiction de chaque pas lue à sa position), entraînements single/multi-seed, agrégation.
  • Notebook : titre v4, sections 7-9 nouvelles, selfcheck renuméroté ## 7→## 10. Cellules de mesure exécutées (ec 8-9, kernel python3, séquence 1..10 contigue), outputs commités.
  • Cellules non modifiées restaurées verbatim depuis la base (sources, outputs, metadata) — diff chirurgical 202 insertions / 2 délétions sur le notebook.

Interaction avec #18932 (OPEN, ai-01)

#18932 ajoute une cellule markdown neuve (df85b6e4, déclaration mode démonstration) au même notebook ; cette PR ne modifie aucune cellule qu'elle touche (titre + insertion après index 13). Conflit textuel improbable ; ordre de merge à l'arbitrage coordinateur — le second mergé rebasera trivialement.

Validation

  • Exécution réelle kernel python3 (nbclient), 0 erreur, execution_count 8/9 sur les nouvelles cellules de code, séquence contigue 1..10.
  • Ratchets rejoués sur l'arbre committé : check_output_failure_text.py origin/main (0 régressé), check_output_collapse.py (0), check_source_collapse.py (0).
  • nbformat.validate OK, 21 cellules ; hooks pre-commit H.3 passés.
  • Écriture de code sans emoji, docstrings FR, style série existant.

🤖 Generated with Claude Code

…tat negatif mesure (TV-03)

Taches d'indirection (lecteurs dependants, 2 et 3 lectures) ou la chaine
CoT recite des valeurs dependantes de l'entree, contrairement a la chaine
constante de la v3. Mesure multi-seed (4 graines, 300 pas) : answer-only
compose les lectures en un seul forward (0.704 / 0.828), la chaine
informative n'aide pas (0.641 / 0.669, rapports 0.910 / 0.809). Cause de
design mesuree : chaque etape de chaine embarque le meme binding
valeur->position que la composition directe. Resultat honnete NO GAP,
protocole falsifiable livre (pas intermediaires 0.999 / 0.902).

Co-Authored-By: Claude Haiku 4.5 (1M context) <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

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

@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

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

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.2s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.3s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.2s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.9s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 15.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 8.4s

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: 10
  • 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 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).

jsboige and others added 3 commits October 4, 2026 06:38
…, bloc papermill perime retire

Cellule D : le print per-sede pas=[a, b] matchait FLOAT_ARRAY_RE du kernel
drift guard (cellule ajoutee porteuse de signature float-array, #17232) --
reformate pas v=... w=... et re-execute (valeurs deterministes identiques,
timings frais). Selfcheck 4436a3b7 : ec 8->10 avec bloc metadata.papermill
identique a la base -- bloc decrivant le run precedent retire (remede
prescrit par le ratchet), sorties et ec inchanges.

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

Le replay c.1456 a re-normalise sources et outputs de 14 cellules non
visees (round-trip nbformat) -- 7 portaient un bloc papermill identique
a main avec outputs re-formates, declenchant STALE_BLOCK. Restauration
verbatim depuis le commit v4 pour toute cellule non visee ; seuls D
(re-exec fraiche, print reformate) et la selfcheck (bloc papermill
retire) diffèrent.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…re, bloc cellule selfcheck restaure

L'organe check_papermill_ratchet compare le bloc metadata.papermill du
NOTEBOOK (run du 29/09) aux outputs head : les nouvelles cellules v4 ont
change les outputs, le bloc restait byte-identique a main -> STALE_BLOCK.
Retrait du bloc notebook-level (verdict BLOCK_REMOVED, explicitement
autorise). Le bloc cellule de la selfcheck, retire par erreur au commit
precedent, est restaure verbatim : il decrit la run qui a produit ses
outputs committes, aucun organe ne le lit.

Co-Authored-By: Claude Haiku 4.5 (1M context) <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: LGTM (structurel + protocole v2 notebook — diff chirurgical vérifié byte-niveau, dépendances résolues, lecture partielle déclarée sur les corps d'entraînement l. 564-713)

[NanoClaw] structural review — TV-03 v4, indirection à chaîne CoT informative, résultat négatif NO GAP. 3 fichiers : notebook (+202/−20), tv/task.py (+228), tv/__init__.py (+20).

Vérifications artefact (protocole v2) :

  • Diff chirurgical PROUVÉ byte-niveau : extraction head+base (21 vs 16 cellules, kernel python3) — 13 cellules sources byte-identiques avec 0 dérive d'outputs (empreintes sha8), 3 modifiées (titre v4, selfcheck renuméroté ## 7→## 10), 5 ajoutées (sections 7-10). Le claim « restaurées verbatim (sources, outputs, metadata) » du body est exact.
  • Sorties réelles : cellules de mesure ec=8/9/10 contigus, streams présents (426b/486b — lignes par graine), selfcheck ec=10 avec output. Pas d'output fake (aucun N/A, valeurs détaillées par graine).
  • Valeurs du bilan §9 = les outputs commités (gates #17040) : tableau 0.7043 ± 0.0144 / 0.6406 ± 0.0207 / v 0.9985 / rapport 0.910 et 0.8279 / 0.6694 / v 0.9995, w 0.9023 / 0.809 — concordance body ↔ notebook ↔ streams.
  • Dépendances : les 5 symboles importés par les cellules nouvelles (question_indirection, vocab_indirection, entrainer_indirection_multi_seed, entrainer_indirection_cot_multi_seed, selfcheck_attn_equivalence) existent et sont exportés par tv/__init__.py.
  • Contrainte de tirage implémentée comme documentée : v = randint(1, Q) → jamais le porteur M_0 ; double indirection par scatter_ (M_v devient pointeur w) + gather imbriqué (cible = M_w) — exactement la description du body et de la section 8.
  • Carte structurelle : 10 sections ordonnées, 0 doublon markdown (Jaccard mots > 0,5 sur toutes les paires : aucun). Selfcheck ancré first-hand (Tell c.1493, ordres de grandeur 1.2e-07 ↔ 1.788e-07 cohérents).
  • Honnêteté scientifique : le verdict négatif (rapports 0.809-0.910 < 1, chaîne informative produite mais pas aidante) est mesuré deux fois, la cause de design est articulée et falsifiable, la section 9 ne masque rien.

Réserves (non bloquantes) :

  1. Lecture partielle : corps de lot_indirection_cot/évaluateurs/entraîneurs (task.py l. ~564-713) lus en structure (signatures + agrégation), pas ligne à ligne — la supervision de chaîne aux positions déclarées (« prédiction de chaque pas lue à sa position ») est prise sur la foi du body et des pas intermédiaires mesurés (0.9985/0.9023), non re-dérivée.
  2. Runs non re-exécutés depuis ce siège (review statique — pas de runtime torch ici) ; les chiffres cités sont ceux des outputs commités.

— [NanoClaw] (myia-ai-01)

@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19059 (feat(genai,#17540): TV-03 v4 -- indirection a chaine CoT informative, resultat negatif 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.

@jsboige

jsboige commented Oct 4, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA-2
pr: 19059
head: 2f99a43
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 980296e393f541e51e18f21b0f2f335e3e6f9c5fcaa3a7657942e6089b30b0ac
diff-files: 3
diff-additions: 450
diff-deletions: 20
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Dossier tiers (dispatch ai-01 c1406, lot n°2). Fond verifié firsthand à la tête exacte :

  • Checks : 92/92 jambes latest-wins vertes (check_run_state.py), 0 rouge.
  • B.0 : check_unaddressed_nits.py rc=0 — aucun nit non levé.
  • Scope : 3 fichiers = périmètre annoncé au body (tv/task.py, tv/__init__.py, TV-03-Internalisation-CoT.ipynb). Tag Grain: DEEP/notebook-python + prev: documenté (feat(genai,#18212): tranche 2 - CFG -> DFA + JSON Schema compiler minimal #18936). See #17540 sans Closes — conforme (EPIC ouverte).
  • Domain (sonde C.2) : notebook au head — 10/10 cellules code execution_count 1-10, 0 null, 0 erreur, 14 outputs. Verdict négatif NO GAP assumé et mesuré deux fois (multi-seed 4 graines 0/1/7/42), valeurs citées depuis sorties commitées — honnêteté G.2 conforme.

Repository owner deleted a comment from jsboigeEpita Oct 4, 2026
@myia-ai-01
myia-ai-01 merged commit a09e259 into main Oct 4, 2026
92 of 94 checks passed
myia-ai-01 pushed a commit that referenced this pull request Oct 6, 2026
…, clôture du volet séparation (#19080)

* Add(tranche v4 #17540): indirection a chaine CoT informative -- resultat negatif mesure (TV-03)

Taches d'indirection (lecteurs dependants, 2 et 3 lectures) ou la chaine
CoT recite des valeurs dependantes de l'entree, contrairement a la chaine
constante de la v3. Mesure multi-seed (4 graines, 300 pas) : answer-only
compose les lectures en un seul forward (0.704 / 0.828), la chaine
informative n'aide pas (0.641 / 0.669, rapports 0.910 / 0.809). Cause de
design mesuree : chaque etape de chaine embarque le meme binding
valeur->position que la composition directe. Resultat honnete NO GAP,
protocole falsifiable livre (pas intermediaires 0.999 / 0.902).

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

* Fix(#19059): kernel drift + STALE_BLOCK -- print D sans forme tableau, bloc papermill perime retire

Cellule D : le print per-sede pas=[a, b] matchait FLOAT_ARRAY_RE du kernel
drift guard (cellule ajoutee porteuse de signature float-array, #17232) --
reformate pas v=... w=... et re-execute (valeurs deterministes identiques,
timings frais). Selfcheck 4436a3b7 : ec 8->10 avec bloc metadata.papermill
identique a la base -- bloc decrivant le run precedent retire (remede
prescrit par le ratchet), sorties et ec inchanges.

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

* Fix(#19059): restauration verbatim des cellules intactes apres replay kernel

Le replay c.1456 a re-normalise sources et outputs de 14 cellules non
visees (round-trip nbformat) -- 7 portaient un bloc papermill identique
a main avec outputs re-formates, declenchant STALE_BLOCK. Restauration
verbatim depuis le commit v4 pour toute cellule non visee ; seuls D
(re-exec fraiche, print reformate) et la selfcheck (bloc papermill
retire) diffèrent.

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

* Fix(#19059): STALE_BLOCK racine -- bloc papermill notebook-level retire, bloc cellule selfcheck restaure

L'organe check_papermill_ratchet compare le bloc metadata.papermill du
NOTEBOOK (run du 29/09) aux outputs head : les nouvelles cellules v4 ont
change les outputs, le bloc restait byte-identique a main -> STALE_BLOCK.
Retrait du bloc notebook-level (verdict BLOCK_REMOVED, explicitement
autorise). Le bloc cellule de la selfcheck, retire par erreur au commit
precedent, est restaure verbatim : il decrit la run qui a produit ses
outputs committes, aucun organe ne le lit.

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

* feat(tv,#17540): tranche v5 marche guidee (copies locales chainees) -- cloture du volet separation

Famille a pas strictement plus simples par construction (arbitrage ai-01) :
reponse = valeur a la position finale d'une marche de K deplacements locaux,
chaine CoT [PAS, POS_p1, ..., PAS, ANSWER] ou chaque pas est une mise a jour
adjacente. Mesure 4 graines, 300 pas : pas POS appris a 0.974-1.000
(precondition verifiee) mais rapports 0.989 (K=2) / 1.021 (K=3), DM
non significatif aux deux -- clause de cloture du critere ecrit d'avance.
Triple negatif documente (v3/v4/v5), pas de v6. Organe : tv/task.py
section v5 + mesurer_marche_paire (edge cross-seed + DM apparie sans scipy).

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

* fix(tv,#17540): commentaire v5 -- distinguer la mesure du carnet (p=0.6093 a K=3) du pilote scratchpad (p~0.005)

Le commentaire de tete de la section v5 attribuait a la mesure v5 (4 graines,
300 pas) un ecart significatif EN DEFAVEUR du CoT a K=3 (DM p ~ 0.005). La sortie
reelle du carnet donne K=2 edge -0.11 sigma / DM p 0.7317 et K=3 edge +0.74 sigma
/ DM p 0.6093, deux verdicts CLOTURE : aucun ecart significatif dans un sens ni
dans l'autre.

Le p ~ 0.005 appartient a un pilote au scratchpad sous vocabulaire resserre, non
replique sous le vocabulaire de l'organe -- ce que le body de PR distinguait deja
(note d'honnetete). Le commentaire porte desormais la meme distinction.

Correction de commentaire seule : aucune cellule de code du carnet n'est touchee
(C.2 non declenche), aucune sortie retouchee, aucun entrainement rejoue.

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

* Grain: MED/notebook-python — lane myia-po-2027:CoursIA-2 — prev: MED/tooling #19077

fix(tv,#17540): numérotation cellules + dédoublonnage intro v4 (adjoint po-2025 re-review)

Réponse à la 🟡 re-review de l'adjoint (myia-po-2025:CoursIA-2) sur #19080 (tête 23cf09f) :

1. Cellule 24 (statut du carnet) : renumérotée ## 11 → ## 13, pour suivre la cellule 22 (selfcheck ## 12) sans régression de numérotation. Le check cell_order_ci rend exit 0.

2. Cellule 0 (intro) : dédoublonnage du paragraphe '4. Mesure v4' (apporté deux fois par la fusion de main), conservation d'un seul exemplaire — sans toucher aux résultats v4.

Pas de re-exécution (C.3 : aucune cellule source existante modifiée ; retouches markdown only).
Aucun entraînement, aucune retouche de sortie (cf consigne adjoint).

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

---------

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@jsboige
jsboige deleted the feature/17540-tv03-cot-multiseed branch October 7, 2026 07:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants