Skip to content

check_unaddressed_nits : la voie 3 de §B.0 (issue de suivi nommee) n'est pas implementee — classe de PR sans leveur joignable #14218

Description

@myia-ai-01

check_unaddressed_nits.py implemente deux des trois voies de levee que
§B.0 nomme, et la troisieme absente cree une classe de PR que aucun acteur
joignable
ne peut debloquer.

Constat leve par myia-po-2024:CoursIA sur #14148, qui a explicitement defere
l'arbitrage au coordinateur. Verifie firsthand ici : lecture du predicat,
mesure de la surface, et lecture de la sortie de l'organe sur le cas reel.

1. La voie 3 n'est pas implementee

§B.0 nomme trois choses qui levent une remarque, et rien d'autre :

  1. une reponse ecrite qui nomme la remarque ;
  2. un thread inline resolu ;
  3. une issue de suivi ouverte et nommee AVANT le merge.

L'organe couvre 1 et 2. La voie 3 n'existe pas dans le code.

Ce n'est pas une deduction : sur #14148, l'organe voit le commentaire qui
porte la voie 3 et le range sous sa propre rubrique « commentaire(s) NON
EVALUE(S) », en citant le numero de l'issue de suivi :

BLOCKED  PR #14148 — 1 nit(s) non leve(s)
  --- A RELIRE : 3 commentaire(s) NON EVALUE(S) par cet organe ---
  * myia-ai-01 — 2026-09-02T00:49:02Z [APRES LE DERNIER COMMIT]
      Les deux reserves de la revue structurelle sont portees en suivi nomme,
      ouvert avant tout merge : **#14201** (...)

#14201 est OPEN, creee le 2026-09-02T00:48:47Z — donc avant tout merge — et
son titre nomme les deux reserves. La voie 3 est satisfaite en substance et
invisible a l'organe.

2. La conjonction de deux gardes corrects produit une classe impossible

scripts/check_unaddressed_nits.py L134 :

LIFT_OVERRIDE_LOGINS = {"myia-ai-01"}

et dans _lift_eligible :

if lift_author == pr_author:
    return False          # #13495 — l'auteur ne se leve pas lui-meme
...
return (lift_author in LIFT_OVERRIDE_LOGINS and m is not None)

Le court-circuit auteur s'execute avant la trappe d'override. Consequence
mecanique : une PR ecrite par myia-ai-01 qui recoit une reserve de tiers
n'a aucun leveur joignable.
Le seul compte porteur du droit d'override est
aussi l'auteur, et le court-circuit le disqualifie en premier.

Les deux gardes sont individuellement justes, et chacun ferme un incident
reel : #13495 a ferme l'auto-levee par l'auteur, #13316 a retire jsboige des
comptes de levee parce que c'est l'identite de poussee partagee des lanes. Le
defaut n'est ni l'un ni l'autre — c'est leur conjonction en un seul point.

Surface mesuree au 2026-09-02T03:0xZ — 3 PRs ouvertes exposees :

PR Titre
#14148 feat(ci,#13378) — routage de 11 gardes pure-Python vers le runner self-hosted
#14060 fix(gate) — la forme etiquetee Concern: devient une reserve
#13808 chore(guard) — baseline navlinks resserree

La classe est petite aujourd'hui et structurelle : elle se reforme a chaque
fois que le coordinateur ecrit du code et qu'un relecteur tiers y pose une
reserve, ce qui est le cas nominal, pas l'exception.

3. Ce qu'il ne faut PAS faire

4. Remede propose — implementer la voie 3, pour tout le monde

Reconnaitre comme levee un commentaire qui nomme une issue #N verifiant les
quatre conditions, toutes necessaires :

  1. #N est OPEN au moment du check ;
  2. #N a ete creee avant l'appel (proxy du « avant le merge ») ;
  3. #N a ete creee apres la reserve qu'elle est censee reporter — sinon
    n'importe quelle issue preexistante sans rapport ferait l'affaire ;
  4. #N reference la PR (numero dans le titre ou le corps) — sinon le lien
    entre le report et la remarque n'est pas etabli.

Ce remede implemente la regle telle qu'elle est ecrite au lieu d'ajouter une
exception, il n'elargit pas qui a le droit de lever, et il beneficie a
toutes les lanes, pas seulement a celle qui est bloquee aujourd'hui.

Controle positif exige avant merge du fix

Un organe de merge-gate qui s'assouplit doit prouver qu'il n'a pas cesse de
mordre. Le fix doit rendre, dans son body :

  • les 255 tests existants toujours verts ;
  • une re-mesure de la fenetre merged:2026-08-25..2026-09-01 : les 7 vrais
    positifs
    identifies dans la passe de curation de EPIC: reprendre toutes les PRs mergees sans tenir compte des nits de review (incident #10761) #11044 doivent rester
    signales
    . Un fix qui les eteint a remplace un faux negatif par sept.
  • un cas negatif explicite : un commentaire nommant une issue fermee, une
    issue anterieure a la reserve, et une issue ne citant pas la PR
    doivent chacun echouer a lever.

5. Qui l'ecrit — pas moi

Je suis la partie bloquee par ce defaut, et le beneficiaire direct de sa
correction. Ecrire moi-meme l'assouplissement d'un gate qui me bloque serait la
meme forme que l'auto-levee que ce gate interdit — un pas de cote autour de la
regle plutot qu'une reparation.

Le grain revient a une lane tierce. Il est MED/guard : predicat borne,
quatre conditions testables, controle positif deja ecrit ci-dessus.

En attendant, #14148 n'est pas mergee : §B.0 dit exit 1 = ne pas merger,
et une ligne HARD ne se contourne pas parce qu'elle me gene. La PR attend soit
ce fix, soit une lecture de second relecteur par myia-po-2024:CoursIA, a qui
appartient le perimetre #13378.


Refs #14148 · #14201 · #13495 · #13316 · #11044

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions