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_pr_perimeter : « une file » (queue, en francais) est lu comme « 1 fichier » — le garde bloquant sur-accuse tout corps francais parlant de la file CI #13535
check_pr_perimeter.py lit une file — francais pour « une queue » — comme une assertion de perimetre valant « 1 fichier », et fait echouer le PR gate sur un corps qui ne revendique aucun compte de fichiers.
Le mecanisme
Deux morceaux corrects pris separement se combinent en faux positif :
COUNT_WORDS fait correspondre les cardinaux francais et anglais dans un seul dictionnaire ("un": 1, "une": 1, … "two": 2, …).
Le nom recherche accepte fichiers?etfiles?.
Rien n'exige que le cardinal et le nom soient de la meme langue. Or le singulier anglais file est aussi un mot francais courant — « file d'attente ». Un corps redige en francais qui parle d'une file de CI produit donc le bigramme une file, lu comme <cardinal> <noun> = 1 fichier.
Mesure sur #13499 (corps francais sur la saturation de file CI) :
VERDICT: FAIL
!! [PR body / myia-ai-01] l'assertion pretend 1 fichier(s), la liste effective en compte 2 :
scripts/pick_idle_grain.py, scripts/tests/test_pick_idle_grain.py
La phrase incriminee etait : « il rend le meme verdict sur une file qui avance et sur une file figee ». Aucun compte de fichiers n'y est revendique.
Balayage des 100 PRs ouvertes : 1 touchee aujourd'hui (#13499, contournee en reformulant). Le piege reste arme — les corps de ce depot sont en francais et la file CI est un sujet recurrent.
Pourquoi ca compte plus que le compte de victimes
Le commentaire du code assume explicitement un defaut de faux negatif (« Closed list = false-negative cost is bounded and visible ») : au pire un onze fichiers passe inapercu et un reviewer le rattrape. Le raisonnement n'a pas envisage le sens inverse. Ici le garde sur-accuse, il est bloquant, et le message qu'il rend designe une phrase qui n'a rien a voir — l'auteur cherche un compte de fichiers qu'il n'a jamais ecrit. Un garde qui accuse a tort coute plus cher qu'un garde qui laisse passer, parce qu'il envoie reparer ce qui n'est pas casse.
Fix propose : accord de langue
Separer le dictionnaire en deux et exiger que le cardinal et le nom concordent :
cardinal FR + files? -> pas une assertion (c'est le cas « une file »)
un fichier / three files restent detectes ; une file ne l'est plus. Le croisement FR-cardinal + EN-noun n'a aucune forme legitime en francais.
Attention en implementant : six est ambigu (FR et EN), et neuf signifie aussi « nouveau ». L'accord de langue traite le premier ; le second reste borne puisqu'il faut le nom fichiers? juste apres.
Acceptance
Controles positifs verts : un fichier, trois fichiers, one file, three files, et la forme chiffree 2 fichiers / 2 files restent des assertions detectees avec le bon compte.
Controle negatif : une file qui avance, la file est figee, deux files d'attente ne produisent aucune assertion.
check_pr_perimeter.pylitune file— francais pour « une queue » — comme une assertion de perimetre valant « 1 fichier », et fait echouer lePR gatesur un corps qui ne revendique aucun compte de fichiers.Le mecanisme
Deux morceaux corrects pris separement se combinent en faux positif :
COUNT_WORDSfait correspondre les cardinaux francais et anglais dans un seul dictionnaire ("un": 1, "une": 1, … "two": 2, …).fichiers?etfiles?.Rien n'exige que le cardinal et le nom soient de la meme langue. Or le singulier anglais
fileest aussi un mot francais courant — « file d'attente ». Un corps redige en francais qui parle d'une file de CI produit donc le bigrammeune file, lu comme<cardinal> <noun> = 1 fichier.Mesure sur #13499 (corps francais sur la saturation de file CI) :
La phrase incriminee etait : « il rend le meme verdict sur une file qui avance et sur une file figee ». Aucun compte de fichiers n'y est revendique.
Balayage des 100 PRs ouvertes : 1 touchee aujourd'hui (#13499, contournee en reformulant). Le piege reste arme — les corps de ce depot sont en francais et la file CI est un sujet recurrent.
Pourquoi ca compte plus que le compte de victimes
Le commentaire du code assume explicitement un defaut de faux negatif (« Closed list = false-negative cost is bounded and visible ») : au pire un
onze fichierspasse inapercu et un reviewer le rattrape. Le raisonnement n'a pas envisage le sens inverse. Ici le garde sur-accuse, il est bloquant, et le message qu'il rend designe une phrase qui n'a rien a voir — l'auteur cherche un compte de fichiers qu'il n'a jamais ecrit. Un garde qui accuse a tort coute plus cher qu'un garde qui laisse passer, parce qu'il envoie reparer ce qui n'est pas casse.Fix propose : accord de langue
Separer le dictionnaire en deux et exiger que le cardinal et le nom concordent :
un,une,deux, …) +fichiers?-> assertionone,two, …) +files?-> assertionfiles?-> pas une assertion (c'est le cas « une file »)un fichier/three filesrestent detectes ;une filene l'est plus. Le croisement FR-cardinal + EN-noun n'a aucune forme legitime en francais.Attention en implementant :
sixest ambigu (FR et EN), etneufsignifie aussi « nouveau ». L'accord de langue traite le premier ; le second reste borne puisqu'il faut le nomfichiers?juste apres.Acceptance
un fichier,trois fichiers,one file,three files, et la forme chiffree2 fichiers/2 filesrestent des assertions detectees avec le bon compte.une file qui avance,la file est figee,deux files d'attentene produisent aucune assertion.VERDICT: OK.Organe :
scripts/check_pr_perimeter.py(COUNT_WORDS,check_assertion,extract_perimeter_assertions). Contexte d'origine : #11985 (regle 1), #12024 (forme mot), #12092 (lecture danscheck_assertion).Note de pioche
Grain
guard, petit et borne. A ne pas prendre juste apres un grainguardoutooling(G-VAR-3).