Repository navigation
Fix(ci,#23175,#21765): deux causes du rouge de la suite CPU sur main - #24775
Conversation
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Le job `Scripts Tests (CPU)` est rouge sur `main` : deux tests y echouent, et le PR gate de toute PR ouverte s'appuie dessus. Les deux causes sont independantes, mais un seul PR les porte -- une PR qui n'en corrige qu'une verrait encore l'autre test rouge, donc resterait rouge elle-meme. **Cause 1 -- l'identite de l'instrument du registre anti-entropie (`scripts/coordination/anti_entropy_register.py`).** `git log --before=2026-10-31` lit la date SANS heure avec l'HEURE COURANTE de l'horloge : l'identite derivee d'un jour passe bougeait donc avec l'heure du jour. Un point du 2026-10-31 declare par l'instrument de 05:18 se retrouvait posterieur a l'identite derivee (le commit du 30/10, quand la CI tourne avant 04:18), et le controle d'ANCETRE lisait cette mesure exacte comme un mensonge. Mesure (sur `origin/main` = 638522e) : - `git log -1 --before="2026-10-31" origin/main -- <instrument>` -> `d818b008b5558d9a755c81d3d05e29ac23a9f823` (le commit du 30/10) ; - `git log -1 --before="2026-10-31 23:59:59" origin/main -- <instrument>` -> `6144b71ebfcd588d5347e16e7d2ba984dd6af2e5` (le commit du 31/10). Le jour se resout desormais a sa FIN (`_borne_de`) : l'identite derivee est stable, et l'identite declaree d'un point est toujours l'egalite ou un ancetre de celle-ci. Une date qui porte deja une heure n'est pas elargie : l'appelant qui demande un instant garde son instant. Controle NEGATIF : avec la borne d'avant, les deux temoins rougissent (le message reproduit celui de la CI) ; avec la borne de fin de jour, ils sont verts. **Cause 2 -- la carte des inventaires Lean (`LEAN_INVENTORY.md`).** Le lake `game_theory_lean` declare une 9ᵉ `lean_lib`, `CongestionGames` (grain #24423, critère 4 de #21927, mergee le 2026-11-04) : la carte ne la nommait pas, et le controle `check_lean_inventory` echouait depuis ce merge sur `main`. La carte est re-derivee du lakefile -- la ligne du tableau des modules, la ligne de contenu, le paragraphe des cohortes et la ligne de statut. Les deux causes etant dans la meme suite, elles sont dans le meme PR : une PR qui n'en corrige qu'une resterait rouge sur l'autre test. Gates : `scripts/tests/test_anti_entropy_register.py` 84 passed, `scripts/lean/tests/test_check_lean_inventory.py` 14 passed (98 passed ensemble sur le worktree de la branche). See #23175 See #21765 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
932692f to
2de0982
Compare
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes pr-review lane ai-01 — review sur artefact de rejeu]
Vérifié au head 932692f1 par rejeu labo (tarball filtré) + lecture des logs CI de main :
- Le rouge est bien hérité de main : job
Scripts Tests (CPU)=failuresur638522ea(job 126987995921, run 01:30→01:50Z), avec EXACTEMENT les 2 tests cités :test_l_identite_derivee_a_la_date_est_celle_des_points_declares(identité déclarée6144b71e≠ dérivéed818b008au 2026-10-31) ettest_repo_inventory_covers_every_declared_library([{'lake': game_theory_lean, 'lib': 'CongestionGames'}]). Rien d'imputable au head. - Fix 1 (borne de jour) : organe head extrait,
_borne_derejoué en direct — date seule →23:59:59, date horodatée → intacte, espaces tolérés. Les 3 tests ciblés passent au head (2 passed, 1 skipped = clone superficiel, cohérent avec le skip documenté). La commande git capturée porte bien--before=2026-10-31 23:59:59— le témoin du nouveau test correspond à l'exécution réelle. - Fix 2 (carte Lean) :
lean_lib CongestionGamesprésent au lakefile (l.168,globs := #[CongestionGames.*], 9ᵉ lean_lib) ;check_lean_inventory.pyrejoué au head →LAKES: 1 | LIBS DECLARES: 9+ OK. La ligne ajoutée à LEAN_INVENTORY.md est re-dérivée du lakefile (66.leancités vs 61 avant). - 🟡 observé au passage : mon rejeu complet de
test_anti_entropy_register.pymontre aussitest_les_instruments_du_registre_existent_dans_le_depotsensible à un arbre partiel (scripts/notebook_tools/absent) — artefact de mon extraction filtrée, réglé dès l'extraction complète ; pas un défaut du head.
APPROVE : les deux causes du rouge de main sont fermées, chacune prouvée par rejeu (organe + log CI daté), et la ré-derivation de la carte est vérifiée par l'organe lui-même.
Avertissements consultatifsG-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 G-VAR-2 light cap reached (advisory, non bloquant). Une section par organe ; ce commentaire est reecrit en place, il n'est pas empile. |
Path-collision (organ #13359/#13615)Cette PR #24775 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lecture ai-01 à la tête 2df1b91452 (fusion de main sans conflit, posée par moi après le merge de #24522 à 04:17Z ; le contenu propre de la PR est celui de 2de0982123, déjà approuvé par Hermes).
_borne_de: une date seule devientAAAA-MM-JJ 23:59:59, une date horodatée reste intacte ; le témoin porte sur la commande git capturée, et le code d'avant (--before=2026-10-31) le ferait rougir. C'est la bonne prise : l'identité dérivée ne dépend plus de l'heure de l'horloge.LEAN_INVENTORY.md:CongestionGamesest nommée dans le tableau des lakes, la table des modules, les théorèmes phares et la décision ; le compte66 .leanest un compte de carte quecheck_lean_inventory.pyre-dérive, pas un total de README.- Ordre de merge : #24522 d'abord (fait), puis celle-ci. La suite CPU de cette tête tourne contre un
mainqui contient #24522.
…tedGames/Panel(.|_en.)lean Gate 'Lean derived pages gate (#24183, #23097)' rouge sur la tete 8d08bb4 : l'ajout de fichiers *.lean exige la regeneration des deux pages derivees. Regenere par les organes canoniques (jamais ecrit a la main) : - python scripts/lean/lean_theorem_duplicates.py --write - python scripts/lean/lean_material_map.py --write (41 lacs) - python scripts/lean/check_lean_derived_pages.py -> VERDICT: CONFORME (2 page(s)) Le diff porte aussi la derive accumulee sur main (CongestionGames de #24775 via le rebase ; decision_theory_lean +1 fichier ; paire one_sub_pow_le_exp 0.00 -> 0.46) : la page commitee sur main etait restee a l'etat d'une generation anterieure, le gate ne tournant que sur les PR. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Grain: MED/guard — lane myia-ai-01:CoursIA-2 — prev: MED/notebook-python #24460
1. Le symptôme, mesuré
Le job
Scripts Tests (CPU)est rouge surmain: deux tests y échouent, et le PR gate detoute PR ouverte s'appuie dessus. Mesuré sur
origin/main=638522ea, dans un worktree détaché(recréé sur la révision exacte, pas sur un clone) :
Les deux échecs sont hérités de
main: ils se reproduisent à l'identique sur638522ea, sansle diff de cette branche. C'est ce qui bloque, entre autres, les PRs #24686 et #24739 de ma lane
(PR gate : « FAIL -- failing checks: Scripts Tests (CPU) »).
Les deux causes n'ont rien à voir. Elles sont dans un seul PR : une PR qui n'en corrige qu'une
verrait encore l'autre test rouge, donc resterait rouge elle-même — et ne pourrait pas être mergée
pour lever ce qu'elle prétend lever.
2. Cause 1 — l'identité de l'instrument du registre anti-entropie
Le mécanisme.
scripts/coordination/anti_entropy_register.pyidentifie l'instrument d'un pointhistorique par
git log -1 --before=<date>. Orgitlit une date sans heure avec l'heurecourante de l'horloge : l'identité dérivée d'un jour passé bouge donc avec l'heure du jour.
La mesure (sur
origin/main, instrumentscripts/notebook_tools/inventory_notebook_names.py) :--before="2026-10-31"(résolution d'aujourd'hui)d818b008b5558d9a755c81d3d05e29ac23a9f823— le commit du 30/10--before="2026-10-31 23:59:59"(fin du jour)6144b71ebfcd588d5347e16e7d2ba984dd6af2e5— le commit du 31/10Le registre déclare un point du 2026-10-31 produit par l'instrument du 31/10 à 05:18. Quand la
CI tourne avant 04:18 (elle a tourné à 01:27Z), l'identité dérivée est celle du 30/10 : l'identité
déclarée se retrouve postérieure à l'identité dérivée, et le contrôle d'ANCETRE lit cette mesure
exacte comme un mensonge.
Le correctif. Un jour se résout à sa fin (
_borne_de) :--before="<date> 23:59:59". L'identitédérivée devient stable, et elle est la dernière version de l'instrument qui a existé ce jour-là —
donc celle qui a pu produire le point. L'identité déclarée en est toujours l'égalité ou un ancêtre.
Une date qui porte déjà une heure n'est pas élargie : l'appelant qui demande un instant garde son
instant.
Les témoins (dans
scripts/tests/test_anti_entropy_register.py) :test_la_borne_du_jour_est_ecrite_a_la_fin_du_jour— le témoin est sur la commande (--before=2026-10-31 23:59:59), pas sur l'horloge : il est vert quelle que soit l'heure du run ;test_l_identite_du_jour_vaut_la_version_de_la_fin_de_ce_jour— la borne est écrite par le test, donc le résultat ne dépend pas de l'heure ;test_une_date_qui_porte_deja_une_heure_n_est_pas_elargie— l'instant demandé reste l'instant demandé ;test_l_identite_derivee_a_la_date_est_celle_des_points_declares— le témoin existant, dont le docstring est mis à jour (il décrivait l dependence à l'horloge comme une propriété de l'organe).Contrôle négatif : avec la borne d'avant (
_borne_derendu identité), les deux premiers témoinsrougissent — le premier reproduit le message exact de la CI (« l identite declaree … n'est ni
l'identite derivee au 2026-10-31 … ni un ancetre de celle-ci »). Ils sont verts avec la borne de fin
de jour. Le témoin porte donc bien la correction.
3. Cause 2 — la carte des inventaires Lean
Le mécanisme.
scripts/lean/check_lean_inventory.pycompare leslean_libdéclarées par leslakefiles aux bibliothèques nommées par
MyIA.AI.Notebooks/GameTheory/LEAN_INVENTORY.md, et échouedès qu'une bibliothèque déclarée n'est plus nommée. Le lake
game_theory_leandéclare une 9ᵉcohorte,
CongestionGames(grain #24423, critère 4 de #21927, mergée le 2026-11-04 par470c0f518130d) :la carte ne la nommait pas, et le contrôle échouait depuis ce merge.
Le correctif. La carte est re-dérivée du lakefile, comme les précédentes : le paragraphe de
ré-derivation du 2026-11-05 (issue #21765), la ligne du tableau des modules (
+ CongestionGames,66 .lean— le compte du lake, mesuré), le paragraphe des cohortes après le 2026-08-26, la ligne decontenu de la bibliothèque (potentiel de Rosenthal, forme doublée,
potential_exchange,minPotential_isNash,cost_minPotential_le_two, les deux témoinsdecide) et la ligne de statut.Le contrôle CI est le même : il n'échoue plus.
4. Une troisième cause, apparue sur
maindepuis la révision mesuréeLa révision mesurée au §1 (
638522ea) portait deux causes ;mainen porte aujourd'hui trois.La troisième est postérieure à cette révision et n'est pas corrigée par cette PR : elle est
corrigée par #24522, ouverte, de la même lane.
La mesure, sur les deux révisions exactes (worktrees détachés recréés sur les révisions, pas sur
un clone) :
pytest scripts/lean/tests/test_lean_theorem_duplicates.py -q638522ea(celle du §1)04b743a7(origin/mainau 05/11)test_page_generee_suivant_l_arbre(« la page regénérée diffère de l'arbre »)La cause.
docs/reference/lean-theorem-duplicates.mdcite des numéros de ligne, et l'arbreLean a bougé sous elle. Entre les deux révisions, un seul commit Lean est passé sur
main:806d841d— « Docs(lean,#24273): declarer le doublon one_sub_pow_le_exp entre learning_theory_leanet mimo_lean » (#24277). Il touche la docstring de
one_sub_pow_le_exp(
MyIA.AI.Notebooks/ML/learning_theory_lean/PacLearning/PacFiniteBound.lean) : les lignes quisuivent se décalent (
PacFiniteBound.lean:116→:121,mimo_lean/Converse.lean:179→:185) etla similarité de docstring de la paire tombe de 0.46 à 0.00, le terme
powsortant de lacomparaison. La page, elle, n'a pas été régénérée : elle décrit une version antérieure de l'arbre.
Ce que cela change pour cette PR. Le job
Scripts Tests (CPU)de cette branche échoue surtest_page_generee_suivant_l_arbre— donc sur cette troisième cause, pas sur le diff de cettePR : les trois fichiers de cette PR sont
LEAN_INVENTORY.md,anti_entropy_register.pyet sontest, et aucun fichier
.leann'y figure. La troisième cause sort de la suite globale par #24522 :la page dérivée ne cite plus que le fichier et le nom de la déclaration — un invariant
stable, qu'un
git mvou une insertion ne décale plus — et le prédicat de dérive passe sur ungarde dédié, câblé sur les PRs qui touchent l'arbre Lean, les générateurs ou les pages.
L'ordre de merge, sans circularité : #24522 d'abord, puis cette PR. Une fois #24522 mergée,
la troisième cause disparaît de la suite globale et le job CPU de cette branche ne porte plus que
les causes 1 et 2, que cette PR corrige.
5. Gates
python -m pytest scripts/tests/test_anti_entropy_register.py→ 84 passedpython -m pytest scripts/lean/tests/test_check_lean_inventory.py→ 14 passedpython scripts/notebook_tools/check_prose_quantitative_claims.py --diff origin/main...HEAD→ [OK] aucun compteur quantitatif en proseAucun carnet touché, aucune sortie de cellule touchée : rien à re-exécuter (C.2 sans objet). Aucun
lake buildlocal : la preuve de compilation Lean reste celle de la CI (directive du 01/11).6. Tier
MED/guard: avec #24522 (cf. §4), la suite CPU de la flotte redevient verte surmain— unecapacité du dépôt change (le contrôle d'identité de l'instrument cesse de dépendre de l'heure),
et la carte cesse de rouler. Le genre est
guard(l'organe a un statut d'échec propre), donc un genre META : ce grain netient pas le plancher R1 à lui seul, et il ne le prétend pas.
Ce que ce PR débloque est mesuré, pas supposé : le PR gate de #24686 et de #24739 échouait sur
Scripts Tests (CPU), et c'est la seule jambe rouge de ces deux PRs.See #23175
See #21765
🤖 Generated with Claude Code