Skip to content

fix(lean,#15742): seuil R3 — énoncer le contrat réel (< 2 modèle, bande à 2 au replay) - #15924

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/15742-r3-seuil-chebyshev
Sep 15, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/15742-r3-seuil-chebyshev

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Sujet

Dissipation des 2 points CONCERNS de la review Hermes du 2026-09-12T06:34:59Z sur #15711 (follow-up #15742) : un écart doc-vs-code et un commentaire contredisant la mesure de la tranche elle-même.

Les deux CONCERNS, et le choix opéré

Point 1 — seuil R3 doc vs code. docs/lean/life-components-schema.md §Fenêtres spatiales énonçait : « un objet vivant passe à moins de 3 (Chebyshev) des cellules d'une fenêtre étrangère → rejetés » et « Le seuil 3 n'est pas un réglage, c'est la mesure ». Le code n'implémente pas ce seuil : pré-filtre par enveloppes gonflées (GROW=1) qui fait entrer les paires à Chebyshev ≤ 2 dans le contrôle exact, lequel rejette à _min_chebyshev(...) < 2 — une scène à distance exactement 2 passe le modèle et ne doit son rejet qu'au replay de certification.

Point 2 — commentaire GROW. life_compose.py : « deux groupes de cellules à distance de Chebyshev >= 2 ne se voient pas » — contredit la leçon mesurée de la tranche (test_chebyshev_2_engendre_des_naissances_croisees : naissances croisées à distance 2) et le schéma lui-même (« ≥ 3 : jamais ; à distance 2, tout dépend du contenu »).

Choix : option (b) de la review — corriger les formulations, pas élever le seuil code à < 3. Raisons :

  1. La bande à exactement 2 est délibérément déléguée au replay : c'est le contrat que test_reutilisation_stricte_impossible_borne vérifie end-to-end (replay_rejected >= 1 asserté — les candidats distance-2 passent l'élagage et meurent au replay). Élever le seuil retirerait au filet sa classe d'échec-modèle témoin.
  2. La table d'ablations du schéma a mesuré R3 sous ce contrat (« R3 ne change aucun verdict et coûte plus qu'il rapporte — assumé ») ; resserrer le seuil ne ferait qu'augmenter le coût mesuré.
  3. Le seuil modèle < 2 est principiel, pas arbitraire : à moins de 2, les cellules sont dans le voisinage 3×3 l'une de l'autre (influence directe) ; à exactement 2, seules des naissances croisées sont possibles (contenu-dépendant — c'est la mesure) ; ≥ 3, jamais (propriété testée).

Diff (3 fichiers, +68/−9, zéro changement de comportement)

  • scripts/lean/life_compose.py : commentaire GROW réécrit (énonce les 3 bandes et le rôle exact du gonfllement d'enveloppe — corrigé aussi le typo « Chebysyshev ») ; commentaire inline du contrôle exact réécrit (l'ancien parenthétique « non-interaction réelle que les rectangles se touchent » était à la fois faux physiquement et obscur). Aucune ligne exécutable touchée.
  • docs/lean/life-components-schema.md : §Fenêtres spatiales réécrit — « moins de 2 → rejetés », la bande à exactement 2 passe l'élagage et le replay tranche (c'est lui qui produit replay_rejected ≥ 1), « le seuil du modèle est 2, le seuil 3 est la mesure physique de la non-interaction universelle, pas le seuil d'élagage » ; leçon mesurée n°1 : la phrase finale « Le seuil 3 de R3 est cette mesure » (qui collait la mesure physique sur le seuil d'élagage) remplace l'énoncé des deux seuils.
  • scripts/lean/tests/test_life_compose.py : nouveau test_elagage_r3_bande_chebyshev_2_passe_le_modele — punition du contrat désormais écrit : un bloc à Chebyshev exactement 1 de la fenêtre E0 est rejeté par le modèle ; à exactement 2 il passe _spatial_ok (le replay décidera). Les ancres sont calculées depuis la fenêtre réelle (reaction_window_cells), hors zones de clearance, via _motif_phases("block").

Validation

  • Avant edits : python -m pytest scripts/lean/tests/test_life_compose.py -q → 26 passed en 246,23 s (baseline reproduite).
  • Nouveau test seul : 1 passed en 0,09 s.
  • Après edits : 27 passed en 231,95 s.
  • Aucune ligne exécutable de life_compose.py modifiée (commentaires seuls) — la stabilité des 26 tests initiaux est le contrôle négatif du « zéro changement de comportement ».

Résiduel

Re-revue Hermes attendue sur ce follow-up (action 1 de #15742) ; clôture de l'issue après feu vert — d'où See #15742 et non Closes.

Grain: MED/tooling — lane myia-po-2023:CoursIA — prev: MED/docs #15921

🤖 Generated with Claude Code

…e (< 2 modele, bande a 2 au replay)

Dissipation des 2 points CONCERNS Hermes (review 2026-09-12T06:34:59Z sur
#15711) : le schema enoncait un seuil 3 que le code ne materialise pas
(rejet exact a < 2), et le commentaire GROW pretendait la non-interaction
a >= 2, contredisant la mesure de la tranche (naissances croisees a
distance 2). Choix retenu : corriger les formulations (option b de la
review) plutot que d'elever le seuil code — la bande a exactement 2 est
delibrement deleguee au replay de certification, c'est le contrat que
test_reutilisation_stricte_impossible_borne verifie (replay_rejected >= 1)
et que la table d'ablations a mesure. Nouveau test punissant le contrat :
distance 1 rejetee par le modele, distance exactement 2 admise a l'elagage.

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

Copy link
Copy Markdown
Contributor

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

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 commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15924 (fix(lean,#15742): seuil R3 — énoncer le contrat réel (< 2 modèle, bande à 2 au replay)) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@myia-ai-01
myia-ai-01 merged commit d080105 into main Sep 15, 2026
23 of 24 checks passed
jsboige added a commit that referenced this pull request Sep 16, 2026
…e (< 2 modele, bande a 2 au replay) (#15924)


Dissipation des 2 points CONCERNS Hermes (review 2026-09-12T06:34:59Z sur
#15711) : le schema enoncait un seuil 3 que le code ne materialise pas
(rejet exact a < 2), et le commentaire GROW pretendait la non-interaction
a >= 2, contredisant la mesure de la tranche (naissances croisees a
distance 2). Choix retenu : corriger les formulations (option b de la
review) plutot que d'elever le seuil code — la bande a exactement 2 est
delibrement deleguee au replay de certification, c'est le contrat que
test_reutilisation_stricte_impossible_borne verifie (replay_rejected >= 1)
et que la table d'ablations a mesure. Nouveau test punissant le contrat :
distance 1 rejetee par le modele, distance exactement 2 admise a l'elagage.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants