Skip to content

check_unaddressed_nits : une réserve MARQUÉE dans un corps qui ouvre sur une levée devient invisible (résidu assumé de #16719) #16731

Description

@jsboige

Le trou assumé par #16719

#16719 fait rendre None à classify() quand un corps ouvre sur une annonce de levée (## Levée de la réserve X), quel que soit l'auteur. C'est le bon geste : il met fin au régime absorbant où le commentaire qui débloquait une PR créait un nit de plus à son propre nom (défaut fondateur #16381).

Son body nomme honnêtement le résidu, et c'est celui-ci :

le commentaire mixte qui lève X et soulève Y en corps — Y sort du recensement

Ce qui est déjà couvert, et ce qui ne l'est pas

_opens_on_lift est placé après _block_emitted (fail-closed). Donc :

Cas Couvert ?
Corps ouvre sur une levée, puis émet une injonction de blocage coordinateur OUI — _block_emitted gagne, rend BLOCK
Corps ouvre sur une levée, puis pose une réserve portant un glyphe de sévérité (🔴, 🟡) ou un préfixe de verdict ([Hermes] COMMENT_WITH_CONCERNS, CHANGES_REQUESTED) NON — _opens_on_lift rend None avant que les marqueurs ne soient consultés

Le second cas est précisément le contrat d'émission posé par pr-review-discipline.md §Émission : « un point qui tient le merge porte un marqueur reconnu ». Un reviewer qui respecte ce contrat à l'intérieur d'un commentaire qui commence par lever autre chose voit sa réserve marquée devenir invisible à l'organe.

C'est un trou étroit — il faut lever et bloquer dans le même commentaire — mais il est exactement à l'intersection de deux règles qui se veulent toutes deux fail-closed.

Piste (à mesurer, pas à poser d'emblée)

Faire précéder _opens_on_lift d'un test « le corps porte-t-il un CONCERN_MARKERS après la ligne d'ouverture ? ». Si oui, ne pas exempter. À valider sur le même corpus que #16719 (25 PRs mergées, avant/après) : le risque est de ré-ouvrir le régime absorbant si le test sur-accuse — la mesure #14682 a montré qu'élargir le filet à la prose sur-accuse d'un facteur 5.

Critère de fermeture

Un cas réel est produit (corps ouvrant sur une levée et portant un marqueur de réserve plus bas) et l'organe le classe correctement, ou le corpus montre que le cas n'existe pas en pratique et l'issue se ferme sur ce constat mesuré.

Ouverte avant le merge de #16719, pour que le report soit tracé et non pas déclaré après coup.

See #16700 · See #16381 · See #14682.

Activity

  1. jsboige commented on Sep 18, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] #16731 — lane myia-po-2023:CoursIA — 2026-09-18T23:50Z — paths: scripts/check_unaddressed_nits.py, scripts/tests/test_check_unaddressed_nits.py

    Fil nits de la lane (#16688→#16725→#16719, contexte chargé). Plan conforme au critère de fermeture de l'issue : (1) mesure d'abord — scan du corpus (PRs mergées récentes, les 25 de #16719 + marge) pour le cas réel « corps ouvre sur une levée ET porte un marqueur de réserve (🔴/🟡/verdict prefix) plus bas » ; (2) si cas réel → garde « CONCERN_MARKERS après la ligne d'ouverture » AVANT _opens_on_lift (fail-closed préservé : _block_emitted reste premier) + tests scindés selon la discipline du résidu assumé + scan différentiel des flips (discipline #16688) ; (3) si le corpus montre l'inexistence → issue fermée sur le constat mesuré.

    Risque surveillé (le signale l'issue elle-même) : ré-ouvrir le régime absorbant — la garde ne s'élargit qu'aux marqueurs RECONNUS après l'ouverture, jamais à la prose (#14682).

  2. jsboige commented on Sep 18, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] Constat mesuré — le cas n'existe pas en pratique, fermeture sur la branche 2 du critère.

    Méthodologie

    Scan exhaustif (comments + reviews) des 200 dernières PRs mergées via l'organe lui-même (_OPENING_LIFT_RE + classify + surfaces _strip_mentioned_verdicts(_strip_quoted(...))) — 4× la fenêtre de référence de #16719 (25 PRs). Question : existe-t-il un corps qui ouvre sur une levée ET pose une réserve marquée plus bas (nouvelle émission, pas citation) ?

    Résultat : 3 corps ouvrant sur levée, 0 instance du trou

    Les 200 PRs ne contiennent que 3 corps correspondant au pattern d'ouverture — tous sur la PR fondatrice #16381 :

    Corps Auteur classify actuel Marker sous l'ouverture ? Nature du marker
    c.5731605849 myia-ai-01 None aucun — (levée sèche)
    c.5730922323 jsboige None 🔴 citation : « ### 🔴 Le concern bloquant est traité » — narratif de la réserve levée
    r.5249378034 myia-ai-01 None 🔴 ×4 citations : heading « Levée de la réserve 🔴 NanoClaw », lignes de tableau étiquetées 🔴 (comparaison ancien/nouveau), « Le 🔴 portait sur… » — tout nomme la sévérité de la réserve QU'ON LÈVE

    Les deux marqueurs portés sous l'ouverture sont donc des narratifs de levée citant la sévérité de la réserve levée — exactement la classe que #16719 a choisi d'absorber, et exactement ce que la piste de garde de l'issue aurait sur-accusé (piège #14682 : mesuré 5× de sur-accusation quand le filet s'élargit à la prose citée).

    Pourquoi aucune garde n'est posée

    1. Aucune instance réelle du trou (levée en ouverture + NOUVELLE réserve marquée en corps) dans 200 PRs mergées. Le pattern lui-même est né aujourd'hui (3 corps, même PR, même geste de levée).
    2. La garde naïve « marker vivant après l'ouverture → ne pas exempter » ré-ouvre le régime absorbant sur les 2 seuls corpus-connus : elle ré-absorbe le cas fondateur B.0 : une levee ecrite sous l'identite jsboige devient elle-meme un nit non levable (distinct de #16688) #16700 que fix(nits,#16700): opening-lift comment is not a nit emission #16719 vient de corriger.
    3. Une garde qui distinguerait citation-vs-émission au cas par cas (tableaux, headings hérités, « Le 🔴 portait sur ») devrait apprendre les formes de citation une à une — whack-a-mole mesuré comme perdant par check_unaddressed_nits: une reserve bloquante en prose libre, sans marqueur d'emission, rend rc=0 (#14658) #14682.

    Si le cas apparaît un jour

    Le signal à surveiller : un reviewer qui ouvre sur « Levée de X » et pose plus bas une réserve avec glyphe fraîche SANS citation du style « la réserve 🔴 levée ». Alors la piste de l'issue redevient pertinente — à mesurer sur corpus avant pose (même discipline).

    Fermeture sur le critère branch-2 de l'issue : « le corpus montre que le cas n'existe pas en pratique ».

    — lane myia-po-2023:CoursIA 2026-09-19T00:1xZ

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