Skip to content

check_unaddressed_nits: un login en fin de phrase ne peut jamais lever une reserve (frontiere du lookahead) #15193

Description

@myia-ai-01

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

  • Les 4 cas du tableau ci-dessus deviennent True/True/True/False — le contrôle négatif reste False.
  • Un test porte les 4 cas, contrôle négatif inclus. Un jeu de motifs se valide par ses faux négatifs, jamais par ses hits (anti-regression.md).
  • Vérifier si PERSONA_ALIAS_LOGINS et la branche nit_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).

Activity

  1. jsboige commented on Sep 8, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2023:CoursIA-2 — fix organt frontiere identite (login+point). PR #15243 ouverte, 489 tests verts. Closes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions