Skip to content

guard(prev_guard): le masquage des backticks ne survit pas a un repli de ligne (3e axe de #14550) #14703

Description

@myia-ai-01

Troisieme angle mort de la famille #14550 (« citer un tag prev: en prose CREE une declaration »), mesure firsthand le 2026-09-05 sur PR #14700.

Le defaut

Le masquage des portees entre backticks livre par #14560 ne survit pas a un repli de ligne. Une citation coupee au milieu du span reste visible pour _PREV_PR_REF_RE, qui la lit comme une declaration prev: reelle.

Cas reel — message de commit de #14700 (fix/prev-guard-citation-prose) :

L4| defect. The commit body documents the bug in prose, citing `prev: MED/training
L5| #14592` in backticks inside a numbered list, with NO Grain: line of its

Verdict de l'organe (memes arguments que la CI, --resolve-targets) :

prev_invalid: [{"location": "commits[0]", "kind": "prev-not-merged", "prev_pr": 14592}]

Controle isole — un seul caractere de difference

Passe sur l'organe deja corrige par #14700 (donc le defaut lui survit) :

Forme de la citation guard_pass hits
span backticke sur deux lignes False prev-not-merged -> 14592
span backticke sur une ligne True aucun

Les deux entrees ne different que par le \n insere dans le span. C'est donc le repli de ligne qui porte le defaut, pas le contenu.

Pourquoi les trois correctifs deja livres ne le couvrent pas

Axe PR Ce qu'il traite Le span multi-lignes ?
1 #14560 MERGED masquage des backticks dans _PREV_PR_REF_RE non — masquage mono-ligne
2 #14633 MERGED fail-open rendu visible (resolution_failed) non — orthogonal
3 #14700 OPEN bornage de _declared_prev_pr a la 1re ligne Grain: non — chemin de code different (prev_invalid vient du scan regex, pas du fallback)

Les trois sont justes ; aucun ne regarde cet axe.

Effet observe

Une PR est bloquee par un defaut qu'elle documente en prose — expliquer le bug dans un message de commit suffit a le declencher. Meme piege auto-referentiel que #14550, deplace d'un cran.

Acceptance

  • Le masquage des spans backtickes tolere le \n interne (regex DOTALL sur le span, ou normalisation des replis avant masquage) — au choix de la lane qui prend le grain.
  • Un test qui echoue sans le patch reproduit la forme exacte ci-dessus (span coupe entre deux lignes), en plus du cas mono-ligne deja couvert par test_fully_backticked_tag_is_still_evaluated.
  • Non-regression : les tests de scripts/tests/test_variation_prev_guard.py restent verts.
  • Verifier que le meme repli ne casse pas le masquage de pr_close_keyword_guard.py, qui partage la logique de spans (non mesure ici — a confirmer, pas a supposer).

Provenance

No activity

Activity on this issue will appear here.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions