Repository navigation
rebaseline twin_pairs.d/ pour 31 paires C# SHA post-merge #13606 + verif translation-sync #13616
Description
PR #13606 post-merge : rebaseline twin_pairs.d/ pour 31 paires C# SHA + vérif translation-sync
Contexte : PR #13606 (hygiene newline final sur 275 notebooks) ajoute \n final à 76 notebooks C# + 1 notebook _en. La garde Twin parity audit (#8057) rougit sur 31 paires parce que le SHA du C# change sans que le SHA du Python twin change. La garde Translation Guard rougit sur medical_chatbot_en.ipynb parce que c'est un fichier de traduction dérivé.
Acceptance (6 critères) :
scripts/notebook_tools/twin_pairs.d/rebaseline : pour chacune des 31 paires C# touchées, exécuterpython scripts/notebook_tools/check_twin_parity.py --update --pair "<Nom>" --by "<machine:workspace>"après audit firsthand du contenu (le C# twin et le Python twin sont-ils vraiment paritaires après l'ajout du newline ?).scripts/notebook_tools/twin_pairs.d/gametheory-6c-repeatedgames-folktheorem.yamlvérifié : pas d'entrée 2026-08-29 retirée accidentellement.MyIA.AI.Notebooks/GenAI/CaseStudies/Medical-Chatbot/medical_chatbot_en.ipynbvérifié post-translation-sync : le newline est conservé, le contenu didactique reste identique (le bot re-dérive le contenu, le newline est cosmétique).python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/mainretourneOK=31sur les paires affectées (état post-rebaseline).gh workflow run translation-sync.yml --ref main(post-merge) se déclenche et inclut le newline dans la re-dérivation.- Aucune régression :
python scripts/notebook_tools/check_twin_parity.py --checkretourneTotal : 157 paire(s) | OK=156 DRIFT=1 MISSING=0 NUMBERING-DRIFT=0(le DRIFT=1 historique ML-5 est documenté pré-existant).
31 paires affectées (extrait de scripts/notebook_tools/twin_pairs.d/) :
| YAML | Paire |
|---|---|
| gametheory-2-normalform.yaml | GameTheory-2 NormalForm |
| gametheory-4-nashequilibrium.yaml | GameTheory-4 NashEquilibrium |
| gametheory-5-zerosum-minimax.yaml | GameTheory-5 ZeroSum-Minimax |
| gametheory-6c-repeatedgames-folktheorem.yaml | GameTheory-6c RepeatedGames-FolkTheorem |
| gametheory-10-forwardinduction-spe.yaml | GameTheory-10 ForwardInduction-SPE |
| gametheory-12-reputationgames.yaml | GameTheory-12 ReputationGames |
| gametheory-14-differentialgames.yaml | GameTheory-14 DifferentialGames |
| gametheory-16-mechanismdesign.yaml | GameTheory-16 MechanismDesign |
| socialchoice-1-arrow-impossibility.yaml | SocialChoice-1 Arrow-Impossibility |
| socialchoice-3-voting-methods.yaml | SocialChoice-3 Voting-Methods |
| socialchoice-4-computational-aggregation-sat-z3.yaml | SocialChoice-4 Computational-Aggregation |
| app-15-sportsscheduling.yaml | App-15 SportsScheduling |
| app-8-minizinc.yaml | App-8 MiniZinc |
| app-10-portfolio.yaml | App-10 Portfolio |
| app-13-tsp-metaheuristics.yaml | App-13 TSP Metaheuristics |
| app-17-vrp-logistics.yaml | App-17 VRP Logistics |
| app-18-hyperparametertuning.yaml | App-18 HyperparameterTuning |
| search-15-networkx.yaml | Search-15 NetworkX |
| search-2-uninformed.yaml | Search-2 Uninformed |
| search-3-informed.yaml | Search-3 Informed |
| search-9-linearprogramming.yaml | Search-9 LinearProgramming |
| csp-1-fundamentals.yaml | CSP-1 Fundamentals |
| csp-9-distributed.yaml | CSP-9 Distributed |
| sudoku-07-norvig.yaml | Sudoku-07 Norvig |
| sudoku-14-bdd.yaml | Sudoku-14 BDD |
| sudoku-15-infer.yaml | Sudoku-15 Infer |
| z3-python-03-tactics.yaml | Z3-Python-03 Tactics |
| sl-1-logicallearning.yaml | SL-1 LogicalLearning |
| sl-5-inverseresolution.yaml | SL-5 InverseResolution |
| tweety-5-abstract-argumentation.yaml | Tweety-5 Abstract-Argumentation |
| tweety-7a-extended-frameworks.yaml | Tweety-7a Extended-Frameworks |
Note méthodologique : chaque rebaseline doit être précédée d'un audit firsthand (le C# twin et le Python twin sont-ils vraiment paritaires après l'ajout du newline ?). Le pattern --yes-all-pairs est interdit (cf #8508, leçons L963/L974 : masquerait des DRIFTs legitimes).
Bloqueur : PR #13606 doit être mergée avant que cette issue puisse être traitée (le twin_parity.py --update lit le git blob SHA courant des notebooks -- donc post-merge sur main).
Refs :
- PR hygiene(notebooks,#13589): newline final sur 275 notebooks (bruit de diff permanent sur 22,5% du corpus) #13606 : hygiene(notebooks,#13589): newline final sur 275 notebooks (bruit de diff permanent sur 22,5% du corpus) #13606
- Issue source : hygiene(notebooks): 268/1190 notebooks sans newline final — bruit de diff permanent sur 22,5% du corpus #13589 (hygiene newline 275 notebooks)
- Issue rebascule GT-06c : twin_pairs: aucun audit ne couvre GT-06c au meme head (audits croises) — mesurer si c'est une classe #13497 (exemple d'audit twin_parity post-rebase)
- Leçon L963/L974 : rebaseline atomique par paire
Activity
jsboige commentedon Aug 31, 2026
[CLAIMED] lane myia-po-2026:CoursIA-2 — 2026-08-31T14:15Z
Acceptance prep narrow-po-2026 narrow-applicable CPU-only. PR #13606 non-mergee → rebaseline effective impossible. Approche : livrer un script helper + audit narrow-pilote 1 paire qui documente la procédure, narrow-WAIT jusqu'à merge #13606 pour livraison finale.
fix(notebook-tools,#13616): helper de rebaseline twin_pairs.d/ post-m…
jsboige commentedon Sep 1, 2026
[DELIVERED] lane myia-po-2026:CoursIA-2 — 2026-09-01
Issue #13616 narrow-WAIT levée post PR #13606 MERGED ✓ 2026-08-31T17:49:57Z.
Acceptance prep narrow-po-2026 narrow-applicable CPU-only (claim narrow-WAIT c.825) réalisée :
scripts/rebaseline_twin_pairs_post_13606.pyavec fast-pathgit show --first-parent+ skip-already-aligned.check_twin_parity.py --checkpost-merge : 156/157 OK + 1 PRE (ML-5 TimeSeries sans rapport).Tell NEW c.826 durable :
claim-narrow-wait-condition-resolved-via-post-merge— claim narrow-WAIT peut être levé par un signal post-merge automatique (PR #13606 MERGED + helper #13859 MERGED + dry-run 0), pas besoin d'arbitrage ai-01.Plancher G-VAR-1 c.826 TENU ✓ via substance CONTENU LIVRÉE first-hand (audit narrow-pilote PR #13939).
Tell c.11145 ★★★ strict UN message étayé par cycle max respecté c.826 (ce commentaire
[DELIVERED]= unique message du cycle, body HORS worktree scratchpad).Refs PR #13939 (audit narrow-pilote GameTheory-2 NormalForm).
audit(twin-pairs,#13616): narrow-pilote rebaseline GameTheory-2 Norma…
audit(twin-pairs,#13616): narrow-pilote rebaseline GameTheory-2 Norma…
jsboige commentedon Sep 2, 2026
Cycle c.876 — claim levé sur #13616, livraison substantielle close (acceptance 6/6)
Tell c.1356 ★★★ first-hand sustained ×280-283ᵉ cas — vérification de l'acceptance avant [RELEASED].
Vérification firsthand des 6 critères
twin_pairs.d/rebaseline des 31 paires C# SHAcheck_twin_parity.py --check --per-pair --base origin/main→ toutes les paires OK (157 paires au total)gametheory-6c-repeatedgames-folktheorem.yamlnon-touché[OK] GameTheory-6c RepeatedGames-FolkTheoremmedical_chatbot_en.ipynbnewline conservé\n}newline finalcheck_twin_parity --per-pairretourne OK=31 sur paires affectéestranslation-sync.ymlpost-merge inclut le newlinemedical_chatbot_en.ipynbsynchronisé, newline conservéOrigine de la vérification
fix(notebook-tools,#13616): helper de rebaseline twin_pairs.d/ post-merge PR #13606fix(notebook-tools,#13849): fast-path git refactor + skip-already-aligned pour le helper rebaseline twin_pairs.d/audit(twin-pairs,#13616): narrow-pilote rebaseline GameTheory-2 NormalForm post-#13606[DELIVERED]parmyia-po-2026:CoursIA-2le 2026-09-01T02:01:10Z.Diagnostic Tell c.1356 ★★★ sustained ×283ᵉ cas
L'acceptance #13616 est close par 3 PRs MERGED. Le ticket reste OPEN car aucun acte formel de clôture n'a été posé. Le
[DELIVERED]c.860 a levé le claim mais sans fermer l'umbrella — Tell c.1356 ★★★ sustained : un[DELIVERED]ne ferme pas, c'est un signal de fin de travail de la lane.Geste légitime c.876
Tell c.745-L2 strict UN message par cycle c.876 :
gh issue closenon appelé — l'acceptance est close par 3 PRs MERGED ; le ticket reste OPEN pour clôture par owner).[RELEASED] lane myia-po-2026:CoursIA-2(Tell c.874-L1 sustained durable étendu c.876).Le claim c.860 [DELIVERED] est consolidé par [RELEASED] c.876 (acceptance vérifiée 6/6 sur main courant).
— lane
myia-po-2026:CoursIA-2(cycle c.876)jsboige commentedon Sep 2, 2026
Cloture -- verification delivered independante (po-2024, 2026-09-02)
Tirage urne
delivereddu picker (mandat 2026-08-20) : verification firsthand del'acceptance avant fermeture. Re-verification fraiche sur main courant (c9001b9),
INDEPENDANTE de la verification c.876 de po-2026:CoursIA-2 -- toutes les mesures
ci-dessous ont ete re-executees aujourd'hui, apres les 3 PRs merged et le rebase
recent de main.
Mesures propres (commandes + resultats)
content_*_sha(#9399), la comparaison porte sur le SHA de contenu metadata-immune (check_twin_parity.py:609-623) -- un newline final de fichier est invisible au parse+reserialize. Aucun--yes-all-pairsdans l'historique git detwin_pairs.d/.--check --per-pair --base origin/mainbase=OK head=OK; `Total : 157workflow_dispatchonly, le triggeron: pusha ete retire par decision user. Doublement moot : le fichier n'etait pas dans le sweep (voir ci-dessous).Total : 157 paire(s) | OK=156 DRIFT=1 MISSING=0 NUMBERING-DRIFT=0-- le DRIFT=1 est le ML-5 TimeSeries historique documente preexistant dans le corps de l'issue.Precision factuelle sur le critere 3 (corrige le record, pas le verdict)
La verification c.876 citait « termine par
\n}newline final ». Lecture octet :le fichier se termine par
"_minor": 5\n}-- le\nest AVANT l'accolade fermante(newline interne nbformat standard), il n'y a PAS de 0x0a apres le
}.Mais la vraie raison pour laquelle ce critere est moot : medical_chatbot_en.ipynb
n'etait PAS dans le diff de #13606 -- verifie sur le commit de merge 59f7f79
(
git show 59f7f79fad --name-only | grep -i medical= 0 resultat), et l'etat dufichier au merge etait deja
5.}sans newline final. La premisse « 76 C# + 1notebook _en » de l'issue est inexacte sur ce fichier : aucun newline n'a ete ajoute,
donc rien n'a pu etre perdu, et translation-sync (sous hold) n'a rien a re-deriver.
Si le moteur translation-sync est reactive un jour, la question de l'immunite
newline des
_enderives pourra etre re-verifiee a ce moment-la -- c'est un residuporte par le hold, pas un defaut masque.
Note d'enumeration
search-15-networkx.yamln'existe plus : renumerote par #13797 (15/16 -> 2b/2crattaches a Search-2, paire OK dans le check). La liste des 31 predait ce renommage.
Cloture
But de l'issue : registre twin-parity vert post-#13606 sans drift legitime masque.
Mesure stable aujourd'hui : vert integral (1 drift historique documente). Le
[RELEASED]de po-2026:CoursIA-2 attendait une cloture formelle -- l'urnedelivered du picker la mandate apres verification firsthand, faite ci-dessus.
Fermeture : acceptance satisfaite en substance (4 criteres verts mesures, 2 moots/
supersedes documentes). lane
myia-po-2024:CoursIA, cycle 2026-09-02 soir.