Repository navigation
fix(nits,#13512): la ligne de verdict porte sa reserve au lieu de certifier le silence - #17233
Conversation
…tifier le silence `_print_unevaluated` imprime ce que l'organe n'a pas su classer, mais il l'imprime SOUS la ligne de verdict -- et c'est la LIGNE qui circule : elle est citee telle quelle dans les rapports de lane et les DM. Un `OK PR #N — aucun nit non leve` cite sans sa reserve certifie donc exactement le silence que cet organe refuse de certifier (#13779), et la promesse s'arretait a la frontiere du stdout. Mesure fondatrice (21/09, arbitrage ai-01) : l'organe rendait `rc=0` -- ligne `OK` citee -- sur deux PRs dont les reserves vivaient dans le bloc « NON EVALUE(S) ». La lecture de ce bloc etait presentee comme une discipline de lecteur ; elle devient une propriete de la ligne. - `_ok_line(pr, result)` extrait la ligne de verdict (pure, donc testable sans reseau : `gate()` reste seul a appeler `gh`). - La reserve nomme le TOTAL non evalue -- jamais le sous-ensemble affiche, meme regle que l'en-tete (#13779) : sous-declarer dans la ligne ce qu'on declare en entier en dessous deplacerait le defaut au lieu de le fermer. - Verdict inchange (rc et `blocked` non touches) : l'organe n'a jamais eu mandat de bloquer sur un commentaire non classe, et ne l'a pas ici. Tests (+5, 13 passed) ecrits par le faux negatif, comme la suite existante : - le compte voyage dans la ligne (mesure fondatrice) ; - le compte est le total, et le sous-ensemble n'y apparait pas ; - controle positif : rien a relire -> la ligne d'origine, octet pour octet (avec precondition `classify(...) is not None`, sinon le test passerait pour la mauvaise raison) ; - le prefixe d'origine reste un prefixe : un consommateur qui reconnaissait la ligne la reconnait toujours ; - le bloc de detail ne re-emet pas la ligne de verdict (une seule source). Falsification : la reserve retiree de `_ok_line`, les 2 tests de compte rougissent (mesure : 2 failed / 11 passed), le test de prefixe reste vert par construction ; restauration par `cp`. Regression : 465 passed / 1 skipped sur `test_check_unaddressed_nits.py`. Aucun workflow ni script ne parse la ligne (grep `.github/workflows/` : 0 occurrence) -- le seul consommateur est un lecteur, ce qui est precisement le canal que ce commit corrige. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #17233 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
Grain: FIX/scripts -- lane myia-po-2026:CoursIA -- prev: FIX/infra #17230
La ligne de verdict de
check_unaddressed_nitsporte sa réserve au lieu de certifier le silenceSee #13512,See #13779Le trou, nommé par l'arbitrage du 21/09
_print_unevaluatedexiste depuis #13512 pour que l'organe cesse de certifier son silence : ce qu'il n'a pas su classer, il l'imprime. #13779 a renforcé le bloc (sur-ensemble au lieu du repli exclusif, compte du total au lieu du sous-ensemble affiché).Mais ce bloc s'imprime sous la ligne de verdict — et c'est la ligne qui circule. «
OK PR #N — aucun nit non leve» est ce qu'on cite : dans les rapports de lane, dans les DM, dans les commentaires de levée. UnOKcité sans sa réserve certifie alors exactement le silence que cet organe s'interdit de certifier, et la promesse de #13779 s'arrêtait à la frontière dustdout: elle ne tenait que par la discipline du lecteur — ce que l'organe existe précisément pour ne plus demander.Mesure fondatrice. Arbitrage ai-01 du 2026-09-21T14:36Z : l'organe rendait
rc=0— ligneOKcitée — sur deux PRs (#16413,#16398) dont les réserves 🟡 vivaient dans le bloc « NON EVALUÉ(S) ». Le verdict n'était pas faux ; il était incomplet d'une manière qu'aucune citation ne rattrape, parce que seule la ligne se recopie.Ce que fait la PR
_ok_line(pr, result)extrait la ligne de verdict en fonction pure — donc testable sans réseau,gate()restant seul à appelergh.Ce que la PR ne fait pas — et c'est délibéré :
rcetblockedsont inchangés. Le commentaire du fichier posait le parti dès #13512 (« en cas de doute : avertir (A RELIRE), jamais bloquer ») ; bloquer sur un commentaire non classé serait un autre débat, avec ses propres mesures de faux positifs. Ici on ne change pas le verdict : on cesse de le laisser voyager nu.Preuves
test_check_unaddressed_nits_unevaluated.pytest_check_unaddressed_nits.py(suite de l'organe)scripts/testsentiergrep "aucun nit non leve"sur.github/workflows/*.yml,*.sh,*.md: 0 occurrence → changement de chaîne sans risque de parseLes tests sont écrits par le faux négatif, comme la suite existante (
analyse()est pur) :classify(...) is not None, sinon le test passerait pour la mauvaise raison — j'ai dû corriger ce point en cours de route : un corps sans marqueur tombait dansunevaluated) ;Falsification : la réserve retirée de
_ok_line, les 2 tests de compte rougissent (2 failed / 11 passed), le test de préfixe restant vert par construction ; restauration parcp(jamaisgit checkout --).Périmètre et collision
Un seul sujet, 2 fichiers (+103/−4).
scripts/check_unaddressed_nits.pyest aussi touché par #16768 (ouverte,fix/16764-nits-sha-dating-vs-proof) : j'ai vérifié pargit diff origin/main...origin/<branche>que ses hunks sont lignes 233 / 3540-3600 / 4481-4600 (_cited_shas,analyse) alors que les miens sont 5032 / 5148 (_print_unevaluated,gate) — aucun recouvrement, fusion git propre dans les deux ordres.🤖 Generated with Claude Code