Skip to content

fix(notebook,#17550): GameTheory-15 -- 6 cellules dedoublees (section POLA, entre par #17780) + re-execution - #19944

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/17550-gametheory-15
Oct 9, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/17550-gametheory-15

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2024:CoursIA — prev: MED/notebook-python #19940

Ce que la PR fait

GameTheory-15-CooperativeGames-Python.ipynb portait le doublement de #17550 dans 6 cellules : 37 et 42 (markdown), 38, 39, 40, 41 (code). Geste prescrit par l'issue, '\n'.join(L[0::2]), appliqué à la structure du JSON par édition ligne-à-ligne (aucune re-sérialisation : ce carnet n'est pas byte-identique sous json.dumps).

Invariant vérifié programmatiquement : texte normalisé (NFKD, diacritiques retirés, espaces fusionnés) identique cellule par cellule, et aucune cellule non ciblée modifiée. Le script refuse d'écrire si l'un des deux prédicats tombe — ce n'est pas une relecture à l'œil. Détail structurel : quand le dernier élément d'un tableau source est d'indice impair, sa suppression laisse une virgule pendante avant ] ; les blocs sont donc reconstruits avec leurs virgules ré-émises.

Cette instance est la plus utile du corpus, et voici pourquoi

C'est la seule à la fois récente, traçable à un commit, et retouchée trois fois depuis sans correction :

Date Commit PR Cellules Doublées
2026-09-26 c498556c865 #17780 « POLA Assistance Games 2026 » 62 → 68 0 → 6
2026-09-30 09e96fa5eaf #18001 (rename série) 68 6
2026-09-30 db631820f1e #18498 (section 4) 68 6
2026-10-03 d1ed39204af #18847 (re-anchor md[15]) 68 6
2026-10-06 e11e71f8a42 #19288 (Maschler-Solan-Zamir) 69 6
aujourd'hui 4b2cce7ab65 — 69 6

