You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(b0): la voie 3 leve une reserve Hermes postee sous jsboige par une levee voix nue qui ne la nomme pas #17507
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
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.
Témoin négatif : sous jsboige, réserve voix nue suivie d'une levée voix nue → levée (voie 3 préservée).
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 :
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:[Hermes], sur l'allowlist du garde d'isolation ;myia-po-2025:CoursIA-2), voix nue.Simulation
analyse()sur les données réelles de la PR :Je lève mon point du commentaire 5788054957.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 sousjsboigesur cette PR. Le gate de prévalidation lit cerc=0, et un dossierb0: clearpeut 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 sousjsboigepasse 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-Myialève SA réserve[Hermes]en voix nue) n'est pas touché.clusterManager-Myiaest un login de persona, pas un login partagé.Acceptance
jsboige, réserve[Hermes]suivie d'une levée voix nue qui nomme un autre commentaire → la réserve Hermes reste bloquante.jsboige, réserve voix nue suivie d'une levée voix nue → levée (voie 3 préservée).test_auteur_du_nit_leve_son_nitet 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.--auditavant 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.