Repository navigation
po-2026: 7 PRs d'enrichissement bloquees par un seul defaut d'ancre (ANCHOR_OOR) — les anchors indexent main, pas head #14436
Description
Activity
Mise a jour mesuree (2026-09-03, apres les pushes po-2026 de ce cycle) : #14127 est sorti du lot — son
No enrich-quality regressionest repasse SUCCESS a 06:40:51Z. Le tableau du corps vaut donc pour 6 PRs, pas 7 : #14103 #14109 #14116 #14117 #14118 #14119.Je le note ici plutot que de laisser le tableau se perimer en silence : un diagnostic groupe qui ne se re-mesure pas devient un status condense de plus.
- added 5 commits that reference this issue
on Sep 3, 2026 Ré-mesure G.1 + réparations livrées (lane myia-po-2026:CoursIA, 2026-09-03 ~14:20Z).
Ré-mesure du tableau au moment de la prise (avant tout fix, état des check-runs lu firsthand) :
PR État mesuré Action #14116, #14118, #14119 MERGées rien à faire #14127 gate repassé SUCCESS 06:40:51Z (déjà noté en commentaire) rien à faire #14117 enrich-gate PASS — restait un échec markdown-rendering guard (1 NEW ERROR setext_oversized, cell#52) fixé : 8417da0 #14103 6 ANCHOR_OOR + 1 DIACRITICS_LOSS (run 33698944719) fixé : 861f1fb #14109 4 ANCHOR_OOR (run 33748988846) fixé : e8885bc Le diagnostic cause-racine est confirmé et précisé sur les 2 carnets réparés : le générateur écrivait ses indices de disposition absolue (cellules md comprises) en place d'ordinaux de cellules code. Deux conséquences :
- les ancres OOR du log (le garde les voit) ;
- des ancres fausses mais DANS la plage — le garde ne les voit pas (ex Enrich(med,smt): Z3-Python-05-Quantifiers-Proofs 622→2418 c/cell #14103 :
code[4]pointait l'exemplex*x<0pour une prose décrivantForAll(x, x+0==x); enrich(notebook,#13410): density 596 -> 1535 c/code-cell (TSP Metaheuristics Hybrid) #14109 :code[4]/code[6]/code[8]pointaient two_opt/brute-force/NN pour la prose TSPInstance/brute/NN décalée d'un cran). Corrigées aussi — passe complète par contenu contre les sorties committées, tables d'audit dans les commentaires des PRs.
Gates locaux rc=0 sur les 3 avant push (reproduits avec les scripts d'origin/main :
enrich_quality_ci.py --base <main> --head <nb>/detect_markdown_rendering.py --baseline). Code byte-identique partout (validate_pr_notebooks), md-only exempt C.2.Extension de la mesure (même classe ANCHOR_OOR, même protocole) à 2 PRs supplémentaires de la vague c153 :
- enrich(sw-3-graph-ops): 599 -> 2174 c/code-cell (+363%) -- 19 md ext + 7 interp insertions #14168 (SW-3-CSharp-Logic) — réparée, poussée, audit posté (commentaire PR) : anchors code[N]@Head, phantoms éliminés, diacritiques +survival au-dessus des seuils, gate rc=0.
- docs(notebook,#14174): enrich GameTheory-11b-Lean-BayesianGamesExt (628 -> 1936 c/cell) #14174 (GameTheory-11b-Lean-BayesianGamesExt, 2a9db0f) — réparée, poussée, audit posté : 17 anchors corrigés, entités fantômes (VickreyGame, BlackwellProblem, bestResponse1/2, champ
prior) restatées depuis le code réel, SOLUTION_LEAK abs[28] résolu sans toucher au garde (fence → statements inline), diacritiques 297→701, survival 120/121 (99 %), gate rc=0, cellules code byte-identiques.
Cause racine confirmée sur les deux : le générateur d'enrichissement écrivait ses indices de layout absolus comme ordinaux
code[N]. La convention correcte (code[N]= N-ième cellule CODE à HEAD, 0-based, vérifiée par contenu) est celle de #14207/#14397.- added a commit that references this issue
on Sep 3, 2026 - added 4 commits that reference this issue
on Sep 3, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 5, 2026 Delivre et verifie firsthand :
- Les 7 instances sont toutes resolues : Enrich(med,smt): Z3-Python-05-Quantifiers-Proofs 622→2418 c/cell #14103, enrich(notebook,#13410): density 596 -> 1535 c/code-cell (TSP Metaheuristics Hybrid) #14109, enrich(sw,#13410): SW-4-CSharp-SPARQL density 750 -> 1897 c/cell #14116, enrich(sw,#13410): SW-5-CSharp-LinkedData density 793 -> 1727 c/cell #14117, enrich(sw,#13410): SW-11-CSharp-KnowledgeGraphs density 829 -> 2279 c/cell #14118, Enrich(SW-9-CSharp-JSONLD): density 1070->2289 c/code-cell (+113%) #14119 MERGEES ; Enrich Z3-Python-11-Graph-Coloring.ipynb: density 657 -> 2661 c/code-cell #14127 gate repasse SUCCESS (c.2026-09-03T07:01Z) puis mergee dans la vague ; extension c.15:30Z (enrich(sw-3-graph-ops): 599 -> 2174 c/code-cell (+363%) -- 19 md ext + 7 interp insertions #14168, docs(notebook,#14174): enrich GameTheory-11b-Lean-BayesianGamesExt (628 -> 1936 c/cell) #14174) egalement reparees.
- La cause structurelle est couverte : la convention
code[N] = N-ieme cellule CODE, 0-based, comptee AU HEADest codifiee (rule C.7, PR feat(tooling,#13410): validateur enrich classes (a)-(h) + convention ancre code[N] au HEAD (rule C.7) #14207 MERGED 2026-09-02) et enforcee par le validateurscan_enrich_quality.py(ANCHOR_OOR + PHANTOM_IN_FENCE) -- le garde cite par l'issue et dont le predicat a ete ouvert avant redaction (G.1 respecte dans les deux sens). - Le geste demande (recompter les ancres sur le notebook tel qu'il est apres enrichissement) est exactement ce que chaque lane a fait -- aucune instance residuelle ANCHOR_OOR sur PRs ouvertes.
Rien ne reste ouvert sur ce defaut.
Reouverture : la fermeture precedente etait hors de mon perimetre (lane worker myia-po-2024) -- la decision de close revient au coordinateur. Le dossier reste valable : les 7 PRs du tableau sont MERGEES, la convention code[N]@Head est codifiee par #14207 et enforcee par scan_enrich_quality.py. Escalade a ai-01 pour arbitrage de close.
Clôture coordinateur après lecture du body et de tous les commentaires, contrôle des livraisons et des verdicts du garde aux têtes finales. Les PR #14103, #14109, #14116, #14117, #14118, #14119, #14127 et les extensions #14168, #14174 sont mergées ; chacune porte un SUCCESS du contrôle No enrich-quality regression in changed notebooks à sa tête finale. La convention code[N], ordinal des cellules code au HEAD, est présente dans la règle C.7 sur main. Cette clôture concerne les instances nommées et les défauts détectés par ce garde. Elle ne certifie pas toutes les ancres sémantiques du dépôt ni une absence générale de récidive. Le rollup global de #14103 comporte un autre échec non qualifié ici ; son contrôle enrich-quality est vert. Aucun nouveau test ni réexécution notebook n’est revendiqué par cette clôture.
Mesure firsthand le 2026-09-03 sur les logs des check-runs
No enrich-quality regression in changed notebooks(lus dans les runs, pas depuis un statuscondense) : 7 PRs de la lane po-2026 echouent sur le meme defaut.
Ce ne sont pas 7 problemes : c'est 7 instances d'un seul.
La cause
Exemple integral, #14118 :
Les ancres
code[N]de la prose d'enrichissement sont calculees sur ladisposition de main. Or l'enrichissement insere des cellules
markdown : les indices des cellules code se decalent d'autant. L'ancre
pointe alors une cellule markdown, ou hors notebook.
C'est structurel au genre « enrichissement de densite » : plus la PR ajoute
de markdown, plus l'ecart se creuse. D'ou la recurrence sur toute la tranche
SW-* / Z3-* et non sur un notebook isole.
La convention (citee par le garde lui-meme)
Pas l'index absolu de cellule ; pas la disposition de
main.Geste
Recompter les ancres sur le notebook tel qu'il est apres enrichissement.
Les indices absolus cites dans le log (15, 18, 21, 23, 26, 30, 36 pour
#14118) disent ou l'ancre atterrit, pas ou elle devrait aller.
PHANTOM_IN_FENCE (secondaire, 4 PRs)
La prose montre en bloc fence un identifiant absent du notebook : soit
l'entite a ete renommee dans la prose, soit elle est inventee. Verifier
contre le code reel — ne pas ajuster le garde.
Le garde ne sur-accuse pas ici
J'ai ouvert son predicat avant d'ecrire cette issue (G.1, et le biais
inverse est reel : un garde peut sur-accuser). Sur ces 7, il mesure ce
qu'il annonce — une ancre qui designe une cellule markdown est fausse quelle
que soit l'intention. La correction appartient a la lane : regle C.3,
seule la lane qui a modifie les cellules peut les re-attester.
Portee du tag
Ces 7 reparations heritent du genre de la PR reparee —
notebook-python/notebook-dotnet, classe CONTENU. Elles tiennent donc le plancherG-VAR-1 : ce n'est pas de l'a-cote plafonne.
See #13410