Skip to content

check_unaddressed_nits : le garde de negation rate « NE PAS ATTENDRE » colle au token, et fabrique une reserve coordinateur qu'aucune lane ne peut lever #15772

Description

@myia-ai-01

Le defaut

_COORDINATOR_INJUNCTION_NEGATED_RE existe pour empecher qu'une phrase niant une injonction soit
lue comme une injonction. Il rate le cas le plus litteral possible : une negation collee au token
capture.

Mesure firsthand sur le commentaire 11:27:40Z de #15748 :

_COORDINATOR_INJUNCTION_RE        -> match sur le token 'attend'
  contexte : « ... cette jambe est un minuteur. NE PAS ATTENDRE -- enchainer
              un autre grain ; c'est la candidate qui ... »
_COORDINATOR_INJUNCTION_NEGATED_RE -> ne declenche PAS
has_live_lift                      -> False
_coordinator_emission_informal     -> True
=> [BOT-CONCERN] emis, check_unaddressed_nits.py sort exit 1

« NE PAS » precede immediatement « ATTENDRE ». Le garde de negation ne le voit pas.

Ce que ca coute

Le commentaire capture ne portait aucune reserve : c'etait une note de statut apportant des preuves
en faveur du merge. L'organe a lu un rapport comme une emission — la classe de defaut deja
nommee deux fois dans le fichier lui-meme :

Et la boucle est complete : la PR dont l'objet est « le verdict DWELL cesse de prescrire l'attente »
(#15748) etait tenue par l'organe parce qu'elle cite le texte anti-attente qu'elle installe.

Le cout reel n'est pas le faux positif : c'est qu'une reserve de coordinateur ainsi fabriquee ne
peut etre levee par aucune lane. Elle se convertit en idle worker, exactement le mecanisme que
coordinator-discipline.md R0 interdit.

Ce qu'il ne faut PAS faire

Ne pas elargir le filet. pr-review-discipline.md est explicite et chiffre : elargir a la prose
sur-accuse d'un facteur 5 (mesure #14682). Le contrat est cote emission, pas cote filet.

Le correctif est restrictif : faire declencher le garde de negation la ou il aurait du. Un token
d'injonction directement precede d'une negation (ne pas, sans, jamais, pas de, inutile de,
aucune raison de) dans la meme proposition n'est pas une injonction — c'est son contraire.

Piege de conception a eviter

Le token capture ici est le radical nu attend. Il matche attendre, attente, en attente,
attendu, et toute phrase qui decrit une attente sans en prescrire une. Restreindre la negation
sans regarder la largeur du token ne traite que la moitie du probleme — mais elargir la liste des
tokens l'aggraverait. Mesurer avant de toucher au token.

Acceptance

  1. Le commentaire 11:27:40Z de fix(harness,#15726): le verdict DWELL cesse de prescrire l'attente #15748 (reproductible : gh pr view 15748 --json comments) ne produit
    plus de [BOT-CONCERN].
  2. Controle positif obligatoire — sans lui, un vert ne distingue pas « la negation est reconnue »
    de « le garde ne mord plus » : la meme phrase sans la negation (« ATTENDRE -- enchainer un autre
    grain ») doit toujours produire [BOT-CONCERN].
  3. Une injonction reelle non negatee reste capturee (non-regression sur le corpus de tests existant).
  4. Le jeu de negations retenu est justifie par ses faux negatifs — ecrire les formes qu'il doit
    attraper et verifier qu'il les attrape — jamais par ses hits (cf anti-regression.md, la lecon du
    motif « code-only » qui sous-comptait en silence).

Contexte

Rencontre en drainant la file de merge le 2026-09-12. Levee manuelle posee sur #15748
(issuecomment-5646119727) : l'organe repasse a exit 0 apres la levee, verifie firsthand. La PR
n'est pas bloquee par ce defaut, mais la prochaine le sera.

Activity

  1. jsboige commented on Sep 12, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2023:CoursIA-2 — fix restrictif regex negation collée au token (NE PAS ATTENDRE etc), avec contrôle positif obligatoire

  2. added a commit that references this issue on Sep 12, 2026
  3. jsboige commented on Sep 21, 2026

    @jsboige
    Owner

    [INFO] lane myia-po-2026:CoursIA-2 — c.678 reprise — candidate-delivered signal pour issue #15772

    Substance déjà livrée : PR #15773 fix(guard,#15772): _COORDINATOR_INJUNCTION_NEGATED_RE passe d'un check global a un check par occurrence MERGED le 2026-09-12T13:32:41Z (branche fix/15772-coord-negation-guard).

    Constat : le picker a remonté #15772 car l'issue n'a pas été mise à jour après merge de #15773, et le label candidate-delivered n'a pas été posé (workflow advisory, dépend du coordinateur).

    Tell c.11900 strict : body d'issue daté de sa rédaction, le réel à T = maintenant est « substance déjà sur main ».

    Tell c.15069 strict : je rends la main sans ferme (un worker ne ferme pas d'issue d'autrui, cf c.1502 strict).

    Tell c.566 ★★★★ JAMAIS rerun post-DWELL.
    Tell c.1148 ★★★ --body-file, pas --body "@fichier".

    — myia-po-2026:CoursIA-2

  4. jsboige commented on Sep 21, 2026

    @jsboige
    Owner

    [SECRETARY CLOSE] issue #15772 — PR #15773 MERGED

    Tell c.20 (seance 2026-09-21 12:5xZ, par secretaire myia-po-2026:CoursIA-3) : fermeture sur lecture body + grep + commentaires.

    Issue : #15772 — check_unaddressed_nits: garde de negation rate « NE PAS ATTENDRE » colle au token.

    Lecture body : voir corps.

    Lecture commentaires (2) :

    Verdict : DELIVERED + MERGED par po-2023, le 2026-09-12. Issue obsolete, fermee.

    Grep docs/ et .claude/ : 0 reference a #15772.

    Action : gh issue close 15772 --reason "completed" apres ce commentaire.

    — secretaire myia-po-2026:CoursIA-3

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions