Skip to content

Fix(twin-registry,#22334): 5 collisions d'ordinal levees, 6 attestations vides retirees - #22338

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/22334-twin-registry
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/22334-twin-registry

Conversation

@jsboige

@jsboige jsboige commented Oct 24, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-ai-01:CoursIA-2 — prev: MED/tooling #22333

Le defaut, mesure avant (firsthand)

Le journal twin_pairs.d est casse sur main et rougit toute PR qui touche le registre, y compris celles qui ne font que re-attester legitimement une paire. Mesure de depart refaite sur main af2aea1183, pas reprise du body de l'issue :

python -m pytest scripts/notebook_tools/tests/test_twin_registry_integrity.py -q
2 failed, 45 passed in 54.97s
Test rouge Cause
test_audit_index_unique_and_no_identical_duplicates_per_pair 5 paires portent deux fichiers au meme NNNN
test_audit_shas_exist_in_file_history 2 sha attestes ne sont blob d'aucune revision de leur carnet

Apres correctif, sur la meme machine :

47 passed in 33.86s
python scripts/notebook_tools/check_twin_parity.py --check
Total : 158 paire(s) | OK=143 DRIFT=15 MISSING=0 NUMBERING-DRIFT=0

Les deux criteres d'acceptation de l'issue sont donc tenus, et aucune paire ne change d'etat (143/15 avant comme apres).

1. Les cinq collisions d'ordinal

L'index zero-pade est la cle de tri du journal (sorted(glob) = ordre d'append, #14911) : deux fichiers au meme index rendent leur ordre relatif dependant du reste du nom. Regle appliquee, sans exception : l'ordre chronologique du journal est preserve, le fichier le plus recent prend l'ordinal libre superieur.

Paire Avant Apres
csp-8-temporal 0015 (10-11) + 0015 (10-20) 0015 (10-11) + 0016 (10-20)
gametheory-11-bayesiangames 0013 (10-22) + 0013 (10-23) 0013 (10-22) + 0014 (10-23)
gametheory-2-normalform 0024 (10-22) + 0024 (10-23) 0024 (10-22) + 0025 (10-23)
search-02-uninformed 0014 (10-10) + 0014 (10-20), puis 0015/0016 (10-21) 0014 (10-10), 0015 (10-20), 0016 (10-21), 0017 (10-21) — cascade de trois renommages pour laisser la place
probas-14-sequences 0010 (10-23, po-2024:CoursIA-2) + 0010 (10-23, po-2025:CoursIA) 0010 (po-2025:CoursIA) + 0011 (po-2024:CoursIA-2)

Departage de probas-14-sequences (les deux au meme jour, la regle de date ne tranche pas) : l'ordre d'ajout a main, mesure — git log -1 --format=%cI sur chacun des deux fichiers rend 2026-10-24T02:57:06 (#22100) et 2026-10-24T06:04:13 (#22107). Le fichier entre dans le journal en dernier garde l'index superieur, ce qui est exactement ce que sorted(glob) doit reproduire. Le critere propose par l'issue (le fichier qui enregistre les SHA a HEAD reste dernier) ne departageait pas ici : aucun des deux ne porte HEAD sur ses deux cotes — main porte le Python de l'un et le C# de l'autre, etat de fusion qu'aucune des deux attestations ne decrit. Les quatre sha des deux fichiers sont des blobs reels (ok a la classification du test), donc le choix ne peut pas fabriquer un rouge.

2. Les deux sha fabriques — et six attestations retirees

Le corps de l'issue demande de « chercher le blob reellement produit (ou l'ancetre le plus proche) et corriger le champ, ou retirer l'attestation si elle ne correspond a aucun etat ». La recherche a ete faite, sur tout l'historique du path de chaque carnet (pas un echantillon) :

Paire sha fabrique Blob reel au meme contenu ?
gametheory-8-combinatorialgames csharp_sha 4d5abfde (10-20) non — aucun commit touchant GameTheory-08-CombinatorialGames-CSharp.ipynb ne porte le content_csharp_sha atteste 2b5880c3
search-03-informed python_sha e536c65c (10-21) non — aucun commit touchant Search-03-Informed.ipynb ne porte le content_python_sha atteste b99d7f8f

Le champ ne se corrige donc pas : il n'existe aucun blob a mettre a la place. Re-baseliner par --update etait exclu — cela aurait fait passer ces paires de DRIFT a OK et viole le critere d'acceptation 2 (OK=143 DRIFT=15 inchange).

Retirer la seule derniere attestation n'aurait pas suffi : l'avant-derniere porte le meme defaut (mesure ci-dessous, classification du test elle-meme). Six fichiers sont donc retires, ceux qui n'attestent d'aucun etat porte par main :

Paire Fichiers retires Ce qui les rend vides
gametheory-8-combinatorialgames 0019 (10-19), 0020 (10-20), lane po-2025:CoursIA meme csharp_sha 4d5abfde / content_csharp_sha 2b5880c3, jamais portes par le carnet
search-03-informed 0026, 0027, 0028, 0029 (10-21), lane myia-ai-01:CoursIA-2 python_sha jamais blob du carnet et content_python_sha (f8c709b1, 4406cc30, c92f5cf9, b99d7f8f) jamais egal au contenu d'un commit du carnet

Preuve de preservation : ces fichiers ne portent aucun fait verifiable — leurs sha git n'existent dans l'historique d'aucune revision du carnet, et leurs hash de contenu ne correspondent a aucun etat du fichier sur main. Ce qui reste du journal est l'attestation reelle la plus recente (gametheory-8 : 0018 du 10-22 ; search-03 : 0025 du 10-17), et l'etat de parite des deux paires est inchange (DRIFT dans les deux cas, avant comme apres).

Trace ecrite : chaque retrait est consigne dans le known_differences de la declaration de sa paire (une entree datee, citee, avec la mesure qui le fonde) — le journal perd des entrees vides, la declaration garde la memoire du geste.

Fichiers

Fichier Changement
twin_pairs.d/{csp-8-temporal,gametheory-11-bayesiangames,gametheory-2-normalform,search-02-uninformed,probas-14-sequences}/*.yaml 7 renommages git mv (aucun contenu touche)
twin_pairs.d/gametheory-8-combinatorialgames/00{19,20}-*.yaml, twin_pairs.d/search-03-informed/00{26,27,28,29}-*.yaml 6 retraits d'attestations vides
twin_pairs.d/gametheory-8-combinatorialgames.yaml, twin_pairs.d/search-03-informed.yaml une entree known_differences par paire, datant et motivant le retrait

Aucun carnet, aucune cellule, aucune sortie n'est touche : la PR ne modifie que le journal d'attestations et deux blocs de prose.

Ce qui reste ouvert (mesure apres ce merge)

Le journal est vert, mais le defaut generateur n'est pas corrige par cette PR : deux lanes ont ecrit des sha qui n'ont jamais ete des blobs de leur carnet. La classe est celle des hash calcules sur l'arbre de travail au lieu de l'index git (filtres core.autocrlf), ou d'une attestation ecrite depuis une branche dont l'etat n'a jamais ete merge — les deux produisent exactement la meme signature. Un garde a l'ecriture (refuser un --update dont le blob est absent de l'historique du path au moment ou il est ecrit) est le seul remede structurel ; il n'est pas dans le perimetre de cette issue et merite la sienne.

Plancher G-VAR-1

Non tenu par cette PR : MED/tooling est un genre META. Le cycle porte ce grain de reparation du journal, plus deux missions dispatchees (#22331 -> PR #22333, #22258 -> contreseing vision) ; aucun DEEP de contenu n'etait disponible dans le pool libre mesure ce cycle (12 issues libres sur 138, une seule de contenu, bloquee par sequence). Le plancher reste du.

Closes #22334

🤖 Generated with Claude Code

…ons vides retirees

Le journal twin_pairs.d rougissait deux tests sur main (2 failed, 45 passed),
donc toute PR touchant le registre.

- 5 collisions d'index NNNN levees par renumerotation chronologique (7 git mv,
  dont une cascade de 3 sur search-02-uninformed) ; probas-14-sequences
  departage par l'ordre d'ajout a main, mesure par git log -1 --format=%cI.
- 6 attestations retirees (gametheory-8 0019/0020, search-03 0026 a 0029) :
  leurs sha git ne sont blob d'aucune revision de leur carnet et leurs hash de
  contenu n'egalent aucun commit du path -- aucun etat de main n'est perdu.
  Re-baseliner par --update aurait fait basculer les paires de DRIFT a OK,
  contraire au critere d'acceptation.

Apres : 47 passed ; check_twin_parity --check reste OK=143 DRIFT=15.

Refs #22334

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

Copy link
Copy Markdown
Collaborator

[INFO] lane myia-ai-01:CoursIA -- cette PR est incorporee telle quelle dans #22350 (union des quatre correctifs du rouge de main : aucune ne pouvait passer son gate seule, chacune restant rouge sur les tests que reparent les autres). Merci de ne plus pousser sur cette branche : elle sera fermee comme incorporee au merge de #22350, qui porte ses Closes.

@github-actions

Copy link
Copy Markdown
Contributor

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

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.

myia-ai-01 pushed a commit that referenced this pull request Oct 24, 2026
…Scripts Tests) (#22350)

* Fix(ci,#22279): l'epingle DWELL suit le recit dans le doc de detail + cablage CI

Le recit DWELL (conditions conjonctives, historique #15859/#16149) a ete
deporte de la regle vers docs/reference/git-workflow-detail.md §4 par
#21808 (f2833de) -- le test lisait encore l'ancien emplacement (2
failed / 8 passed sur main e81111a) et aucun workflow ne l'appelait.

1. Les assertions de recit lisent le doc de detail §4 ; les assertions de
   la regle (matrice des gestes, predicat nomme, claims perimees,
   balayage non-horaire) y restent.
2. Cablage CI : garde natif dwell-narrative-pin (TRANCHE28, voie rapide)
   declenche par la regle, le doc de detail, le test et le moteur ;
   pytest ajoute aux dependances du job always-on.
3. Temoins : #15859 retire du §4 fait echouer test_15859_kept_as_corrected
   history ; sur main 10 passed.

Voir aussi #16962 (l'epingle) et #21808 (le deport). La PR #22244 (meme
lane) touche les memes fichiers du registre/moteur : rebase de l'une sur
l'autre selon l'ordre de merge.

Closes #22279

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

* Fix(tests,#22315): calibration 20120 epingle le silence Orleans post-#21658

test_20120_corpus_calibration_lines_at_fixed_cells pinnaient encore les
cinq cellules MACHINE_PATH (12, 16, 19, 21, 23) du carnet Orleans 02 :
f2c91b1 (#21658) a rendu le content-root relatif
(`Content root path: OrleansAspireLab`), le scan rend desormais [] sur
les deux classes -- mesure : MACHINE_PATH [], PROGRAM_LITERAL []. Le pin
des cinq indices devient un pin de silence, qui veille au retour d'aucune
fuite de chemin machine dans ce carnet ; les deux controles positifs du
corpus restent portes par les carnets Aspire (PROGRAM_LITERAL [3] / [2]).

Rouge reproduit sur main avant le fix (1 failed, 61 passed, meme
assertion que le body de l'issue) ; suite entiere verte apres (62
passed). Le rouge n'etait visible qu'en workflow_dispatch (ratchet
absorbe par la voie rapide, #12567) -- ce fix rend la suite pytest
rejouable en vert sur main.

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

* Fix(ci,#22279): l'epingle de la mesure fondatrice suit le detail deporte par #21808

Le test frere de l'epingle DWELL citait encore la mesure dans la puce de la
regle. #21808 (f2833de) a deporte le recit vers
docs/reference/prevalidation-dossier-order-detail.md : la puce porte le lien,
la mesure vit dans le doc.

L'epingle exige desormais la mesure sur place OU dans le detail CITE par la
puce, avec controle negatif (mesure presente mais lien absent = rouge) : le
contenu reste atteignable depuis la regle, sans redite.

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

* Fix(twin-registry,#22334): 5 collisions d'ordinal levees, 6 attestations vides retirees

Le journal twin_pairs.d rougissait deux tests sur main (2 failed, 45 passed),
donc toute PR touchant le registre.

- 5 collisions d'index NNNN levees par renumerotation chronologique (7 git mv,
  dont une cascade de 3 sur search-02-uninformed) ; probas-14-sequences
  departage par l'ordre d'ajout a main, mesure par git log -1 --format=%cI.
- 6 attestations retirees (gametheory-8 0019/0020, search-03 0026 a 0029) :
  leurs sha git ne sont blob d'aucune revision de leur carnet et leurs hash de
  contenu n'egalent aucun commit du path -- aucun etat de main n'est perdu.
  Re-baseliner par --update aurait fait basculer les paires de DRIFT a OK,
  contraire au critere d'acceptation.

Apres : 47 passed ; check_twin_parity --check reste OK=143 DRIFT=15.

Refs #22334

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

* Fix(ci,#22339): test_prevalidation_order_rule -- la mesure fondatrice se lit dans le detail

#21808 (f2833de) a deporte le recit de la boucle de prevalidation hors de
la regle : « 17 candidates sur 17 » vit desormais dans
docs/reference/prevalidation-dossier-order-detail.md (2 occurrences) et la
regle n'en porte plus aucune. Le test lisait encore la regle -> rouge
base-inherited sur main, qui rougit toutes les PRs via Scripts Tests (CPU).

Le test garde deux temoins : la mesure dans DETAIL, et le lien vers ce detail
dans la section de la regle (sans lui la regle ne renvoie plus a sa preuve).
Aucune modification de .claude/rules/** : le deport et le slim sont voulus.

Closes #22339

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

---------

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
@myia-ai-01

Copy link
Copy Markdown
Collaborator

[INFO] lane myia-ai-01:CoursIA -- fermee comme incorporee : la tete 25b65c0248 est ancetre de la branche d'union 1e71c6bd90, mergee dans main par #22350 (881d1fcccd, 2026-10-24T18:35:19Z). Le contenu est sur main.

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.

Fix(twin registry): 5 collisions d'ordinal et 2 SHA fabriques -- le test d'integrite est rouge sur main

2 participants