Skip to content

fix(b0): la voie 3 leve une reserve Hermes postee sous jsboige par une levee voix nue qui ne la nomme pas #17507

Description

@jsboige

Constat

scripts/check_unaddressed_nits.py (organe B.0, main à f0e5f2c378) compte comme levée d'une réserve Hermes un commentaire voix nue qui ne la nomme pas, quand les deux sont postés sous le login partagé jsboige.

C'est l'inverse du contrat que le code écrit lui-même, l.4437 :

Lift voix nue par jsboige ne leve que les reserves voix nue du MEME auteur.

La voie 3 de _lift_eligible (l.4547) ne regarde que le lift (pas de persona, pas de lane, pas de préfixe de rôle, phrase de levée vive). Elle ne regarde jamais si la réserve porte un marqueur de persona. Le commentaire l.4542 l'assume (« independamment du scope du nit »), en renvoyant la garde persona-contre-user à la voie 1. Or la voie 1 ne couvre qu'un sens, lift persona contre réserve user. L'autre sens, lift voix nue contre réserve persona, n'est gardé nulle part.

Reproduction mesurée (PR #16924, tête c492c9dc4a, 2026-09-23)

Deux réserves ouvertes, toutes deux sous jsboige :

  • la review 5258813293 du 20/09, préfixée [Hermes], sur l'allowlist du garde d'isolation ;
  • le commentaire 5788054957 de l'adjoint (myia-po-2025:CoursIA-2), voix nue.

Simulation analyse() sur les données réelles de la PR :

Surfaces Réserves bloquantes
sans levée 2
+ le commentaire voix nue Je lève mon point du commentaire 5788054957. 0

La phrase ne nomme que le commentaire de l'adjoint, et elle éteint aussi la review Hermes. Sur #16924, le fond de la réserve Hermes se trouve être traité en code. L'organe, lui, le déduit d'une levée qui ne dit rien de la réserve.

Pourquoi c'est grave

Toutes les lanes, les personas et le user postent sous jsboige. N'importe quelle lane qui lève sa propre remarque sur une PR éteint donc, du même geste, toutes les réserves Hermes ou NanoClaw postées sous jsboige sur cette PR. Le gate de prévalidation lit ce rc=0, et un dossier b0: clear peut suivre de bonne foi.

Correctif proposé

Dans la voie 3, quand lift_author == nit_author == "jsboige" (login partagé), refuser la levée si la réserve porte un marqueur de persona (_PERSONA_MARKERS_RE) et que le lift n'en porte pas. La levée d'une réserve persona sous jsboige passe alors par la voie 1 (lift persona), l'override coordinateur nommant la persona, ou la re-review.

Le cas test_auteur_du_nit_leve_son_nit (clusterManager-Myia lève SA réserve [Hermes] en voix nue) n'est pas touché. clusterManager-Myia est un login de persona, pas un login partagé.

Acceptance

  1. Nouveau test, témoin positif : sous jsboige, réserve [Hermes] suivie d'une levée voix nue qui nomme un autre commentaire → la réserve Hermes reste bloquante.
  2. Témoin négatif : sous jsboige, réserve voix nue suivie d'une levée voix nue → levée (voie 3 préservée).
  3. test_auteur_du_nit_leve_son_nit et les tests check_unaddressed_nits: un LGTM de reviewer eteint la reserve du USER (login partage jsboige) — rc=0 sur #14795 mesure #14850 et fix(organs): un acquit de persona eteint le nit user — meme login n'est pas meme voix (B.0) #14947 restent verts.
  4. Sweep --audit avant et après sur les PRs ouvertes. Chaque PR qui repasse de 0 à au moins 1 est listée dans la PR : ce sont les faux verts actuels.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions