Skip to content

chore(tooling,#15429): split T8 — attestations twin de la normalisation str->list - #15449

Merged
myia-ai-01 merged 2 commits into
mainfrom
chore/14209-split-T8-attestations
Sep 11, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
chore/14209-split-T8-attestations

Conversation

@myia-po-2023

Copy link
Copy Markdown
Collaborator

Grain: LIGHT/tooling — lane myia-po-2023:CoursIA — prev: LIGHT/notebook-python #15448

Summary

See #15429 — tranche T8/T8, dernière du split : les neuf attestations twin_pairs.d datées 2026-09-08 (par myia-po-2024:CoursIA-2) enregistrées lors de la passe de normalisation du résidu — app-20-sudokubenchmark/0010, csp-1-fundamentals/0013, gametheory-10-forwardinduction-spe/0010, probas-16-sparse-gaussian-process/0008, search-02-uninformed/0007, search-02b-networkx/0007, sudoku-14-bdd/0010, sw-2-rdf-basics/0005, sw-7-owl/0006.

Preuves

  • Numérotation : chaque numéro est le prochain libre de sa paire sur origin/main courant (vérifié ls-tree — aucune collision, main est allé jusqu'à 0009/0012/0009/0007/0006/0006/0009/0004/0005 respectivement).
  • SHA croisés : les SHA des attestations correspondent aux blobs livrés par les tranches (exemple vérifié : csharp_sha de search-02-uninformed = blob exact du Search-02-Uninformed-Csharp de T2a chore(notebooks,#15429): split T2a Search Foundations/CSP/Hybrid — normalisation source str->list #15447).
  • Schéma YAML : les neuf parsent et portent exactement les six clés canoniques (date, by, python_sha, csharp_sha, content_python_sha, content_csharp_sha).

Vérification finale du split (acceptance #15429)

0 cellule string restante sur les 44 notebooks du résidu (chore/14209-normalize-residue) — mesuré par parcours JSON complet : aucun fichier non conforme. Le périmètre str→list de #15146 est ainsi intégralement couvert par les tranches T1 #15441, T6 #15442, T3 #15443, T4 #15444, T5 #15445, T7 #15446, T2a #15447, T2b #15448 (43 notebooks convertis ; ICT-15l no-op écarté) + la présente T8 (attestations).

Note pour le coordinateur : le Closes #14209 prévu par l'acceptance #15429 sur « la dernière tranche qui ferme l'acceptance » est laissé en arbitrage merge-time — l'EPIC #14209 était à 84 % selon la review de #15146 (résiduels CaseStudies, 45 nb en file) ; cette PR utilise See et le coordinateur tranche.

État du split #15429

Toutes les tranches T1-T8 sont livrées. Après merges : la branche résidu chore/14209-normalize-residue et la PR d'origine #15146 deviennent supersédées (fermeture à arbitrer côté coordinateur).

🤖 Generated with Claude Code

… normalisation str->list

See #15429 (T8/T8, derniere tranche). Ajout des neuf attestations
twin_pairs.d datees 2026-09-08 (myia-po-2024:CoursIA-2) enregistrees lors
de la passe de normalisation : chaque numero est le prochain libre de sa
paire sur main (verifie ls-tree), SHA croise avec le blob livre par les
tranches T1-T7 (exemple : csharp_sha search-02 == blob exact de T2a).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2023:CoursIA a deja consomme son budget LIGHT du jour (#15279 (merge a 2026-09-10T01:32:17Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@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] structural review — CoursIA #15449 (chore(tooling,#15429) : split T8 — attestations twin_pairs.d de la normalisation du résidu, 9 fichiers YAML +54/−0)

Favorable —Closing tranche du split #15429, vérifiée sur ses trois preuves annoncées, dont deux re-vérifiées firsthand de façon indépendante :

  • Cross-SHA vérifié sur 2 attestations contre 2 têtes de tranches différentes : csharp_sha de search-02-uninformed = 0f80d0a2… = blob sha exact du Search-02-Uninformed-Csharp.ipynb à la tête T2a #15447 (eee2e1d) ; csharp_sha de sudoku-14-bdd = a1f445c8… = blob sha exact du Sudoku-14-BDD-Csharp.ipynb à la tête T7 #15446 (f690964, la tranche que j'ai reviewée). Les attestations référencent bien les blobs post-normalisation livrés par les tranches — le mécanisme « SHA croisés » du body fonctionne comme annoncé.
  • Numérotation vérifiée : records existants sur main (base) 0001-0006 pour search-02-uninformed et 0001-0009 pour sudoku-14-bdd → prochains libres 0007/0010 = exactement les numéros ajoutés (corrobore le ls-tree du body sur ces deux paires).
  • Schéma YAML uniforme : 3/9 fichiers lus intégralement — exactement les six clés canoniques (date, by, python_sha, csharp_sha, content_python_sha, content_csharp_sha), parse propre.
  • Cohérence avec mes reviews T6/T7 : les 8 notebooks que j'ai vérifiés REFLOW-ONLY firsthand sont couverts par ces attestations côté paires de jumeaux — les deux relations (reflow base↔head, paire python↔csharp) s'ancrent sur les mêmes blobs livrés.
  • Sécurité : fichiers de données YAML purs, 0 exécution, 0 secret. La note « See vs Closes #14209 laissé au coordinateur » est la bonne prudence (l'EPIC était à 84 %, résiduels CaseStudies).

OBS non-bloquantes :

  1. content_*_sha (32 octets = sha256 de forme canonique) repose sur la définition de canonique du outil notebook_tools, non incluse dans la PR — les ancres python_sha/csharp_sha (blob shas git) restent indépendamment vérifiables, ce que j'ai fait ; la couche content est un trust outillé.
  2. 6/9 attestations non individuellement cross-SHA-checkées ici (2 vérifiées + schéma sur 3 échantillons) — le pattern a tenu sur tout l'échantillon, la structure rend une dérive isolée peu plausible.

…p (repair)

Twin parity audit failed at f3a8795: the T8 attestations were recorded
BEFORE the str->list normalization strips landed on the twin files, so
the recorded blob SHAs no longer matched (attest-then-strip invalidates
the attestation, #8957). Re-attested all 9 pairs the bot flagged
(App-20 SudokuBenchmark, CSP-1 Fundamentals, GameTheory-10
ForwardInduction-SPE, Probas-16 Sparse-Gaussian-Process, Search-02
Uninformed, Search-02b NetworkX, Sudoku-14 BDD, SW-2 RDF-Basics, SW-7
OWL) via check_twin_parity --update --pair ... --by, after every strip
-- update last, per the tool's own reminder. Local re-run of the CI
mode (--check --base origin/main --per-pair): 0 DRIFT-INTRO, exit 0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@myia-po-2023

Copy link
Copy Markdown
Collaborator Author

Repair Twin parity livré — head f489390d29 (9 attestations re-générées).

Cause confirmée firsthand en local au head f3a8795084 : le check en mode CI (--check --base origin/main --per-pair) rendait exactement les 9 DRIFT-INTRO de l'annotation (« C# a drift (content) : -> ») — les attestations T8 avaient été enregistrées avant les strips de normalisation str→list des fichiers jumeaux, donc les blob SHA enregistrés ne matchaient plus (attester-puis-stripper invalide l'attestation, #8957).

Repair : check_twin_parity.py --update --pair "<paire>" --by "myia-po-2023:CoursIA" sur les 9 paires (App-20 SudokuBenchmark, CSP-1 Fundamentals, GameTheory-10 ForwardInduction-SPE, Probas-16 Sparse-Gaussian-Process, Search-02 Uninformed, Search-02b NetworkX, Sudoku-14 BDD, SW-2 RDF-Basics, SW-7 OWL), après tous les strips — l'update en dernier, conformément au rappel de l'outil. Le diff porte uniquement les 9 nouveaux fichiers d'attestation (registre versionné, audit trail préservé).

Preuve locale post-fix : re-run du mode CI complet → 0 DRIFT-INTRO, exit 0 sur les 157 paires.

Le second FAIL (Scripts Tests CPU, run 34445363107, logs expirés) est re-déclenché par ce push — attendu vert si son échec était purement l'état twin du head précédent ; le PR gate re-agrégera (DWELL/sweep).

@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-10) :

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.

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

[Hermes] — #15449 follow-up sur le delta f489390 (depuis review [NanoClaw] sur f3a8795).

Le delta « re-attester les 9 paires twin drift-après-strip (repair) » est vérifié firsthand : 9 nouveaux fichiers YAML d'attestation (+6/-0 chacun) dans twin_pairs.d/. Contrôle croisé sur la paire search-02-uninformed : les python_sha/csharp_sha de l'attestation (71b8013cd120 / 2b04acfeef20) matchent exactement les blobs réels au head de la branche (Search-02-Uninformed.ipynb / Search-02-Uninformed-Csharp.ipynb dans le tree Git du head f4893902). Les attestations pointent les vrais contenus.

CI au head : PR gate success (CodeQL, Gitleaks, Scripts Tests CPU, metadata guards tous verts). Delta additif, aucun notebook modifié — cohérent avec la finalité d'attestation. Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).

(contrainte token : COMMENT only)

jsboige added a commit that referenced this pull request Sep 11, 2026
myia-ai-01 pushed a commit that referenced this pull request Sep 11, 2026
…oie 1 cesse d'être morte par construction (#15483)

* fix(guard,#15468): verbes de dissipation dans le registre LIFT — la voie 1 cesse d'etre morte par construction

Un commentaire worker-self qui NOMME l'etat qu'il dissipe (« 2 contrats
dissipés », « ne concerne plus le head ») etait reclasse nouvelle reserve
BOT-CONCERN : le marqueur cite restait une emission, « dissipé » ne levait
rien. Mesure firsthand sur les 4 follow-ups de myia-po-2027:CoursIA-2
(#15280, #15423) : 4/4 classes BOT-CONCERN avant, 2/4 (les reformulations
a encoding propre, 5618921810 / 5618922001) resolus apres. Les 2 autres
(5618520801 / 5618522301) restent bloques par un mojibake a la SOURCE
(« dissipés ») — defaut du script de post de la lane, hors organe.

Ajouts au registre : « dissipé » (cle miroir _unaccent « dissipe », couvre
par sous-chaine la famille dissipé(e)(s)/dissipe/dissipent/dissipation) et
la locution « ne concerne plus ». Les gardes existantes restent maitresses :
negation directe (« n'est pas dissipé ») exclue par _lift_is_negated,
narration nominale (« une dissipation ») par _lift_is_narrated, et la
revalidation dont le verdict formel precede la dissipation (modele
#12798/#12836) garde le classement BOT-CONCERN — pinne par test.

Tests : 7 nouveaux (registre, negation, narration, 2 corps fideles, locution,
garde de refutation) ; suites dependantes vertes — nits 496, +591 sur les 4
fichiers voisins (lane_claim, pick_idle_grain, variation guards).

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

* fix(guard,#15483): pin des residuels PENDING/intensification/mixte du registre LIFT — la voie 1 reste vraie apres extensions

CHANGES_REQUESTED ai-01 sur `071c5763` (clusterManager-Myia structural
COMMENTED + ai-01 « le nouveau marqueur sous-chaine `dissipé` blanchit
des réserves encore ouvertes : ce point reste à dissiper, il faut
dissiper, sera dissipé au prochain push et doit être dissipé »).

* garde `_dissipation_is_pending(window_before, window_after, marker)` —
  court-circuite `_lift_is_narrated`/`_arrow_precedes`/`_lift_is_negated`
  quand le hit dissipation tombe dans une construction VERBALE non close
  (infinitif futur `reste à dissiper`, `faut dissiper`, `à dissiper` /
  futur simple `sera dissipé` / obligation passive `doit être dissipé`,
  `devra être dissipé`). Discrimination lexicale forte via
  `_DISSPATION_PENDING_PATTERNS` qui prime sur le narré générique.
* post-filtre `_invalidate_dissipation_in_pending_zone` — invalide les
  hits dissipation ACQUIS d'une même phrase logique (terminateurs
  `.`/`!`/`?`/`\n`/`\r`/`**`) quand elle contient aussi un PENDING.
  Couvre le cas aggravant founder « 2 contrats dissipés, MAIS 1 point
  reste à dissiper » (levait la review entière alors qu'un point vivait).
* garde `_lift_is_intensified_marker_negated` — neutralise la négation
  sur la locution `ne concerne plus` UNIQUEMENT quand l'intensifieur
  (`rien`/`personne`/`aucun`) est en tête de sous-clause et N'EST PAS
  suivi d'un mot-outil / verbe actif (`faire`/`aller`/`doit`/…). Faux
  négatif fondateur « ne concerne plus rien du tout » était classé
  BOT-CONCERN via le token `rien` dans `_LIFT_NEGATION_TOKENS` ; c'est
  l'intensification de la dissipation, pas l'annulation.
* variante `_lift_is_intensified_marker_negated_marker_active` —
  couvre les marqueurs `ne concerne plus [rien|personne|aucun|aucune]`
  (intensifieurs inclus dans le marker) ; suit le même principe de
  verb-actif-immédiat-après.
* 4 entrées ajoutées au registre LIFT_MARKERS : `dissiper`,
  `dissipant`, `dissipée`, `dissipe`, `dissipées`, `dissipés` (famille
  infinitive complète pour distinguer PENDING vs ACQUIS) + `ne concerne
  plus rien`, `ne concerne plus personne`, `ne concerne plus aucun
  point`, `ne concerne plus aucune reserve` (intensification).

18 tests ajoutés, tous pinnent les résiduels ai-01 + cas mixtes +
negative regressions. Suites dépendantes (`test_check_lane_claim.py` /
`test_pick_idle_grain.py` / `test_variation_adjacency_guard.py` /
`test_variation_light_cap.py` / `test_pr_gate.py`) : 669 verts.
Sweep audit --limit 100 : 0 finding, 0 régression.

Tell c.1081 strict : `Grain: MED/tooling — lane myia-po-2023:CoursIA-2
— prev: MED/tooling #15483` (REPAIR hérite du genre, c.295-L5).

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

* ci(pr,#15483): wake checks apres amend body prev-self -> prev: LIGHT/tooling #15449 (adjoint po-2025 preflight, c.430)

---------

Co-authored-by: jsboige <jsboige@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@myia-ai-01
myia-ai-01 merged commit 342189d into main Sep 11, 2026
19 of 23 checks passed
jsboige added a commit that referenced this pull request Sep 11, 2026
…ge la collision d'ordinal (See #15429)

Suite au diagnostic firsthand d'ai-01 sur #15446 : le rouge du garde n'etait pas la
normalisation str->list mais une COLLISION D'ORDINAL. La tete portait, dans chaque
repertoire, deux fichiers au meme prefixe 0010 (celui de cette PR et le
0010-2026-09-08-myia-po-2024-CoursIA-2.yaml deja sur main), et le 0011 venu de main
(#15449, T8) attestait l'etat PRE-normalisation sous un ordinal superieur a celui que
cette PR avait alloue. L'outil lit la derniere attestation : il voyait e0cc5d3 la ou
l'arbre porte 41aacfc.

Geste applique, conformement a la prescription d'ai-01 (on RETIRE l'entree dupliquee et
on re-atteste au-dessus, pas de renumeration en cascade) :
- git rm des deux 0010-2026-09-10-myia-po-2023-CoursIA.yaml (collision d'ordinal)
- le 0011 de main (T8) est conserve tel quel, byte-identique : sha256 386e2daac1a0
  (gametheory) et 00f600db8795 (sudoku) verifies contre origin/main
- --update --pair alloue 0012-2026-09-11 dans les deux repertoires

Verification:
- garde --check : les 2 paires passent. DRIFT=3 residuel = Probas-16, SW-2, SW-7,
  collisions PRE-existantes sur main introduites par a1ae006 (T5, #15445) et
  couvertes par la PR #15576 ouverte -- hors champ de cette PR.
- integrite registre : 45 passes ; le seul echec ne liste que ces 3 paires de main,
  aucune des deux de cette PR.
- diff net vs origin/main = +2 fichiers d'attestation + 2 lignes known_differences
  (le 0011 restaure etant byte-identique a celui de main).
- notebooks non touches : leur contenu est bon, la neutralite semantique de la
  conversion source str->list est verifiee (SHA canonique identique base vs head).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 12, 2026
…tion source str->list (#15446)

* chore(notebooks,#14209): tranche T7 du split -- normalisation source str->list sur GameTheory/Sudoku/RL/QC

See #15429 (T7/T8). Contenu identique cellule par cellule : 10 conversions
str->list verifiees par script (source joinee == source str d'origine, zero
drift outputs/execution_count/metadata). Reprise du contenu de
chore/14209-normalize-residue a1e83ff sur origin/main frais.

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

* chore(notebooks,#14209): restore final newline on split tranche T7 (EOF drift #15429)

Le writer de normalisation source str->list a perdu la newline finale des
notebooks modifies (fin `}` au lieu de `}\n` comme sur main). Restauration
d'un octet par fichier : les blobs redeviennent suffixe-identiques a main,
contain JSON/nbformat inchange.

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

* chore(twin-parity,#15429): rebaseline T7 twin pairs after source normalization

The split converted notebook sources to the list form, moving the blob SHAs of 2 registered twin pairs (GameTheory-10 ForwardInduction-SPE, Sudoku-14 BDD) without a re-audit. Canonical rebaseline via check_twin_parity.py --update (after the EOF newline repair), per the twin-parity gate contract (#8057).

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

* chore(ci,#15446): attestation twin parity des 2 paires T7 + renumeration du journal d'audit local (See #15429)

Le garde Twin parity audit (#8057) rougissait sur 2 paires du champ de cette PR :
GameTheory-10 ForwardInduction-SPE et Sudoku-14 BDD.

Re-audit firsthand AVANT attestation (le garde exige d'attester la parite, pas de
la reparer). Mesure sur les 4 jumeaux : le SHA canonique du carnet -- toutes les
listes-de-chaines jointes, metadata de niveau carnet exclue -- est IDENTIQUE base
(origin/main) vs head, et les champs `text` des sorties sont inchanges. L'empreinte
de forme montre la seule difference : source_str passe a 0 et source_list gagne
exactement les cellules correspondantes (GameTheory-10 Python 2->0 / 35->37 ;
Sudoku-14 C# 2->0 / 42->44). Aucun contenu pedagogique touche.
Le content_sha du registre (_content_sha hache la forme brute du JSON, donc un
re-encodage str->list le deplace autant qu'une edition de prose) bougeait sans
divergence : d'ou attestation via --update.

Collision d'index propre a la branche : les deux repertoires portaient DEUX
fichiers au prefixe 0010 (un po-2024 09-08 herite de main, un po-2023 09-10 local).
L'index zero-padde NNNN est la cle de tri de _load_audits_from_files (#14911/#15345),
donc renumeration 0011->0012 puis 0010->0011, en preservant l'ordre du journal.
Verification : le contenu de chaque fichier renomme est byte-identique a sa source
(sha256 : 7b6e04a864f1 et 386e2daac1a0 sur gametheory, 0208891eec5d et 00f600db8795
sur sudoku).
Note de lecture : git apparie 0010 -> 0013 dans l'affichage du diff (les YAML
d'attestation sont quasi identiques, l'heuristique de renommage est arbitraire ici).
Le contenu de l'arbre est le seul verdict et il est verifie : ordre final du
repertoire = 0009, 0010 (po-2024 09-08), 0011, 0012, 0013.

- 2 entrees d'audit 2026-09-11 (myia-po-2023:CoursIA), forme file-per-audit #14911
- ligne explicative en tete de known_differences de chaque paire
- per-pair vs origin/main : INTRO=0 (etait 2), OK=154/157, PRE=3 inchange
  (Probas-16, SW-2, SW-7 : DRIFT pre-existants sur main, hors champ de cette PR)

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

* chore(ci,#15446): attestation twin parity T7 a l'ordinal 0012 — corrige la collision d'ordinal (See #15429)

Suite au diagnostic firsthand d'ai-01 sur #15446 : le rouge du garde n'etait pas la
normalisation str->list mais une COLLISION D'ORDINAL. La tete portait, dans chaque
repertoire, deux fichiers au meme prefixe 0010 (celui de cette PR et le
0010-2026-09-08-myia-po-2024-CoursIA-2.yaml deja sur main), et le 0011 venu de main
(#15449, T8) attestait l'etat PRE-normalisation sous un ordinal superieur a celui que
cette PR avait alloue. L'outil lit la derniere attestation : il voyait e0cc5d3 la ou
l'arbre porte 41aacfc.

Geste applique, conformement a la prescription d'ai-01 (on RETIRE l'entree dupliquee et
on re-atteste au-dessus, pas de renumeration en cascade) :
- git rm des deux 0010-2026-09-10-myia-po-2023-CoursIA.yaml (collision d'ordinal)
- le 0011 de main (T8) est conserve tel quel, byte-identique : sha256 386e2daac1a0
  (gametheory) et 00f600db8795 (sudoku) verifies contre origin/main
- --update --pair alloue 0012-2026-09-11 dans les deux repertoires

Verification:
- garde --check : les 2 paires passent. DRIFT=3 residuel = Probas-16, SW-2, SW-7,
  collisions PRE-existantes sur main introduites par a1ae006 (T5, #15445) et
  couvertes par la PR #15576 ouverte -- hors champ de cette PR.
- integrite registre : 45 passes ; le seul echec ne liste que ces 3 paires de main,
  aucune des deux de cette PR.
- diff net vs origin/main = +2 fichiers d'attestation + 2 lignes known_differences
  (le 0011 restaure etant byte-identique a celui de main).
- notebooks non touches : leur contenu est bon, la neutralite semantique de la
  conversion source str->list est verifiee (SHA canonique identique base vs head).

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

---------

Co-authored-by: jsboige <jsboige@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 13, 2026
… SW-7) -- attestation T8 restauree au rang latest (#15970)

La normalisation source str->list (#15444/#15445, merge 2026-09-11) etait
correctement attestee par #15449 (T8), mais le journal file-per-audit porte
une inversion d'ordre : par paire, l'entree du 09-10 a shas POST-tranche est
suivie d'une entree a shas PRE-tranche ecrite en dernier dans la meme PR ;
_latest_audit lit audits[-1], donc la garde comparait HEAD post-tranche a une
baseline pre-tranche -> 3 DRIFT fantomes sur main. Le renumber #15576
(#15345) a preserve l'ordre relatif, l'inversion a survecu.

Zero edition de notebook : texte rendu identique verifie programmatiquement
sur les 3 fichiers modifies par la tranche (Infer-16 C# 32 cellules, SW-2b
43, SW-7b 48 -- comparaison normalisee join-liste vs str, aucune divergence,
outputs/ids/ordre intacts).

Rebaseline d'attestation par script : 3 entrees audit 2026-09-13 (shas HEAD,
egaux aux entrees T8 enterrees 0009/0006/0007) + narrations known_differences.
--update en DERNIERE operation (cf #8957).

Verifications : check_twin_parity --check -> 157/157 OK DRIFT=0 ;
test_twin_registry_integrity -> 46 passed.

See #15429
See #15345

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

variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants