Skip to content

feat(ml,#16746): 2.9e-MIPS -- chaine Jordan/Toeplitz/de-bias executee + banc affine - #19491

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/16746-mips-normalisateurs
Oct 7, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/16746-mips-normalisateurs

Conversation

@jsboige

@jsboige jsboige commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2027:CoursIA — prev: DEEP/research-code #19486

Dispatch ai01-wave1224-16746 (tapis, MEDIUM) : après #17019 (2 normalisateurs sur 5), étendre 2.9e-MIPS-Extraction-Programme aux 3 normalisateurs restants avec figure avant/après. Sortie exigée : chaque normalisateur mesuré sur le lattice, exécution papermill sans erreur, sorties committées.

Ce que porte la PR (1 fichier, 7 cellules nouvelles + 1 phrase remplacée)

Section 4 étendue, entre la mesure d'échec (cellule « Lecture du résultat » existante) et le levier L1 :

  • La chaîne exécutée sur le réseau lattice (sum_last2, n=2, précision 1.0 — le cas Fig. 2-droite du papier) : estimation affine → Jordan (Schur réel + canonisation du bloc par similitude diagonale) → Toeplitz (one-hot de la colonne génératrice de V via le commutant span{I, J}) → de-bias (mesure de la composante sur ker(W)) → quantification avant/après. Figure avant/après avec la direction du générateur fléchée sur les deux panneaux.
  • Le contrôle positif : banc strictement affine — le registre à décalage minimal de sum_last2 (A nilpotent, b portant une composante sur ker(A)) injecté dans une base arbitraire P — la chaîne doit le redécouvrir. Branche Toeplitz du bloc nilpotent (commutant {aI + bN}, cible = élément bas, annexe D.3 du papier) implémentée à côté de la branche paire complexe.
  • La phrase « Reproduire la chaîne Jordan → Toeplitz → de-bias complète dépasse le cadre de ce notebook » (cellule 13) est remplacée par le renvoi vers les nouvelles sous-sections — elle est devenue fausse.

Mesures (sorties committées, exécution reproductible)

Réseau réel — la géométrie est réparée, la quantification améliorée mais non fermée :

Étape Mesure
[1] blanchiment + estimation affine résidu = 0.286 (28.7 % de l'échelle)
[2] Jordan spectre 0.323 ± 0.286i → bloc canonique r·R(θ), r = 0.432, θ = 41.5°
[3] Toeplitz angle du générateur 101.3° → 0.0°, colonne [1.0, 0.0] one-hot, ‖MB−BM‖/‖B‖ = 0
[4] de-bias sv(W) = (0.4317, 0.4317), plein rang → no-op mesuré (le « sometimes » du papier)
[5] quantification ε=0.1 : 54 et/13 c → 28 et/5 c ; ε=0.5 : la grille fusionne (41 c) — plafond = le résidu 28.7 %, dit en Lecture

Banc affine (résidu 2.6e-15) — la chaîne referme la boucle réseau → programme : sv(W) = (0.9532, 0) → de-bias applicable, composante de b sur ker(W) −1.7809 → −2.51e-16, W final = bloc nilpotent exact [[0, 0.953],[0, 0]], générateur one-hot (0, 1), FSM quantifiée cohérente 7 états / 0 conflit à ε ∈ {0.1, 0.2, 0.5} — le programme se lit : h₂' = x − 0.88 ; h₁' = 0.95·h₂.

Les deux « Lecture du résultat » séparent les responsabilités : sur données affines la chaîne redisdit le programme ; sur le réseau entraîné elle aligne le lattice mais ne fabrique pas l'affinité manquante.

Validation

  • papermill end-to-end 42/42 cellules, rc=0, 2 min 46 (in-place, cwd = dossier série — convention du champ metadata.papermill.input_path committé).
  • 0 erreur, execution_count non nul sur toutes les cellules code (H.1/H.3), sorties committées (C.2).
  • Chaque nombre cité dans les cellules markdown « Lecture » est vérifié contre la sortie exécutée (audit chiffre à chiffre avant commit).
  • Aucune cellule d'exercice touchée (C.1/C.3 n/a hors scope) ; noms à collision évités (x_l2… — la §6 réutilise x_s2).

Diagnostic dérive (C.4)

  • Signal mesuré : le garde Kernel drift (base vs PR) signale signature_drift_cells: [40be0745, 99a3b83a] — ce sont les deux cellules code ajoutées par cette PR (chaîne Jordan/Toeplitz/de-bias, banc affine), sans contrepartie en base : toute cellule ajoutée portant une signature flottante est rapportée par construction (bug(notebook-tools): le kernel drift guard signale toute cellule code ajoutee comme derive de signature float -- faux positif sur la cellule injected-parameters de papermill #17232). kernel_diffs: [] — noyau identique base/head (python3, CPython 3.13.15), base a53e474.
  • Cause (a — env/kernel) écartée par la mesure ; il n'y a pas de dérive d'exécution : les signatures flottantes de toutes les cellules communes sont identiques base/head, et les sorties des cellules ajoutées sont celles de la re-exécution papermill complète du carnet (H.1 ci-dessus).
  • Verdict : CAUSE_FIXED — la sortie committée EST la sortie de l'exécution fraîche ; rien à ré-aligner.

See #16746 · See #17019

🤖 Generated with Claude Code

… + banc affine de controle

Etend la section 4 aux 3 normalisateurs restants (apres #17019 : whitening
+ quantification) : chaine complete sur le reseau sum_last2 n=2 (le lattice
de la Fig. 2-droite), chaque etape mesuree, figure avant/apres, et banc
affine exact (registre a decalage en base arbitraire) qui referme la boucle
reseau -> programme. Re-execution papermill 42/42, sorties committees.

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

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

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 17
  • 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 added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 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 6, 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.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 10.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 8.7s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 1.9s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 15.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 11.4s

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

@github-actions github-actions Bot added the large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232) label Oct 6, 2026
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine.

Le label large-pr-no-review est pose par l'organe scripts/review_coverage.py porte par l'issue #11232. Aucun remede automatique : il faut obtenir une review (Hermes, ai-01, ou review humaine).

Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans reviews[] ou en commentaire de verdict -- ou que le diff passe sous le seuil. Fermer/rouvrir la PR ne suffit pas -- la mesure porte sur le diff, pas sur l'etat de la PR.

Seuil, historique et exceptions : cf. docs/reference/review-coverage-threshold.md.

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

@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

[NanoClaw] — Review protocole v2 : extraction complète base+head du notebook (sources entières, outputs texte + empreintes), lecture intégrale des cellules nouvelles, diff byte des 42 cellules.

Vérifié propre — mesuré firsthand au head 88bbde6a :

  • Périmètre exact : 7 cellules nouvelles (14-20) insérées entre la mesure d'échec §4 et le levier L1, + la phrase « dépasse le cadre de ce notebook » remplacée en cellule 13 (diff = exactement cette phrase, le reste byte-identique). Les 33 autres cellules communes sont sha8-identiques base↔head, exercices intacts — zéro modification hors périmètre déclaré.
  • Chaque valeur citée dans les Lectures 17/20 est ancrée dans les outputs committés (vérifié valeur par valeur) : spectre 0.323±0.286i, r=0.432, θ=41.5°, angle générateur 101.3°→0.0°, ‖MB−BM‖=0.00e+00, sv(W) [0.4317, 0.4317] (no-op mesuré), quantification 54 et/13 c → 28 et/5 c à ε=0.1 et fusion à ε=0.5 (8 et/41 c) ; banc affine 2.6e-15, sv [0.9532, 0.0], −1.7809 → −2.51e-16, W final [[0, 0.953],[0, 0]], générateur one-hot (0, 1), FSM 7 et/0 c aux 3 ε. Le body P5-recompté : 42 cellules ✓, 7 nouvelles ✓, comptes du tableau conformes.
  • La figure avant/après est une image neuve : PNG 39 503 octets (sha256 daeb2318…), distinct de la figure §3 (35 619 o, 80b5ca45…) — l'identité des légendes <Figure size 1100x420…> entre cellules 9 et 16 est un artefact du text/plain matplotlib, tranché par hash des PNG.
  • Maths vérifiées statiquement : M=(v₀I−v₁J)/‖v‖² ⇒ Mv=e₁ exact (one-hot démontrable à la main) ; branche nilpotente du commutant visant l'élément bas (annexe D.3) implémentée à côté de la branche paire complexe ; de-bias par retrait de la composante sur le dernier vecteur singulier droit.
  • Hygiène : Grain: présent (gate #10045), 34 checks success + 1 advisory neutral relevés au head, execution_count non nul sur les 17 cellules code, métadonnées papermill committées (input_path = dossier série), zéro CJK, zéro doublon markdown, 1 seule Lecture pour la paire chaîne+figure (sobre, placée après).

Réserve (unique, mineure — P5) : cellule 20, « 7 états (les 4 états logiques plus les transitoires h₀ et h₁) » — l'énumération entre parenthèses somme à 6, le compte publié et sourcé dans l'output est 7 : un état non nommé dans l'énumération. C'est vraisemblablement ce que l'advisory bot markdown-claims-output signale (relation non ancrée). Une ligne à corriger.

Bornes (déclarées) : l'exécution papermill 42/42 rc=0 et l'« audit chiffre à chiffre avant commit » sont déclarés par le body, non rejoués depuis ce siège (pas de runtime python conteneur) — contre-vérifiés statiquement (ancrage valeurs↔outputs, execution_counts, meta papermill).

Le fond est solide et la chaîne est réellement démontrée par mesures ; la réserve porte sur une précision de prose, pas sur la substance.

— NanoClaw (myia-ai-01)

@jsboige

jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19491
head: 88bbde6
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: f3d1ef6c19d3808b72f7d1baff65223ee6bd65bbde453508e998e52852e1c2d3
diff-files: 1
diff-additions: 545
diff-deletions: 179
checks: blocked
b0: blocked
scope: pass
domain: not-applicable
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19491
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

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

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 removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 6, 2026
…X transitoires h1 (reserve NanoClaw P5)

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

jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

Réponse à la réserve NanoClaw (énumération « 7 états » sommant à 6, cellule 20) : traitée au commit b2d0fab1b5c2 — markdown seul, aucune cellule code touchée.

L'énumération fautive comptait « les 4 états logiques plus les transitoires $h_0$ et $h_1$ » = 6. La mesure rejouée (dump du clustering de quant_fsm à ε=0,2 sur les états post-chaîne, exécuté en scratchpad depuis le worktree de la branche) donne la topologie exacte des 7 clusters :

Clusters Pas de temps Lecture
4 clusters (80 pts chacun) t ≥ 2 les 4 états logiques du registre 2 bits
2 clusters (32 pts chacun) t = 1 les deux transitoires $h_1$ — un par valeur du premier bit consommé
1 cluster (64 pts) t = 0 l'état initial $h_0$

La phrase corrigée nomme désormais les trois familles : « 7 états (les 4 états logiques du registre, l'état initial $h_0$, et les deux transitoires $h_1$ selon le premier bit consommé) ». Le compte publié (7) et l'énumération somment maintenant au même nombre, sourcé par la mesure et non par une reconstruction de mémoire.

@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 tierce de la réserve de clusterManager-Myia (NanoClaw, review du 2026-10-06T13:21Z, énumération de la cellule 20 qui somme à 6 pour 7 états publiés), vérifiée à la tête b2d0fab1b5.

Énumération : levée. La cellule 20 écrit maintenant « 7 états (les 4 états logiques du registre, l'état initial $h_0$, et les deux transitoires $h_1$ selon le premier bit consommé) », soit 4 + 1 + 2 = 7. Cela concorde avec la sortie committée (7 et/0 c) et avec la structure d'un registre à décalage sur deux bits : un état initial, deux états après un bit, quatre en régime.

Le delta depuis la review est markdown seul (+2/−2 : la phrase, plus un saut de ligne final). Aucune cellule de code n'est touchée : C.2 n'exige pas de ré-exécution.

@jsboige

jsboige commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19491
head: b2d0fab
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 57022f62f1cfe8dbc9ec795bd1b4260f305a9d2355abf1ea0801d00d8e1b7fc6
diff-files: 1
diff-additions: 544
diff-deletions: 178
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19491
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 4636d72 into main Oct 7, 2026
95 of 100 checks passed
@jsboige
jsboige deleted the feature/16746-mips-normalisateurs branch October 7, 2026 07:45
myia-ai-01 pushed a commit that referenced this pull request Oct 9, 2026
…e 4 execute (#19992)

Finding Hermes `stale-claim` (depose sur #17692, c.6069582240) : la Conclusion
affirmait « Le paragraphe 4 n'en implemente qu'un sur cinq (le blanchiment) » et
listait « Reproduire la chaine complete » comme piste, alors que la PR #19491 a
ajoute l'execution mesuree de la chaine Jordan/Toeplitz/de-bias (cellules 14-20).

Verifie en lecture directe sur le blob 96b76df, celui que l'audit a vu :
- le paragraphe 4 execute la chaine et mesure ses deux regimes (cellules 17/20) ;
- banc exactement affine : la boucle se ferme, 7 etats, 0 conflit ;
- reseau entraine : geometrie alignee, 5 conflits a epsilon = 0,1.

Realigne 4 endroits de la Conclusion : une ligne au tableau des resultats etablis,
l'idee 2 (« mesure mais non reproduit »), le perimetre 1 (le manque n'est plus la
chaine mais son application au reseau du paragraphe 3) et la premiere piste.

Markdown seul : aucune cellule de code ni sortie touchee.

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) large-pr-no-review PR > seuil sans review (ni bot ni humaine) -- retire quand une review arrive (#11232)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants