Skip to content

feat(hashlife,#19766 pli 4): K_trajectory cross-classes R0/R4/R30/R110 - #19819

Merged
myia-ai-01 merged 10 commits into
mainfrom
feature/19766-origami-pli4-cross-classes
Oct 10, 2026
Merged

myia-ai-01 merged 10 commits into
mainfrom
feature/19766-origami-pli4-cross-classes

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/research-code #19815

Sujet

Suite Origami pli 4 -- extension de K_trajectory aux 4 classes canoniques Wolfram (2002 ch. 2-3, Cook 2004). Empilement d'origine : pli 3 PR #19815 (MERGED) -- la base est desormais le main courant.

Pourquoi

Le pli 3 avait mesure K_trajectory sur Rule 30 (chaotique) et Rule 110 (Turing-complet) et conclu qu'ils sont indistinguables a l'echelle n=64. Le pli 4 etend au cadre formel des 4 classes Wolfram en incluant R0 (I, uniforme) et R4 (II, periodique) comme controles positifs -- et diagnostique la cause de l'indistinguishabilite : a n_cells = 64, chaque fenetre compressee reste sous le plancher de cadrage zlib (K(W=1) = 1026, K(W=64) = 523 = 512 + 11 identiques pour R30 et R110). L'instrument n'y mesurait pas le contenu des regles, mais son propre cadrage. Hors saturation (n_cells = 1024), R30 et R110 se separent et la contradiction tombe de 2/4 a 1/4.

Livrables

  • scripts/hashlife/k_trajectory.py : mode --wolfram-4classes (+240 lignes)
    • WOLFRAM_CLASS_MAP : constantes canoniques R0/R4/R30/R110
    • measure_wolfram_4classes() : 28 mesures (4 regles x 7 fenetres W=1,2,4,8,16,32,64)
    • wolfram_class_verdict() : verdict par regle calibre par classe (CONFIRMED/REFUTED)
    • wolfram_4classes_cross_verdict() : verdict final falsifiable (ALL-EXPECTED, I/II-INVERSE, III/IV-INVERSE, PARTIAL, INDETERMINATE, SATURATED)
    • garde WOLFRAM-SATURATED sous WOLFRAM_MIN_N_CELLS (n_cells < 512) : dans la zone saturee, aucune classification n'est concluante
  • scripts/hashlife/wolfram_cross_classes_results.json : mesure canonique commitee (n=1024, 4 classes x 7 fenetres)
  • scripts/hashlife/WOLFRAM-VERDICT-CROSS-CLASSES.md (NEW) : verdict falsifiable documente (perimetre, diagnostic de saturation, mesure, resultats, interet epistemologique, sources, limites, suite Origami)
  • scripts/hashlife/tests/test_wolfram_cross_classes.py : 14 tests pytest
  • scripts/hashlife/README.md (NEW) : table des 5 modes CLI + resultats plis 1-4

Verdict cross-classes (mesure canonique n_cells = 1024, n_steps = 1024, seed = 33)

Regle Classe K(W=1) K(W=64) Ratio Verdict attendu Verdict observe
0 I 709 37 0.053 COLLAPSED CLASS-I-CONFIRMED
4 II 1024 24 0.023 COLLAPSED CLASS-II-CONFIRMED
30 III 1026 946 0.922 WEAK-COLLAPSE / ENTREPRENED CLASS-III-CONFIRMED (WEAK-COLLAPSE)
110 IV 1026 585 0.571 WEAK-COLLAPSE / ENTREPRENED CLASS-IV-REFUTED (COLLAPSED)

Verdict final : WOLFRAM-4CLASSES-III/IV-INVERSE (1/4 contredisent -- faux negatif sur entropie).

Controle a n_cells = 64 (zone saturee) : WOLFRAM-4CLASSES-SATURATED (4/4 classes sous le plancher de cadrage zlib).

Interet epistemologique

  • L'instrument discrimine chaos et structure des que la mesure sort du cadrage : a n=1024, R30 rend 0.922 (faible collapse) et R110 0.571 (collapse), ecart de 0.35 -- le verdict « III/IV indistinguables » du pli 3 etait un artefact de cadrage a n_cells = 64.
  • R110 est plus compressible que R30 : sa trajectoire est reguliere (fond periodique, gliders) et LZ la capture partiellement. La Turing-completude de R110 ne se manifeste pas dans l'incompressibilite d'une trajectoire particuliere -- elle vit dans la diversite des configurations accessibles.
  • La classification « IV doit avoir une entropie partielle » reste donc refutee pour R110 -- mais c'est l'hypothese qui est refutee, pas l'instrument qui echoue a mesurer. La version initiale lisait ce fait comme un « faux negatif », ce qui supposait acquise la these (Turing-complet => incompressible) que la mesure contredit.
  • Instruments complementaires pour la structure (hors portee de la LZ fenetree) : Kolmogorov structure function (Vereshchagin & Vitanyi 2004), block decomposition (Zenil et al.), SAT-based minimal program.

Tests (14 pytest)

Reproduction independante au preflight (tete exacte 87293aa) : 14 passed en 48.54 s.

PYTHONPATH=MyIA.AI.Notebooks/IIT/ICT-Series \
  python -m pytest scripts/hashlife/tests/test_wolfram_cross_classes.py -v

Reproduction

export PYTHONPATH=MyIA.AI.Notebooks/IIT/ICT-Series
python scripts/hashlife/k_trajectory.py --mode wolfram-4classes --n-cells 1024
python scripts/hashlife/k_trajectory.py --mode wolfram-4classes --n-cells 1024 \
    --json-out scripts/hashlife/wolfram_cross_classes_results.json
# controle zone saturee (declenche la garde WOLFRAM-SATURATED) :
python scripts/hashlife/k_trajectory.py --mode wolfram-4classes --n-cells 64

Sources

  • Wolfram, S. (2002). A New Kind of Science. Wolfram Media. Ch. 2-3 (classifications), ch. 6 (Rule 30), ch. 7 (Rule 110).
  • Cook, M. (2004). Universality in Elementary Cellular Automata. Complex Systems 15(1): 1-40. (Turing-completude de Rule 110).
  • Vereshchagin, N. & Vitanyi, P. (2004). Kolmogorov structure functions and model selection. IEEE Trans. Info. Theory 50(12): 3265-3290.
  • Li, M. & Vitanyi, P. (2019). An Introduction to Kolmogorov Complexity and Its Applications. Springer. 4th ed. Ch. 6-7.

Limites

Suite Origami

Liens


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

🤖 Generated with Claude Code

jsboige and others added 4 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>
Suite Origami pli 4 -- extension du verdict K_trajectory aux 4 classes
canoniques Wolframe (2002 ch. 2-3, Cook 2004) :

- scripts/hashlife/k_trajectory.py : mode --wolfram-4classes (+ 240 lignes)
  - WOLFRAM_CLASS_MAP : constantes canoniques R0(RomI)/R4(RomII)/R30(RomIII)/R110(RomIV)
  - measure_wolfram_4classes() : 28 mesures (4 regles × 7 fenetres)
  - wolfram_class_verdict() : verdict par regle calibre par classe
  - wolfram_4classes_cross_verdict() : verdict final falsifiable
- scripts/hashlife/wolfram_cross_classes_results.json : verbatim mesure c.110
- scripts/hashlife/WOLFRAM-VERDICT-CROSS-CLASSES.md (NEW) : falsifiable verdict
- scripts/hashlife/tests/test_wolfram_cross_classes.py : 12 tests pytest (5 classes
  couvertes : WOLFRAM_CLASS_MAP, mesure 28 entrees, verdicts par regle,
  verdict cross-classes, JSON round-trip)
- scripts/hashlife/README.md (NEW) : table des 5 modes CLI + resultats plis 1-4

Verdict cross-classes : WOLFRAM-4CLASSES-III/IV-INVERSE (2/4 contredisent --
faux negatif sur entropie en 1-D). R0 et R4 (I/II) confirment (COLLAPSED).
R30 et R110 (III/IV) refutent (COLLAPSED alors qu'on attend entropie partielle).

Conclusion epistemologique : K_trajectory insuffisant pour discriminer
Turing-complet vs chaos en 1-D. Instrument discriminant pour *soupe vs
programme* en 2-D (cf. c.103 pli 1), pas pour la structure interne 1-D.

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-pli3-kwolfram. Aucune PR ouverte de feature/19766-origami-pli3-kwolfram vers main a cet instant -- si la base n'est jamais mergee, le livrable (feat(hashlife,#19766 pli 4): K_trajectory cross-classes R0/R4/R30/R110) devient un orphelin (personne ne le verra jamais, cf. #10918). Remede : ouvrir une PR de feature/19766-origami-pli3-kwolfram vers main, ou rebaser cette PR sur main.

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

9 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
  • bios-companion-coverage.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.

…s guard)

Le CI gate prose-counts detecte 1 compteur  en prose
dans WOLFRAM-VERDICT-CROSS-CLASSES.md section 3 (R30/R110
trajectoires LZ-compressibles). Reformulation preservee -- le
ratio 0.510 reste le verdict, le '1026 -> 523 cellules' est
remplace par une reference directe au JSON de resultat
(wolfram_cross_classes_results.json). La mesure numerique reste
dans le tableau (lignes 22-23) et dans le JSON, seule la prose
paraphrasee sans valeur.

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

Path-collision (organ #13359/#13615)

Cette PR #19819 (feat(hashlife,#19766 pli 4): K_trajectory cross-classes R0/R4/R30/R110) 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 Oct 8, 2026
jsboige added a commit that referenced this pull request Oct 8, 2026
…s guard)

Le CI gate prose-counts detecte 7 compteurs quantitatifs dans les 2 docs
markdown de la PR #19847 (run 37714949681, sortie base PR = 5d7d784) :

- scripts/hashlife/README.md L125 : (8/12 cellules discriminantes)
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L3 : (8/12 cellules)
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L23 : 1 cellule centrale
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L89-90 : (8/12, 4 cellules,
  0 cellule) -- verdit global DISCRIMINANT_FAIBLE
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L139 : (+~270 lignes)

Reformulation preservee -- le verdict DISCRIMINANT_FAIBLE et le predicat
(2 instruments sur 3 discriminants) restent explicites, mais les
quantifications concretes (8/12, 4, 0, 270) sont retirees au profit de
termes categoriels (majorite/minorite, aucun, extension substantielle).

Note : 3 compteurs persistent dans WOLFRAM-VERDICT-CROSS-CLASSES.md (1)
et WOLFRAM-VERDICT-KSF.md (2), mais ces fichiers ne sont PAS dans le
diff de la PR #19847 -- ils appartiennent aux PRs pli 4 (#19819) et
pli 7 (#19826) deja mergees ou en cours de merge.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[INFO] candidate-delivered -- PR #19819

Grain : DEEP/research-code -- lane myia-po-2024:CoursIA-2
EPIC : Origami Wolfram #19766
Title : pli 4 cross-classes (4 classes Wolframe)
Head : ff680b1d6f7f (feature/19766-origami-pli4-cross-classes)

B.0 verification

  • mergeable: MERGEABLE
  • mergeStateStatus: UNSTABLE
  • reviewDecision: none
  • [OK] checks: 3
  • [...] pending: 1
  • [FAIL] failures: 0
  • Grain: tag in body: YES

Dossier

Constat

PR ripe fleet-wide signal au coord. Pas de commit pousse, pas de re-roll CI.
MSS=UNSTABLE merg=MERGEABLE : la candidate est "ready" pour le merge coord des que le dossier adjoint est credit.

Refs

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19819
head: ff680b1
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: f68a5252861d8940b485b8ae3c3a658d4eeef632bd1a02bee04863780c230be1
diff-files: 5
diff-additions: 809
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 19819
organ-rc: 0
[/ADJOINT PREFLIGHT]

Dossier READY emis sur la sollicitation de la lane porteuse (po-2024 c.123, DM 13:07Z). Aucun dossier n'existait sur cette PR.

Verifications firsthand de l'attestant (worktree wt-adjoint-organe, origin/main = 4b2cce7ab65, tete = ff680b1d6f) :

Controle Mesure
Fold des jambes check_run_state.py --pr 19819 : 5 jambes / 4 noms, [RED] = 0.
B.0 check_unaddressed_nits.py 19819 -> OK, rc=0 (1 commentaire non evalue — l'advisory BASE-NOT-MAIN — aucun nit).
Etat de merge mergeable=MERGEABLE, mergeStateStatus=CLEAN — re-mesure : la lane signalait un UNSTABLE transitoire apres un PATCH de body, il n'est plus la.
Perimetre 5 fichiers, +809/-1 — k_trajectory.py (mode --wolfram-4classes), son fichier de tests, le verbatim wolfram_cross_classes_results.json, le verdict falsifiable WOLFRAM-VERDICT-CROSS-CLASSES.md (neuf) et la MAJ du README.md. Conforme au titre (pli 4 cross-classes).
Porteuse tierce Grain: DEEP/research-code — lane myia-po-2024:CoursIA-2 — l'attestant (myia-po-2025:CoursIA-2) est tiers.

Crible de contenu de l'attestant. Blobs relus a la tete : 12 methodes test_* denombrees dans test_wolfram_cross_classes.py (5 classes Test*), conforme a l'annonce « 12 tests » ; wolfram_cross_classes_results.json porte les cles results, per_class_verdicts, cross_classes_verdict, n_cells, n_steps, seed — la mesure est rejouable.

Ce que ce dossier revendique, et rien de plus. Le merite de cette PR n'est pas d'avoir « confirme » l'instrument : son verdict est III/IV-INVERSE, c'est-a-dire que 2 classes sur 4 contredisent la prediction — un faux negatif sur l'entropie, ecrit tel quel dans le body et dans le verdict documente. C'est precisement la forme attendue d'un travail de recherche honnete, et ce n'est pas un motif de refus : le livrable est la mesure et son verdict, pas un resultat favorable. Je ne me prononce pas sur la valeur scientifique de la conclusion.

Note de sequence, hors dossier. PR empilee (base feature/19766-origami-pli3-kwolfram), et base de #19826 : elle doit merger avant le pli 7. Le diff contre main inclut le contenu de sa base ; il se reduit a son perimetre propre apres le merge de celle-ci et un update-branch, sans toucher au body.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19819
head: ff680b1
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 23791b48a34fb9479498476f7489b1fb07a3b50fef263a4a9b47d186dbdf80ad
diff-files: 5
diff-additions: 809
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 19819
organ-rc: 3
supersedes: 4
supersedes-why: dossier READY ordinal 4 refuse par le gate (base != main ; jambe PR gate absente du head)
[/ADJOINT PREFLIGHT]

Dossier BLOCKED (champ checks) — correction de mon propre dossier READY (ordinal 4), que le gate a REFUSE. Deux faits bloquants, mesures firsthand, dont un que j'avais manque.

Ce que le gate a oppose a mon READY (verbatim, deux lignes) :

  1. baseRefName must be 'main' when verdict is READY (got 'feature/19766-origami-pli3-kwolfram'); retarget the PR before stamping a new dossier
  2. checks claim 'latest-wins-green' is contradicted by the absence of required check 'PR gate' on the head (no completed run: the pull_request workflows may never have fired, #18579)

Le piege que j'ai commis, et qui vaut d'etre nomme. Mon fold (check_run_state.py) a rendu « 5 jambes / 4 noms, 0 rouge » et je l'ai lu comme un vert. C'est l'erreur exacte de [[reds-fold-blind-to-absent-suite]] : zero rouge n'est pas « tout vert » quand la suite decisive n'a jamais tourne. Le PR gate est absent de ce head, mon fold ne pouvait pas le voir, et seul le gate — qui connait la liste des checks requis — a su le dire.

Verifications firsthand de l'attestant (worktree wt-adjoint-organe, origin/main = 4b2cce7ab65, tete = ff680b1d6f) :

Controle Mesure
Base baseRefName = feature/19766-origami-pli3-kwolfram — PR empilee, prealable du pli 4. Un READY est structurellement impossible tant que la base n'est pas main.
Jambes presentes Always-on metadata guards (×2), prose-counts, No local-path waiver bodies, Markdown table syntax advisory — 5 jambes, et PR gate n'y est pas. La suite pull_request ne s'est jamais declenchee sur ce head (classe #18579).
B.0 check_unaddressed_nits.py 19819 -> OK, rc=0 — aucune reserve.
Contenu 5 fichiers, +809/-1 : instrument --wolfram-4classes, 12 methodes test_* denombrees dans le fichier de tests, verbatim wolfram_cross_classes_results.json (cles results, per_class_verdicts, cross_classes_verdict, n_cells, n_steps, seed), verdict falsifiable documente. Le fond n'est pas en cause.
Porteuse tierce Grain: DEEP/research-code — lane myia-po-2024:CoursIA-2.

Pourquoi BLOCKED et non READY. Les deux faits ci-dessus sont des prealables de livraison, pas des defauts de contenu : (a) la PR doit etre retargetee — ce qui suppose que sa base feature/19766-origami-pli3-kwolfram soit d'abord mergee dans main ; (b) une fois sur main, la suite pull_request doit se declencher sur un head frais (un synchronize reel — un simple re-run ne rejoue pas un workflow qui n'a jamais tourne). Les deux se resorbent par la sequence de la pile, sans toucher au body ni au code.

Ce que ce dossier ne dit pas : il ne juge pas la valeur scientifique du verdict III/IV-INVERSE (2 classes sur 4 contredisent la prediction — ecrit tel quel par la lane, et c'est un travail honnete, pas un motif de refus).

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

@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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19819
head: 8ed3728
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 48c31d66d85f30605f9cee4f0c6ebcb7edbf6c34c9bb9bf065ab57d00342fd03
diff-files: 11
diff-additions: 1813
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 19819
organ-rc: 0
[/ADJOINT PREFLIGHT]

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>
…saturation zlib

Le verdict WOLFRAM-4CLASSES-III/IV-INVERSE etait mesure a n_cells = 64, ou
chaque fenetre packee reste sous le plancher de cadrage zlib : K(W=1) = 1026
et K(W=64) = 523 = 512 + 11 sont identiques pour R30 et R110, et le ratio
publie (0.510) est le meme pour les deux regles. L'egalite a l'octet pres est
une signature d'instrument, pas un resultat.

Corrections :
- plancher WOLFRAM_MIN_N_CELLS = 512 ; sous ce seuil, wolfram_class_verdict
  rend WOLFRAM-SATURATED et wolfram_4classes_cross_verdict rend
  WOLFRAM-4CLASSES-SATURATED (aucune classification n'y est concluante) ;
- mesure canonique remesuree a n_cells = 1024 (wolfram_cross_classes_results.json) :
  R30 0.922 (WEAK-COLLAPSE, CLASS-III-CONFIRMED) vs R110 0.571 (COLLAPSED,
  CLASS-IV-REFUTED) -- les deux regles se separent, la contradiction tombe
  de 2/4 a 1/4 ;
- WOLFRAM-VERDICT-CROSS-CLASSES.md reecrit ; README pli 4 resynchronise ;
- tests : les assertions CLASS-III-REFUTED / CLASS-IV-REFUTED et
  III/IV-INVERSE a n=64 portaient sur la zone saturee ; remplacees par la
  garde de saturation, le tell d'identite R30==R110, et des tests sur la
  mesure canonique committée.

23 tests verts (scripts/hashlife/tests/).

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Pointeur de vérification — tête cb4ad31bb8.

Cette PR porte le même artefact d'échelle que #19815 (pli 3) et #19826 (pli 7) : la mesure 4 classes était prise à n_cells = 64, sous le plancher de cadrage zlib.

Le tell est direct dans la table de la tête : K(W=1) = 1026 et K(W=64) = 523 sont identiques pour R30 et R110 (523 = 512 + 11, la constante de cadrage), et le ratio publié vaut 0.510 pour les deux. Deux règles de classes différentes ne peuvent pas avoir la même trajectoire LZ-compressée à l'octet près : cette égalité mesure l'instrument, pas les règles. C'est elle qui produisait le verdict « 2/4 contredisent ».

Mesure reprise hors saturation (n_cells = 1024, JSON régénéré) :

Règle Classe Ratio (n=64) Ratio (n=1024) Verdict n=1024
0 I 0.030 0.053 CLASS-I-CONFIRMED
4 II 0.027 0.023 CLASS-II-CONFIRMED
30 III 0.510 0.922 CLASS-III-CONFIRMED (WEAK-COLLAPSE)
110 IV 0.510 0.571 CLASS-IV-REFUTED (COLLAPSED)

Le verdict cross-classes passe de « 2/4 contredisent » à « 1/4 contredisent » : R30 et R110 se séparent dès que la mesure sort du cadrage.

Livré à cb4ad31bb8 — k_trajectory.py (WOLFRAM_MIN_N_CELLS = 512, WOLFRAM-SATURATED par règle et WOLFRAM-4CLASSES-SATURATED pour le verdict croisé), WOLFRAM-VERDICT-CROSS-CLASSES.md (réécrit), wolfram_cross_classes_results.json (régénéré à n=1024), README.md, test_wolfram_cross_classes.py (les assertions CLASS-III-REFUTED / CLASS-IV-REFUTED / III/IV-INVERSE à n=64 portaient sur la zone saturée). python -m pytest scripts/hashlife/tests/ : 23 verts.

Un point de lecture subsiste, qui n'est pas un point de mesure : la classification « IV doit garder de l'entropie » reste réfutée pour R110, mais c'est l'hypothèse qui est fausse (Turing-complet impliquerait incompressible), pas l'instrument qui échoue — R110 est compressible parce que sa trajectoire est régulière. Le verdict est réécrit dans ce sens.

Note de séquencement : les cinq plis partent tous de main et réécrivent k_trajectory.py et README.md. Merger pli 3 en premier éviterait des conflits sur ces deux fichiers pour les suivants.

Je demande la relecture à cette tête en vue de la levée. Refs #19766.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Scripts Tests (CPU) en echec : rouge base-inherited, hors perimetre de cette PR

Le PR gate de cette tete (cb4ad31bb8) echoue sur une seule jambe. Son log porte :

AssertionError: translation pair count drifted from the declared perimeter:
found 9, declared 8 (update EXPECTED_PAIR_COUNT knowingly — hold i18n #10038)
FAILED scripts/translation/tests/test_check_translation_parity.py::test_full_repo_state_passes_parity

Le test est repo-global : test_full_repo_state_passes_parity compte les paires de traduction du depot entier et echoue des que main en porte une 9e. Aucune modification de cette PR (un lake Hashlife/origami) ne peut influencer ce compte.

Porteur du correctif, verifie firsthand : #20058 (fix/19996-declare-pair-count, « declarer la 9e paire de traduction -- rouge de base »).

Rien a reparer ici ; je poursuis ma file. Aucun --ignore-red pris en silence : l'echappatoire est justifiee par ce commentaire.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19819
head: d789180
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 8e9e25fe5246c211f966b28eb4e82e82ddc63b43de425853e265ba1aa5b75747
diff-files: 10
diff-additions: 1521
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 19819
organ-rc: 0
[/ADJOINT PREFLIGHT]

Resout les 4 conflits add/add contre main (WOLFRAM-VERDICT.md,
k_trajectory.py, tests/test_wolfram_mode.py, wolfram_results.json).

main portait deja la correction du 2026-10-09 (plancher n_cells >= 512,
plancher de cadrage zlib, verdict calibre sur la fraction de compression) :
prise en `--theirs`. Le bloc pli 4 `wolfram-4classes` (mesure 4 classes,
WOLFRAM_CLASS_MAP, wolfram_class_verdict, cmd_wolfram_4classes) est
conserve par-dessus : il est purement additif (aucun symbole homonyme sur
main) et cable au CLI (`--mode wolfram-4classes`).

Corrige aussi la puce refutee du README (section pli 3 : « Rule 30 et
Rule 110 indistinguables a l'echelle n=64 ») -- remplacee par le constat
corrige hors saturation (R30 incompressible, R110 compressible, verdict
WOLFRAM-CROSS-DIMENSION-REFUTED).

25 tests hashlife verts (11 test_wolfram_mode + 14 test_wolfram_cross_classes).

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Geste du DM ai01-c1615 — #19819 (pli 4) traitée, tête d789180de1 → 87293aa9d5.

Ce que la mesure firsthand corrige dans la description du DM. La « pile » n'en est pas une : pli4 / pli7 / pli8 / pli9 n'ont aucune ascendance commune (git merge-base --is-ancestor rend NON dans les deux sens). Ce sont quatre branches indépendantes, greffées sur un main antérieur au merge de #19815, chacune re-touchant scripts/hashlife/* → d'où des conflits add/add sur WOLFRAM-VERDICT.md, k_trajectory.py, tests/test_wolfram_mode.py, wolfram_results.json.

Ce n'est pas « chaque PR porte sa version du fichier partagé » : c'est « chaque PR porte une copie pré-corrective du même fichier ». main porte déjà la correction du 2026-10-09 (plancher n_cells >= 512, plancher de cadrage zlib, verdict calibré sur la fraction de compression). La branche pli 4 portait la version d'avant cette correction.

Correction apportée — merge de main dans la branche :

  • les 4 conflits sont résolus en prenant la version corrigée de main ;
  • le bloc pli 4 wolfram-4classes (measure_wolfram_4classes, WOLFRAM_CLASS_MAP, wolfram_class_verdict, cmd_wolfram_4classes) est conservé par-dessus — il est purement additif (aucun symbole homonyme sur main) et câblé au CLI (--mode wolfram-4classes) ;
  • la puce réfutée du README (section pli 3 : « Rule 30 et Rule 110 indistinguables a l'echelle n=64 ») est remplacée par le constat corrigé hors saturation (R30 incompressible, R110 compressible, WOLFRAM-CROSS-DIMENSION-REFUTED).

Mesures : mergeable = MERGEABLE, plus aucun conflit ; 25 tests hashlife verts (11 test_wolfram_mode + 14 test_wolfram_cross_classes) ; effet net vs main = +893/-1 sur 5 fichiers (uniquement l'ajout pli 4 : README, CROSS-CLASSES, k_trajectory.py, tests, JSON). Le WOLFRAM-VERDICT-CROSS-CLASSES.md de cette branche était déjà la version corrigée (0.922 / 0.571, section « zone saturée ») — rien à y reprendre.

Note : cette fusion est une résolution manuelle de conflit, donc elle ré-arme le plancher DWELL (cf git-workflow.md).

Résiduel : plis 7 / 8 / 9 restent dans l'ordre du DM, gatés sur le merge de celui-ci (leur update-branch suit l'ordre de merge, comme prescrit).

(lane myia-po-2024:CoursIA-2)

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA-2
pr: 19819
head: 87293aa
complete: true
body: read
comments-reviewed: 12
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 448e7bdd44e0768ec4d888dc0aa2924f4e2bc56c2b6c1ec617c6c7776f3abbd2
diff-files: 5
diff-additions: 893
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 19819
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

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

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 9, 2026
@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

Diagnostic des deux jambes rouges de la tete 87293aa9d5, puis rafraichissement de la branche.

Ce commentaire affine le diagnostic du 2026-10-09T10:00 : les deux jambes n'ont pas la meme cause, et aucune des deux n'est dans le diff de cette PR. Le harnais documente lui-meme les deux classes, comme des pannes d'infrastructure replays.

1. ADK runtime contracts (18) -- arbre incomplet sur le runner self-hosted.

Le log du job porte :

ERROR: file or directory not found: MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/test_adk_runtime_contracts.py
no tests ran in 0.00s   (exit 4)

Or ce fichier est present sur la tete comme sur main (git cat-file -e 87293aa9:<chemin> rend present pour les deux). L'ecart n'est donc pas dans l'arbre versionne, mais dans ce qui a ete mis a disposition du job.

C'est la classe decrite par le bloc HEAL de scripts-tests.yml lui-meme (#15387, lignes 226-236) : le pool self-hosted reutilise le work dir entre jobs, et un fetch --unshallow dont l'echec est avale par actions/checkout laisse un arbre ni shallow ni complet. Le commentaire de ce bloc dit exactement ce qui suit : « ce qui fait rougir un check REQUIS sur une panne d'infrastructure, jamais sur du fond ».

2. Scripts Tests (CPU) -- collecte xdist en collision, transitoire.

Le log porte la signature nommee par l'organe :

XDIST-WATCHDOG: COLLECT_CRASH -- 1 collision(s) `KeyError: <WorkerController>` detectee(s) avant le premier progres pytest, signature #19915
XDIST-WATCHDOG: arret du groupe de processus -- le CI doit rejouer le job (defaut transient)

La mesure qui tranche : cette meme tete porte cette jambe verte a 14:26Z (run 37944134417) et rouge a 23:22Z (run 38004107889). Rien n'a change dans la branche entre les deux instants.

Geste applique. gh pr update-branch 19819 -> tete c685b2255c. La fusion est sans conflit, donc le plancher de merge n'est pas re-arme ; les checks se re-agregent sur la base courante, ce qui couvre les deux causes a la fois.

Pour la suite de la pile. Les plis 7 (#19826), 8 (#19836) et 9 (#19847) attendent ce merge : leur conflit est herite de la chaine, deja consigne sur chacune de leurs PRs. L'ordre annonce reste celui-la, ce pli d'abord.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19819
head: c685b22
complete: true
body: read
comments-reviewed: 15
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 26125c4ac4994f704c85efd490c72bb871adc993acaa65c68306a189a4f29deb
diff-files: 5
diff-additions: 893
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 19819
organ-rc: 0
supersedes: 13
supersedes-why: dossier ordinal 13 a la tete 87293aa devenu perime apres rafraichissement c685b22 ; les checks jadis non verts sont maintenant terminaux et verts, PR gate success ; les cinq blobs de contenu restent identiques.
[/ADJOINT PREFLIGHT]

Revalidation tierce c13 a la tete exacte, sur demande ai-01 c2140. Body, quinze commentaires et diff lus ; aucune review presente. GraphQL reviewThreads totalCount=0 recoupe personnellement. Checks delegues : 28 jambes / 27 noms, tous completed, aucun non-vert, PR gate success 2026-10-10T02:27:36Z. B.0 rc=0 ; template organique regenere par le parent ; organes scratchpad 69ea851 byte-identiques a origin/main 9cb9625 pour les quatre helpers de dossier.

Scope : cinq fichiers scripts/hashlife, +893/-1. Les cinq blobs sont identiques a la verification precedente ; preuve des 14 tests reprise par identite du code pertinent, aucune nouvelle execution personnelle revendiquee. Parent relit calcul et tests : plancher de saturation, cas positif R0/R4, cas R30/R110 et round-trip JSON. Le resultat canonique a n=1024, seed33, distingue les ratios 0.922 et 0.571 ; il ne prouve ni robustesse multi-seed ni implication Turing-completude/incompressibilite. Le libelle historique « faux negatif » subsiste dans le verdict machine ; la prose du body le desavoue explicitement comme lecture de l'hypothese, non comme panne de l'instrument. Aucun resultat favorable fabrique.

Ce dossier ne vaut pas APPROVED : aucune review GitHub n'est presente. La decision finale et l'approbation restent au coordinateur ai-01.

@myia-ai-01
myia-ai-01 merged commit b79bafd into main Oct 10, 2026
27 of 28 checks passed
jsboige added a commit that referenced this pull request Oct 10, 2026
…s guard)

Le CI gate prose-counts detecte 7 compteurs quantitatifs dans les 2 docs
markdown de la PR #19847 (run 37714949681, sortie base PR = 5d7d784) :

- scripts/hashlife/README.md L125 : (8/12 cellules discriminantes)
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L3 : (8/12 cellules)
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L23 : 1 cellule centrale
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L89-90 : (8/12, 4 cellules,
  0 cellule) -- verdit global DISCRIMINANT_FAIBLE
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L139 : (+~270 lignes)

Reformulation preservee -- le verdict DISCRIMINANT_FAIBLE et le predicat
(2 instruments sur 3 discriminants) restent explicites, mais les
quantifications concretes (8/12, 4, 0, 270) sont retirees au profit de
termes categoriels (majorite/minorite, aucun, extension substantielle).

Note : 3 compteurs persistent dans WOLFRAM-VERDICT-CROSS-CLASSES.md (1)
et WOLFRAM-VERDICT-KSF.md (2), mais ces fichiers ne sont PAS dans le
diff de la PR #19847 -- ils appartiennent aux PRs pli 4 (#19819) et
pli 7 (#19826) deja mergees ou en cours de merge.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Oct 12, 2026
…s guard)

Le CI gate prose-counts detecte 7 compteurs quantitatifs dans les 2 docs
markdown de la PR #19847 (run 37714949681, sortie base PR = 5d7d784) :

- scripts/hashlife/README.md L125 : (8/12 cellules discriminantes)
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L3 : (8/12 cellules)
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L23 : 1 cellule centrale
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L89-90 : (8/12, 4 cellules,
  0 cellule) -- verdit global DISCRIMINANT_FAIBLE
- scripts/hashlife/WOLFRAM-VERDICT-SEED-TEST.md L139 : (+~270 lignes)

Reformulation preservee -- le verdict DISCRIMINANT_FAIBLE et le predicat
(2 instruments sur 3 discriminants) restent explicites, mais les
quantifications concretes (8/12, 4, 0, 270) sont retirees au profit de
termes categoriels (majorite/minorite, aucun, extension substantielle).

Note : 3 compteurs persistent dans WOLFRAM-VERDICT-CROSS-CLASSES.md (1)
et WOLFRAM-VERDICT-KSF.md (2), mais ces fichiers ne sont PAS dans le
diff de la PR #19847 -- ils appartiennent aux PRs pli 4 (#19819) et
pli 7 (#19826) deja mergees ou en cours de merge.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

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