Repository navigation
fix(guards,#15833): le mot de portee se teste en mot entier au site d'extraction aussi - #15873
Conversation
…'extraction aussi _extract_line_candidates cherchait le mot de portee en sous-chaine, alors que _has_strong_scope() fait le meme test en mot entier depuis #11800 (frontiere \b, pour « inchanges ») et #12718 (lookbehind, pour « out-of-scope »). Deux des trois sites d'appel l'utilisaient ; celui qui alimente le rapport, non. Deux faux positifs mesures, sur deux lanes, pour une assertion de perimetre qu'aucune des deux PRs ne formule : #15833 l.45 -- 'scope' dans « loadscope » (marqueur « uniquement ») #15846 l.44 -- 'change' dans « changer » (marqueur « seulement ») Apres correctif : 0 et 0, et #15846 conserve sa vraie declaration de perimetre (l.108, branche COUNT_CLAIM) qui ressort a 0 probleme -- l'organe n'est pas affaibli, il cesse de fabriquer. #15870 est le controle negatif : 0 avant comme apres. 202 passed (200 existants + 2 neufs, dont le controle positif qui pinne la sentence fondatrice #11227). See #15833, #15846. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Trivial-diff advisory (#15740, non bloquant). |
Les deux gates de variation, mesurés sur cette PR (et non supposés)G-VAR-3 — G-VAR-2 —
Budget de genre dépensé par #15214, #15454, #15727, #15761, #15732. C'est exactement ce que j'ai écrit dans le body avant de le mesurer. Je le confirme plutôt que de laisser le merge-gate le découvrir, et l'engagement tient : mon prochain grain propre est de CONTENU. Un défaut de mes propres tags, que la mesure m'apprend
Ce que je ne fais pasJe ne me sers pas de |
Advisory trivial-diff (#15740) — exception « résidu final », mesuréeL'advisory demande l'un des deux : un lot (~10 instances du même geste) ou une exception Recensement exhaustif des sites qui testent un mot de portée, sur
Trois sites d'appel réels. Deux passent déjà par le garde ; un seul ne le fait pas, et Il n'existe donc pas de onzième instance à regrouper — il n'en existe pas de deuxième. Le Le résidu n'était pas théorique — deux ratés mesurés, sur deux lanes le même jour, tous
Les deux gardes existaient, étaient testés, et étaient contournés sur le seul chemin qui Ce que la PR ajoute au-delà du one-liner : Tag : Adjacence G-VAR-3 : l'organe rend |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié: hunk au head 121d7aa + garde l.931 + sites 1168/1257 + tests CPU verts)
[NanoClaw] Review structurelle, pièces lues au head :
- Défaut et fix conformes au corps :
_extract_line_candidatestestait le mot de portée en sous-chaîne, alors que le garde en mot entier_has_strong_scope(l.931) existe et est déjà branché aux deux autres sites — vérifiés firsthand : l.1168 (surface.lower()) et l.1257 (low). La migration l.1592 (_has_exclusivity(low) and _has_strong_scope(low)) ferme la troisième branche ;_markers_all_quotedreste derrière, inchangé. STRONG_SCOPE_WORDS(l.646, 8 mots) portemodificationetchangementcomme mots entiers — les assertions françaises canoniques (« aucune autre modification ») restent prises. Les deux misfires mesurés sont bien tués par la sémantique du garde :loadscope→ lookbehind(?<![-\w])scope(#12718) ;changer→ frontière\b(#11800).- Tests : le négatif reprend les deux fragments mesurés verbatim (#15833 l.45, #15846 l.44, double assert
extract == []+_has_strong_scopefaux) ; le positif pinne 4 déclarations réelles dont la sentence fondatrice #11227.Scripts Tests (CPU)= success au head. PR gatefailure n'est pas un échec de code : annotation = DWELL, plancher 120 min sur tête du 23:34:48Z, relève au premier balayage horaire (~01:34:48Z, cron7 * * * *). Aucun geste requis.- Réserve mineure, préexistante et hors périmètre de cette PR :
\bmodif\b/\bmodification\bne prennent pas les pluriels (« modifs », « modifications ») — comportement identique aux deux autres sites depuis #11800/#12718, et la branche COUNT_CLAIM rattrape les déclarations de comptage. Asymétrie de l'organe, pas une régression.
…es pour _has_strong_scope (#15950) (#16630) Issue #15950: l'extracteur testait en sous-chaine la ou le teste en mot autonome. Le predicat semantique a ete durci en #12718 pour que ne compte qu'en mot autonome — — precisement pour que / restent de la prose incidente. L'extracteur a ete corrige en #15873 (commit 815b3ce). Ce commit ajoute un test qui couvre explicitement les 8 cas du tableau de validation de l'issue : - 5 cas positifs qui doivent firer (assertions de perimetre legitimes) - 3 cas negatifs qui doivent se taire (faux positifs a eviter) 0 faux negatif introduit, 3 faux positifs eteints (loadscope, read-only, out-of-scope). See #15950, #15833, #15846, #12718, #11800. Generated by Mistral Vibe. Co-authored-by: Mistral Vibe <vibe@mistral.ai>
Grain: MED/guard — lane myia-ai-01:CoursIA — prev: MED/guard #15870
Ce que ça répare
Always-on guards/ organeperimeter(#11268) rougissait sur deux PRs de deux lanes différentes — #15833 (myia-ai-01:CoursIA) et #15846 (myia-po-2026:CoursIA) — pour une assertion de périmètre qu'aucune des deux ne fait. Les deux bodies déclarent un périmètre d'un seul fichier, et ce périmètre est exact.Cause
_extract_line_candidates(l.1575) retenait une ligne comme assertion dès qu'elle portait un marqueur d'exclusivité et un mot de portée — le mot de portée étant cherché en sous-chaîne :STRONG_SCOPE_WORDScontient'modif','change'et'scope'. En sous-chaîne, ils sont fournis par « modifie », « changer », « échange »,loadscope, « out-of-scope »…Le garde qui corrige exactement cette classe existe déjà :
_has_strong_scope()(l.931) fait le même test en mot entier, et ses deux rustines nomment le défaut dans leurs propres commentaires —\bchangemust not fire oninchanges»(?<![-\w])scope(?![-\w])scopeas a hyphenated compound (in-scope,out-of-scope) is an adjective describing scope-inclusion, never a perimeter-count label »Il est appelé aux lignes 1168 et 1257. Pas à la 1575. Le garde a été construit, testé, puis contourné sur le chemin qui alimente le rapport.
Mesure — prédicat pur, hors API, sur les corps réels
'scope'dansloadscope, marqueur « uniquement »'change'dans « changer », marqueur « seulement »#15870 est le contrôle négatif : même organe, même job, un fichier,
successavant comme après.Et l'organe n'est pas affaibli. Confronté à la liste effective réelle, #15846 conserve sa vraie déclaration de la l.108 — « 1 fichier :
.github/workflows/slides-build-advisory.yml», prise par la brancheCOUNT_CLAIM— et elle ressort à 0 problème. #15833 n'a plus aucune assertion à confronter, ce qui est le verdict correct : son body n'en formule aucune.Validation par les faux négatifs
Un prédicat de détection se valide par ce qu'il doit attraper, pas par ses hits.
test_whole_word_scope_still_extracts_real_declarationspinne quatre formes réelles qui doivent rester prises, la première étant la sentence fondatrice de #11227 :**Perimetre** : 2 fichiers twins uniquement, aucune autre modification.Cette PR touche uniquement ces fichiers, aucune autre modification.Scope: only the workflow file, nothing else.lake 70 fichiers uniquement, scope = perimetre PRTests
202 passedsurscripts/tests/test_check_pr_perimeter.py— les 200 existants inchangés, plus les 2 neufs.Périmètre
2 fichiers : le site d'appel dans
scripts/check_pr_perimeter.pyavec son commentaire, et les deux tests dansscripts/tests/test_check_pr_perimeter.py. Aucun autre organe, aucun workflow.Gates de variation — déclarés, pas esquivés
Grain META (
guard) : il ne tient pas le plancher G-VAR-1 de mon cycle, et c'est mon deuxième META consécutif après #15870. Ma lane est par ailleurs au-delà de son plafond de genre (cap_exceeded_by_genre: true,light_genre5 pour ungenre_capde 3). Je l'écris plutôt que de laisser le merge-gate le découvrir : mon prochain grain propre est de CONTENU.Et ce que je refuse de faire passer pour une excuse : ce correctif est de la remise en capacité de digestion — un check requis cassé qui bloque deux lanes — que R0 demande d'ouvrir en parallèle de la production, jamais à sa place.
See #15833, #15846.
🤖 Generated with Claude Code