Skip to content

fix(guards,#12319): une réserve n'est plus levée par n'importe quel commentaire de la lane - #12819

Merged
jsboige merged 1 commit into
mainfrom
fix/12319-nits-lift-marker
Aug 25, 2026
Merged

jsboige merged 1 commit into
mainfrom
fix/12319-nits-lift-marker

Conversation

@jsboige

@jsboige jsboige commented Aug 24, 2026

Copy link
Copy Markdown
Owner

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.py rendait exit 0 sur des PRs portant une réserve Hermes jamais levée, parce que la branche elif consultait lift_events (tout commentaire can_lift) au lieu d'exiger une phrase de levée. La borne d'auteur #11145 y était vide : Hermes poste sous jsboige (self-review cap), les lanes poussent sous jsboige → nit_author == pr_author == "jsboige" sur pratiquement chaque PR du dépôt, et _lift_eligible rendait True pour 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

# avant : tout commentaire can_lift de la lane éteint la réserve
elif any(when < t < cutoff and _lift_eligible(a, login, b) for (t, a, b) in lift_events):
    continue

# après : explicit_lifts (LIFT_MARKER requis) OU re-review APPROVED de l'auteur
elif (any(
          when < t < cutoff and _lift_eligible(lift_author, login, lift_body)
          for (t, lift_author, lift_body) in explicit_lifts
      ) or any(
          when < t < cutoff and author == login
          for (t, author, _) in approved_rereviews
      )):
    continue
  • La construction lift_events est supprimée (elle ne servait plus à rien) ; les re-reviews APPROVED gardent 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 de LIFT_MARKERS revendiquait déjà « corrige X et je lève » comme condition non acquise. Découvert par le nouveau test de régression test_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

Geste Lève ?
Commentaire portant un marqueur de levée explicite (« je lève », « levée », « LGTM », « est adressé ») OUI
Re-review APPROVED de l'auteur du nit OUI
[OVERRIDE] lane … coordinateur (trappe #11639) OUI
« corrige X et je lève » / « … et je merge » (condition non acquise) NON
[READY-FOR-MERGE SELF attestation] sans phrase de levée NON (le bug)
Commit poussé après la remarque NON (inchangé)

Validation

Conformité

Closes #12319

🤖 Generated with Claude Code

Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com

…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>
@jsboige

jsboige commented Aug 24, 2026

Copy link
Copy Markdown
Owner Author

Audit post-fix --limit 400 (portée demandée par #12319)

Résultat : 400 scannés (merges du 2026-08-20T18:56 → 2026-08-24T16:46), 31 flaggés (blocked: true = l'organe corrigé aurait refusé le merge).

Liste : #12632 #12589 #12565 #12460 #12371 #12347 #12334 #12323 #12306 #12292 #12288 #12278 #12277 #12274 #12267 #12265 #12261 #12260 #12187 #12159 #12149 #12148 #12141 #12136 #12134 #12119 #12077 #12028 #12027 #11993 #11987

Spot-checks (2) pour caractériser la population avant tout arbitrage :

Lecture : les 31 ne sont pas 31 dégâts — c'est le compte des merges qui n'ont pas de preuve écrite de levée. Le tri CONFIRMED vs couvert-implicitement relève de l'arbitrage ai-01/user (protocole audit-reassessment, échantillon à reclasser avant tout fix rétroactif). Aucune action lane de ma part sur ces PRs mergées.

Log complet : audit400.json exécuté sur la branche de cette PR (commit 09914fe).

@github-actions github-actions Bot added the lane-claim-absent Closing issue carries no claim at all (#10223) label Aug 25, 2026
jsboige added a commit that referenced this pull request Aug 25, 2026
…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.
@jsboige
jsboige merged commit 002a88d into main Aug 25, 2026
27 of 30 checks passed
jsboige added a commit that referenced this pull request Aug 25, 2026
…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
@jsboige
jsboige deleted the fix/12319-nits-lift-marker branch September 2, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(guards): check_unaddressed_nits — toute réserve est levée par n'importe quel commentaire de la lane (nit_author == pr_author == jsboige)

1 participant