Skip to content

feat(origami,#19766 pli 3): K_trajectory sur Wolframe Rule 30 + Rule 110 -- discriminant cross-dimension 1-D / 2-D - #19815

Merged
myia-ai-01 merged 5 commits into
mainfrom
feature/19766-origami-pli3-kwolfram
Oct 9, 2026
Merged

myia-ai-01 merged 5 commits into
mainfrom
feature/19766-origami-pli3-kwolfram

Conversation

@jsboige

@jsboige jsboige commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/research-code -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python c.108 #19807

feat(origami,#19766 pli 3): K_trajectory sur Wolframe Rule 30 + Rule 110 -- discriminant cross-dimension 1-D / 2-D

Livrable

Extension de scripts/hashlife/k_trajectory.py avec mode --mode wolfram qui mesure la complexite structurelle (Kolmogorov via compression LZ fenetree) sur les trajectoires 1-D des automates de Wolfram.

  • Mode CLI : --mode wolfram --rule <int> --n-cells <int> --seed <int> (mesure une regle unique) ou --mode wolfram --all (Rule 30 + Rule 110 par defaut).
  • Organe reel invoque : from ict.wolfram_step import wolfram_trajectory (pli 2 PR feat(iit,#19766 pli 2): ict.wolfram_step -- organe de l'automate 1-D de Wolfram (extrait d'ICT-18 EG3) #19793, OPEN) -- aucune reinstrumentation de la trajectoire 1-D.
  • Conversion 1-D -> grille : wolfram_trajectory_to_grid() convertit chaque etat 1-D en grille 1xN, compatible avec grid_to_packed existant (8 cellules/octet, MSB first).
  • Mesure LZ fenetree : W in {1, 2, 4, 8, 16, 32, 64} (7 fenetres pour n_cells=64). Sortie : K_trajectory, ratio K_last/K_first, verdict par regle.
  • Verdict falsifiable : CHAOTIC-FRAGILE (Rule 30 attendu), TURING-ENTRENED (Rule 110 attendu), WEAK (indetermine), REFUTED (prediction invalidee). Verdict final cross-regles : CONFIRMED / PARTIAL / REFUTED / INCONCLUSIVE.
  • Sortie JSON : --json-out <path> produit un JSON avec results, per_rule_verdicts, cross_verdict (compatible round-trip).

Mesure firsthand (verdict falsifiable)

n_cells=64, n_steps=64, seed=33 (canonique Wolframe 2002 ch. 2-3, Cook 2004) :

Regle K(t, W=1) K(t, W=64) Ratio Verdict
Rule 30 (classe III, chaos) 1026 523 0.510 CHAOTIC-FRAGILE (confirme)
Rule 110 (classe IV, Turing) 1026 523 0.510 TURING-REFUTED (refute)

Cross-verdict : WOLFRAM-CROSS-DIMENSION-PARTIAL.

Resultat central : K_trajectory (LZ fenetre) NE detecte PAS la Turing-completude de Rule 110. Les deux regles produisent des trajectoires LZ-compressibles a toutes les echelles mesurees. La discrimination soup-vs-programme de la tranche 1 (T12 #18446) repose sur la detection de l'entropie, pas de l'auto-entretien structurel. La Turing-completude de Rule 110 se manifeste dans la diversite des configurations accessibles, pas dans la compressibilite d'une trajectoire particuliere.

Resultat documente en scripts/hashlife/WOLFRAM-VERDICT.md : interpretation detaillee, limites (LZ fenetre vs Kolmogorov structure function), 3 suites Origami (pli 5 regles de reecriture sur lakes Lean, pli 6 graphe multiway, pli 7 instrument alternatif de complexite de regle).

Tests (9/9 verts ce cycle)

scripts/hashlife/tests/test_wolfram_mode.py::TestWolframTrajectoryToGrid::test_1d_state_becomes_1xN_grid PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestWolframTrajectoryToGrid::test_1d_state_from_organe PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestWolframTrajectoryToGrid::test_grid_is_compatible_with_k_trajectory PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestMeasureWolframTrajectory::test_rule_30_n64_seed33_runs PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestMeasureWolframTrajectory::test_rule_110_n64_seed33_runs PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestMeasureWolframTrajectory::test_measure_wolfram_corpus_includes_both_rules PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestWolframVerdict::test_rule_30_classified_fragile PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestWolframVerdict::test_cross_verdict_is_partial PASSED
scripts/hashlife/tests/test_wolfram_mode.py::TestWolframJsonRoundtrip::test_results_json_has_required_keys PASSED
============================== 9 passed in 4.61s ==============================

Tests conftest.py ajoute automatiquement MyIA.AI.Notebooks/IIT/ICT-Series au sys.path (necessaire pour from ict.wolfram_step import ...).

Ancrage organ-first (5 questions repondue par construction)

  1. Serie possedant la semantique : ict.wolfram_step (organe livre par pli 2 PR feat(iit,#19766 pli 2): ict.wolfram_step -- organe de l'automate 1-D de Wolfram (extrait d'ICT-18 EG3) #19793).
  2. Module reel invoque : from ict.wolfram_step import wolfram_trajectory ; aucune reinstrumentation de la trajectoire 1-D.
  3. Refactor dans la serie source : non applicable -- l'organe existe deja sur le PR feat(iit,#19766 pli 2): ict.wolfram_step -- organe de l'automate 1-D de Wolfram (extrait d'ICT-18 EG3) #19793.
  4. Temonin negatif : la mesure de Rule 110 a 1026 cellules en K(t,W=1) et 523 en K(t,W=64) -- identiques a Rule 30, malgre la Turing-completude. Toute reinstrumentation naive ferait pareil et masquerait le verdict.
  5. Verification independente : un reviewer externe peut reproduire avec python scripts/hashlife/k_trajectory.py --mode wolfram --all --n-cells 64 (avec PYTHONPATH=MyIA.AI.Notebooks/IIT/ICT-Series).

Reproduction

# Cloner + s'assurer que ict.wolfram_step est dans sys.path
export PYTHONPATH=MyIA.AI.Notebooks/IIT/ICT-Series

# Mesure Rule 30 seule
python scripts/hashlife/k_trajectory.py --mode wolfram --rule 30 --n-cells 64

# Mesure cross-regles (Rule 30 + Rule 110)
python scripts/hashlife/k_trajectory.py --mode wolfram --all --n-cells 64

# Sortie JSON pour verification
python scripts/hashlife/k_trajectory.py --mode wolfram --all --n-cells 64 --json-out wolfram_results.json

# Tests pytest
python -m pytest scripts/hashlife/tests/test_wolfram_mode.py -v

Fichiers

Fichier Statut Lignes
scripts/hashlife/k_trajectory.py modifie +252 / -1
scripts/hashlife/WOLFRAM-VERDICT.md nouveau 90
scripts/hashlife/wolfram_results.json nouveau 50
scripts/hashlife/tests/__init__.py nouveau 1
scripts/hashlife/tests/conftest.py nouveau 9
scripts/hashlife/tests/test_wolfram_mode.py nouveau 165

Suite (c.110+)

  • Pli 5 Origami : regles de reecriture d'hypergraphes sur les graphes de lakes Lean (programme = regle ; trajectoire = derivation).
  • Pli 6 Origami : extraction du graphe multiway d'un lake (game_theory_lean/CooperativeGames/ par exemple), mesure de la profondeur moyenne et largeur de branchement.
  • Pli 7 Origami (propose) : instrument alternatif de complexite de regle (Kolmogorov structure function ou SAT-based minimal program) pour discriminer Turing-complet vs chaos sur 1-D.

Couts

  • Cluster QC : nul.
  • Env Lean : nul.
  • GPU : nul.
  • Coût kernel Python : < 30 s pour Rule 30 + Rule 110 sur 64 et 128 cellules (cf. mesure premiere).

Rebase

Cette PR est branchee sur feature/19766-origami-pli2-wolfram-step (PR #19793). Apres merge de #19793, rebase sur main necessaire (git rebase origin/main) -- la mesure depend de l'organe ict.wolfram_step qui n'est sur main qu'apres merge de #19793.

Rattachement

🤖 Generated with Claude Code

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

jsboige and others added 3 commits October 8, 2026 00:23
…de Wolfram (extraite d'ICT-18 EG3)

Grain: DEEP/research-code -- lane myia-po-2024:CoursIA-2 -- prev: LIGHT/repair c.106 #19716

Pli 2 de l'EPIC Origami Wolfram (#19766) -- extraction organ-first :
- wolfram_step(state, rule) : un pas d'AC 1-D avec voisinage 3-cellules et bords periodiques (Wolfram 2002 ch.2).
- wolfram_trajectory(rule, n_cells, n_steps, seed, ...) : trajectoire + historique de densite (nb de 1).
- wolfram_density(state) : proportion de cellules a 1.
- wolfram_class_indicators(densities, tail, n_cells) : 4 indicateurs asymptotiques (densite moyenne/std normalisees, nombre de densites distinctes, periodicite).
- classify_rule(rule, ...) : etiquette courte I/II/III-or-IV a partir de la trajectoire de densite ; reconciliation avec l'indexation Wolframe canonique.

Provenance : extrait d'ICT-18 Exemple guide 3 (Regle 30 vs 110 vs 0), dont la definition inline wolfram_step/wolfram_trajectory devient ici un organe reutilisable. Pattern life.py (accede via from ict.wolfram_step import ...) -- non exporte au niveau package (cf. life.py).

Limitations documentees : la discrimination III (chaotique) vs IV (complexe) necessite l'analyse des motifs spatiaux (gliders) -- hors scope de la mesure de densite seule. Le carnet pli 2 (ICT-18b ou ICT-19 selon curriculum) raffinera cette discrimination.

Verification : 12 regles testees (0, 4, 18, 22, 30, 45, 54, 73, 90, 110, 126, 150, 184, 250) ; classification heuristique alignee avec l'indexation connue pour les regles canoniques.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Extension de scripts/hashlife/k_trajectory.py avec mode --mode wolfram qui
mesure la complexite structurelle (Kolmogorov via compression LZ) sur les
trajectoires 1-D des automates de Wolfram.

- Mode --mode wolfram : genere la trajectoire via l'organe pli 2
  ict.wolfram_step (PR #19793), convertit chaque etat 1-D en grille 1xN
  compatible avec grid_to_packed, et mesure K_trajectory avec W in {1, 2,
  4, 8, 16, 32, 64}.
- Verdict CHAOTIC-FRAGILE / TURING-ENTRENED / WEAK / REFUTED par regle,
  plus verdict final cross-regles (CONFIRMED / PARTIAL / REFUTED).
- WOLFRAM-VERDICT.md documente la mesure falsifiable de ce cycle :
  Rule 30 = CHAOTIC-FRAGILE (ratio 0.510), Rule 110 = TURING-REFUTED
  (ratio 0.510, identique a Rule 30) -> WOLFRAM-CROSS-DIMENSION-PARTIAL.
  La Turing-completude de Rule 110 n'est PAS detectee par K_trajectory
  (LZ collapse) a ces dimensions.
- 9 tests pytest (scripts/hashlife/tests/test_wolfram_mode.py) : verts
  9/9 -- conversion 1-D -> 1xN, mesure Rule 30/110, verdict cross, JSON
  round-trip.
- wolfram_results.json : sortie verbatim du mode --all --n-cells 64
  pour reproductibilite.

Ancrage organ-first :
- Module reel : from ict.wolfram_step import wolfram_trajectory (pli 2).
- Instrument : k_trajectory.py etendu (T12 #18446, tranche 3 #19227),
  pas reecrit.

Refs : EPIC #19742, pli 1 #19766 (c.103-c.104), pli 2 organe #19793,
pli 2 carnet #19807 (ICT-48). Issue de suivi : #19813.

Grain: DEEP/research-code -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python c.108 #19807

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

Suite du commit precedent (k_trajectory.py etendu) :
- scripts/hashlife/WOLFRAM-VERDICT.md : verdict falsifiable documente
  (Rule 30 = CHAOTIC-FRAGILE, Rule 110 = TURING-REFUTED, cross = PARTIAL)
- scripts/hashlife/tests/ : 9 tests pytest (test_wolfram_mode.py + conftest.py)
- scripts/hashlife/wolfram_results.json : sortie verbatim --all --n-cells 64

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

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de feature/19766-origami-pli2-wolfram-step. 1 PR ouverte(s) de feature/19766-origami-pli2-wolfram-step vers main existe(nt) a cet instant -- c'est un stack legitime, le contenu est en vol. Verifier au moment du merge que la base est effectivement reliee a main.

Couverture CI perdue sur cette base (mesure, #16194)

8 workflow(s) se declencheraient si cette PR visait main, et ne se declenchent pas ici : leur filtre de branche cible les eteint, alors que leur filtre de chemins est satisfait par les fichiers de cette PR.

  • always-on-guards.yml
  • mermaid-fill-color-advisory.yml
  • notebook-plan-loss-gate.yml
  • organ-duplication-advisory.yml
  • paragraph-length-advisory.yml
  • pr-gate.yml
  • scripts-tests.yml
  • secret-scan.yml

Un check absent n'est pas un check vert. mergeStateStatus: CLEAN sur une PR empilee ne dit rien de ces workflows : il ne les a jamais vus.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19815
head: 8227563
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: e52dd62d0a8e7fb6c523f131e3be8107e67d8f3ab0fc8c1b29f6252863fbb38b
diff-files: 6
diff-additions: 637
diff-deletions: 1
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19815
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #19815 (feat(origami,#19766 pli 3): K_trajectory sur Wolframe Rule 30 + Rule 110 -- discriminant cross-dimension 1-D / 2-D) 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 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).

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[INFO] candidate-delivered -- PR #19815

Grain : DEEP/research-code -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python c.108 #19807
EPIC : Origami Wolfram #19766 (pli 3)
Title : K_trajectory Wolframe Rule 30 + 110 -- discriminant cross-dimension 1-D / 2-D
Head : 6e3eb8f602e3 (feature/19766-origami-pli3-kwolfram)
Author : jsboige
Diff : +637 / -1 / 6 files

B.0 verification

  • mergeable: MERGEABLE
  • mergeStateStatus: CLEAN
  • reviewDecision: none
  • checks: 23 OK, 0 FAIL, 0 PEND of 24
  • Grain: tag in body: YES
  • files: scripts/hashlife/WOLFRAM-VERDICT.md, scripts/hashlife/k_trajectory.py, scripts/hashlife/tests/init.py, scripts/hashlife/tests/conftest.py...

Dossier

Substance

Extension de scripts/hashlife/k_trajectory.py avec mode --mode wolfram (CLI). 6 fichiers, 637 lignes ajoutées (WOLFRAM-VERDICT.md + k_trajectory.py + 4 tests). Verdict falsifiable c.109 (K_trajectory LZ fenetre ne discrimine pas R30 vs R110 a n=64, ratio 0.510 identique).

Constat

PR ripe fleet-wide signalee au coord c.125. La candidate etait BLOCKED en c.123 (PLI 3 signalee par coord c.296), mais le PR gate vient de reussir (SUCCESS) et mss=CLEAN maintenant. Re-aggregation post-#19819 MERGE rejoue (cf. c.296 coord "rejouer la jambe" gratuit sans re-armer DWELL).
MSS=CLEAN merg=MERGEABLE : la candidate est "ready" pour le merge coord des que le dossier adjoint est credit.

Refs

@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 8, 2026
@github-actions

github-actions Bot commented Oct 8, 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.

jsboige added a commit that referenced this pull request Oct 8, 2026
…, pas la premiere

Adresse la review CHANGES_REQUESTED du coordinateur sur #19921 (tete
`ada0bc0a`).

Le garde lisait UNE seule parente : `find_stacked_parent` rendait la
premiere mention du body, et `run_organ` ne controlait que celle-la. Le
temoin de la review (`Depends on #19793` puis `Blocked by #19815`) rendait
donc `19793` seulement -- si #19793 est MERGED et #19815 OPEN, le chemin
nominal repartait sans jamais examiner #19815 et le merge se faisait sous
une dependance ouverte. Ce ne sont pas deux maillons d'une chaine
recursive : ce sont deux dependances DIRECTES de la meme PR.

- `find_stacked_parent` -> `find_stacked_parents`, qui rend **toutes** les
  parentes declarees, dedupliquees, dans l'ordre d'apparition. Toutes les
  patterns de `_STACKED_PATTERNS` sont parcourues par `finditer` au lieu
  d'un `search` qui s'arrete au premier hit.
- `run_organ` boucle sur cette liste et refuse des qu'UNE seule parente
  n'est pas MERGED, en nommant laquelle.
- Une dependance a soi-meme n'est plus ignoree en silence (`parent != pr`) :
  elle rend l'etat explicite `stacked-on-main:<N>:self-reference`, qui dit
  a la lane que son body est mal forme.

Tests (89/89 dans `test_merge_ready.py`, +5) :
- `test_stacked_on_main_second_dep_open_triggers_skip` -- le temoin de la
  review : premiere MERGED, seconde OPEN -> refus nommant la SECONDE, et
  les deux parentes sont bien interrogees.
- `test_stacked_on_main_two_merged_deps_is_nominal` -- les deux MERGED ->
  verdict `merged`, les deux parentes sondees.
- `test_stacked_on_main_unreadable_parent_triggers_skip` -- etat non
  classable -> `unreadable`, fail-CLOSED.
- `test_stacked_on_main_self_reference_is_explicit`.
- `test_find_stacked_parents_extracts_all_deduped` -- l'extracteur.
- `test_stacked_on_main_merged_parent_is_nominal` renforce : il verifie
  desormais le VERDICT (`merged`) et les appels attendus, pas seulement
  l'absence du motif de refus.

Controle negatif joue : avec l'ancien lecteur reinjecte (premiere parente
seule, auto-reference ignoree), les 3 nouveaux tests rougissent ; avec le
nouveau, 3/3 verts. Source restauree par `cp` depuis backup (identique).

Suite complete a la tete corrigee : 89 tests de `test_merge_ready.py` +
381 passes / 5 skipped sur les 7 suites voisines qui touchent merge_ready.
0 echec.

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19815
head: 6e3eb8f
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 226240ebccbe3bee9c675d2e24a73b60066313ca53825dde95ea209064d3c302
diff-files: 6
diff-additions: 637
diff-deletions: 1
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 19815
organ-rc: 0
[/ADJOINT PREFLIGHT]

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

🔴 Le verdict central est un artefact de taille : à n_cells = 64, l'instrument est saturé par le surcoût de zlib (tête 6e3eb8f602, rejoué localement).

Ce que dit la PR : Rule 30 et Rule 110 donnent les mêmes K(t, W) (1026 → 523, ratio 0.510), donc « K_trajectory ne détecte pas la Turing-complétude de Rule 110 ». Le verdict est TURING-REFUTED, et le test test_cross_verdict_is_partial le fige.

Ce que mesure l'instrument à cette taille — zlib.compress(..., level=6) :

Entrée Taille compressée
8 octets aléatoires (une trame de 64 cellules) 16
8 octets nuls 11
512 octets aléatoires (W = 64) 523 = 512 + 11 (bloc stocké, non compressé)

À W = 1, 64 trames × 16 octets ≈ 1026 ; à W = 64, un bloc stocké de 523. Les deux nombres sont du cadrage zlib, pas du contenu : pour W ≥ 8, R30 et R110 sont identiques à l'octet près.

Même code, même graine, --n-cells 1024 :

Règle K(W=1) K(W=64) Ratio
Rule 30 142 336 131 248 0.922 (quasi incompressible : le chaos)
Rule 110 101 299 56 484 0.558 (structure compressible)

L'instrument discrimine donc les deux règles dès qu'on le sort de sa zone de saturation. C'est l'inverse de la conclusion de la PR. Au passage, avec le seuil actuel (ratio < 0.7 → FRAGILE), Rule 30 ne serait plus classée FRAGILE à cette taille : la grille de verdicts est aussi à revoir.

Geste attendu :

  1. dimensionner la mesure hors saturation (n_cells ≥ 512 au moins, et vérifier que K(W=1)/n n'est pas une constante de cadrage) ;
  2. ou mesurer avec un compresseur sans surcoût fixe dominant (comptage de facteurs LZ76, par exemple) ;
  3. réécrire WOLFRAM-VERDICT.md et wolfram_results.json sur la mesure refaite, et corriger test_cross_verdict_is_partial, qui fige aujourd'hui l'artefact ;
  4. relire les plis empilés qui réutilisent la même mesure à n = 64 (#19819, #19826, #19836, #19847 partagent tous ces fichiers).

Le code de conversion 1-D → grille et l'appel à l'organe ict.wolfram_step ne sont pas en cause.

Cette réserve tient le merge.

[lane myia-ai-01:CoursIA]

…on zlib -- verdict REFUTED inverse

A n_cells=64 le verdict etait un artefact de cadrage : chaque etat packe (8
octets) est sous le plancher zlib (~11 octets/fenetre), Rule 30 et Rule 110 y
mesurent identiques a l'octet pres (1026 -> 523). Remesure firsthand a 512 et
1024 : l'instrument discrimine reellement, direction INVERSEE de l'hypothese
cross-dimension -- Rule 30 (chaos) incompressible (frac 1.001, K(W=1)/etat =
128+11 exact), Rule 110 (Turing-complet) compressible (frac 0.429, structure
fond periodique + particules). Correctifs : plancher n_cells >= 512 (verdict
SATURATED en dessous), classement sur la fraction de compression K/raw
(insensible au cadrage) au lieu du ratio brut (contamine : (c+11/64)/(c+11)
pour tout contenu incompressible), JSON canonique regenere a n=1024, test
figeur remplace par le garde de saturation + la direction inversee mesuree
(11/11 verts).

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Réponse point par point à la réserve (tête 6e3eb8f602) — tout est livré en tête 07d27bdad1 sur la même branche.

Point 1 — Dimensionner hors saturation : fait (n=512 et n=1024, remesuré firsthand)

  • Mesures refaites à n_cells = 512 et n_cells = 1024 (seed 33, mêmes n_values) : wolfram_results.json régénéré sur le 1024, tables 512/1024 dans WOLFRAM-VERDICT.md.
  • Le classement ne se fait plus sur le ratio brut mais sur la fraction de compression frac = K(t, W_last) / raw_packed_bytes avec raw_packed_bytes = n_steps × ceil(n_cells/8) — insensible au cadrage.
  • Garde structurelle : n_cells < 512 → verdict WOLFRAM-SATURATED par règle et WOLFRAM-CROSS-DIMENSION-INCONCLUSIVE en cross. L'instrument refuse désormais de discriminer dans la zone d'artefact.

Sur le contrôle « K(W=1)/n n'est pas une constante de cadrage » — vérifié, et le résultat est instructif : pour Rule 30, K(W=1)/état vaut exactement 75.00 = 64+11 à n=512 et 139.00 = 128+11 à n=1024 — c'est bien le plancher de cadrage, et c'est précisément la signature de l'incompressibilité (zlib rend des blocs stockés à toutes les échelles). Pour Rule 110, K(W=1)/état = 66.68 puis 96.13, sous le plancher — compression réelle dès W=1. La constante de cadrage devient donc le témoin négatif du classement, au lieu de le contaminer.

Point 2 — Compresseur sans surcoût : contourné par la métrique, alternative documentée

Le comptage de facteurs LZ76 est documenté en Limite n° 3 du verdict réécrit comme l'éliminateur du cadrage résiduel — non requis pour la discrimination courante : l'écart mesuré entre les deux règles est 0.43 vs 1.00 en fraction, très au-delà du bruit de cadrage (et du ~3 % de variance de build zlib, noté dans le doc : mes K(W=1) R110 = 98 439 vs vos 101 299, fractions et verdicts stables).

Point 3 — WOLFRAM-VERDICT.md, wolfram_results.json, test figé : réécrits

  • WOLFRAM-VERDICT.md : entièrement réécrit — section « artefact corrigé » (8 octets < plancher ~11, les deux règles identiques à l'octet près à n=64, contamination arithmétique du ratio), tables n=1024 et n=512, interprétation 4 points, limites, verdict final.
  • wolfram_results.json : régénéré par le CLI à n=1024 (--mode wolfram --all).
  • test_cross_verdict_is_partial supprimé (il figeait l'artefact) et remplacé par : garde n=64 (tout SATURATED + cross INCONCLUSIVE, y compris via le CLI JSON), test_rule_30_incompressible_at_512, test_rule_110_structured_compressible_at_512, test_cross_verdict_is_refuted_inverted_at_512. 11/11 verts (3.3 s).
  • Grille de verdicts entièrement refondue (votre remarque « ratio < 0.7 → FRAGILE ») : verdicts nommés par règle sur frac — CHAOTIC-INCOMPRESSIBLE (≥ 0.98) / STRUCTURED-COMPRESSIBLE (≤ 0.70) / WEAK entre les deux, et le cross-verdict discrimine le sens (CONFIRMED vs REFUTED vs PARTIAL vs INCONCLUSIVE).

Résultat remesuré (la conclusion s'inverse)

Règle frac (n=1024) Verdict
Rule 30 (III, chaos) 1.001 CHAOTIC-INCOMPRESSIBLE
Rule 110 (IV, Turing) 0.429 TURING-STRUCTURED-COMPRESSIBLE

Cross-verdict : WOLFRAM-CROSS-DIMENSION-REFUTED — la discrimination est réelle dès n=512, mais dans le sens inverse de l'hypothèse initiale : le chaos 1-D est incompressible (le collapse LZ de la soupe 2-D vient de la dissolution, pas du chaos), la structure Turing-complète (fond périodique + particules) est régulière donc compressible. K_trajectory mesure la régularité LZ d'une trajectoire — ni la classe de Wolfram ni la Turing-complétude.

Point 4 — Les quatre plis empilés relus

Suite proposée : ces quatre PR partagent les fichiers du pli 3 et s'empilent sur sa branche — une fois la base (07d27bdad1) mergée, chaque pli se rebase puis remesure à n≥512 avant tout verdict (pli 4 et pli 7 en tête : leurs verdicts centraux sont contaminés). Je le prends dans ma file dès la base avalée.

La cellule de conversion 1-D → grille et l'appel à l'organe ict.wolfram_step restent inchangés, comme votre lecture l'avait établi.

🤖 Generated with Claude Code

myia-ai-01 pushed a commit that referenced this pull request Oct 9, 2026
…#19921)

* fix(merge_ready,#19002): PR empilee via convention body sur base=main

Cas Origami 2026-10-08 : 6 PRs empilees logiquement, baseRefName=main
sur chacune (convention GitHub update-branch), 5 d'entre elles sans CI
complete parce que la racine #19793 n'avait pas ete mergee. base_ref_
liveness ne s'applique pas (base=main), donc merge_ready sautait la
verification et laissait passer des PRs empilees non couvertes.

Fix : ajouter une 5quater qui cherche dans le body de la PR les
conventions 'depends on #N' / 'blocked by #N' / 'stacked on #N' /
'requires #N' / 'stack: #N', et qui skip si la parente trouvee n'est
pas MERGED. Motif de skip = 'stacked-on-main:<N>:<OPEN|CLOSED|unreadable>'.
Fail-CLOSED sur 'unreadable' (meme politique que base_ref_liveness).

Tests : 4 nouveaux cas (parent OPEN/MERGED/CLOSED + body sans marker)
couvrent les 4 sorties. 84/84 tests passent (80 anciens inchanges).

Refs : c.297 (file profonde coord), #19002, #19014 (le distinguo
base-live vs base-gone utilise le meme runner), #19793 (pli 1 Origami),
#19815 / #19819 / #19826 / #19836 / #19847 (les 5 plis empiles).

Grain: DEEP/tooling -- lane myia-ai-01:CoursIA-2 -- prev: MED/coordination c.297

* Fix(coordination,#19002): toutes les parentes empilees sont examinees, pas la premiere

Adresse la review CHANGES_REQUESTED du coordinateur sur #19921 (tete
`ada0bc0a`).

Le garde lisait UNE seule parente : `find_stacked_parent` rendait la
premiere mention du body, et `run_organ` ne controlait que celle-la. Le
temoin de la review (`Depends on #19793` puis `Blocked by #19815`) rendait
donc `19793` seulement -- si #19793 est MERGED et #19815 OPEN, le chemin
nominal repartait sans jamais examiner #19815 et le merge se faisait sous
une dependance ouverte. Ce ne sont pas deux maillons d'une chaine
recursive : ce sont deux dependances DIRECTES de la meme PR.

- `find_stacked_parent` -> `find_stacked_parents`, qui rend **toutes** les
  parentes declarees, dedupliquees, dans l'ordre d'apparition. Toutes les
  patterns de `_STACKED_PATTERNS` sont parcourues par `finditer` au lieu
  d'un `search` qui s'arrete au premier hit.
- `run_organ` boucle sur cette liste et refuse des qu'UNE seule parente
  n'est pas MERGED, en nommant laquelle.
- Une dependance a soi-meme n'est plus ignoree en silence (`parent != pr`) :
  elle rend l'etat explicite `stacked-on-main:<N>:self-reference`, qui dit
  a la lane que son body est mal forme.

Tests (89/89 dans `test_merge_ready.py`, +5) :
- `test_stacked_on_main_second_dep_open_triggers_skip` -- le temoin de la
  review : premiere MERGED, seconde OPEN -> refus nommant la SECONDE, et
  les deux parentes sont bien interrogees.
- `test_stacked_on_main_two_merged_deps_is_nominal` -- les deux MERGED ->
  verdict `merged`, les deux parentes sondees.
- `test_stacked_on_main_unreadable_parent_triggers_skip` -- etat non
  classable -> `unreadable`, fail-CLOSED.
- `test_stacked_on_main_self_reference_is_explicit`.
- `test_find_stacked_parents_extracts_all_deduped` -- l'extracteur.
- `test_stacked_on_main_merged_parent_is_nominal` renforce : il verifie
  desormais le VERDICT (`merged`) et les appels attendus, pas seulement
  l'absence du motif de refus.

Controle negatif joue : avec l'ancien lecteur reinjecte (premiere parente
seule, auto-reference ignoree), les 3 nouveaux tests rougissent ; avec le
nouveau, 3/3 verts. Source restauree par `cp` depuis backup (identique).

Suite complete a la tete corrigee : 89 tests de `test_merge_ready.py` +
381 passes / 5 skipped sur les 7 suites voisines qui touchent merge_ready.
0 echec.

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

---------

Co-authored-by: Claude-Code <noreply@anthropic.com>
@myia-ai-01

Copy link
Copy Markdown
Collaborator

[OVERRIDE] lane myia-ai-01:CoursIA -- je leve ma propre reserve myia-ai-01 (review 5465040303, 🔴 du 2026-10-09T02:26:38Z, « le verdict central est un artefact de taille ») : traitee a la tete 07d27bd, verifiee en rejouant la mesure.

Rejoue dans un worktree detache a la tete, PYTHONPATH=MyIA.AI.Notebooks/IIT/ICT-Series, seed 33 :

n_cells Rule 30 Rule 110 Cross
64 WOLFRAM-SATURATED WOLFRAM-SATURATED INCONCLUSIVE
512 frac 1.003, K(W=64) 32 856 (identique au doc) frac 0.580 (doc : 0.568) REFUTED

Une remarque non bloquante : le CLI echoue avec No module named 'ict' si le dossier ICT n'est pas dans sys.path. Une ligne dans le doc sur l'invocation eviterait au lecteur de chercher.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19815
head: 07d27bd
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 294019fbd6aaace439c04c51aeced76d6728f2dea9a98422794080ffd2c03a77
diff-files: 6
diff-additions: 758
diff-deletions: 1
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 19815
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[DEEP DEROGATION] lane myia-ai-01:CoursIA -- PR #19815, tete 07d27bdad16d41bb0a5090c18944edafa7fc4beb.

Le dossier READY en vigueur vient du secretariat (c.6082319589), et le secretariat ne couvre pas une DEEP. La verification de domaine a cette tete exacte est la mienne : c.6082008345. ai-01:CoursIA est une lane qualifiante et ne porte pas cette PR. J'ai rejoue la mesure dans un worktree detache, seed 33 :

  • a n_cells=64, WOLFRAM-SATURATED pour les deux regles ;
  • a 512, R30 frac 1.003 et R110 0.580, donc REFUTED ;
  • test_wolfram_mode.py : 11 tests passes.

Le dossier de l'adjoint myia-po-2025:CoursIA-2 (c.6072251910, tete 6e3eb8f) etait READY avec domain: not-applicable. Entre sa tete et celle-ci, le delta est exactement le correctif de ma reserve de domaine (review 5465040303), que j'ai verifie.

Avant cette derogation, j'ai lu l'inbox : aucun DM de l'adjoint ne porte sur #19815.

@myia-ai-01
myia-ai-01 merged commit 19303c1 into main Oct 9, 2026
24 of 27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

2 participants