Skip to content

guard check_unaddressed_nits : documenter la capture positionnelle de A+ et temoigner la frontiere 60 chars de D+ (obs 2 et 3 de la review sur #12881) #13474

Closed

Description

@myia-ai-01

Les observations 2 et 3 de la review NanoClaw du 2026-08-26T16:48:51Z sur
#12881 n'ont jamais recu de phrase — ni reponse, ni thread resolu, ni issue.
Seule l'observation 1 a ete traitee (#13425, implementee par 7dbeedac72b).
Constate au merge-gate de #12881 : check_unaddressed_nits rendait OK, ce qui
repond « aucune phrase de levee ne manque » et rien d'autre — pas « la
substance est traitee ». Les deux points ci-dessous sont donc reportes
sciemment, avant fusion, et non oublies.

Aucun des deux n'est un defaut de correction : les trois FP du contrat #12871
sont neutralises et les trois contre-exemples tiennent. Ce sont deux dettes de
lisibilite sur un garde que d'autres lanes devront relire.

Observation 2 -- la capture A+ est positionnee sur le PREMIER caps-token

Motif au head :

r"[^()\n]{0,40}\(\s*((?-i:[A-Z][A-Z_]{3,}))[^()\n]{0,80}\)"

Le groupe de capture est ancre juste apres la parenthese ouvrante : il prend le
premier token en capitales, pas « le verdict ». Verifie de premiere main sur
la tete de branche.

Consequence sur l'exemple de NanoClaw, (BOT_CONCERTATION a propos du BOT_CONCERN) : c'est BOT_CONCERTATION qui est capture, donc le vrai marqueur
BOT_CONCERN survit — le garde reste bruyant. La direction de l'echec est
donc la bonne (fail-loud), et c'est pourquoi ce n'est pas un bug.

Mais rien dans le commentaire ne dit que la capture est positionnelle. Un
lecteur qui suppose « le motif capture le verdict » raisonnera faux sur le
prochain cas. Forme du fix : une ligne de commentaire, pas un changement de
motif.

Observation 3 -- D+ et E se chevauchent, la frontiere 60 chars n'est pas testee

FP3 est couvert a la fois par D+ (ref nue dans la fenetre 60 chars
post-verdict) et par E (verdict en tete apres review/revue, fenetre 200
chars). Pas de bug : un chevauchement de couverture est sur.

Le trou est ailleurs : la frontiere des 60 chars n'a pas de temoin. Si D+
devient un jour suffisant, E ne sert plus que pour les refs de plus de 60
chars — et personne ne saura que cette frontiere existe le jour ou elle bougera.

Forme du fix : un test de frontiere a exactement 60 chars (un cas a 60, un
cas a 61), qui ECHOUE si la fenetre est modifiee. Le test vaut ici plus que le
commentaire : c'est une constante numerique, la seule chose qui la protege est
un temoin.

Acceptance

See #12871, #12881, #13425

Activity

  1. jsboige commented on Aug 29, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2026:CoursIA -- paths: scripts/check_unaddressed_nits.py, scripts/tests/test_check_unaddressed_nits.py -- 2026-08-29T09:25Z

  2. jsboige commented on Aug 29, 2026

    @jsboige
    Owner

    Delivre par PR #13481 (lane myia-po-2026:CoursIA). Note honnete : la « frontiere 60 chars » de l'acceptance heritait du commentaire D+ — le code enforce {0,12} (mesure : gap 12 matche, 13 ne matche plus). Les temoins encadrent la borne REELLE 12/13, valides par mutation ({0,13}? tue le temoin hors-borne, {0,10}? tue le temoin dans-borne). Commentaires corriges en consequence.

  3. added a commit that references this issue on Aug 29, 2026
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