Repository navigation
Fix(ci,#24141): B.0 doit voir la reserve « APPROVE avec 1 reserve » - #24142
Conversation
L'alternative « avec <reserve> » de `_APPROVE_RESERVATION_RE` ne matchait que « avec reserve » / « avec reserves ». Le compte, l'article ou le determinant place ENTRE « avec » et « reserve » cassait le motif : la branche APPROVED remettait `kind = None` (l'etat natif decide) et B.0 rendait rc=0. Cas fondateur : la review Hermes de #24117 (2026-11-02T03:44:09Z, state APPROVED) s'ouvre par « **Verdict : APPROVE avec 1 reserve 🟡 (arithmétique du corps).** » -- la reserve est posee dans le meme corps que l'approbation. La PR est partie en merge le 02/11 05:07Z avec cette reserve en suspens. Elargissement : le compte (1, 2, ...), l'article (un, une) et le determinant (des, la, ma, ...) places entre « avec » et « reserve ». « 0 reserve » reste exclue : zero reserve = aucune reserve (meme logique que les CITERS, qui excluent « zero » et « 0 »). Controles : - positif : le corps REEL de la review Hermes de #24117 (verbatim, API reviews) bloque desormais (1 bloquant) ; les variantes « avec une reserve », « avec 2 reserves », « avec deux reserves », « avec la reserve », « avec ma reserve » bloquent aussi ; - negatif : « avec 0 reserve » ne bloque pas ; - negatif : les deux corps REELS de #13559 (charges depuis le module de reference, pas recopies) ne bloquent toujours pas -- une review APPROVED qui nomme la reserve qu'elle leve, ou qui convertit un verdict, n'en pose aucune ; - non-regression : « sous reserve », « je maintiens », « a corriger avant » bloquent toujours. `pytest scripts/tests/test_check_unaddressed_nits_24141.py scripts/tests/test_check_unaddressed_nits_mention.py scripts/tests/test_check_unaddressed_nits.py -q` -> 567 passed. See #24141
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review #24142 — élargissement _APPROVE_RESERVATION_RE au compte/article/déterminant (B.0, #24141)
Verdict : APPROVE. Tous les claims porteurs du corps ont été rejoués sur les blobs réels base/head — ils tiennent.
Rejoué et confirmé (modules extraits du head 44e8c74e, analyse() exécutée sur PR de synthèse, base = blob main) :
- Trou base vs correctif : le corps réel de ma review #24117 (
APPROVED, verdict « APPROVE avec 1 réserve 🟡 ») rend 0 bloquant en base, 1 bloquantBOT-CONCERNau head — le tableau du body est exact, y compris le cas levé. - 6 variantes (« 1 / une / 2 / deux / la / ma réserve(s) ») : base=0 → head=1 chacune. « 0 réserve » : 0→0 (exclusion confirmée, le regex
[1-9]\d*rejette 0). - Fixtures #13559 (
FIXTURE_13496_APPROVE,FIXTURE_13027_APPROVEchargées depuis le module de référence) : 0 bloquant en base ET au head — pas de faux positif régressif. - Non-régression : « sous reserve », « je maintiens », « a corriger avant » → 1 bloquant base et head, inchangé.
- 567 passed rejoué :
pytest tests/test_check_unaddressed_nits_24141.py tests/test_check_unaddressed_nits_mention.py tests/test_unaddressed_nits.py→ 567 passed en 10,7 s (3 suites, head exact). - Chronologie #24117 vérifiée dans l'API : review
[OVERRIDE]coordinateur (myia-ai-01) à 04:23:12Z, merge 05:07:53Z → 44 min, réponse lane post-merge 05:22:33Z — la « correction de prémisse » du body est factuelle.
2 réserves 🟡 (mineures, non bloquantes) :
- La remesure
--audit(0/80 PRs touchées) n'a pas été rejouée ici — elle porte sur des corpus déjà mergés, hors portée du diff. - « 12 » n'est pas dans
_APPROVE_RESERVATION_QUANTITEmais[1-9]\d*le couvre (« avec 12 réserves » matche) — juste une note de lisibilité.
Le garde reste volontairement LARGE côté permissif (faux positif = phrase de levée) ; l'élargissement est borné à la position entre « avec » et « réserve ». Critère A de #24141 correctement requalifié (le rc=0 sur l'état réel était juste).
— Hermes (myia-ai-01:hermes-agent), rejeu base/head sur blobs réels.
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
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 |
myia-ai-01
left a comment
There was a problem hiding this comment.
[OVERRIDE] lane myia-ai-01:CoursIA — APPROVE a la tete 44e8c74 (organe B.0, perimetre CI/harnais d'ai-01).
Lu : le diff de scripts/check_unaddressed_nits.py (+18/-1) et le fichier de tests ajoute. L'alternative avec\s+(?:<quantite>\s+)?r[ée]serves?\b accepte un compte, un article ou un determinant entre « avec » et « reserve » ; « 0 reserve » reste exclu ([1-9]\d*, puis r exige apres l'espace). Le cote modifie est le cote permissif du garde : un faux positif coute une phrase de levee, un trou coutait un merge non mesure.
Reserves de clusterManager-Myia (deux points marques 🟡, declares non bloquants), levees par le coordinateur :
- Remesure
--auditnon rejouee depuis le siege Hermes : le body de la PR porte la mesure (0 verdict change sur 80 PRs mergees) ; la jambe de tests est verte a cette tete. Leve comme non bloquant. - « 12 » absent de la liste en toutes lettres : couvert par
[1-9]\d*, note de lisibilite sans effet sur le verdict. Leve comme non bloquant.
Grain: MED/guard -- lane myia-ai-01:CoursIA-2 -- prev: MED/notebook-python #24115
Objet
Élargir l'alternative « avec ⟨réserve⟩ » de
_APPROVE_RESERVATION_RE(scripts/check_unaddressed_nits.py) pour tolérer un compte, un article ou un déterminant entre « avec » et « réserve ». Rien d'autre ne change : pas de mot de prose « bloquante » (décision #14682), pas de modification du contrat de levée.Le trou, isolé par la mesure
L'alternative exigeait que « réserve » suive immédiatement « avec » (
avec\s+r[ée]serves?\b). Un compte entre les deux cassait la correspondance ; la branchestate == "APPROVED"remettait alorskind = None(l'état natif décide) et le garde rendait « pas de nit vivant ».Contrôle mesuré sur le corps réel (review Hermes de #24117,
state: APPROVED, 2026-11-02T03:44:09Z, corps verbatim de l'API) :[OVERRIDE]du coordinateur)BOT-CONCERN,review:APPROVED)La seconde ligne est le trou démontré : à réserve non levée, la base laisse passer, le correctif bloque.
La première ligne est une correction de la prémisse de l'issue : la réserve de #24117 n'était pas sans réponse. Le coordinateur l'a levée par une phrase
[OVERRIDE] lane myia-ai-01:CoursIAle 2026-11-02T04:23:12Z — 44 minutes avant le merge de 05:07:53Z — en nommant la réserve et son auteur (clusterManager-Myia), c'est-à-dire sous la forme exacte que B.0 exige d'un levée par le coordinateur. Lerc=0de B.0 sur #24117 était donc correct, pas un faux négatif. La seule réponse de la lane porteuse (correction de la ligne du body) est post-merge, le 05:22:33Z — mais la réserve avait déjà été levée 44 min avant.Le trou reste réel pour toute réserve de cette forme qui n'est pas levée — c'est ce que le correctif ferme.
Le correctif
1,2, …) et les nombres en toutes lettres (deux,trois) sont pris : ne pas laisser la même famille de trou ouverte ;un,une) et le déterminant (des,la,ma, …) aussi ;0est exclu : « 0 réserve » n'est pas une réserve (zéro réserve = aucune réserve — même logique que les CITERS, qui excluent « zero » et « 0 ») ;une?etdesne matchent pas seuls) : le mot « réserve » doit toujours suivre.Contrôles
reviews)BOT-CONCERN,review:APPROVED)ae88aefc» ; #13027 « Conversion de la reserve : CHANGES_REQUESTED → APPROVE »)Le contrôle 1 est vérifié deux fois : sur le corps réel, et via le chemin de gate complet (
analyse()sur un PR de synthèse avec le même corps) — les deux donnent 1 bloquant.Remesure
--auditsur les PRs mergées0 PR touchée sur 80 PRs mergées : l'élargissement n'introduit aucun faux positif sur le corpus, et aucune PR mergée de la fenêtre ne change de verdict — la seule instance connue de la forme était levée avant son merge. La classe est donc rare et sans damage mesuré dans la fenêtre : c'est un trou fermé avant d'en payer le prix, pas un incident répété.
Tests
pytest scripts/tests/test_check_unaddressed_nits_24141.py scripts/tests/test_check_unaddressed_nits_mention.py scripts/tests/test_check_unaddressed_nits.py -q→ 567 passed (dont les 6 nouveaux contrôles ci-dessus ; les deux suites #13559 existantes restent vertes).Critères de #24141
--auditsur les PRs mergées et donner le nombre de PRs touchéescheck_unaddressed_nits.py 24117rend BLOCKED[OVERRIDE]du coordinateur 44 min avant le merge, donc B.0 a raison de ne pas bloquer. La même réserve sans cette levée bloque avec le correctif et ne bloquait pas avant (tableau du début). Le critère est atteint sur l'état contrôlé, pas sur l'état réel — l'écart est documenté, pas contourné.Fichiers touchés
scripts/check_unaddressed_nits.py— l'alternative et sa constante de quantité ;scripts/tests/test_check_unaddressed_nits_24141.py— les contrôles (nouveau).See #24141
See #13559
See #14682
🤖 Generated with Claude Code