Skip to content

fix(guard,#15193): un login suivi d'un point (fin de phrase) matche la frontiere d'identite - #15243

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/15193-nits-login-period
Sep 9, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/15193-nits-login-period

Conversation

@jsboige

@jsboige jsboige commented Sep 8, 2026

Copy link
Copy Markdown
Owner

fix(guard,#15193): un login suivi d'un point (fin de phrase) matche la frontiere d'identite

Grain: MED/guard — lane myia-po-2023:CoursIA-2 — prev: MED/lean #15150 (c.327b)

Symptome

_override_scopes_reserve (scripts/check_unaddressed_nits.py) construit la
frontiere d'identite 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 (et du lookbehind) negatif. Un
login suivi d'un point — donc en fin de phrase — ne matche jamais.
finditer ne rend aucune occurrence, _scope_lifted_sentence ne voie pas la
phrase, l'override est rejete.

Pourquoi ca coute

Le diagnostic emis par l'organe lui-meme recommande cet idiome :

une levee coordinatrice est scope par reserve ; la nommer dans une phrase de
levee affirmative — « je leve aussi la reserve de »

Ecrite telle quelle, la phrase se termine par le login. Suivre la consigne a
la lettre produit un non-match
— et le message d'erreur redemande exactement
la forme qui vient d'echouer. Mesure sur #15049 : trois commentaires
d'override successifs, tous rejetes, avant que la cause soit isolee.

Correctif

Retirer . des deux classes de frontieres, en conservant - :

author_re = re.compile(r"(?<![A-Za-z0-9_-])" + re.escape(nit_author)
                       + r"(?![A-Za-z0-9_-])")
  • . exclu : un login suivi d'un point (fin de phrase) est une frontiere
    d'identite legitime et doit matcher.
  • - conserve : protege la sous-chaine (Myia dans clusterManager-Myia —
    test test_14216_unite_scope_login_persona_et_anonyme).
  • alnum/_ conserves : anti jsboige2 / jsboige_x.

Preuve (offline, contre le code de l'organe)

Corps du commentaire _override_scopes_reserve(...,'jsboige')
… je leve aussi la reserve de jsboige. — l'idiome recommande True (etait False)
… je leve aussi la reserve de jsboige elle-meme. True (inchangé)
… je leve aussi la reserve de jsboige, posee a 23:11Z. True (inchangé)
… je leve aussi la reserve de jsboige2. False (anti sous-chaine)
… je leve aussi la reserve de jsboige-backup. False (anti sous-chaine)
… je leve aussi la reserve de clusterManager-Myia. ('Myia') False (anti sous-chaine)
reserve Hermes levee (persona alias) True (inchangé)

Validation

  • python -m pytest scripts/tests/test_check_unaddressed_nits.py : 387 passe
  • python -m pytest scripts/tests/test_check_unaddressed_nits_{dismissal,followup,hold,mention,unevaluated}.py : 102 passe
  • 489 tests verts, 0 regression. Nouveau test_15193_login_suivi_du_point_matche
    reproduit le bug (etait False) et le leve apres fix.

Note genre (G-VAR-1)

Grain guard = classe META : ne tient pas a lui seul le plancher
G-VAR-1 (pas de capacite CONTENU livree). Toutefois il s'attaque a la cause
racine de la PR rouge #15073 de cette lane (organe qui refusait la levee
F1/F2 nommee) et aide toutes les lanes (surcharge d'overrides rejetes). Le
grain CONTENU qui portera le prochain cycle de cette lane est nomme dans le
rapport de cycle : #15176 (Lean ProgramGames L1, noyau borne).

Cross-reference

Closes #15193

…a frontiere d'identite

Le `.` etait dans la classe des frontieres (lookbehind ET lookahead) de
_override_scopes_reserve : "la reserve de <login>." (login en fin de phrase)
ne matchait jamais. L'idiome recommande par l'organe lui-meme etait donc
rejete a l'ecole -- mesure sur #15049 (3 overrides successifs refutes).

Fix : retirer `.` des deux classes ; seul un caractere de MOT (alnum/_) ou
un hyphen continue le token (anti sous-chaine `Myia` dans
`clusterManager-Myia`, anti `jsboige2`/`jsboige-backup`).

Preuve : 489 tests verts (387 + 102 sur les fichiers nits) + regression test
test_15193_login_suivi_du_point_matche avant/apr\u00e8s.

Closes #15193

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

prev: genre mots-clé fermant -- bloquant (#10093).

prev: reference(s) fail invariant(s) (prev-not-merged -> [15150]) -> point prev: at a MERGED PR of the same lane, distinct from the current PR. See #13475.

Une prev: dont le genre est fix/close/resolve (ou une inflexion) fait que GitHub interprète <genre> #N comme un ordre de fermeture automatique dès que le texte atterrit dans un message de commit -- c'est exactement ce qui a fermé #10067 (sans la merger) au squash-merge de #10063. Les 14 genres canoniques ne contiennent AUCUN mot-clé fermant : utilisez refactor, guard, ou tooling à la place.

Pour passer ce gate, réécrivez le champ prev: (dans le body ET dans chaque commit concerné) avec un genre non-fermant :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<refactor|guard|tooling|...> #<PR>

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2023:CoursIA-2 a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #15150 (MED/guard, merge a 2026-09-09T02:54:37Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

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

Labels

variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

2 participants