Skip to content

check_unaddressed_nits.py : deux faux positifs mesures — un SHA cite pour DATER une reserve est lu comme une preuve rembobinee #16764

Description

@jsboige

scripts/check_unaddressed_nits.py est l'organe qui tient le merge gate B.0. Deux classes de
faux positifs ont ete mesurees sur moi-meme pendant la passe de decongestion du 18/09 : dans
les deux cas l'organe a bloque une levee valide, et dans les deux cas j'ai du reecrire la
levee pour lui plaire plutot que pour etre lue par un humain.

C'est le defaut qui compte : un gate qui force a deformer la prose pour passer entraine a ecrire
pour l'organe
, et c'est exactement la complaisance que B.0 existe pour empecher.

Classe 1 — un SHA cite pour DATER une reserve est lu comme un SHA cite en PREUVE

Instance : PR #16657. J'ai poste une levee de la forme « la reserve posee sur c3095774 est
adressee par [...] ». L'organe a rendu rc=1 avec :

cite c309577, absent des commits de la PR [...] l'arbre DIFFERE de la tete : vraie reserve a reposer

Il a raison sur le fait — ce SHA n'est plus dans les commits de la PR. Il a tort sur le sens : je
ne citais pas cet arbre comme preuve que la reserve est traitee, je le citais pour identifier
laquelle
des reserves je levais. Une levee qui nomme la reserve qu'elle leve est precisement ce
que B.0 demande (« une phrase qui nomme la remarque »).

L'organe ne distingue pas les deux usages d'un SHA dans une levee :

Usage Ce que ca vaut Verdict actuel
« la reserve posee sur <sha> est adressee par <sha2> » — datation legitime, et recommande par B.0 rejete
« traite en <sha> » ou <sha> est perime rembobinage, a rejeter rejete (correct)

J'ai du reposter sans aucun SHA pour obtenir rc=0. La levee finale est donc moins precise
que celle qui a ete refusee.

Piste : distinguer la position syntaxique du SHA. Un SHA gouverne par « la reserve sur /
de / posee sur » date ; un SHA gouverne par « traite en / adresse en / corrige
par » prouve. Seul le second doit devoir appartenir aux commits de la PR. A defaut : ne
rejeter que si aucun SHA de la phrase n'appartient a la PR.

Classe 2 — la levee par siege qualifiant n'est pas reconnue

Instance : PR #16608, contrat #15511. La levee etait valide au titre du siege qualifiant et
l'organe ne l'a pas vue. A instruire avec le contrat #15511 sous les yeux — je n'ai pas
re-mesure cette classe aussi finement que la premiere, et je le dis plutot que de la presenter
au meme niveau de preuve.

Ce qui n'est PAS demande

Ne pas elargir les marqueurs a la prose libre. La mesure #14682 est deja inscrite dans
pr-review-discipline.md : elargir le filet sur-accuse
d'un facteur 5. Le contrat est cote emission. Les deux classes ci-dessus sont des faux
positifs de blocage, pas des faux negatifs de detection — les traiter ne touche pas
CONCERN_MARKERS.

Critere de sortie

Un test par classe, avec le corps de commentaire reel des instances citees en fixture :

Sans le troisieme, ne livrer que les deux premiers et le dire.

Garde

L'organe se lit depuis main, jamais depuis l'arbre de travail — mesure du 18/09 : ma branche
en portait une version a 437 lignes d'ecart, et 2 verdicts sur 8 s'inversaient. Toute mesure
posee dans cette issue declare son git rev-parse origin/main.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

Activity

  1. jsboige commented on Sep 18, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] #16764 — lane myia-po-2023:CoursIA — 2026-09-19T00:35Z — paths: scripts/check_unaddressed_nits.py, scripts/tests/test_check_unaddressed_nits.py

    Fil nits de la lane (contexte complet : #16688→#16725→#16731). Plan conforme au critère de sortie : (1) fixtures = corps RÉELS des commentaires #16657 (version refusée avec c3095774 + version repostée) récupérés via API ; (2) classe 1 : distinction position syntaxique — SHA gouverné par « réserve sur/de/posée sur » = datation (exempt d'appartenance PR), SHA gouverné par « traité en/adressé en/corrigé par » = preuve (appartenance exigée) ; (3) classe 2 (#16608/#15511) instruite après lecture du contrat — si non maîtrisable proprement, livraison classes 1 seule + constat explicite (échappatoire autorisée par l'issue) ; (4) scan différentiel flips sur corpus récent (discipline #16688, 2 surfaces comments+reviews, contrôle positif sur l'instance #16657) ; (5) tests réels + moitiés pour résidu assumé.

    Garde respectée : toute mesure déclarera git rev-parse origin/main — l'organe se lit depuis main.

    Pas d'élargissement des marqueurs à la prose (#14682) : contrat côté émission intact.

  2. jsboige commented on Sep 18, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] #16764 — lane myia-po-2023:CoursIA — 2026-09-19T01:5xZ — PR #16768

    Les DEUX classes livrees (critere de sortie integral), fixtures = corps reels des fondateurs :

    Classe 1 — distinction position syntaxique du SHA : gouverneurs de DATATION bornes (apposition head, posee/emise sur, mot de reserve + sur/dans/de) avec anti-collision verbe d'adresse. Levee originale #16657 (r.5252462567, avec c309577) -> rc=0 ; « traitee en sha-perime » -> rc=1 inchange.

    Classe 2 — siege qualifiant (contrat #15511 lu en entier avant implementation) : conjunction bornee a trois cotes (NIT declare le relais + LEVEE revendique le siege en tete de ligne + auteur = LIFT_OVERRIDE_LOGINS). Cas #16608 : nit Hermes leve, gate live differentiel 3 nits (main) -> 2 nits (fix).

    Constat honnete sur le critere « #16608 -> rc=0 » : les 2 nits restants sont des commentaires [ADJOINT PREFLIGHT] / [AMENDMENT] postes 21:27/21:32Z par une AUTRE lane (concurrents, posterieurs a l'issue, blocs mal delimites non strippe). Identiques sous main et sous fix — le differentiel le prouve. Le fil a bouge sous nos pieds ; signale dans le body PR, hors scope de cette issue.

    Preuves : 7 tests reels nouveaux, suite organe 461/461, consommateurs 671 pass. Scan differentiel flips 150 PRs mergees x 2 surfaces : 1 flip = le fondateur #16657. Sweep siege-qualifiant 100 PRs ouvertes x 2 surfaces : 10 occurrences classees, seul #16608 bouge. CONCERN_MARKERS intact (#14682). Toutes mesures declarees sur origin/main 7885a69.

  3. added a commit that references this issue on Sep 21, 2026
  4. added a commit that references this issue on Sep 22, 2026
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