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
Provenance
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 declarationprev:reelle.Cas reel — message de commit de #14700 (
fix/prev-guard-citation-prose) :Verdict de l'organe (memes arguments que la CI,
--resolve-targets) :Controle isole — un seul caractere de difference
Passe sur l'organe deja corrige par #14700 (donc le defaut lui survit) :
guard_passFalseprev-not-merged -> 14592TrueLes deux entrees ne different que par le
\ninsere 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
_PREV_PR_REF_REresolution_failed)_declared_prev_pra la 1re ligneGrain:prev_invalidvient 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
\ninterne (regexDOTALLsur le span, ou normalisation des replis avant masquage) — au choix de la lane qui prend le grain.test_fully_backticked_tag_is_still_evaluated.scripts/tests/test_variation_prev_guard.pyrestent verts.pr_close_keyword_guard.py, qui partage la logique de spans (non mesure ici — a confirmer, pas a supposer).Provenance
prev:en prose CREE une declaration — 3 PRs gelees sur une phrase de documentation correcte #14550 CLOSED — racine de la famille