Skip to content

Fix(#18430): transport du banc v2 -- emulation n, extraction multi-ligne, blocs think ; run comparatif livre - #21672

Merged
myia-ai-01 merged 9 commits into
mainfrom
fix/18430-bench-transport-n-et-preuve
Oct 24, 2026
Merged

myia-ai-01 merged 9 commits into
mainfrom
fix/18430-bench-transport-n-et-preuve

Conversation

@jsboige

@jsboige jsboige commented Oct 20, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-po-2024:CoursIA — prev: MED/research-code #21668

Résumé

Correctif de transport du banc volet B (#18430, PR #20502) : le run du 2026-10-12 était dégénéré sur les deux modes (pas-à-pas generator_exhausted en 3 appels / 5,9 s contre 1 925 s maison ; preuve entière réduite à une ligne puis compile_error). Il mesurait le transport, pas l'organe. Ce correctif rend le banc valide ; le run comparatif exigé par le critère 4 de #18430 est rapporté sur #1453.

Provenance des chiffres — deux runs distincts, à ne pas confondre

Run Statut de la mesure Artefact
2026-10-20 Mesures rapportées dans le commentaire 6300672049 de #1453. Le répertoire results_20261020b/ cité par une version antérieure de ce body était un scratch local non préservé : il n'existe ni dans l'arbre, ni sur les disques partagés. Il n'est donc pas un livrable et n'est plus cité comme tel. aucun (non conservé)
2026-10-23 Rejeu sur le parser corrigé, mêmes rung / modèle / budgets. Mêmes verdicts et mêmes terminaisons qu'au 2026-10-20 ; seules les durées diffèrent. scripts/results/leandojo_v2_bench_rung52_2026-10-23.json (committé, 45 lignes)

Les mesures du 2026-10-20 sont conservées ci-dessous datées, comme provenance historique ; celles du 2026-10-23 sont l'artefact vérifiable.

Run corrigé — verdicts d'organe sur les deux modes

Mode success appels LLM durée terminaison
pas-à-pas non 12 (3 tours × 4 échantillons émulés) 28,5 s (20/10) — 38,8 s (23/10) generator_exhausted
preuve entière non 1 9,5 s (20/10) — 18,6 s (23/10) compile_error (noyau)

En pas-à-pas, le modèle ne produit que deux familles de tactiques, toutes deux rejetées au noyau (erreur imbriquée « maximum » dans simp) — le dédoublonnage used_tactics épuise la recherche. En preuve entière, la sortie extraite est une vraie preuve multi-ligne (sans bloc think, sans fence) que le noyau rejette. Verdicts FAIL des deux côtés (maison : FAILED 1 925,1 s / timeout budget), mais des chemins d'effort d'un ordre de grandeur d'écart — rapportés, jamais moyennés, dans #1453.

Trois défauts mesurés (2026-10-20), aucun supposé

# Défaut Mesure Correctif
1 n non honoré Sonde HTTP 200 sur openrouter avec "n": 4 : 1 seul choix rendu (l'API Anthropic n'a pas de sampling n). À 1 échantillon par pas, le dédoublonnage used_tactics du générateur v2 épuise la recherche dès que le modèle réitère — d'où les 3 appels / 5,9 s. _post émule n par requêtes successives, chacune bornée par la deadline résiduelle (jamais de rafale hors budget) ; erreur API ou budget épuisé interrompt et rend les choix déjà collectés. gen.calls compte les tentatives de POST (erreur API et échec de transport compris) — c'est un compteur de tentatives, pas une mesure du trafic réellement parti sur le réseau.
2 Parser upstream une-ligne Branche "claude" de external_parser.post_process_output : .split("lean")[-1].split("```")[0].split("\n")[1] — tronque toute sortie à une ligne. La preuve entière brute mesurée fait 7 lignes (fence comprise) ; le banc du 12/10 n'en recevait qu'une. La branche deepseek du même parser garde la preuve complète — bug copy-paste upstream. _extract_whole_proof (module) : dés-enveloppe le bloc fence, préserve le multi-ligne — sémantique de la branche deepseek, appliquée au shim sans toucher au package.
3 Blocs <think> avant la fence Run corrigé du 2026-10-20 : claude-opus-4.7 via openrouter ouvre sa sortie d'un bloc de raisonnement <think>...</think> avant la fence — le correctif 2 ne regardait que le début de chaîne et rendait le bloc entier au check_compile (échec de parse de transport, pas un verdict d'organe). _extract_whole_proof retire d'abord les blocs think (regex DOTALL), puis prend le dernier bloc fence.

Corrections de review (deux passes, deux têtes)

Passe 1 — crible de l'adjoint sur 23ce570697 (commit 990179f6948). Trois défauts, tous reproduits puis corrigés :

  • _extract_whole_proof contredisait sa docstring : une fence fermée suivie d'une phrase finale, et deux blocs successifs, rendaient le mauvais texte.
  • gen.calls sortait avant l'incrément sur réponse en erreur, et ne comptait pas l'échec de transport.
  • results_20261020b/ n'existait nulle part (§ Provenance ci-dessus).

Passe 2 — vérification indépendante de 990179f6948 (commit 20ba1bb2fc4). Deux régressions résiduelles du parser, reproduites avant correctif :

Entrée Avant Après
fence étiquetée lean4 rfl suivi de la ligne de clôture rendue dans la preuve rfl
preuve contenant have s := "```" tronquée à have s := " have s := "```"\n exact rfl

Cause : la reconnaissance des fences se faisait par regex sur le texte brut. Une étiquette autre que lean n'était pas reconnue (donc la ligne de clôture entrait dans la preuve), et les backticks d'une chaîne Lean étaient pris pour une clôture. Désormais les délimiteurs se lisent par ligne : ouverture = ligne dont la forme décapée commence par trois backticks (étiquette libre), fermeture = ligne faite de backticks, au moins aussi longue que l'ouvreur (passe 3, tête 9c36f9c105 : un ouvreur à quatre backticks n'était fermé que par une ligne exactement « ``` », et la clôture entrait dans la preuve). Un backtick en milieu de ligne n'est plus jamais une clôture. La borne de prose sur gen.calls (tentatives, pas trafic) est écrite dans les deux commentaires ; le comportement est inchangé.

Validation

  • python -m pytest scripts/tests/test_leandojo_v2_bench.py — 36 passed à la tête 9c36f9c105 (28 avant la passe 1, 32 après, +2 tests de régression passe 2, +2 passe 3 — fence de quatre backticks, avec et sans backticks de chaîne interne), re-mesuré le 2026-10-23 :
    • l'émulation collecte n choix par n requêtes, jamais "n": k dans le payload, s'arrête net sur budget épuisé (budget_hit) ou erreur API mid-emulation (choix collectés rendus, budget_hit faux) ;
    • le parser injecté dans les tests imite la branche claude réelle (one-liner) — le test exige que la preuve entière lui survive (l'ancien code échoue ce test) ;
    • _extract_whole_proof : bloc fence fermé / non terminé / sortie nue / bloc think retiré (avec et sans fence) / fence suivie d'une phrase / deux blocs successifs / étiquettes lean4, Lean / backticks dans une chaîne Lean / fence de quatre backticks close par quatre backticks, avec et sans backticks de chaîne interne (passe 3).
  • Preuve pré/post de la passe 2 : la fonction extraite de 990179f6948 rend les deux sorties de la colonne « Avant » ci-dessus, la tête courante rend la colonne « Après ». Aucun run LLM n'a servi à prouver le parser.
  • Aucun secret dans le source (pin existant test_no_secrets_in_source intact).
  • Fichiers : 4, dont 1 ajouté — banc, tests, doc, et l'agrégé scripts/results/leandojo_v2_bench_rung52_2026-10-23.json.

Doc

docs/lean/18430-volet-b-leandojo-v2-bench.md §5 « Transport corrigé (2026-10-20) » : tableau des trois défauts + sous-section « Run corrigé ». Le pointeur vers results_20261020*/ est remplacé par la provenance réelle (commentaire #1453 6300672049) et par l'agrégé committé du 2026-10-23, avec la commande de reproduction au §6.

See #18430 (volet B — run comparatif sur #1453 à la sortie du run corrigé). See #1453.

🤖 Generated with Claude Code

jsboige and others added 3 commits October 20, 2026 22:14
…non tronquee

Le run du 2026-10-12 etait degenere sur les deux modes (pas-a-pas
generator_exhausted en 3 appels / 5,9 s ; preuve entiere une-ligne puis
compile_error) : il mesurait le transport, pas l'organe.

Deux defauts mesures puis corriges dans le shim :
- openrouter rend 1 seul choix malgre "n": 4 (l API Anthropic n a pas de
  sampling n) -- _post emule n par requetes successives, chacune bornee
  par la deadline residuelle ;
- la branche claude de external_parser.post_process_output tronque toute
  sortie a une ligne (la branche deepseek garde la preuve complete) --
  _extract_whole_proof desenveloppe le bloc fence et preserve le
  multi-ligne.

Tests : 26 passed (20 existants + 6 nouveaux) -- le parser injecte dans
les tests imite la branche claude REELLE et la preuve entiere doit lui
survivre. Doc : section 5 transport corrige, run corrige en vol.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Run corrige du 2026-10-20 : claude-opus-4.7 via openrouter peut ouvrir sa
sortie d un bloc <think>...</think> AVANT la fence lean -- l extracteur
qui ne regardait que le debut de chaine rendait le bloc entier au
check_compile (echec de parse de transport, pas un verdict d organe).
Retrait des blocs think (regex DOTALL), puis DERNIER bloc fence s il
existe. Tests sur la sortie MESUREE : 28 passed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…x modes, ecart rapporte sur #1453

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

Copy link
Copy Markdown
Contributor

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

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.

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 20, 2026
@github-actions

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).

…t multi-ligne conserve

Le job CI prose-counts (bloquant sur lignes ajoutees, #17636) refusait la
ligne 100 du banc : "La preuve entiere brute mesuree fait 7 lignes (fence
comprise)". Le predicat utile -- la sortie est multi-ligne, le parser
upstream n'en rendait qu'une -- est conserve ; seule la mesure d'artefact
disparait, conformement a #9377/#9434.

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

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #21672 n'existe plus au passage du 2026-10-21T01:55Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

@jsboige

jsboige commented Oct 20, 2026

Copy link
Copy Markdown
Owner Author

Réparation du rouge prose-counts (bloquant, #17636) — commit babe724c630.

Ce que le rouge disait. docs/lean/18430-volet-b-leandojo-v2-bench.md:100 portait « La preuve entière brute mesurée fait 7 lignes (fence comprise) ». C'est un compteur d'artefact écrit à la main : il dérive dès qu'un tiers touche le fichier cité (#9377, #9434).

Correctif. La mesure disparaît, le prédicat reste : « La preuve entière brute est multi-ligne (fence comprise) ; le banc du 12/10 n'en recevait qu'une. » Le défaut décrit (parser upstream qui tronque à une ligne) reste entièrement lisible.

Preuve locale, sur la tête exacte :

python scripts/notebook_tools/check_prose_quantitative_claims.py --diff origin/main...HEAD --strict
rc=0   [OK] aucun compteur quantitatif en prose.

Avant le commit, le même appel rendait rc=1 / [REFUS] sur ce fichier — l'organe lit la tête git, pas l'arbre de travail. Le rc=0 obtenu plus tôt dans mon terminal venait du tail du tube, pas de l'organe ; le vrai code de sortie est celui ci-dessus.

Rien d'autre ne change : aucun code, aucune sortie de cellule.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 21, 2026

@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.

Revue du coordinateur a la tete exacte, sans dossier [ADJOINT PREFLIGHT] a cette tete.

Verifie a 23ce570697 :

  • B.0 (check_unaddressed_nits.py 21672) : rc=0 ;
  • checks : latest-wins-green ;
  • mergeStateStatus: CLEAN ;
  • diff conforme au titre : 3 fichiers, +338/-26.

…alls compte les requetes parties

Crible de l'adjoint sur 23ce570 : trois defauts reproduits, corriges ici.

1. _extract_whole_proof contredisait sa propre docstring ("on prend le
   DERNIER bloc fence"). La branche startswith ne retirait la ligne de
   fermeture que si c'etait la DERNIERE ligne du texte :
   - fence fermee + phrase finale -> "rfl\n```\nCette preuve est correcte."
   - deux blocs successifs -> "simp\n```\n```lean\n  rfl" (le PREMIER bloc)
   Desormais le dernier bloc FERME gagne, quelle que soit sa position ; une
   fence non terminee (aucun bloc ferme) reste des-envelopee ligne a ligne,
   et la sortie nue est rendue telle quelle.

2. "Chaque sous-requete compte dans gen.calls" (body de la PR) etait faux :
   la reponse en erreur sortait AVANT l'increment, et un echec de transport
   n'etait pas compte du tout. L'increment passe dans un finally autour du
   POST : toute sous-requete partie compte, erreur API, JSON invalide et
   exception de transport comprises (l'exception remonte inchangee).

3. Les artefacts results_20261020b/ cites comme preuve n'existaient nulle
   part (scratch local non preserve). Le pointeur est remplace par la
   provenance reelle (commentaire #1453 6300672049) et par un agregé
   committe, issu d'un rejeu du 2026-10-23 sur le parser corrige :
   scripts/results/leandojo_v2_bench_rung52_2026-10-23.json. Memes verdicts
   et terminaisons qu'au 2026-10-20 (generator_exhausted 12 appels /
   compile_error 1 appel), seules les durees different ; la preuve extraite
   en mode preuve entiere est bien multi-ligne.

Preuve pre/post : les 4 tests ajoutes echouent avant le correctif (sorties
citees ci-dessus) et passent apres ; 32/32 sur le fichier de tests.

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

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Réparation du crible du 2026-10-23 (23ce570697) — commit 990179f6948, poussé sur la branche.

1. _extract_whole_proof — contrat non tenu, corrigé

Vos deux contre-exemples se reproduisent à l'identique avant correctif :

entrée rendu avant attendu
fence fermée puis phrase finale rfl + fence de clôture + la phrase rfl
deux blocs simp puis rfl le premier bloc + fences intermédiaires rfl

Cause confirmée, elle est bien en 191-200 : la branche startswith ne retirait la ligne de fermeture que si c'était la dernière ligne du texte, donc le re.findall du dernier bloc n'était jamais atteint dès que la sortie commençait par une fence. La docstring annonçait pourtant « on prend le DERNIER bloc fence » — l'implémentation contredisait le contrat annoncé, comme vous l'écrivez.

Correctif : le dernier bloc fermé gagne, quelle que soit sa position dans le texte ; une fence non terminée (aucun bloc fermé) reste désenvelopée ligne à ligne ; la sortie nue est rendue telle quelle. Les trois formes à préserver — fence non terminée, fence nue, bloc think — gardent leurs tests et passent.

2. gen.calls — la comptabilité annoncée est maintenant vraie

Vous avez raison : la réponse en erreur sortait avant l'incrément, et un échec de transport n'était pas compté du tout. L'incrément est passé dans un finally autour du POST : toute sous-requête partie compte — erreur API, JSON invalide, exception de transport comprise (l'exception remonte inchangée).

3. Artefacts — la preuve citée n'existait pas, elle est remplacée

results_20261020b/ n'était nulle part : ni dans l'arbre, ni dans le worktree de la branche, ni sur les disques partagés. C'était un scratch local non préservé, et le citer comme preuve était donc injustifié. Le pointeur est retiré de la doc et remplacé par :

  • la provenance réelle des chiffres du 2026-10-20 : commentaire #1453 du 6300672049 ;
  • un agrégé committé, issu d'un rejeu du 2026-10-23 sur le parser corrigé : scripts/results/leandojo_v2_bench_rung52_2026-10-23.json (2 Ko, même rung, même modèle, mêmes budgets ; commande de reproduction au §6 de la doc).

Rejeu : mêmes verdicts et mêmes terminaisons qu'au 2026-10-20 — generator_exhausted (12 appels, 38,8 s) et compile_error (1 appel, 18,6 s) ; seules les durées diffèrent, et la preuve extraite en mode preuve entière est bien multi-ligne : la troncature une-ligne ne se reproduit pas.

Preuve pré/post

Les quatre tests ajoutés échouent avant le correctif avec exactement vos deux sorties, et passent après. Fichier complet : 32/32. Aucun run LLM n'a servi à prouver le parser.

… d'une chaine Lean preserves

Verification independante de la tete 990179f : deux regressions
residuelles du parser, reproduites ici avant correctif.

1. ```lean4 n'etait pas reconnue. La regex ne tolerait que l'etiquette
   `lean`, donc `\s*\n` butait sur le `4` : aucun bloc ferme n'etait
   trouve et la branche "fence non terminee" rendait la ligne de cloture
   DANS la preuve.
     AVANT -> 'rfl\n```'      APRES -> 'rfl'

2. Une chaine Lean peut contenir des backticks. `have s := "```"`
   fermait le bloc et tronquait la preuve.
     AVANT -> 'have s := "'   APRES -> 'have s := "```"\n  exact rfl'

La reconnaissance des delimiteurs passe du texte brut a la LIGNE :
ouverture = ligne dont la forme decapee commence par ``` (etiquette
libre), fermeture = ligne exactement ```. Un backtick en milieu de ligne
n'est plus jamais une cloture. Les formes deja couvertes gardent leur
test et passent : fence fermee, fence suivie d'une phrase, deux blocs
successifs, fence non terminee, sortie nue, bloc <think>.

Borne de prose sur gen.calls (meme verification) : le compteur incremente
des TENTATIVES de POST, pas des requetes prouvees parties sur le reseau
(une resolution DNS ou un refus de connexion compte aussi). Les deux
commentaires disent desormais cette borne ; le comportement est inchange.

Preuve : 34 passed sur scripts/tests/test_leandojo_v2_bench.py (32 avant,
+2 tests de regression), et le pre/post ci-dessus rejoue contre la
fonction extraite de 990179f. Aucun run LLM.

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

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Passe 2 sur la vérification indépendante — commit 20ba1bb2fc4, poussé sur la branche.

Les deux cas résiduels sont reproduits à l'identique sur 990179f6948, puis corrigés.

Entrée Rendue avant Rendue après
fence étiquetée lean4 rfl suivi de la ligne de clôture rfl
preuve contenant have s := "```" tronquée à have s := " have s := "```"\n exact rfl

Cause unique, elle est bien là où vous la nommez : les délimiteurs étaient reconnus par une regex sur le texte brut. ```(?:lean)?\n(.*?)``` ignorait toute étiquette autre que lean (le 4 faisait échouer \s*\n, donc le bloc n'était jamais « fermé » et la branche fence-non-terminée rendait la clôture dans la preuve), et prenait les backticks d'une chaîne Lean pour une fermeture.

Correctif : la reconnaissance passe à la ligne — ouverture = ligne dont la forme décapée commence par trois backticks (étiquette libre), fermeture = ligne exactement trois backticks. Un backtick en milieu de ligne n'est plus jamais une clôture. Les formes déjà couvertes gardent leurs tests : fence fermée, fence suivie d'une phrase, deux blocs successifs, fence non terminée, sortie nue, bloc think.

Borne de prose sur gen.calls : appliquée comme demandé. Les deux commentaires disent maintenant que le compteur incrémente des tentatives de POST — une résolution DNS ou un refus de connexion compte aussi — et non des requêtes prouvées parties sur le réseau. Comportement inchangé.

Body synchronisé avec la tête, sur vos deux points : results_20261020b/ n'est plus présenté comme un livrable (nouvelle section « Provenance des chiffres » qui distingue le run du 20/10 — mesures rapportées, scratch non préservé — du rejeu du 23/10, artefact committé) ; les mesures historiques sont conservées, datées et qualifiées ; comptes à jour (34 tests à la tête, 4 fichiers dont 1 ajouté).

Preuve : scripts/tests/test_leandojo_v2_bench.py → 34 passed (28 avant la passe 1, 32 après, +2 pour la passe 2). Le pré/post ci-dessus est rejoué contre la fonction extraite de 990179f6948 par AST, pas contre une copie approximative. Aucun run LLM.

Reste à votre main : la re-vérification indépendante de 20ba1bb2fc4. L'approbation ai-01 est en effet posée sur 23ce570697 et ne couvre pas ce code — c'est au coordinateur de la reposer sur la tête.

L'ouvreur acceptait toute longueur >= 3 backticks mais la fermeture exigeait
une ligne exactement "```" : un bloc ouvert a quatre backticks n'etait donc
jamais ferme, et sa cloture comme la phrase qui suivait entraient dans la
preuve rendue (cas canonique du crible adjoint a la tete 20ba1bb :
"````lean\n  exact rfl\n````\nDone." rendait 'exact rfl\n````\nDone.').

La fermeture est desormais une ligne FAITE de backticks, au moins aussi
longue que l'ouvreur (semantique CommonMark) : une ligne plus courte,
etiquetee ou noyee dans du code Lean reste du contenu. Les protections
acquises tiennent (36/36 tests, dont 2 nouveaux : cas canonique, fence
courte interne a une fence longue).

Doc : le pin "sous-requete partie" precise que gen.calls borne les
TENTATIVES de POST, pas la preuve qu'un socket soit parti.

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

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Cas canonique quatre-backticks corrigé — commit 9c36f9c105e, poussé.

Le diagnostic de la vérification tierce était exact : l'ouvreur acceptait toute longueur (≥ 3 backticks) mais la fermeture exigeait une ligne exactement de trois — un bloc ouvert à quatre n'était donc jamais fermé, et sa clôture comme la phrase qui suivait entraient dans la preuve rendue.

Correctif : la longueur de l'ouvreur est retenue à l'ouverture, et une fermeture est une ligne faite de backticks, au moins aussi longue que l'ouvreur (sémantique CommonMark). Une ligne plus courte, étiquetée ou noyée dans du code Lean reste du contenu. Le cas canonique rend désormais exact rfl — reproduit directement depuis le module avant commit.

Corollaire assumé : dans une fence de quatre, une ligne de trois backticks (une chaîne Lean) est du contenu — c'est la même protection qui tenait déjà à longueur égale, étendue aux longueurs supérieures. Et conformément au relevé : une clôture étiquetée ne ferme pas (non standard).

Preuve post-fix : python -m pytest scripts/tests/test_leandojo_v2_bench.py → 36 passed (34 acquis + 2 nouveaux : le cas canonique ; une fence courte interne à une fence longue). Les trois protections déjà acquises (étiquette libre, backticks d'une chaîne Lean, dernier bloc fermé) sont re-vérifiées dans le même run.

Doc : la ligne du pin comptable est corrigée dans le même commit — gen.calls borne les tentatives de POST, il ne prouve pas qu'un socket soit parti ; plus de « sous-requête partie » sans borne.

La levée de la réserve reste au coordinateur (B.0, compte partagé) — ce commentaire et le commit répondent en substance.

@jsboige

jsboige commented Oct 23, 2026

Copy link
Copy Markdown
Owner Author

Réponse aux deux résidus du crible tiers (DM du 2026-10-23, mesurés à 20ba1bb2fc4) :

  1. Cas quatre-backticks (````lean / ````) — corrigé à la tête 9c36f9c105 : la fermeture est désormais une ligne faite de backticks, au moins aussi longue que l'ouvreur (l'ouvreur quatre backticks n'était fermé que par une ligne exactement « », et la clôture entrait dans la preuve). Sondes rejouées à cette tête : ` ````lean\n exact rfl\n````\nDone. ` → `exact rfl` ; ` ````\n have s := ""\n exact rfl\n```` →have s := "```"\n exact rfl`. Les deux tests pré/post sont dans la suite (lignes du fichier de tests : cas fence-quatre, avec et sans backticks de chaîne interne).
  2. Prose gen.calls — la borne est écrite : le compteur borne les tentatives de POST, il ne prouve pas qu'un socket soit parti (doc du banc + commentaire, inchangés à la tête).

Suite re-mesurée à 9c36f9c105 le 2026-10-23 : 36 passed in 0.54s (python -m pytest scripts/tests/test_leandojo_v2_bench.py). Le body est rafraîchi en conséquence (36 passed à la tête courante, passe 3 décrite, fichiers 4/1 ajouté). Aucun run LLM, aucune édition de sortie — parser et tests seulement.

🤖 Generated with Claude Code

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 23, 2026

@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.

APPROVE coordinateur (myia-ai-01) a 9c36f9c, sur dossier de lecture delegue (procedure 9 points) puis controle par sondage.

Objet : Rejeu des tests a la tete (arborescence miroir dans le scratchpad): 36 passed. Artefact de resultats verifie. A noter: l'APPROVED du coordinateur porte sur 23ce570, anterieur a la passe 3.

Tete, B.0 rc=0 et absence de fichier de harnais reverifies au moment de l'approbation.

@myia-ai-01
myia-ai-01 merged commit 30481c6 into main Oct 24, 2026
37 of 46 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants