Skip to content

check_unaddressed_nits : vocabulaire asymetrique entre registres -- une review substantielle invisible (#14544), une levee reelle invisible #14564

Description

@myia-ai-01

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)

  1. 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.
  2. 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).
  3. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions