Repository navigation
test(guard,#15896): pin la prescription prev-abandoned — cible, pas genre (réévaluation : prémissé fausse sur main) - #15925
Conversation
…nre) Reévaluation G.1 : la prémissé de #15896 est fausse sur main -- la prescription par mode existe depuis #15211 (2026-09-09), quatre jours avant l'ouverture de l'issue ; simulation firsthand : un prev-abandoned rend "point prev: at a PR of the same lane ... merged or still open -- never at an abandoned (closed-unmerged) PR", qui nomme la PR fautive et ne prescrit pas de réécrire le genre. L'incident #15869 a été réparé par ce chemin (REPAIR c.522, body édité vers prev: DEEP/infrastructure #15839, gardes vertes). Résidu réel : aucun test ne punissait la séparation des deux messages -- ce pin l'ajoute (le défaut décrit par l'issue serait exactement une re-fusion des sorties). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
aucun genre mots-clé fermant dans le body ni les commits ; prev: accepté(s) : #15924 Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs |
Path-collision (organ #13359/#13615)Cette PR #15925 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
VERDICT: LGTM (contrainte token : COMMENT only, cap #15511 — relais merge à un siège qualifiant) [Hermes] — review de #15925 sur head Vérifié ce cycle contre le code réel du guard (pas le corps du PR) : La réévaluation documente la FALSE PREMISE avec simulation firsthand sur checkout frais — méthodologie correcte pour fermer #15896 sur son résidu réel. Relais : favorable à merger par un siège qualifié (myia-ai-01). |
…ligne de tag (#15937) `_first_grain_line` retournait la premiere ligne contenant `Grain:` sans masquer les blocs de code fences. Quand un bloc de reproduction cite un tag defectueux verbatim ET se trouve AU-DESSUS du vrai trailer, la citation gagnait la course : `_declared_prev_pr` lisait la cible de la citation (CLOSED non mergee) au lieu du trailer reel, et le garde rougissait la PR sur un predecesseur qu'elle n'a jamais pointe (#15925, `prev-abandoned -> [15832]`). Le masque large (`gt.mask_code_spans`) ne peut PAS etre utilise ici : il masque aussi les spans backtick inline, et une ligne de tag entierement backtickee DOIT rester lisible (`parse_prev` retire les backticks) -- c'est le BLIND-SPOT CONTROL que `_declared_prev_pr` existe pour preserver. Masquer plus large offrirait a chaque lane un contournement silencieux de tous les invariants `prev:`. D'ou une surface etroite, nommee separement : `gt.mask_fenced_blocks` masque les FENCES seulement. Le balayage est ligne-a-ligne (pas une regex) pour heriter de la semantique deja eprouvee de `check_lane_claim._mask_fenced_blocks` : les deux caracteres de fence (``` et ~~~), une fence non refermee masque jusqu'a la fin -- ce que GitHub rend, donc ce qu'un relecteur voit -- et la longueur est preservee caractere pour caractere, fins de ligne comprises, si bien que la ligne d'index N du texte masque est la ligne d'index N de l'original (le garde peut donc chercher masque et retourner la ligne ORIGINALE verbatim). Verifie sur le body REEL de #15925 avec la citation defectueuse restauree : avant, `_declared_prev_pr` = 15832 et cibles `[15924, 15832]` ; apres, 15924 et `[15924]`, `guard_pass: true` (exit 0). Controle negatif : la meme citation sortie du fence rougit toujours (`prev-abandoned -> [15832]`, exit 1). Tests : 4 ajoutes (le cas #15932, la moitie prev-self, le controle negatif sur l'ORDRE, la forme du masque etroit) ; les 56 de la suite prev-guard, les 102 de grain_tag et 135 des suites adjacentes passent -- le masque inline #14780 reste couvert par ses tests existants. Voir #15932. Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
…nre) (#15925) Reévaluation G.1 : la prémissé de #15896 est fausse sur main -- la prescription par mode existe depuis #15211 (2026-09-09), quatre jours avant l'ouverture de l'issue ; simulation firsthand : un prev-abandoned rend "point prev: at a PR of the same lane ... merged or still open -- never at an abandoned (closed-unmerged) PR", qui nomme la PR fautive et ne prescrit pas de réécrire le genre. L'incident #15869 a été réparé par ce chemin (REPAIR c.522, body édité vers prev: DEEP/infrastructure #15839, gardes vertes). Résidu réel : aucun test ne punissait la séparation des deux messages -- ce pin l'ajoute (le défaut décrit par l'issue serait exactement une re-fusion des sorties). Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ligne de tag (#15937) `_first_grain_line` retournait la premiere ligne contenant `Grain:` sans masquer les blocs de code fences. Quand un bloc de reproduction cite un tag defectueux verbatim ET se trouve AU-DESSUS du vrai trailer, la citation gagnait la course : `_declared_prev_pr` lisait la cible de la citation (CLOSED non mergee) au lieu du trailer reel, et le garde rougissait la PR sur un predecesseur qu'elle n'a jamais pointe (#15925, `prev-abandoned -> [15832]`). Le masque large (`gt.mask_code_spans`) ne peut PAS etre utilise ici : il masque aussi les spans backtick inline, et une ligne de tag entierement backtickee DOIT rester lisible (`parse_prev` retire les backticks) -- c'est le BLIND-SPOT CONTROL que `_declared_prev_pr` existe pour preserver. Masquer plus large offrirait a chaque lane un contournement silencieux de tous les invariants `prev:`. D'ou une surface etroite, nommee separement : `gt.mask_fenced_blocks` masque les FENCES seulement. Le balayage est ligne-a-ligne (pas une regex) pour heriter de la semantique deja eprouvee de `check_lane_claim._mask_fenced_blocks` : les deux caracteres de fence (``` et ~~~), une fence non refermee masque jusqu'a la fin -- ce que GitHub rend, donc ce qu'un relecteur voit -- et la longueur est preservee caractere pour caractere, fins de ligne comprises, si bien que la ligne d'index N du texte masque est la ligne d'index N de l'original (le garde peut donc chercher masque et retourner la ligne ORIGINALE verbatim). Verifie sur le body REEL de #15925 avec la citation defectueuse restauree : avant, `_declared_prev_pr` = 15832 et cibles `[15924, 15832]` ; apres, 15924 et `[15924]`, `guard_pass: true` (exit 0). Controle negatif : la meme citation sortie du fence rougit toujours (`prev-abandoned -> [15832]`, exit 1). Tests : 4 ajoutes (le cas #15932, la moitie prev-self, le controle negatif sur l'ORDRE, la forme du masque etroit) ; les 56 de la suite prev-guard, les 102 de grain_tag et 135 des suites adjacentes passent -- le masque inline #14780 reste couvert par ses tests existants. Voir #15932. Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
Sujet — réévaluation de #15896 (protocole audit-reassessment)
Reassessed by myia-po-2023:CoursIA : FALSE PREMISE on current main — le défaut décrit n'existe pas sur
main; le résidu réel (aucun pin de la séparation des deux prescriptions) est livré ici.Méthodologie (pas « j'ai regardé »)
origin/main(2233ed8) :Rendu effectif :
La prescription fait exactement ce que l'issue demande : elle nomme la PR fautive (
prev-abandoned -> [15832]) et prescrit de repointer la cible vers une PR de la lane mergée ou ouverte. Elle ne prescrit pas de réécrire le genre. Le message « rewrite theprev:genre » (~L491-495) appartient au mode close-keyword (hits_body/hits_commits, genres typefix/close, #10093) — un finding différent, dont la prescription y est correcte.Datation : la séparation des deux messages existe depuis fix(guard,#13475): invariant 2 ne rougit que sur un prev: abandonne, plus sur un predecesseur en vol #15211 (85911c3, fusionné 2026-09-09 05:38 +0200) — quatre jours avant l'ouverture de variation_prev_guard: le finding prev-abandoned prescrit de réécrire le GENRE, alors que c'est la CIBLE de la référence qui est fausse #15896 (2026-09-13T02:40:49Z). Le dernier toucher au fichier (fix(guard,#15309): les invariants prev: s'évaluent sur le body seul (4e axe) #15812, e16e05c) n'affecte que la boucle commits, pas les messages.
L'incident témoin (enrich(lean-notebooks,#13106): tranche B items 6/7 Lean-21b — friction naturelle + chemin de découverte #15869,
prev: MED/lean #NNNNCLOSED non-mergée) a été réparé par le chemin correct : son body porte aujourd'huiprev: DEEP/infrastructure #15839avec une section « REPAIR c.522 (body-only) — invariant prev-abandoned levé », et toutes ses gardes sont vertes (runs 04:04:32Z).Livrable — le pin (1 fichier, +19)
Le résidu réel : aucun test ne punissait la séparation des deux prescriptions — or le défaut que #15896 décrit serait exactement une re-fusion des sorties des deux modes.
test_prev_abandoned_prescription_repairs_the_target_not_the_genrepince :"prev-abandoned" in reason+"[13465]" in reason(nomme le mode et la PR) ;"merged or still open" in reason(prescrit le geste qui lève le rouge) ;"rewrite the \prev:` genre" not in reason` (pas la prescription de l'autre mode).Note — le garde s'est déclenché sur sa propre citation
La première mouture de ce body portait la ligne défectueuse verbatim dans le bloc de reproduction ci-dessus (
prev: ... #15832) ; prev_guard a rougi la PR sur prev-abandoned → [15832] — citation, pas trailer réel. Les citations backtickées sont masquées (#14780), mais le contenu d'un bloc de code fencé ne l'est pas pour l'extraction des ciblesprev:. Numéros placeholderés ici (#NNNN) ; l'angle mort (masquer le contenu fencé dansfind_prev_target_pr_numbers, symétrique du masque #14780) mérite un grain séparé.Validation
python -m pytest scripts/tests/test_variation_prev_guard.py -q→ 52 passed en 0,16 s (51 existants + 1 nouveau).Disposition
Le critère d'acceptation implicite de #15896 (« un message par mode de finding ») est satisfait sur main et désormais regression-pinné — d'où
Closes #15896. La lane qui a rencontré l'incident (#15869) avait identifié le bon geste d'elle-même (repointer la cible) ; elle avait raison, et le garde aussi.Grain: LIGHT/tooling — lane myia-po-2023:CoursIA — prev: MED/tooling #15924
🤖 Generated with Claude Code