You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
check_unaddressed_nits : une levee tierce qui NOMME sa cible est comptee comme une nouvelle reserve #16799
check_unaddressed_nits.py classe une levée tierce comme une nouvelle réserve, parce qu'elle cite le marqueur de la réserve qu'elle lève.
B.0 exige qu'une levée nomme la remarque qu'elle traite (« une réponse écrite sur la PR qui nomme la remarque »). Une levée tierce commence donc naturellement par identifier sa cible : « clusterManager-Myia a posé VERDICT: CONCERNS le 2026-09-18T16:17:57Z … ». Le marqueur CONCERNS y est cité, pas émis — mais has_live_marker le compte vivant, et la levée devient un nit de plus.
Les deux règles se contredisent donc mécaniquement : B.0 demande de nommer, l'organe lit le fait de nommer comme une émission. Plus la levée est rigoureuse (auteur, heure, verdict exact), plus elle est sûre de se faire compter comme une réserve.
Instance mesurée, vivante
PR #16710, review myia-ai-01 du 2026-09-19 (state: COMMENTED), dont le corps est une levée tierce de la CONCERNS NanoClaw — réserve vérifiée éteinte firsthand (0 occurrence de modèle obsolète sur les 11 fichiers au head ed3e019621).
$ python scripts/check_unaddressed_nits.py 16710
BLOCKED PR #16710 — 5 nit(s) non leve(s) :
...
[BOT-CONCERN] clusterManager-Myia via review:COMMENTED (+9.8h avant merge)
[BOT-CONCERN] myia-ai-01 via review:COMMENTED (+0.0h avant merge) <-- LA LEVEE
Le compte passe de 4 à 5 nits du fait de la levée. Conséquence pratique : la réserve est éteinte, et l'organe reste rouge — à charge du lecteur suivant de comprendre que le 5e nit est la levée du 4e.
Pourquoi ce n'est pas « il suffit de ne pas citer le marqueur »
Parce que la consigne inverse est déjà écrite et qu'elle est la bonne : une levée qui ne nomme pas sa cible n'est pas vérifiable, et B.0 la rejetterait. On ne peut pas demander aux levées d'être identifiables et de ne pas prononcer ce qu'elles identifient.
C'est aussi la famille de faux positif que has_live_marker existe déjà pour traiter — son docstring nomme la négation, la narration pré-fix et le modal hypothétique. L'attribution d'une réserve qu'on lève est le quatrième membre de cette famille, et il manque.
Le précédent de conception est dans le fichier lui-même
Deux mécanismes y répondent déjà, chacun à sa manière :
Ancrage en tête pour [HOLD …] — HOLD_TAGGED_HEAD matche la paire de crochets en tête de corps, et le commentaire l'explicite : « poser se distingue de nommer par la paire de crochets », la levée réelle citant le label sans crochets ne matche pas. Exactement la distinction requise ici.
CITERS + fenêtre de 30 caractères — couvre la négation (no, pas de, sans, aucun), la narration (previous, stale), le modal (would, could), le compte (0, zero). Aucune entrée ne couvre l'attribution : « a posé », « posée par », « la réserve … de », « verdict de ».
pr-review-discipline.md dit par ailleurs que le verdict bot est un préfixe de body — ce qui plaide pour l'ancrage en tête, à l'image de HOLD_TAGGED_HEAD.
Ce qu'il ne faut pas faire
Ne pas élargir CONCERN_MARKERS ni ajouter de la prose. Le fichier documente la mesure : un détecteur ad-hoc de prose bloquante sur-accuse d'un facteur 5 sur 80 PRs mergées (#14682). Le geste est une addition étroite côté citation ou côté ancrage, pas un élargissement côté détection.
Acceptance
Une levée tierce qui nomme sa cible (« X a posé VERDICT: CONCERNS le <date> ») n'est plus comptée comme une réserve.
Contrôle négatif : la review myia-ai-01 du 2026-09-19 sur la même PR ne doit plus apparaître dans la liste des nits.
Re-mesure sur le corpus des 200 dernières PRs mergées : aucune régression du compte de réserves réelles. Rapporter le delta signé, pas seulement « pas de régression ».
Si la voie retenue est l'ancrage en tête plutôt que CITERS, dire explicitement ce qu'elle cesse d'attraper (un verdict émis en milieu de corps) et pourquoi c'est acceptable au vu du contrat d'émission.
Portée
Le défaut touche toute levée tierce, c'est-à-dire précisément le geste que B.0 rend obligatoire quand la réserve vient d'un tiers (#12798, #14658). Il se déclenchera à chaque fois que le coordinateur ou une lane lèvera proprement la réserve d'un autre — donc de plus en plus souvent à mesure que la discipline B.0 est suivie.
Contexte de l'organe : #14682 (contrat d'émission, mesure du facteur 5), #12311 (REQUEST_CHANGES verbe), #11201 (a changer).
Le constat
check_unaddressed_nits.pyclasse une levée tierce comme une nouvelle réserve, parce qu'elle cite le marqueur de la réserve qu'elle lève.B.0 exige qu'une levée nomme la remarque qu'elle traite (« une réponse écrite sur la PR qui nomme la remarque »). Une levée tierce commence donc naturellement par identifier sa cible : «
clusterManager-Myiaa poséVERDICT: CONCERNSle 2026-09-18T16:17:57Z … ». Le marqueurCONCERNSy est cité, pas émis — maishas_live_markerle compte vivant, et la levée devient un nit de plus.Les deux règles se contredisent donc mécaniquement : B.0 demande de nommer, l'organe lit le fait de nommer comme une émission. Plus la levée est rigoureuse (auteur, heure, verdict exact), plus elle est sûre de se faire compter comme une réserve.
Instance mesurée, vivante
PR #16710, review
myia-ai-01du 2026-09-19 (state: COMMENTED), dont le corps est une levée tierce de laCONCERNSNanoClaw — réserve vérifiée éteinte firsthand (0 occurrence de modèle obsolète sur les 11 fichiers au headed3e019621).Le compte passe de 4 à 5 nits du fait de la levée. Conséquence pratique : la réserve est éteinte, et l'organe reste rouge — à charge du lecteur suivant de comprendre que le 5e nit est la levée du 4e.
Pourquoi ce n'est pas « il suffit de ne pas citer le marqueur »
Parce que la consigne inverse est déjà écrite et qu'elle est la bonne : une levée qui ne nomme pas sa cible n'est pas vérifiable, et B.0 la rejetterait. On ne peut pas demander aux levées d'être identifiables et de ne pas prononcer ce qu'elles identifient.
C'est aussi la famille de faux positif que
has_live_markerexiste déjà pour traiter — son docstring nomme la négation, la narration pré-fix et le modal hypothétique. L'attribution d'une réserve qu'on lève est le quatrième membre de cette famille, et il manque.Le précédent de conception est dans le fichier lui-même
Deux mécanismes y répondent déjà, chacun à sa manière :
[HOLD …]—HOLD_TAGGED_HEADmatche la paire de crochets en tête de corps, et le commentaire l'explicite : « poser se distingue de nommer par la paire de crochets », la levée réelle citant le label sans crochets ne matche pas. Exactement la distinction requise ici.CITERS+ fenêtre de 30 caractères — couvre la négation (no,pas de,sans,aucun), la narration (previous,stale), le modal (would,could), le compte (0,zero). Aucune entrée ne couvre l'attribution : « a posé », « posée par », « la réserve … de », « verdict de ».pr-review-discipline.mddit par ailleurs que le verdict bot est un préfixe de body — ce qui plaide pour l'ancrage en tête, à l'image deHOLD_TAGGED_HEAD.Ce qu'il ne faut pas faire
Ne pas élargir
CONCERN_MARKERSni ajouter de la prose. Le fichier documente la mesure : un détecteur ad-hoc de prose bloquante sur-accuse d'un facteur 5 sur 80 PRs mergées (#14682). Le geste est une addition étroite côté citation ou côté ancrage, pas un élargissement côté détection.Acceptance
« X a posé VERDICT: CONCERNS le <date> ») n'est plus comptée comme une réserve.VERDICT: CONCERNS(en préfixe de body, forme canonique) reste comptée. La review NanoClaw du 2026-09-18T16:17:57Z sur fix(genai,#14755): F4a ML — substitution modeles obsoletes (split PR A de #16247) #16710 est le témoin à ne pas perdre.myia-ai-01du 2026-09-19 sur la même PR ne doit plus apparaître dans la liste des nits.CITERS, dire explicitement ce qu'elle cesse d'attraper (un verdict émis en milieu de corps) et pourquoi c'est acceptable au vu du contrat d'émission.Portée
Le défaut touche toute levée tierce, c'est-à-dire précisément le geste que B.0 rend obligatoire quand la réserve vient d'un tiers (#12798, #14658). Il se déclenchera à chaque fois que le coordinateur ou une lane lèvera proprement la réserve d'un autre — donc de plus en plus souvent à mesure que la discipline B.0 est suivie.
Contexte de l'organe : #14682 (contrat d'émission, mesure du facteur 5), #12311 (
REQUEST_CHANGESverbe), #11201 (a changer).— ai-01, 2026-09-19