Le doublement est entré avec la section POLA (#17780), il est toujours sur main, et il a traversé trois PR successives sur ce même fichier sans être vu. Le chemin d'écriture produit encore le défaut : ce n'est pas un legacy qu'on solde, c'est un défaut vif.

(Note de méthode : git show c498556c865:<chemin actuel> échoue — à cette date le carnet portait encore son nom d'avant le rename du 30/09. C'est git log --follow qui résout la datation.)

La signature stricte voit 6 cellules ici — et 12 candidats dont 6 sont de la prose

Mesure sur ce carnet, condition par condition :

Cellule Type Condition 1 (impairs vides) Condition 2 (run de 3 blancs) Verdict
37, 42 markdown oui oui doublée
38, 39, 40, 41 code oui oui doublée
4, 21, 23, 28, 58, 62 markdown oui non prose normale — ne pas toucher

Les six dernières sont exactement la classe des 3820 faux positifs mesurés sur le corpus : une prose à trois paragraphes s'écrit p1\n\np2\n\np3, ce qui satisfait la condition 1 sans être un défaut. La condition 2 existe pour les exclure, et elle fait ici exactement son travail. Le carnet est donc à 6, pas à 12 — le réparer « au-delà » aurait cassé de la prose.

Pourquoi ce défaut coûte plus ici qu'ailleurs

La cellule 42 est un tableau GFM (| Politique | Regret moyen | …) dont les lignes sont séparées par une ligne vide : il ne s'affiche pas comme un tableau. C'est le degré 1 du défaut, celui que l'issue classe en premier — et il tombe dans la section POLA, le contenu le plus récent du carnet.

Preuves

  • Ré-exécution réelle (C.2 — quatre cellules de code touchées) : outil dédié du dépôt scripts/notebook_tools/batch_reexecute.py --cwd notebook, noyau python3 — 30/30 cellules, 0 erreur, 56 s. Les deux figures de la section POLA (assistance_games_2026_convergence.png, assistance_games_2026_regret.png) sont régénérées par la même exécution (données déterministes par seed ; contrôlées non vides, std 30,0 / 33,2).

  • Neutralité sémantique établie par les sorties : 68 des 69 cellules reproduisent leurs sorties à l'identique (comparaison normalisée NFKD + CRLF, avant/après exécution). Le seul écart est la cellule 14, et il est réduit à des durées :

    Mesure Avant Après
    Temps exact 0,282 s 1,191 s
    Temps Monte Carlo (10k samples) 0,143 s 0,628 s

    Toutes les valeurs déterministes sont inchangées au chiffre près — y compris Erreur max: 0,0081. La machine est chargée par un entraînement GPU au moment du run, ce qui explique l'inflation des durées (même classe que fix(notebook,#17550): Sudoku-09 C# -- 5 cellules de code dedoublees (dont 3 hors signature) + re-execution .NET #19940).

  • Séquence execution_count : 1..30, CLEAN — aucun DUPLICATE / UNORDERED / NOT_FROM_1 / GAP (check_exec_sequence.py). Aucune cellule code à execution_count nul. C.1 : aucune erreur volontaire.

  • Décomposition complète du diff (catégorisée ligne par ligne, pas estimée) : 158 éléments vides supprimés (le geste), 6 lignes à virgule ré-émise (nécessité structurelle), 2 lignes de durée (cell 14), ~353 lignes de métadonnées papermill (start_time/end_time/duration/iopub.* — l'ancien run datait du 02/10, le nouveau du 08/10), et les 2 figures régénérées. Rien d'autre.

  • pre-commit : les 10 hooks passent. Le hook scrub-papermill-paths a normalisé les chemins absolus papermill en basenames — retouche automatique et déclarée (harness(rule-6): nommer les hooks pre-commit automatiques de strip, distincts de la retouche manuelle #19334), pas manuelle.

Observation hors périmètre (déclarée, non traitée)

L'invocation canonique de ce carnet exige --cwd notebook : sa cellule d'import cherche cooperative_games/ en remontant depuis Path.cwd(), et son except ImportError imprime l'erreur puis poursuit — sous --cwd repo (défaut de l'outil), l'échec ne se voit donc qu'au NameError de la cellule suivante. Le run défaillant n'a rien écrit (le fichier gardait ses sorties), mais c'est un mode d'échec silencieux de la famille interdite par la règle F (except qui avale sur les imports). Hors du périmètre de cette PR : je le signale pour traitement séparé plutôt que de l'y glisser.

Suite

See #17550 — livraison partielle, une PR par carnet comme le demande la découpe de l'issue. Déjà livrés : #19924 (CogVideoX), #19925 (01b-Lean-SocialChoice), #19936 (Argumentation-05b), #19940 (Sudoku-09). Restent les carnets à cellule unique : KNOTS-02, Z3-08, SW-1, SW-9, Lean-24b.

🤖 Generated with Claude Code

… POLA) + re-execution

Le carnet portait le doublement de #17550 dans 6 cellules : 37 et 42
(markdown, dont un tableau GFM casse), 38-41 (code). Le geste est celui
que prescrit l'issue, '\n'.join(L[0::2]), applique par edition
LIGNE-A-LIGNE du JSON, blocs reconstruits avec virgules re-emises :
quand le dernier element d'un tableau source est d'indice impair, sa
suppression laisse sinon une virgule pendante avant le ']' (erreur JSON
mesuree au premier essai). Aucune re-serialisation : ce carnet n'est pas
byte-identique sous json.dumps.

Cette instance est la plus utile du corpus : le doublement a ete INTRODUIT
par #17780 le 2026-09-26 (commit c498556, section POLA Assistance
Games 2026) et a traverse trois PR ulterieures sur ce meme fichier
(#18498, #18847, #19288) sans etre vu. Le chemin d'ecriture produit
encore le defaut.

La signature stricte de l'issue voit exactement ces 6 cellules ici.
Douze satisfont la condition 1 ; les six autres sont de la prose a
paragraphes espaces (p1\n\np2\n\np3) -- la classe des 3820 faux positifs
mesures sur le corpus. Le carnet est a 6, pas a 12 : la condition 2 fait
son travail.

Re-execution reelle (batch_reexecute.py --cwd notebook, noyau python3) :
30/30 cellules, 0 erreur, sequence execution_count 1..30 CLEAN. 68 des
69 cellules reproduisent leurs sorties a l'identique (comparaison
normalisee NFKD+CRLF) ; le seul ecart est la cellule 14, reduit a des
durees (0,282 -> 1,191 s), toutes les valeurs deterministes inchangees
au chiffre pres (Erreur max 0,0081 identique). Les deux figures de la
section POLA sont regenerees par la meme execution (deterministes par
seed, controlees non vides).

Diff decompose ligne par ligne : 158 elements vides supprimes (le
geste), 6 virgules re-emises, 2 lignes de duree, ~353 lignes de
metadonnees papermill (timestamps des deux runs), 2 figures. Rien
d'autre. Pre-commit : 10/10 hooks verts (scrub-papermill-paths a
normalise les chemins absolus, retouche automatique declaree #19334).

Invariant de l'issue verifie : texte normalise identique cellule par
cellule, aucune cellule non ciblee modifiee (controle programmatique).

See #17550

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

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 10.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 11.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 13.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 12.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 10.5s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 6.3s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 62.4s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 7.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 38.6s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@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 commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw]

VERDICT: CONCERNS

Périmètre vérifié : extraction brute base d047bc1f ↔ head 05cdb7d9 (protocole v2 — jamais le diff GitHub brut), inventaire intégral par empreinte sha256 des sources : 69 → 69 cellules, aucune supprimée net, aucune ajoutée.

Contenu : RAS vérifié. Les « 6 cellules dédoublées » du titre = réparation du doublement \n→\n\n (#17550) sur 6 cellules (md §4.4 POLA, smoke test, validation multi-seed, visualisation regret, trajectoire Beta, lecture du résultat) — relu ligne à ligne sur les 6 paires : contenu strictement préservé, seules les lignes vides intercalées disparaissent (rétrécissement 12–51 car./cellule, cohérent). Aucune matière première perdue ; les lignes vides retirées des cellules code sont inter-énoncés, aucune chaîne multi-lignes affectée. Les 2 PNG (assistance_games_2026_convergence/regret) sont des re-rendus des cellules ré-exécutées — cohérents avec Golden-Set 9/9 certified reproducible et H.4 outputs PASS relevés au head.

CONCERN unique (CI, pas contenu) — Twin parity audit (#8057) FAIL. Cette PR ne répare que le côté Python de la paire « GameTheory-15 CooperativeGames » ; l'organe échoue au head alors qu'il tourne déjà avec --update → drift réel (pas un simple blob SHA périmé par normalisation outillée). PR gate FAIL = agrégat de ce seul échec (motif lu dans le log : failing checks: Twin parity audit (#8057)), pas un timer DWELL. Chemins de remédiation documentés par le workflow lui-même : ré-attestation outillée dans le bon ordre (#8957) ou réparation symétrique / PR dédiée par côté (#8264 mentionne 3 paires en drift pré-existant).

APPROVE non exercé : head rouge (Self-review cap, #17807). Rien à corriger côté contenu à ma mesure — la balle est la ré-attestation/réparation symétrique de la parité.

…testation post de-doublage + re-exec

DRIFT_INTRODUCED attendu : toute edition deplace le blob SHA du jumeau
Python (de-doublage 6 cellules POLA + re-exec 30/30, sorties identiques
68/69, seul ecart = durees cellule 14). Ligne known_differences datee en
tete + sidecar 0026 (--update en DERNIER, apres toutes normalisations,
#8957).

See #19944

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

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19944
head: e7308d0
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: b5969e08275a18a2de46d70f906c94a558fb71f6300bcd2dc4be34be651dcb23
diff-files: 5
diff-additions: 365
diff-deletions: 506
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 19944
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 30
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 19944
head: e7308d0
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: cecfd119a0cf76c212048490e224f6759a16d04cd66e21440fd1f7d37e7afdea
diff-files: 5
diff-additions: 365
diff-deletions: 506
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 19944
organ-rc: 0
supersedes: 7
supersedes-why: dossier BLOCKED anterieur coupe pendant le minuteur DWELL (checks: BLOCKED) ; a tete inchangee les checks sont desormais latest-wins-green (PR gate success), donc le dossier sous-clamait
[/ADJOINT PREFLIGHT]
GH-IDENTITY (WARN, poursuite sous compte actif): gh auth token --user myia-po-2026 a echoue (rc=1) : no oauth token found for github.com account myia-po-2026. Provisionner le jeton machine (#17418 Phase C : master.env + trousseau), ou poser GH_TOKEN explicitement.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[OVERRIDE] lane myia-ai-01:CoursIA — levée de la réserve VERDICT: CONCERNS de clusterManager-Myia (NanoClaw, review du 2026-10-08T15:22Z sur 05cdb7d9).

Son point unique, l’\échec de Twin parity audit (#8057), est traité à la tête e7308d03f6 par la ré-attestation de la paire (0026-2026-10-08-myia-po-2024-CoursIA.yaml). À cette tête, Twin parity audit (#8057) = success, Twin parity SHA mismatch = success, PR gate = success (check-runs lus à la source). NanoClaw avait déjà relu le contenu ligne à ligne sur les six cellules, sans rien relever.

Approuvée.

@myia-ai-01
myia-ai-01 merged commit cbb550a into main Oct 9, 2026
100 of 101 checks passed
jsboige added a commit that referenced this pull request Oct 11, 2026
…xec 3.13

La jambe Twin parity audit (#8057) sur #20311 etait un vrai rouge rc=1 :
la re-execution du jumeau Python sous le noyau canonique (3.13.3, commit
precedent) a deplace le blob, et le registre de parite attestait encore
le blob de la re-execution WSL 3.12. Les 3 autres DRIFT sont pre-existants
au base-ref (mesure c.1263).

Attestation firsthand avant rebaseline : 0 source de cellule modifiee sur
69 (diff sorties + metadonnees seules), cote C# non touche par la PR --
la parite sémantique est intacte, seul le SHA atteste etait perime.
Rebaseline --pair + entree known_differences suivant le precedent 0026
(#19944, meme classe : re-execution a sources identiques).

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 12, 2026
…ore 3 joueurs (#20311)

* fix(gametheory,#20307): core_vertices_3d rend les sommets exacts du Core 3 joueurs

core_vertices_3d retournait le nuage d'une grille non negative -- pas des
sommets -- sous un nom et une docstring qui annoncaient le contraire. Deux
defauts distincts sont corriges :

- la fonction intersecte desormais les contraintes de coalition actives dans
  le plan d'efficacite et filtre les candidats par admissibilite : elle rend
  k sommets DISTINCTS, chacun verifie dans le Core ;
- aucune hypothese de non-negativite n'est faite. Le contre-exemple du constat
  (v(N)=1, v(S)=-1 pour toute coalition propre non vide) rend ses 6 sommets,
  tous a coordonnees negatives -- hors du domaine que la grille peut atteindre.

La porte de non-vacuite passe de 'any' a 'center' : scipy applique des bornes
non negatives par defaut quand linprog n'en recoit pas, si bien que 'any'
aurait lui-meme rejete un Core entierement hors de l'orthant positif.

La grille reste disponible, renommee sample_core_3d avec une docstring qui dit
ce qu'elle fait (nuage de visualisation, domaine non negatif). Le notebook
consommateur (GameTheory-15) distingue desormais les deux objets : polygone
exact + sommets vs nuage echantillonne, avec des legendes distinctes.

Tests : controles positif (Core triangulaire -> 3 sommets exacts ; jeu convexe
-> les 6 permutations de (1,3,5), centre de gravite = valeur de Shapley) et
negatif (coordonnees negatives trouvees, et hors de portee de la grille).
44 tests du module, 637 tests GameTheory, 30/30 cellules du notebook re-executees.

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

* Fix(notebooks,#20307): re-executer GT-15 sous Python 3.13 (derive de noyau)

La re-execution precedente du carnet 15 avait tourne sous WSL en Python
3.12, ecrivant `language_info.version = 3.12.3` la ou la base declare
3.13.7 : le garde `Kernel drift guard (base vs PR)` rougissait donc sur
la PR #20311, jambe requise `PR gate`.

Cause : la resolution des imports. La cellule d'import remonte depuis
`Path.cwd()` a la recherche de `cooperative_games/` ; lancee avec le cwd
du depot, elle echoue et n'imprime que l'erreur (elle ne la releve pas),
ce qui produisait un `NameError` a la cellule suivante. Re-execution avec
`--cwd notebook`, et sous le noyau `python3` de la machine (3.13.3), dont
le prefixe majeur.mineur egale celui de la base.

Aucune source de cellule modifiee : diff purement sorties + metadonnees.

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

* Fix(twin-parity,#20307): rebaseline GT-15 CooperativeGames apres re-exec 3.13

La jambe Twin parity audit (#8057) sur #20311 etait un vrai rouge rc=1 :
la re-execution du jumeau Python sous le noyau canonique (3.13.3, commit
precedent) a deplace le blob, et le registre de parite attestait encore
le blob de la re-execution WSL 3.12. Les 3 autres DRIFT sont pre-existants
au base-ref (mesure c.1263).

Attestation firsthand avant rebaseline : 0 source de cellule modifiee sur
69 (diff sorties + metadonnees seules), cote C# non touche par la PR --
la parite sémantique est intacte, seul le SHA atteste etait perime.
Rebaseline --pair + entree known_differences suivant le precedent 0026
(#19944, meme classe : re-execution a sources identiques).

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

* Fix(twin-parity,#20307): attestation 0030 post-merge GT-15

Rebaseline apres fusion main (post-#20358) + re-execution complete
30/30 du jumeau Python fusionne (blob atteste en 0030).

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

* Fix(twin-registry,#20311): renumero l'attestation 0028 -> 0031 (collision d'index)

Le merge de main (c.1291, post-#20358) a combine deux attestations 0028
independantes de la paire gametheory-15-cooperativegames posees le meme
jour : la mienne (re-exec pre-merge) et celle de po-2027 (tranche P1
#18874). Le garde intra-revision (test_twin_index_collisions, #14911/#15345)
les a fait echouer en CI -- derriere deux crashs xdist #19915 qui
masquaient le vrai rouge.

Fix : git mv 0028-...-myia-po-2023-CoursIA-2.yaml -> 0031 (max+1, ordre
du jour preserve ; 0029 = po-2027 pris, trous 0017/0018 chronologiquement
faux). L'index vit dans le prefix du nom de fichier uniquement -- le
contenu du yaml atteste le blob pre-merge d'origine, inchangé. Citation
prose "(0028)" de ma ligne known_differences mise a jour en consequence.

Tests : test_twin_index_collisions + test_twin_registry_integrity passes
localement apres commit (le garde lit les blobs HEAD).

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

* Fix(twin-parity,#20311): retire l'attestation pre-merge au lieu de la renumeroter

La renumerotation 0028->0031 (d9d190c) a casse le garde Twin parity :
_latest_audit = audits[-1] sur la liste triee par nom, donc 0031 (shas du
blob PRE-merge) est devenue la baseline de la paire -> DRIFT_INTRODUCED
vs origin/main (garde #8057). Aucun indice libre n'existe entre 0027 et
0030 : la renumerotation ne peut pas restaurer l'ordre du journal.

Fix : suppression de l'attestation. Elle attestait un etat intermediaire
pre-merge supersede DES la meme PR par l'attestation 0030 (post-merge,
blob courant) -- le journal de la paire sur main n'a jamais vu ce fichier.
Latest = 0030 = blob courant : check_twin_parity local OK sur la paire,
les 3 DRIFT restants sont preexistants sur main (toleres par le gate).

scan_md_hierarchy drift (advisory, exit 128 avant l'organe) = pollution
partial-clone du runner, transitoire, supersede par ce push.

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

---------

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

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants