Constat
Le merge-gate B.0 (scripts/check_unaddressed_nits.py) decide « reserve vivante » / « levee » par appariement de vocabulaire. Ce vocabulaire est asymetrique entre registres, et l'asymetrie produit des defauts dans les deux sens. Mesure firsthand du 2026-09-04 :
=== registre CONCERN ===
'3 concerns' -> False <-- anglais minuscule : NON couvert
'some concerns remain' -> False
'my concerns' -> False
'Concerns' -> False <-- capitalisation simple : NON couverte
'CONCERNS' -> True <-- token de verdict formel
'avant merge' -> True <-- francais minuscule : couvert
'a nuancer' -> True
'il va falloir' -> True
=== registre LIFT ===
'levee' -> True
'est adresse' -> True
'Levee de' -> True
'RAS sur le fond' -> False <-- levee reelle : NON couverte
'RAS' -> False
'traite' / "c'est traite" -> False <-- famille `traiter` : NON couverte
'rien a traiter' -> False
CONCERN_MARKERS melange des tokens de verdict majuscules (COMMENT_WITH_CONCERNS, CHANGES_REQUESTED, CONCERNS) et des tournures francaises minuscules (avant merge, a nuancer, il va falloir, a changer). L'appariement est sensible a la casse. Il n'existe aucune contrepartie anglaise minuscule, alors que la contrepartie francaise a ete ajoutee au fil des incidents (#11201 pour a changer, #11044 pour before merge).
Les deux defauts, opposes
(1) Faux negatif — une review substantielle est invisible et la PR merge.
Incident fondateur : PR #14544 (DEEP/research-code, lane myia-po-2024:CoursIA-2). La review Hermes du 2026-09-04T00:28:32Z porte trois concerns numerotes, dont un defaut de reproductibilite redige a l'imperatif (« l'artefact doit etre regenere »), sur une PR qui clame un resultat positif. Elle ecrit **3 concerns (non bloquants, revue de recherche) :** et, contrainte en tokens, omet le prefixe de verdict formel.
has_live_marker(<corps de la review>, CONCERN_MARKERS) = False
python scripts/check_unaddressed_nits.py 14544 -> rc=0 « aucun nit non leve »
L'organe ne voit aucune reserve. Le gate est vert. La substance a ete rattrapee a la main (§B.0 : « la substance se lit a la main ») — mais c'est precisement ce que l'organe existe pour ne pas laisser dependre de la vigilance.
Verification independante du fond de la reserve #2 : l'artefact committe porte seeds = [0,1,7,42,99], le code seeds = [0,1,2,7,13,42,51,73,88,99][:n_seeds]. [0,1,7,42,99] n'est prefixe de la liste du code pour aucun n_seeds. Le code committe ne regenere l'artefact sous aucun argument.
(2) Faux positif — une levee reelle est invisible et la PR reste bloquee.
Une levee tierce redigee « RAS sur le fond », « c'est traite », « rien a traiter » n'eteint rien. La lane ne peut pas debloquer sa PR en ecrivant clairement : elle doit deviner le vocabulaire de l'organe. C'est le symetrique exact du (1), et il coute des cycles de lane sur des PRs deja correctes.
Defaut adjacent — comment only lu comme un verdict
_NON_BLOCKING_PHRASES contient comment only / comment-only. Or Hermes ecrit (contrainte token : COMMENT only) pour dire « je suis limite a l'etat COMMENT » — une contrainte de protocole, pas un jugement de gravite. L'organe la lit comme une declaration substantielle de non-blocage.
Mesure sur les PRs ouvertes (tri par age croissant, 2026-09-04) : 6 reviews portent un CONCERN vivant ET sont exemptees ; 2 le sont uniquement par comment only — #14458 et #14495. Sur celles-la, retirer la phrase suffirait a changer le verdict.
Pistes (non tranchees)
- Fermer l'asymetrie de registre : ajouter la famille anglaise minuscule cote CONCERN (
concerns, concern:, remaining concerns) et la famille traiter/RAS cote LIFT. Attention : concerns minuscule est frequent en prose neutre — a valider par controle positif ET negatif sur un corpus de reviews mergees, sinon on echange un faux negatif contre une avalanche de faux positifs.
- Distinguer contrainte de protocole et verdict : sortir
comment only de _NON_BLOCKING_PHRASES, ou ne l'honorer que s'il est seul (sans concern numerote dans le meme corps).
- Exiger le prefixe de verdict cote emetteur : si une review Hermes sans token de verdict formel est structurellement invisible, le remede est peut-etre en amont — un gate qui refuse une review Hermes sans prefixe, plutot qu'un vocabulaire toujours plus large en aval.
La piste 3 merite d'etre pesee avant la 1 : elargir le vocabulaire est la reponse reflexe, et c'est celle qui a produit l'empilement actuel (a changer, before merge, glyphes, _CONCERN_LABEL...). Chaque elargissement rend l'organe plus difficile a raisonner et deplace le faux positif ailleurs.
Acceptance
Refs : #14544 (fondateur), #11201 et #11044 (memes ajouts de vocabulaire), CLAUDE.md §B.0.
Constat
Le merge-gate B.0 (
scripts/check_unaddressed_nits.py) decide « reserve vivante » / « levee » par appariement de vocabulaire. Ce vocabulaire est asymetrique entre registres, et l'asymetrie produit des defauts dans les deux sens. Mesure firsthand du 2026-09-04 :CONCERN_MARKERSmelange des tokens de verdict majuscules (COMMENT_WITH_CONCERNS,CHANGES_REQUESTED,CONCERNS) et des tournures francaises minuscules (avant merge,a nuancer,il va falloir,a changer). L'appariement est sensible a la casse. Il n'existe aucune contrepartie anglaise minuscule, alors que la contrepartie francaise a ete ajoutee au fil des incidents (#11201 poura changer, #11044 pourbefore merge).Les deux defauts, opposes
(1) Faux negatif — une review substantielle est invisible et la PR merge.
Incident fondateur : PR #14544 (
DEEP/research-code, lanemyia-po-2024:CoursIA-2). La review Hermes du 2026-09-04T00:28:32Z porte trois concerns numerotes, dont un defaut de reproductibilite redige a l'imperatif (« l'artefact doit etre regenere »), sur une PR qui clame un resultat positif. Elle ecrit**3 concerns (non bloquants, revue de recherche) :**et, contrainte en tokens, omet le prefixe de verdict formel.L'organe ne voit aucune reserve. Le gate est vert. La substance a ete rattrapee a la main (§B.0 : « la substance se lit a la main ») — mais c'est precisement ce que l'organe existe pour ne pas laisser dependre de la vigilance.
Verification independante du fond de la reserve #2 : l'artefact committe porte
seeds = [0,1,7,42,99], le codeseeds = [0,1,2,7,13,42,51,73,88,99][:n_seeds].[0,1,7,42,99]n'est prefixe de la liste du code pour aucunn_seeds. Le code committe ne regenere l'artefact sous aucun argument.(2) Faux positif — une levee reelle est invisible et la PR reste bloquee.
Une levee tierce redigee « RAS sur le fond », « c'est traite », « rien a traiter » n'eteint rien. La lane ne peut pas debloquer sa PR en ecrivant clairement : elle doit deviner le vocabulaire de l'organe. C'est le symetrique exact du (1), et il coute des cycles de lane sur des PRs deja correctes.
Defaut adjacent —
comment onlylu comme un verdict_NON_BLOCKING_PHRASEScontientcomment only/comment-only. Or Hermes ecrit(contrainte token : COMMENT only)pour dire « je suis limite a l'etat COMMENT » — une contrainte de protocole, pas un jugement de gravite. L'organe la lit comme une declaration substantielle de non-blocage.Mesure sur les PRs ouvertes (tri par age croissant, 2026-09-04) : 6 reviews portent un CONCERN vivant ET sont exemptees ; 2 le sont uniquement par
comment only— #14458 et #14495. Sur celles-la, retirer la phrase suffirait a changer le verdict.Pistes (non tranchees)
concerns,concern:,remaining concerns) et la familletraiter/RAScote LIFT. Attention :concernsminuscule est frequent en prose neutre — a valider par controle positif ET negatif sur un corpus de reviews mergees, sinon on echange un faux negatif contre une avalanche de faux positifs.comment onlyde_NON_BLOCKING_PHRASES, ou ne l'honorer que s'il est seul (sans concern numerote dans le meme corps).La piste 3 merite d'etre pesee avant la 1 : elargir le vocabulaire est la reponse reflexe, et c'est celle qui a produit l'empilement actuel (
a changer,before merge, glyphes,_CONCERN_LABEL...). Chaque elargissement rend l'organe plus difficile a raisonner et deplace le faux positif ailleurs.Acceptance
has_live_marker = Trueapres correctif.False(mesurer le taux de FP introduit, l'ecrire).comment onlyseul est tranche et ecrit.Refs : #14544 (fondateur), #11201 et #11044 (memes ajouts de vocabulaire), CLAUDE.md §B.0.