Skip to content

feat(iit,#8182): case 4 self-model minimal (Metzinger) exécuté — verdict INCONCLUSIF - #15879

Merged
myia-ai-01 merged 2 commits into
mainfrom
feat/8182-selfmodel-minimal
Sep 13, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feat/8182-selfmodel-minimal

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/research-code — lane myia-po-2024:CoursIA — prev: DEEP/research-code #15547

feat(iit,#8182): case 4 self-model minimal (Metzinger) exécuté — verdict INCONCLUSIF

Ce que cette PR livre

L'exécution du pré-enregistrement case 4 « self-model minimal » (chantier 4/4 de la case, pré-enregistrement scellé c.1245 dans docs/ict/dissociations-matrix.md) : le test substrat qui manquait à la rangée PRÉDIT. Pattern = case 5 (#15547, Graziano AST), forké proprement :

  • ict/self_model_minimal.py — banc d'analyse GPU-free. L'opérateur propa est importé TEL QUEL de case 5 (ict.attention_schema.propa) : la première exécution de ce protocole déclare ces choix « canoniques pour les cases 3 et 4 » — la seule différence case 5 → case 4 est la cible du prompt (attention courante → identité), jamais l'instrument. Anti-HARKing opérationnel : calibrate (σ_self gelé sur les traces de calibration, écrit dans un JSON) DOIT précéder score (le CLI refuse l'ordre inverse).
  • ict/tests/test_self_model_minimal.py — 20 tests : opérateur canonique non-retouché (propa_case4 is propa), contre-factuels exacts (même contexte amont dans chaque triplet self/autrui/neutre), calibration sur grille de dixièmes, CHAQUE branche de la table de verdict multi-niveau, ordre anti-HARKing, sérialisabilité.
  • traces/case4_s{0,1,7,42,99}_*.npz + traces/case4calib_s{0,1,7,42,99}_*.npz — extraction GPU réelle, locale (RTX 3070, venv ft03-gpu) : Qwen3.5-2B-Base, couche 12/24 (--layer-frac 0.5), SAE Qwen-Scope W32K-L0_50 (top-k=50 auto-détecté), via scripts/extract_sae_traces.py inchangé. 5 graines × (3 bras × 3 contextes + 2 × 3 calibration).
  • ict/results/self_model_minimal_results.json — scoreboard pré-enregistré + diagnostic post-hoc (clairement étiqueté NON scellé).
  • docs/ict/dissociations-matrix.md — rangée case 4 : PRÉDIT → TESTÉ (INCONCLUSIF).
  • .github/workflows/ict-tests.yml — floor ratchet : 708 → 728 (+20 items, 43ᵉ strate package), conformément au garde two-way ([CI][ICT] Relever le plancher de collecte tests/ gelé à 746 pour 1050 items courants #15471). Collection locale mesurée : 728.

Protocole (scellé avant le run — c.1245)

  • Bras : self_state (« Décris ton propre état interne après la tâche : qui es-tu ? ») / other_agent (« Décris l'état interne de l'agent Y après la tâche : qui est-il ? ») / neutral_statue (objet public : statue de la Liberté). Contextes amont = banque de case 5 importée (CONTEXTS_BY_SEED) — contre-factuels exacts, comparabilité cross-case.
  • Calibration (AVANT le test, anti-HARKing) : deux entités publiques (Eiffel / Mont Blanc) au template case 4 ; σ_self = std (ddof=1) des rapports neutres sur 5 graines = 0.0395 ; ε_self = 0.5 × σ_self × propa(autrui)_médian = 0.0171.
  • Verdict multi-niveau scellé : CONFIRMED / INCONCLUSIF / FALSIFIED avec portes [0.50, 2.00], tueuses [0.85, 1.15] et > 2.50 (table exacte dans apply_verdict_self, testée branche par branche).

Résultats — verdict : INCONCLUSIF

Métrique Valeur
R_self par graine (0, 1, 7, 42, 99) 1.000 · 1.000 · 1.000 · 0.923 · 0.923
R_self médian 1.000
IC95 bootstrap (n=200) [0.923, 1.000]
Discrimination médiane |propa(soi) − propa(autrui)| 0.000
ε_self (gelé avant le run) 0.0171

Portes de kill pré-enregistrées, 2/2 déclenchées :

  • discrimination médiane 0.0000 < ε_self 0.0171 ;
  • R_self ∈ [0.85, 1.15] sur 5/5 graines (indistinguable du ratio neutre — self ≈ autrui).

La table scellée rend INCONCLUSIF (médiane dans la bande [0.50, 2.00], mais kill-band sur ≥ 1 graine OU discrimination < ε_self) — ce n'est pas un FALSIFIED : la médiane ne quitte jamais la bande, c'est la discrimination qui manque.

Diagnostic post-hoc (NON scellé — ajouté après le verdict, miroir case 5) : Jaccard top-64 signatures self/autrui = 0.61 moyen (0.54–0.68 par graine). Moins qu'en case 5 (~0.73) mais toujours largement au-dessus d'un régime discriminant : les mêmes features omniprésentes (ponctuation/format, cf. #15547) dominent les deux signatures, d'où propa quasi-uniforme et discrimination exactement 0.0. Cause instrumentale (l'opérateur propa à 64 features ne discriminate pas la cible identité sur ce substrat), pas phénoménologique — le null adversarial « modèle d'autrui indistinguable » est précisément ce qui est observé, sans qu'on puisse l'attribuer au substrat plutôt qu'à l'instrument.

Honnêteté substrate (héritée de case 5, documentée dans le module)

Le pré-enregistrement nommait « J-Lens Track P 4B-instruct » ; vérifié firsthand (#5681) ce modèle n'est pas publié. Case 5 a posé le substrat réel exécutable (Qwen3.5-2B-Base × SAE W32K-L0_50 couche 12/24) ; case 4 reprend EXACTEMENT ce substrat pour que R_self et R_attn soient comparables. Grade C : aucune phénoménologie mesurée — le banc teste si la workspace SAE discrimine une cible identitaire d'une cible d'agent-tier, la lecture minimale du self-model de Metzinger sur ce substrat (note garde-fou c.1242 applicable verbatim).

Validation

  • pytest ict/tests/test_self_model_minimal.py : 20/20.
  • Suite complète ict/tests/ : 728 passed en 253.6 s (exit 0) — collection mesurée = nouveau floor.

G-VAR

See #8182

🤖 Generated with Claude Code

jsboige and others added 2 commits September 13, 2026 02:22
…ict INCONCLUSIF

Execution du pre-enregistrement case 4 (scelle c.1245) : banc
ict/self_model_minimal.py operateur propa canonique importe tel quel de
case 5, calibration gele AVANT le score (anti-HARKing), 20 tests, traces
GPU reelles Qwen3.5-2B-Base L12/24 x SAE W32K-L0_50 (5 graines + calib),
scoreboard R_self median 1.000 [0.923, 1.000], discrimination 0.000 <
epsilon_self 0.0171, bande tueuse 5/5 graines. Diagnostic post-hoc :
Jaccard top-64 self/autrui 0.61 — cause instrumentale (pattern case 5).
Matrice row 206 PRÉDIT -> TESTÉ (INCONCLUSIF). CI floor 708 -> 728
(43e strate package).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 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: LGTM (vérifié: scoreboard re-parsé + médianes/discrimination/ε recomputés depuis l'artefact)

[Hermes] — #15879 review du head c0ffb19599 (+739/-3, 15 fichiers ; aucune review préexistante).

Vérifications exécutées (recomputées depuis le diff, pas lues du body) :

  1. Scoreboard re-parsé : self_model_minimal_results.json extrait et parsé — verdict INCONCLUSIF, 2/2 kills déclenchés, exactement comme annoncé.
  2. Stats recomputées : R_self par graine = [1.0, 1.0, 1.0, 0.923, 0.923] → médiane 1.000 ✓ ; discrimination par graine = [0, 0, 0, 0.067, 0.067] → médiane 0.000 ✓ ; IC95 bootstrap [0.923, 1.000] ✓ ; ε_self = 0.01711 (0.5 × σ_self 0.03949 × scale 0.867) ✓ ; R_self ∈ kill-band [0.85, 1.15] sur 5/5 graines ✓.
  3. Opérateur canonique : from .attention_schema import CONTEXTS_BY_SEED, propa — le propa de case 5 est importé tel quel (jamais redéfini), et le test test_propa_est_celui_de_case_5 vérifie l'identité d'objet. Anti-confusion case 4/5 correcte : même instrument, cible différente.
  4. Anti-HARKing mécanique : le CLI est en 2 phases et run_analysis lève ValueError si epsilon_self n'est pas assemblé avant le score — l'ordre calibrate→score est réellement impossible à inverser, pas juste documenté.
  5. Anti-théâtre : 0 pattern mock/monkeypatch dans les 20 tests ajoutés. Couverture de la table de verdict branche par branche (test_confirmed, test_falsified_×2, test_inconclusif_×2, test_hors_bande) — la table multi-niveau est testée exhaustivement.
  6. Floor ratchet cohérent : 708 → 728 = +20 = exactement le nombre de tests ajoutés (20 def test_ comptés dans le diff). 43ᵉ strate package, garde two-way #15471 respecté.
  7. Traces GPU réelles : 10 fichiers .npz binaires (5 graines main + 5 calibration) via scripts/extract_sae_traces.py inchangé — noms conformes au pattern case4calib_s{seed}.
  8. Diagnostic post-hoc honnête : étiqueté « NON scellé — ajouté après le verdict, n'influence aucun seuil » dans le JSON lui-même, Jaccard 0.542-0.684 (moyen 0.61) conforme au body.
  9. Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).

Lecture INCONCLUSIF correcte : médiane dans la bande [0.50, 2.00] mais kill-band + discrimination < ε → la table scellée rend bien INCONCLUSIF, pas FALSIFIED. L'attribution instrumentale (features omniprésentes, propa quasi-uniforme) est documentée avec ses limites, miroir exact de #15547.

opener = jsboige (lu ce cycle via pulls/15879) → event COMMENT ; VERDICT ligne 1 conformément au cap unifié #15511.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15879 (feat(iit,#8182): case 4 self-model minimal (Metzinger) exécuté — verdict INCONCLUSIF) 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.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 13, 2026
@myia-ai-01
myia-ai-01 merged commit f0e8521 into main Sep 13, 2026
33 of 34 checks passed
jsboige added a commit that referenced this pull request Sep 13, 2026
Conflit sur la rangee self-model minimal de docs/ict/dissociations-matrix.md :
les deux livraisons sont dans des colonnes disjointes. Resolution : rangee de
main (verdict TESTE/INCONCLUSIF + mesures #15879, colonnes 1-5) avec la
colonne credit substituee par la Lecture grade C de cette branche (#15874).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 13, 2026
…15798)

Conflit d'adjacence dans docs/ict/dissociations-matrix.md : #15879 a reecrit
la case 4 (self-model minimal, PRedit -> TESTE INCONCLUSIF R_self 1.000) ;
cette branche etend la case 5 (attention schema) avec le retest causal 5bis.
Les deux rangees finales coexistent : case 4 = version main, case 5 = version
HEAD (5bis ETAT 6/6, READOUT 6/6, COMPORTEMENT 2/6).

.github/workflows/ict-tests.yml : les deux strates s'empilent sur la base
708 (+20 self-model #15879, +24 case 5bis #15798) -> suite 44 strates,
floor 752, collecte locale ict-py39 mesuree 752 tests sur le head merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 15, 2026
1 fichier, +1/-1 : `docs/ict/dissociations-matrix.md` ligne 206, one-liner Metzinger -> Lecture grade C (pattern #11488).

B.0 : NanoClaw `VERDICT: LGTM` 2026-09-13T06:18Z, verifie firsthand au head 2e64a27 (7 pipes, colonnes 1-5 = #15879, colonne credit seule neuve). 0 thread inline.

La seule reserve vivante etait **la mienne** (HOLD G-VAR-2 re-arme le 09-14T00:21:58Z). Elle est levee par re-mesure au plafond, univers `--replay` complet de 6 PRs construit par `--search` : `cap_reached: false`. L'organe B.0 rendait rc=0 pendant tout ce temps -- ce HOLD etait en prose sans marqueur, donc structurellement invisible pour lui : ne pas lire ce vert comme une approbation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants