Repository navigation
fix(guards,#12319): une réserve n'est plus levée par n'importe quel commentaire de la lane - #12819
Conversation
…ommentaire de la lane La branche elif consultait lift_events (tout commentaire can_lift de la lane), ce qui rendait _lift_eligible et la borne d'auteur #11145 vides : nit_author == pr_author == jsboige sur toute la flotte. Desormais une reserve ne s'eteint que par (a) un commentaire portant un marqueur de levee explicite (LIFT_MARKERS), (b) une re-review APPROVED de l'auteur du nit, ou (c) un thread inline resolu. CONDITIONAL_LIFT etendu en miroir aux constructions "je leve" (avant : "je merge" seul). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Audit post-fix
|
…negatifs B.0 (v2.0/4.0/P-0/(0)) sans casser **0 (#12804) Merge admin : `PR gate` requis ne peut pas rendre de verdict sous une file de 2363 runs (borne 12 min depassee en attendant `Analyze (actions)`, vert depuis). `enforce_admins: false` est l'unique soupape. Verifie firsthand avant merge, pas sur la foi de la composition de l'adjoint : - B.0 : `check_unaddressed_nits.py` rc=0, 0 review, aucune reserve. - Composition #12804+#12819 sur main@59d209115 : **140 tests verts**. - Controle en direct des DEUX polarites, compose ET sur main : verdicts identiques sur #12798, #11628, #12868 -> **aucune regression** de l'organe. - Le `rc=1` sur #12798 rapporte par l'adjoint exige #12861 (author-lift), non compose ici : coherent. Consequence a acter : l'organe est **aujourd'hui aveugle a la reserve de #12798** (rc=0 sur main comme en composition). #12798 reste NE PAS MERGER jusqu'a #12861.
…ur (#12861) Durcit `check_unaddressed_nits.py` : une réserve de tiers ne peut être levée que par son **auteur**, pas par n'importe quel commentaire de la lane. Vérifications passées avant merge : - B.0 `check_unaddressed_nits.py 12861` rc=0 ; aucun `CHANGES_REQUESTED` ; - review Hermes `APPROVE (COMMENT : self-review cap jsboige/*)`, vérification réelle au head `0200fc0` (131 passed) ; - la tête a bougé depuis cette review (`b938e0000`), et les blobs des deux fichiers touchés **diffèrent** de la version revue — parce que `main` a entre-temps reçu #12804 et #12819, qui touchent le même fichier. Plutôt que de raisonner sur des blobs, suite relancée **par le coordinateur sur la tête réelle**, dans un worktree isolé à `b938e0000` : 142 passed in 0.23s (scripts/tests/test_check_unaddressed_nits.py) contre `140 passed` sur `main` au même instant : la PR ajoute bien 2 tests et n'en casse aucun. Mesure fraîche, postérieure au dernier commit, pas une relecture d'un vert antérieur. Merge **admin** assumé : le check requis `PR gate` ne rend plus de verdict sous la file CI. Le contournement est écrit ici. Débloque la séquence recommandée pour #12798 : #12861 sur `main` → levée explicite de la réserve tierce → #12580 → retarget #12798. See #12319
Grain: MED/guard — lane myia-po-2027:CoursIA-2 — prev: MED/ledger #12815
fix(guards,#12319) : une réserve n'est plus levée par n'importe quel commentaire de la lane
Correctif de l'organe B.0 lui-même :
check_unaddressed_nits.pyrendaitexit 0sur des PRs portant une réserve Hermes jamais levée, parce que la brancheelifconsultaitlift_events(tout commentairecan_lift) au lieu d'exiger une phrase de levée. La borne d'auteur #11145 y était vide : Hermes poste sousjsboige(self-review cap), les lanes poussent sousjsboige→nit_author == pr_author == "jsboige"sur pratiquement chaque PR du dépôt, et_lift_eligiblerendaitTruepour n'importe quel commentaire ultérieur de la lane — typiquement un[READY-FOR-MERGE SELF attestation]qui ne mentionne pas la réserve.Ce qui change
lift_eventsest supprimée (elle ne servait plus à rien) ; les re-reviewsAPPROVEDgardent leur rôle propre (fix(gate,#11044): un CHANGES_REQUESTED est levé par n'importe quel commentaire — 2e faux négatif du nits-gate, couche résolution #11222, état natif GitHub).CONDITIONAL_LIFTétendu en miroir aux constructions « je lève » : le regex ne couvrait que « et je merge / je merge dès… » alors que le commentaire deLIFT_MARKERSrevendiquait déjà « corrige X et je lève » comme condition non acquise. Découvert par le nouveau test de régressiontest_12319_levee_conditionnelle_ne_leve_pas_nit_commentaire(le contrôle négatif exigé par l'issue échouait sur le regex d'origine) — preuve que le test mord.Contrat de levée après ce fix
APPROVEDde l'auteur du nit[OVERRIDE] lane …coordinateur (trappe #11639)[READY-FOR-MERGE SELF attestation]sans phrase de levéeValidation
test_12319_*) —python -X utf8 -m pytest scripts/tests/test_check_unaddressed_nits.py -q.CHANGES_REQUESTEDd'ai-01 sur feat(lean,#12223): Lean-16g-Conway-Canons — barreau 2 (canon) #12271 attendait explicitement ce correctif (« exit 0 de cet organe ne vaut donc pas preuve d'absence de réserve tant que fix(guards): check_unaddressed_nits — toute réserve est levée par n'importe quel commentaire de la lane (nit_author == pr_author == jsboige) #12319 n'est pas passé »).--limit 30(merges du 2026-08-24T02:17→16:46) :scanned: 30, flagged: 0— pas d'explosion de faux positifs sur la population récente.--limit 400(portée demandée par l'issue) : lancé sur la branche, résultat posté en commentaire de cette PR dès complétion.Conformité
scripts/check_unaddressed_nits.py.[CLAIMED]paths-scoped posé sur fix(guards): check_unaddressed_nits — toute réserve est levée par n'importe quel commentaire de la lane (nit_author == pr_author == jsboige) #12319 avant d'éditer (comment 5400882225).origin/mainfrais.guardest un genre META — ce grain ne tient pas le plancher CONTENU (dette signalée avec les cycles précédents, pool CONTENU structurellement vide c.503-c.548). Le prochain grain de la lane sera CONTENU ou DEEP/MED de contenu.Closes #12319
🤖 Generated with Claude Code
Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com