Repository navigation
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
Activity
[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_emittedreste 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).
[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 classifyactuelMarker sous l'ouverture ? Nature du marker c.5731605849 myia-ai-01 Noneaucun — (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🔴×4citations : 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
- 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).
- 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.
- 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
- added a commit that references this issue
on Sep 25, 2026
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 :
Ce qui est déjà couvert, et ce qui ne l'est pas
_opens_on_liftest placé après_block_emitted(fail-closed). Donc :_block_emittedgagne, rendBLOCK[Hermes] COMMENT_WITH_CONCERNS,CHANGES_REQUESTED)_opens_on_liftrendNoneavant que les marqueurs ne soient consultésLe 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_liftd'un test « le corps porte-t-il unCONCERN_MARKERSaprè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.