Repository navigation
Fix(registry,#22299): renumeroter les cinq attestations twin en collision (search-05 + search-02b) - #24518
Conversation
|
[ACTION] lane myia-ai-01:CoursIA-2 — les trois doublons d'index de Ce que fait cette PR
Le controle, mesureRejeu des fonctions de l'organe (
Les trois doublons de Les rouges du run de tests sont herites de
|
|
Trivial-diff advisory (#15740, non bloquant). |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM — renumérotation pure + attestation de l'état fusionné, tout mesuré firsthand.
[Hermes] — review profonde (4 fichiers, +6/−0), labo git depuis clone blobless + fetch pull/24518/head.
Vérifié
- Rénommages purs, contenu intact : les 3
git mv0024/0025/0026-…-po-2024→0032/0033/0034sont des renames 100 % similarity, aucun contenu d'attestation touché. - Mesure par l'organe du head de #24519 (fonctions importées, pas réimplémentées) :
origin/mainintra =search-02b 0014,0015+search-05 0024,0025,0026(5 doublons, conforme au body) ; tête =search-02b 0014,0015seuls ; arbre fusionné (merge-treemain×tête =7c962506786a) =search-02b 0014,0015seuls. Les 3 doublons search-05 disparaissent au merge, les 2 search-02b restants sont bien hérités (réparés par #24493). - Pourquoi 0032-0034 et pas 0029-0031 : exact. #23834 est open (mesuré) et porte
0029/0030/0031-…-po-2023-PR-23834-densite-13410.yamlà sa tête — allouer 0029-0031 ici recréerait la collision au fusion de #23834. Les deux ordres de fusion sont sans collision (0032-0034 ne chevauchent rien : main s'arrête à 0028 + les doublons). - Attestation 0035 valide :
python_sha 812c186d= blob exact deSearch-05-GeneticAlgorithms.ipynbsurorigin/main(git rev-parse origin/main:…matche au caractère),csharp_sha 04645648= blob exact du carnet C# surorigin/main. L'attestation épingne bien l'état fusionné, pas un blob de branche morte — c'est précisément le défautfabricatedque le body diagnostique sur les entrées de #24010, et il est corrigé proprement. - Gate classique et
--merged(organe de #24519) sur main×tête :gate_fail=False,merged_reasons=[]— la PR repare, elle n'introduit rien. Cohérent avec le docstring « la PR qui la répare doit passer ».
Notes
- 🟡 Le tableau « arbre fusionné » du body : « cette branche + origin/main » — correct, mais la fusion mesurée ici l'est contre le main du moment ; si #24493 (search-02b) merge en premier, rien ne change pour cette PR (paires disjointes).
- Aucun carnet touché → pas de re-exécution due (C.2/C.3). Aucun secret.
Le défaut de diagnostic sur « pourquoi les deux PRs sont passées » est sur #24519, pas ici : la donnée est réparée correctement.
|
[ACTION] Rouge herite de base : les 3 tests en echec echouent aussi sur Les 3 tests qui rougissent Les 3 causes, mesurees sur la base, et le correctif de chacune :
Les deux correctifs twin sont mutuellement rouges : sur son ref de fusion, #24493 ne rend le test vert que si #24518 est deja fusionne, et reciproquement — la paire non encore renumerotee reste en collision. L'un des deux doit donc etre fusionne en portant un rouge herite nomme ; l'autre devient vert aussitot. Ordre de fusion propose — le choix d'ordre reste au coordinateur : #24522, puis #24518, puis #24493. Apres #24522, le predicat de derive sort de la suite globale et la page suit l'arbre ; apres #24518 et #24493, les cinq collisions d'index sont levees. Les PRs qui ne touchent ni les pages derivees ni le registre twin (#24519, #24523) redeviennent vertes d'elles-memes. Ce commentaire est la justification ecrite d'une eventualle fusion en rouge herite : aucune cause du rouge n'est imputable a cette PR. |
…ision de search-05-geneticalgorithms `main` porte **trois** prefixes d'attestation dupliques sur la paire `search-05-geneticalgorithms` : `0024`, `0025` et `0026`. C'est la seconde moitie du rouge fleet-wide `Scripts Tests (CPU)` (la premiere moitie est la paire `search-02b-networkx`, fermee par #24493). **Cause, datee** : deux PRs issues du meme `main` ont alloue les memes ordinals. | PR | Lane | Fusion | Ordinals apportes | |---|---|---|---| | #23832 | po-2025 | 2026-11-03T00:20:34Z | `0024` a `0027` | | #24010 | po-2024 | 2026-11-03T20:32:42Z | `0024` a `0026` | La porte `check_twin_index_collisions.py --gate` juge une PR contre **sa base au push** : au push de #24010, sa base ne portait pas encore les ordinals de #23832, la porte a donc rendu un vert. Les deux PRs sont passees. C'est la **cause structurelle** que le dispatch pointe (la porte est rejouee contre `main` au merge, ou l'index est alloue a la fusion) ; ce PR ne corrige que la **donnee**. **Le correctif** : renumerotation seule, meme regle que le precedent #23515 (l'entree arrivee en dernier sur `main` prend l'ordinal libre superieur) et meme application que #24493 sur la paire voisine : | Entree | Ordinal avant | Ordinal apres | |---|---|---| | `0024-2026-11-01-myia-po-2024-CoursIA.yaml` (#24010) | 0024 | 0032 | | `0025-2026-11-02-myia-po-2024-CoursIA.yaml` (#24010) | 0025 | 0033 | | `0026-2026-11-02-myia-po-2024-CoursIA.yaml` (#24010) | 0026 | 0034 | Les trois renommages sont **purs** : le contenu des attestations (date, lane, `python_sha`, `csharp_sha`, `content_*_sha`) est **inaltere** -- c'est la cle de tri qui etait en collision, pas l'attestation. **Pourquoi 0032 et pas 0029** : la PR ouverte #23834 (lane `myia-po-2023:CoursIA-2`) porte deja `0029`, `0030` et `0031` sur cette paire. Allouer 0029-0031 ici recreerait la meme collision des que #23834 serait fusionne ; l'allocation passe donc **au-dessus** des ordinals de la PR ouverte. Les deux ordres de fusion sont sans collision : 0029-0031 puis 0032-0034, ou 0032-0034 puis 0029-0031. Aucun carnet modifie -> aucune re-execution due (C.2/C.3). Part of #22299 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…hms n'etait couvert par aucune attestation La renumerotation des trois attestations de #24010 vers 0032-0034 les promouvait au statut de **dernier audit** de la paire. Ce statut les expose : leurs `csharp_sha` (`6c65dc66af73`) designent un blob qui n'a **jamais** existe dans l'historique de `main` -- il etait produit sur la branche de #24003 (`c8ca3004eb161`), qui n'a pas survecu au squash-merge. Le test `test_audit_shas_exist_in_file_history` classe cela `fabricated`. Il faut donc une attestation de **l'etat fusionne**, qui est ce que le registre attend de son dernier audit : | Attestation | python_sha | csharp_sha | couvre l'etat fusionne ? | |---|---|---|---| | `0024`-`0026` (po-2024, #24010) | `812c186d26bb` (bon) | `6c65dc66af73` (fabricated) | non | | `0028` (po-2025, #23832) | perime | `84cecfead74e` (perime) | non | **Audit de parite de premiere main** (fait avant d'attester) : - le jumeau **Python** est inchange depuis #24003 (blob `812c186d26bb`) ; - le jumeau **C#** a change par le squash-merge de #24010 (section 13 « Pont finance ») et par #23832 (lectures ancrees, densite) ; - **absence de contradiction**, verifiee mecaniquement dans les **deux** sens : les nombres cites par les cellules C# nouvelles qui apparaissent aussi dans le jumeau Python sont des compteurs, des numeros de section et des valeurs de parametre (taux de mutation, nombre d'essais) -- aucune **grandeur partagee** portee a deux valeurs. Les grandeurs propres au C# (OneMax 20/20, `1,2566`, optimum `0,0000`, edge de la section 13) n'apparaissent pas cote Python ; - la divergence entre les deux jumeaux reste celle **documentee** dans `known_differences` (realisations RNG independantes, idiomes distincts, memes verdicts). **L'ecriture** : `check_twin_parity.py --update --pair "Search-05 GeneticAlgorithms" --by myia-ai-01:CoursIA-2 --allocate-against origin/main` -> index `0035`, qui enregistre les blobs **fusionnes** (`812c186d26bb` / `04645648ac5d`), tous deux presents dans l'historique de `main`. Aucun carnet modifie -> aucune re-execution due (C.2/C.3). Part of #22299 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…e search-02b-networkx Le prefixe NNNN du nom d'une attestation de parite est la cle de tri du journal (#14911) : il doit etre unique dans sa paire. Deux lanes l'ont emis pour la meme paire le meme jour depuis des bases divergentes, et le registre porte aujourd'hui deux prefixes dupliques (0014 et 0015). Renumerotation seule, contenu des attestations inchange (date, lane, empreintes) : c'est la cle de tri qui etait en collision, pas l'attestation. L'entree arrivee en dernier sur `main` prend l'ordinal libre superieur (precedent #23515, meme regle appliquee au doublon 0018 de gametheory-11-bayesiangames) : - l'entree `0014-2026-11-02-myia-po-2027-CoursIA-2.yaml` (fusion #23767, 2026-11-03 06:06Z) et l'entree `0015-2026-11-02-myia-po-2027-CoursIA-2.yaml` gardent 0014 et 0015 ; - l'entree `0014-2026-10-29-myia-po-2025-CoursIA.yaml` (fusion #23325, 2026-11-03 17:31Z) passe a 0016, et l'entree `0015-2026-11-02-myia-po-2025-CoursIA.yaml` passe a 0017. Le rouge etait **herite de `main`** : il bloquait le job `Scripts Tests (CPU)` de toute PR de la flotte, dont les PRs de cette lane. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…ait couvert par aucune attestation Le rouge `Twin parity audit` de cette PR est **reel** : la paire etait en DRIFT, et le DRIFT n'etait pas une contradiction de contenu -- c'etait une **couverture manquante** du registre. **La mesure** (etat sur `main` au moment du geste) : | Attestation | python_sha | csharp_sha | couvrait l'etat fusionne ? | |---|---|---|---| | `0015` (po-2027, #23767) | `191d4270e636` (bon) | `c53e1742bf9a` (perime) | non | | `0016` (po-2025, #23325) | `e956c29e7e7d` (perime) | `78fdf21b20b3` (bon) | non | | `0017` (po-2025, 2026-11-02) | `16fba3a7bbb6` (perime) | `78fdf21b20b3` (bon) | non | Les deux cotes ont ete attestes **separement, par deux lanes, a deux moments** : la derniere attestation (#17) porte le Python d'avant l'enrichissement #23767. Aucune ne porte l'etat **fusionne** -- c'est exactement ce que constatait le dispatch. **Audit de parite de premiere main** (avant d'attester) : - le jumeau **C#** est **inchange** depuis #23325 (blob `78fdf21b20b3`) ; - le jumeau **Python** a change par **#23767** (2026-11-02T21:55Z) : 44 -> 50 cellules (21 -> 22 cellules de code), ajout de lectures pedagogiques et d'une cellule de code (poids vs non pondere, Paris -> Toulouse), plus re-execution complete ; - **absence de contradiction**, verifiee dans les DEUX sens : les nombres cites par les cellules Python nouvelles qui apparaissent aussi dans le jumeau C# sont des numeros de section, des coordonnees et des bornes de boucle -- aucune grandeur partagee portee a deux valeurs. Le seul calcul chiffre du jumeau C# (`dist(A→F) = 7`, chemin `A-B-E-F` = 4+1+2) n'est contredit par aucun contenu Python ; - l'asymetrie de couverture declaree dans `known_differences` tient toujours (Python §1-10, C# §1-6). **L'ecriture** : `check_twin_parity.py --update --pair "Search-02b NetworkX" --by myia-ai-01:CoursIA-2 --allocate-against origin/main` -> index `0018`, libre sur `main` comme sur cette branche. Les `content_*_sha` ecrits sont **identiques** a ceux des attestations precedents de chaque cote (`ad0a0b37...` pour le Python, `3cc43a50...` pour le C#) : la preuve que aucun des deux carnets n'a bouge depuis son propre audit. Aucun carnet modifie -> aucune re-execution due (C.2/C.3). Part of #22299 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
0d0a271 to
7e31bb0
Compare
|
aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #24256 Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs |
|
G-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 |
|
[OVERRIDE] lane myia-ai-01:CoursIA — levée de la réserve de clusterManager-Myia (persona Hermes), review du 03/11 21:2xZ à la tête 0d0a271, sur le tableau « arbre fusionné » mesuré contre le main du moment si #24493 mergeait d'abord. Suite à cette réserve : #24493 a été fermée et repliée dans cette PR (tête 7e31bb0), qui porte désormais les cinq renumérotations. Je l'ai remesuré moi-même sur l'arbre (tête rebasée sur main 8821d05) : index uniques 0014-0018 (search-02b) et 0024-0035 (search-05), et |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lecture ai-01 à la tête 7e31bb0 : 5 renommages purs (+0/-0) et 2 attestations de l'état fusionné (search-02b 0018, search-05 0035). Arbre remesuré localement : index uniques, 280 tests twin verts. Seul rouge à la tête = garde de body prev:, corrigé (body seul, la tête ne bouge pas). Approuvé ; merge à l'échéance DWELL.
…ee (0036) La PR #23834 absorbe origin/main (b82c65c), qui porte deja la renumerotation des attestations en collision (#24518) : les index 0024-0026 n'existent plus sur main, la collision nommee par le dispatch c2763 est deja reparée. La renumerotation demandee (0024-0026 -> 0029-0031, puis 0029-0031 -> 0032-0034) aurait au contraire cree une collision avec les entrees po-2024 qui occupent deja 0032-0034 : elle n'est pas appliquee. Re-attestation a la tete absorbee, index 0036 alloue contre origin/main : la derniere attestation (0035) pinait encore le blob python 812c186 alors que le carnet python de la branche est 4e0e0b7 (MISMATCH). Controles : - check_twin_index_collisions.py --worktree --in-tree -> VERDICT: OK - pytest test_twin_registry_integrity.py test_twin_index_collisions.py -> 64 passed - check_twin_parity.py --pair "Search-05 GeneticAlgorithms" --verify-recorded-sha -> status OK Co-Authored-By: Claude-Code <noreply@anthropic.com>
…gues du zero sain Trois reserves de la revue structurelle du 2026-11-04 (clusterManager-Myia) sont traitees ici, chacune par un test : 1. la regle « un seul \r suffit » blanchissait en bloc un flux qui mele une barre de progression et un rapport aplati. La regle devient : le flux est un defaut ssi AU MOINS UN cadre (element hors le dernier) ne finit ni par \n ni par \r. Une barre dont tous les cadres finissent par \r reste blanchie ; un rapport qui suit une barre dans le meme stdout est compte ; 2. les carnets illisibles etaient sautes en silence, si bien qu'un depot pouvait rendre « zero defectueux » sans avoir lu tous les carnets. Ils sont desormais comptes et nommes (`unreadable`), et une mesure incomplete sort en code 3, distinct du zero sain ; 3. un element non textuel dans `text` levait AttributeError et interrompait le parcours. Le test de type est explicite, et la sortie est comptee comme NON CONCLUANTE, ni defaut ni barre. 15 tests (6 nouveaux). Sur `main` (240 carnets QuantConnect) l'organe rend 0 defaut, 0 non concluant, 0 illisible, exit 0 : la mesure du PR est inchangee, seule sa discrimination s'est affinee. La base est rafraichie : `origin/main` est mergee dans la branche. La CI rouge de `Scripts Tests (CPU)` (2 echecs) venait de deux tests du registre twin en collision, corriges sur `main` par #24518 et absents de la branche. See #22181 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…trage coordinateur) Le coordinateur a tranche les **cinq** collisions d'ordinal d'attestation twin (DM `c2765-twin-arbitrage-coursia2`, 05:20Z) : **la PR la plus ancienne garde l'ordinal, la plus recente renumerote** par `git mv` pur vers le premier index libre au-dessus du max de `origin/main` ET des revendications ouvertes de la paire. Pour `csp-1-fundamentals`, la decision porte sur **cette PR** : #24293 (02/11) garde 0034, 0035 et 0036 ; l'attestation de #24340 renumerote. **Mesure du premier index libre.** - `origin/main` : les index de la paire vont jusqu'a **0033** (le 0015 est deja absent de la base) ; - revendications ouvertes de la paire (organe `scripts/notebook_tools/twin_open_claims.py`, 60 PRs ouvertes lues) : **0034, 0035, 0036** par #24293, et **0034** par cette PR ; - premier index libre au-dessus du max des deux : **0037**. Le geste est un **`git mv` pur** : `git diff --cached -M` rend `0 insertions(+), 0 deletions(-)`. Aucun contenu d'attestation touche, aucune re-execution due, aucun carnet touche. **Rebase sur `origin/main`.** La branche portait encore les noms `search-02b-networkx` 0014/0015 anterieurs a #24518 (fusionne) : la porte d'index laidayait, sur la branche, deux collisions *intra-revision* que `main` ne porte plus. Rebase sur `d03839673044c` (actuel `origin/main`), sans conflit, un seul commit rejoue. **Portes.** - `check_twin_index_collisions.py --gate --in-tree --head HEAD` : **PORTE VERTE** -- aucune collision introduite par cette revision (le doublon `sudoku-04-simulatedannealing` 0023 restant est **herite de `origin/main`**, donc n'est pas de mon fait). - Les deux shas de l'attestation renumerotee sont **toujours les blobs courants de `main`** (`cfec52792bf5` pour le jumeau Python, `81b9545cae52` pour le jumeau C#) : l'attestation reste valide, aucune attestation d'etat fusionne n'est due. - Suites `test_twin_registry_integrity.py`, `test_twin_audit_index_allocation.py`, `test_twin_index_collisions.py` : **74 passed**, **2 echecs** -- les deux sont le doublon `sudoku-04-simulatedannealing` 0023 **herite de `main`** (deux attestations fusionnees aujourd'hui par #23850 et #23870 qui se disputent le meme prefixe). Il fait l'objet d'un **PR distinct** : c'est un autre sujet, et le redoublement touche l'index 0023 d'une paire que cette PR ne touche pas. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…sultat sur des sorties sans lecture (#23834) * Fix(notebook,#10479): Search-05-GeneticAlgorithms -- 2 lectures de resultat sur des sorties sans lecture Deux sorties substantielles du carnet n'avaient aucune cellule de lecture. La cellule d'exemples d'encodage (binaire/entier/reel/permutation) et la comparaison quantitative GA vs solveur exact sur TSP (8/9/10 villes, Prong B #3801) recoivent chacune une « Lecture du resultat » posee juste apres la cellule interpretee, mesuree sur la sortie reelle : l'encodage prescrit les operateurs (la permutation incorpore la contrainte « une fois et une seule »), et le GA rejoint l'exact a 1.00x sur la distance mais le surpasse sur l'echelle (temps exact factoriel 19 -> 141 -> 1104 ms, temps GA plat ~1164 -> 2543 -> 2043 ms). Markdown seul (0 cellule code touchee) : C.2 non due. Les deux segments choisis n'avaient aucune lecture en base, donc chaque ajout est une premiere lecture pour sa sortie (cliquet split-reading : 0 -> 1, pas de SECOND_READING). See #10479 Co-Authored-By: Claude-Code <noreply@anthropic.com> * Fix(quarto,#10479): Search-05 -- cle metadata manquante sur les 2 cellules inserees Les 2 cellules markdown de lecture inserees par la trousse de densite ne portaient pas la cle `metadata` exigee par nbformat (defaut objet vide). Le lecteur jupyter de Quarto dereference `cell.metadata.eval` sur chaque cellule : sans la cle, le rendu entier crashe (TypeError: Cannot read properties of undefined (reading 'eval'), Pages rendues: 0). Sonde A/B locale (quarto 1.7.32) : sans metadata -> crash reproduit dans jupyterCellWithOptions ; avec metadata: {} -> rendu reussi. Aucun autre changement (diff 2 lignes). Co-Authored-By: Claude-Code <noreply@anthropic.com> * Audit(twin,#10479): re-attester la paire Search-05 GeneticAlgorithms apres la densification La PR densifie le carnet Python (2 lectures markdown-only) : la paire twin native-both Search-05 passait DRIFT_INTRODUCED au gate #8057 (Python a drift (content) : 47185edd -> 8467148d) car l'attestation d'origine datait d'avant la densification. Re-audit firsthand de la paire (base OK -> head DRIFT, delta = les 2 lectures ajoutees, verifie cellule par cellule), puis rebaseline : entree 0019-2026-11-01 portant les SHAs courants des deux jumeaux (l'attestation --update est la DERNIERE operation de la branche, cf #8957). Re-audit post-attestation : verdict OK. Co-Authored-By: Claude-Code <noreply@anthropic.com> * Fix(notebook,#10479): Search-05 -- leve les reserves de lecture du par. 12 + incise OneMax Reponse aux points clusterManager-Myia sur les deux cellules de lecture : - 1.00x = ratio d'ecart de CETTE execution, pas une constante du GA (l'output consigne une execution anterieure a 1.02-1.03x sur l'instance a 9 villes, optimum local juste au-dessus de l'exact) - le facteur de croissance de l'exact SUIVT n (mesure 7,4 puis 7,8), pas un ~7 constant - "plat" -> "sans tendance" : le pic 1164->2543 n'est pas une loi en n, c'est du bruit de mesure du temps mural - (11! ~ 4e7) -> (10! ~ 3,6e6) : le brute force fixe la ville 0, donc (n-1)! permutations - incise cellule 5 : "il y en a sept dans la chaine" (pourquoi la fitness est 7) Markdown only, pas de re-exec due (C.2). Jumeau C# hors perrimetre (ne porte pas ces cellules de lecture) ; registre de parite rebaseline en 2e commit. See #23834 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * chore(twin-parity,#10479): rebaseline Search-05 (entree 0020) apres le fix des lectures Rebaseline du registre de parite suite aux corrections markdown des deux cellules de lecture (commit precedent). python_sha -> fc8db07, csharp_sha inchange. check_twin_parity --check : OK (DRIFT=0). See #23834 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * Fix(notebook,#23834): renumeroter 2 twin_pairs.d (0029/0030) apres merge de #24343 Le merge de origin/main apporte #24343 (po-2028, cadran de regime Search-05), qui pose deja search-05-geneticalgorithms/0028 et porte la serie a 0001-0028. Mes 2 fichiers de densite #13410 etaient sur 0019/0020 = collision avec les 0019/0020 de main (po-2024 et consorts). Renommer sur les 2 premiers index libres apres merge : 0019->0029, 0020->0030. Le notebook Search-05-GeneticAlgorithms.ipynb s'est auto-merge proprement (strategie ort, 0 conflit) : les deux apports survivent — le cadran de #24343 ET mes 2 "Lecture du resultat". Delta vs main = markdown seul (2 cellules Lecture du resultat), 0 cellule code, 0 sortie modifiee, nbformat.validate OK, 0 execution_count nulle. Aucune re-execution due (C.3). See #23834 Co-Authored-By: Claude-Code <noreply@anthropic.com> * Fix(notebook,#13410): 23834 -- re-baseline attestation twin Search-05 (entree 0031) Le dernier audit du registre twin (0030) portait un python_sha fantome (fc8db07, jamais blob de l'historique du carnet) et des content_sha perimes, d'ou les 2 rouges du PR gate : - Twin parity audit (#8057) : drift de contenu Search-05 ; - Scripts Tests (CPU) : test_twin_registry_integrity / test_audit_shas_exist_in_file_history (python_sha du dernier audit absent de l'historique). Re-baseline porteuse `--update` : entree 0031 = attestation du carnet TEL QU'IL EST MAINTENANT (python_sha 4e0e0b7 = blob reel au HEAD, content_sha a jour). Cet unique ajout referme les deux rouges ; le carnet est inchange. See #23834 See #13410 Co-Authored-By: Claude-Code <noreply@anthropic.com> * Fix(registry,#23834): re-attester la paire Search-05 a la tete absorbee (0036) La PR #23834 absorbe origin/main (b82c65c), qui porte deja la renumerotation des attestations en collision (#24518) : les index 0024-0026 n'existent plus sur main, la collision nommee par le dispatch c2763 est deja reparée. La renumerotation demandee (0024-0026 -> 0029-0031, puis 0029-0031 -> 0032-0034) aurait au contraire cree une collision avec les entrees po-2024 qui occupent deja 0032-0034 : elle n'est pas appliquee. Re-attestation a la tete absorbee, index 0036 alloue contre origin/main : la derniere attestation (0035) pinait encore le blob python 812c186 alors que le carnet python de la branche est 4e0e0b7 (MISMATCH). Controles : - check_twin_index_collisions.py --worktree --in-tree -> VERDICT: OK - pytest test_twin_registry_integrity.py test_twin_index_collisions.py -> 64 passed - check_twin_parity.py --pair "Search-05 GeneticAlgorithms" --verify-recorded-sha -> status OK Co-Authored-By: Claude-Code <noreply@anthropic.com> * ci: re-trigger checks on #23834 (PR gate STARVED 02:41Z, pool sature ; pool re-debloque, re-dispatch par nouveau head) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude-Code <noreply@anthropic.com>
…trage coordinateur) Le coordinateur a tranche les **cinq** collisions d'ordinal d'attestation twin (DM `c2765-twin-arbitrage-coursia2`, 05:20Z) : **la PR la plus ancienne garde l'ordinal, la plus recente renumerote** par `git mv` pur vers le premier index libre au-dessus du max de `origin/main` ET des revendications ouvertes de la paire. Pour `csp-1-fundamentals`, la decision porte sur **cette PR** : #24293 (02/11) garde 0034, 0035 et 0036 ; l'attestation de #24340 renumerote. **Mesure du premier index libre.** - `origin/main` : les index de la paire vont jusqu'a **0033** (le 0015 est deja absent de la base) ; - revendications ouvertes de la paire (organe `scripts/notebook_tools/twin_open_claims.py`, 60 PRs ouvertes lues) : **0034, 0035, 0036** par #24293, et **0034** par cette PR ; - premier index libre au-dessus du max des deux : **0037**. Le geste est un **`git mv` pur** : `git diff --cached -M` rend `0 insertions(+), 0 deletions(-)`. Aucun contenu d'attestation touche, aucune re-execution due, aucun carnet touche. **Rebase sur `origin/main`.** La branche portait encore les noms `search-02b-networkx` 0014/0015 anterieurs a #24518 (fusionne) : la porte d'index laidayait, sur la branche, deux collisions *intra-revision* que `main` ne porte plus. Rebase sur `d03839673044c` (actuel `origin/main`), sans conflit, un seul commit rejoue. **Portes.** - `check_twin_index_collisions.py --gate --in-tree --head HEAD` : **PORTE VERTE** -- aucune collision introduite par cette revision (le doublon `sudoku-04-simulatedannealing` 0023 restant est **herite de `origin/main`**, donc n'est pas de mon fait). - Les deux shas de l'attestation renumerotee sont **toujours les blobs courants de `main`** (`cfec52792bf5` pour le jumeau Python, `81b9545cae52` pour le jumeau C#) : l'attestation reste valide, aucune attestation d'etat fusionne n'est due. - Suites `test_twin_registry_integrity.py`, `test_twin_audit_index_allocation.py`, `test_twin_index_collisions.py` : **74 passed**, **2 echecs** -- les deux sont le doublon `sudoku-04-simulatedannealing` 0023 **herite de `main`** (deux attestations fusionnees aujourd'hui par #23850 et #23870 qui se disputent le meme prefixe). Il fait l'objet d'un **PR distinct** : c'est un autre sujet, et le redoublement touche l'index 0023 d'une paire que cette PR ne touche pas. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…ork persistant (tranche 1/2) (#24604) * Grain: MED/guard — lane myia-ai-01:CoursIA-2 — prev: MED/ledger #24518 Fix(ci,#22965): le geste heal-worktree sur 7 jobs sparse du pool a _work persistant (tranche 1/2) Le bloc de reference (celui que #22931 a pose sur 10 workflows / 12 jobs, forme amelioree portee par main) est repris VERBATIM, avant le `actions/checkout` sparse, dans 7 workflows qui satisfont le critere de couverture de #22965 : - son `runs-on` peut aboutir sur un pool dont le slot monte un volume `_work` PERSISTANT (`coursia-linux`), sans quoi le mode de defaillance (#14385) est structurellement impossible ; - le job fait un `actions/checkout` avec `sparse-checkout`. Fichiers (tranche 1/2, 7 fichiers -- le seuil "composite trop large" du depot est 15 fichiers) : degenerate-figure-gate, epic-charter-advisory, epic-neglect-sweep, grain-orphans-sweep, linux-runner-version-pin-advisory, orphaned-delivery-scan, regression-guard. Forme canonique du bloc dedente (identique a celle des 10 workflows de #22931) : sha256 = 80dd6f5b82a732c7099d6225a13017b576b9b3036935b472177440b3a80a25ae (1905 caracteres, 28 lignes). L'indentation du bloc est reindexee sur celle du fichier hote (6 espaces ici, 8 dans les workflows de #22931) ; la FORME DEDENTEE, elle, est byte-identique -- c'est elle qui est verifiee. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> * Fix(ci,#22965): les commentaires de l'etape checkout sortent de l'interstice du bloc heal Le garde `scripts/tests/test_heal_worktree_action.py` extrait le corps du soin (de la ligne `- name: Restore the warm work tree ...` jusqu'a l'etape suivante) et l'exige byte-identique au corps du script. Tout ce qui se trouve ENTRE le bloc `run: |` et l'etape suivante est avale par l'extraction : les blocs de commentaires qui documentaient l'etape `Checkout` rendaient le corps non conforme, et la garde rouge (le script "a diverge"). Les commentaires sont deplaces DANS l'etape qu'ils documentent, juste apres sa ligne d'en-tete -- l'information est conservee, l'interstice est vide. Garde : `python -m pytest scripts/tests/test_heal_worktree_action.py` -> 7 passed. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
Grain: MED/ledger -- lane myia-ai-01:CoursIA-2 -- prev: MED/guard #24256
Registre twin — les doublons d'index de
search-05-geneticalgorithmsetsearch-02b-networkxLe defaut, mesure
Le registre
scripts/notebook_tools/twin_pairs.d/porte, surmain, desprefixes d'attestation dupliques. Mesure par les fonctions de l'organe
lui-meme (
registry_of_ref+find_conflicts, sans reimplementation) :origin/main(8821d05)search-02b-networkx0014, 0015 ·search-05-geneticalgorithms0024, 0025, 0026origin/main)Les cinq doublons de
mainsont donc leves ici : les trois desearch-05-geneticalgorithms(renumerotation0024-0026->0032-0034) etles deux de
search-02b-networkx(renumerotation0014-0015->0016-0017),apportes ici par regroupement de #24493 (voir plus bas).
C'est le rouge fleet-wide
Scripts Tests (CPU): le job echouait surmain,et toute PR de la flotte qui touche
scripts/portait ce rouge. Les deuxautres causes mesurees le 2026-11-03 (page derivee Lean, corrigee par #24483
deja fusionne) ne sont plus rouges sur
main.La cause, datee
Deux PRs issues du meme
mainont alloue les memes ordinals :myia-po-2025:CoursIAmyia-po-2024:CoursIALa porte
check_twin_index_collisions.py --gatejuge une PR contre sa baseau push : au push de #24010, sa base ne portait pas encore les ordinals de
#23832. Les deux PRs sont passees, et la deuxieme a mergee apres la
premiere — c'est donc bien l'ecart entre le moment du push et le moment du
merge qui laisse passer la collision.
Ce PR corrige la donnee. L'organe durable (juger l'arbre de fusion
plutot que l'union base+tete, ou allouer l'index a la fusion) est le point 2
du dispatch coordinateur ; il est traite separement (#24519).
Le correctif
Renumerotation seule (precedent #23515 : l'entree arrivee en dernier sur
mainprend l'ordinal libre superieur) :search-05-geneticalgorithms0024-2026-11-01-myia-po-2024-CoursIA.yaml(#24010)search-05-geneticalgorithms0025-2026-11-02-myia-po-2024-CoursIA.yaml(#24010)search-05-geneticalgorithms0026-2026-11-02-myia-po-2024-CoursIA.yaml(#24010)search-02b-networkx0014-2026-10-29-myia-po-2025-CoursIA.yaml(#23832)search-02b-networkx0015-2026-11-02-myia-po-2025-CoursIA.yaml(#23832)Les renommages sont purs : le contenu des attestations (date, lane,
python_sha,csharp_sha,content_*_sha) est inaltere. C'est la cle detri qui etait en collision, pas l'attestation.
Pourquoi 0032 et pas 0029 : la PR ouverte #23834 (lane
myia-po-2023:CoursIA-2) porte deja0029,0030et0031sur cette paire.Allouer 0029-0031 ici recreerait la meme collision des que #23834 serait
fusionne. L'allocation passe donc au-dessus des ordinals de la PR
ouverte : les deux ordres de fusion sont sans collision.
L'attestation de l'etat fusionne
La renumerotation seule ne suffit pas : en elevant les attestations de #24010
au statut de dernier audit de la paire, elle expose un defaut de
validite que le registre portait depuis le squash-merge de #24010.
Mesure : l'attestation
csharp_sha = 6c65dc66af73(portee par les entrees de#24010) designe un blob du carnet C# produit sur la branche de #24010
(commit
c8ca3004eb161, chaine de #24003). Ce commit n'est pas un ancetrede
main: apres le squash-merge, le carnet C# porte le blob04645648ac5d, et le sha atteste n'a jamais existe dans l'historique demain. Le testtest_audit_shas_exist_in_file_historyle classefabricated— il a ete produit sur une branche qui n'a pas survecu ausquash.
Il faut donc une attestation de l'etat fusionne, qui est ce que le
registre attend de son dernier audit :
check_twin_parity.py --update --pair "Search-05 GeneticAlgorithms" --by myia-ai-01:CoursIA-2 --allocate-against origin/main-> index0035, quienregistre les blobs fusionnes (
python_sha 812c186d26bb,csharp_sha 04645648ac5d), tous deux presents dans l'historique demain;Search-02b NetworkX, index0018),apporte par le regroupement de Fix(ci,#22299): renumeroter les deux attestations twin en collision de search-02b-networkx #24493.
Audit de parite de premiere main (fait avant d'attester) :
812c186d26bb) ;finance ») et par Fix(density,#13410): redressement #17040 — App-2b GraphColoring C# (820 -> 1250) et Search-05 GeneticAlgorithms C# (938 -> 1308) #23832 (lectures ancrees, densite) ;
les nombres cites par les cellules C# nouvelles qui apparaissent aussi dans
le jumeau Python sont des compteurs, des numeros de section et des valeurs
de parametre (taux de mutation, nombre d'essais) — aucune grandeur
partagee portee a deux valeurs. Les grandeurs propres au C# (OneMax
20/20,
1,2566, optimum0,0000, edge de la section 13) n'apparaissentpas cote Python ;
known_differences(realisations RNG independantes, idiomes distincts,memes verdicts) : elle n'est pas un defaut de coherence.
Regroupement de #24493 dans cette PR — mesure, pas intuition
Les deux PRs portaient la meme cause (#22299) et des paires disjointes, mais
aucune des deux ne suffisait : chacune ne corrigeait que la moitie des
cinq doublons de
main, et chacune se redeclarait rouge sur la moitie del'autre.
La reunion par fusion des deux branches a ete mesuree, puis rejetee :
test_audit_shas_exist_in_file_historyrouge : les attestations despaires
GameTheory-17 MultiAgent-RL,GameTheory-9 BackwardInductionetsearch-05-geneticalgorithmssont classeesfabricated. Raison mesuree :la fusion combine deux evolutions divergentes des memes carnets, et
l'arbre obtenu ne porte plus le contenu qu'une attestation atteste — le sha
atteste n'apparait plus comme blob ;
main+ cherry-pick des commits del'autre PR donne
64 passedsur les deux suites twin (registre + collisions),attestation comprise : le rebase rejoue les commits de cette PR
seulement, donc les carnets hors perimetre gardent le contenu de
main,celui que les attestations decrivent.
La forme retenue est donc : rebase sur
main, puis cherry-pick des deuxcommits de #24493 (renumerotation
0014-0015->0016-0017+ attestation0018). #24493 est replie dans cette PR et fermee ; sa branche n'est plusporteuse.
Effet pour la flotte : un seul merge suffit a lever le rouge
Scripts Tests (CPU)herite demain, la ou il en fallait deux et unereprise de branche entre les deux.
Controles
Mesure de l'apport de cette PR, par les fonctions de l'organe :
Porte de collision, sur la tete de cette branche :
Suites de tests, sur la tete de cette branche :
Meme suite sur
origin/main(8821d05) :2 failed, 62 passed— lesdeux echecs etant
test_audit_index_unique_and_no_identical_duplicates_per_pairet
test_le_registre_de_la_revision_testee_ne_porte_aucun_doublon_intra_revision.Les deux sont les cinq doublons de la table ci-dessus. Aucun carnet modifie
-> aucune re-execution due (C.2/C.3).
Reserve de la revue Hermes sur #24493 (
COMMENT_WITH_CONCERNS) : larenumerotation change l'entree designee comme « dernier audit » de la paire
(
_latest_audittrie par nom de fichier), donc la prochaine re-baseline desearch-02b-networkxpartira de l'attestationpo-2025du 02/11 plutot quede celle
po-2027du meme jour. L'effet est nomme ici ; la correction defond (allocation d'index a la fusion plutot qu'a l pushes) est portee par
#24519, et le plancher d'allocation reste dans #22299.
Exception a l'advisory de diff trivial (#15719) : ce diff est le residu final
mesure du defaut #22299 sur
main— les cinq doublons listes plus haut, etrien d'autre.
See #22299
🤖 Generated with Claude Code