Le défaut
_override_scopes_reserve (scripts/check_unaddressed_nits.py) construit la frontière du login ainsi :
author_re = re.compile(r"(?<![A-Za-z0-9_.-])" + re.escape(nit_author) + r"(?![A-Za-z0-9_.-])")
Le . est dans la classe du lookahead négatif. Un login suivi d'un point — donc en fin de phrase — ne matche jamais. finditer ne rend aucune occurrence, _scope_lifted_sentence ne voit pas la phrase, l'override est rejeté.
Pourquoi ça coûte
Le diagnostic émis par l'organe lui-même recommande cette idiome :
une levée coordinatrice est scopée par réserve ; la nommer dans une phrase de levée affirmative — « je lève aussi la réserve de <login> »
Écrite telle quelle, la phrase se termine par le login. Suivre la consigne à la lettre produit un non-match — et le message d'erreur redemande exactement la forme qui vient d'échouer. Coût mesuré sur #15049 : trois commentaires d'override successifs, tous rejetés, avant que la cause soit isolée en sondant le prédicat hors ligne.
Mesure (offline, contre le code de l'organe)
| Corps du commentaire |
_override_scopes_reserve(body,'jsboige') |
… je lève aussi la réserve de jsboige. — l'idiome recommandé |
False |
… je lève aussi la réserve de jsboige elle-même. |
True |
… je lève aussi la réserve de jsboige, posée à 23:11Z. |
True |
… la réserve de jsboige n'est pas concernée par cette levée. — contrôle négatif |
False |
Le contrôle négatif est le point important : la phrase d'exclusion reste rejetée dans tous les cas. Le défaut est bien une frontière trop large, pas un prédicat trop strict — le corriger ne desserre pas la garde.
Correctif proposé
Retirer le . du lookahead de fin seulement. Il a un rôle légitime en lookbehind (empêcher foo.jsboige de matcher jsboige) ; en lookahead il n'empêche que la ponctuation de phrase, jamais une collision de login réelle — aucun login GitHub ne commence par un point.
author_re = re.compile(r"(?<![A-Za-z0-9_.-])" + re.escape(nit_author) + r"(?![A-Za-z0-9_-])")
Acceptance
Défaut voisin, à filer à part
Sur la même PR, mon contrôle de liens a rendu « 0 lien mort » — sur 0 lien trouvé : ma regex présumait des chemins relatifs alors que le deck utilise des URLs GitHub absolues. La sortie d'un instrument aveugle est indiscernable d'un succès. Ce n'est pas un défaut du dépôt mais un défaut de méthode ; il est consigné ici parce qu'il s'est produit dans la même passe et que le remède est le même : tout détecteur porte son contrôle positif (un chemin bidon doit rendre MORT).
Le défaut
_override_scopes_reserve(scripts/check_unaddressed_nits.py) construit la frontière du login ainsi :Le
.est dans la classe du lookahead négatif. Un login suivi d'un point — donc en fin de phrase — ne matche jamais.finditerne rend aucune occurrence,_scope_lifted_sentencene voit pas la phrase, l'override est rejeté.Pourquoi ça coûte
Le diagnostic émis par l'organe lui-même recommande cette idiome :
Écrite telle quelle, la phrase se termine par le login. Suivre la consigne à la lettre produit un non-match — et le message d'erreur redemande exactement la forme qui vient d'échouer. Coût mesuré sur #15049 : trois commentaires d'override successifs, tous rejetés, avant que la cause soit isolée en sondant le prédicat hors ligne.
Mesure (offline, contre le code de l'organe)
_override_scopes_reserve(body,'jsboige')… je lève aussi la réserve de jsboige.— l'idiome recommandéFalse… je lève aussi la réserve de jsboige elle-même.True… je lève aussi la réserve de jsboige, posée à 23:11Z.True… la réserve de jsboige n'est pas concernée par cette levée.— contrôle négatifFalseLe contrôle négatif est le point important : la phrase d'exclusion reste rejetée dans tous les cas. Le défaut est bien une frontière trop large, pas un prédicat trop strict — le corriger ne desserre pas la garde.
Correctif proposé
Retirer le
.du lookahead de fin seulement. Il a un rôle légitime en lookbehind (empêcherfoo.jsboigede matcherjsboige) ; en lookahead il n'empêche que la ponctuation de phrase, jamais une collision de login réelle — aucun login GitHub ne commence par un point.Acceptance
True/True/True/False— le contrôle négatif resteFalse.PERSONA_ALIAS_LOGINSet la branchenit_author == "jsboige"empruntent la même construction de frontière — si oui, le même correctif s'y applique.Défaut voisin, à filer à part
Sur la même PR, mon contrôle de liens a rendu « 0 lien mort » — sur 0 lien trouvé : ma regex présumait des chemins relatifs alors que le deck utilise des URLs GitHub absolues. La sortie d'un instrument aveugle est indiscernable d'un succès. Ce n'est pas un défaut du dépôt mais un défaut de méthode ; il est consigné ici parce qu'il s'est produit dans la même passe et que le remède est le même : tout détecteur porte son contrôle positif (un chemin bidon doit rendre MORT).