You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
check_lane_claim: --paths est inatteignable en mode issue — la garde de collision PR-ouverte rend un all-clear silencieux dans la forme que L898 prescrit #16570
check_lane_claim.py <issue> --paths <glob> — la forme exacte que prescrit L898 — ne fait jamais tourner la jambe « PR ouverte ». La garde de collision cross-lane n'est atteignable que si aucun numero d'issue n'est fourni.
Quand issue et--paths sont presents, le flux retombe sur le mode issue-claim, ou my_paths ne sert qu'a scoper les marqueurs [OVERRIDE] (commentaire l. 3610-3611) — jamais a intersecter files[] des PRs ouvertes. Le garde existant est donc rendu inatteignable par la forme d'appel que les regles imposent.
Mesure A/B — seule difference : la presence du numero d'issue
Chemin temoin : scripts/notebook_tools/wsl_papermill.py + scripts/notebook_tools/check_lean4_wsl_repl.py, tous deux dans les files[] de la PR #16280 (OPEN, lane myia-po-2023:CoursIA). Lane appelante : myia-po-2024:CoursIA.
CLEAR ; free_paths: [P1, P2] ; "0 fichiers bloques / 2 libres dans le scope"
0
Le controle positif A est le mode --paths lui-meme : il est correct, il voit la PR, il rougit. B est la meme commande avec un numero d'issue en tete — et il rend un all-clear silencieux.
Cout mesure, ce cycle
La lane myia-po-2024:CoursIA a claimé #16176 sur la foi du CLEAR de B, implemente les deux findings sur les 4 memes fichiers que #16280, ecrit les tests et valide — avant de decouvrir que #16280 est OUVERTE depuis la lane voisine. Travail integralement jeté. Le picker, lui, l'avait signale (TRAVAIL EN COURS : PR #16280 OUVERTE couvre cette issue) ; c'est l'organe de claim qui a rassure a tort.
Pourquoi c'est le defaut a corriger plutot que « mal lance »
Le commentaire ai-01 du 2026-09-14 sur #14300 conclut : « Le pont que #14300 appelle existe deja — personne ne l'a lance », et reframe le remede de l'issue sur --paths. Cette mesure falsifie la premisse : lance dans la forme prescrite, le pont ne repond pas. Les lanes qui « ne l'ont pas lance » peuvent aussi l'avoir lance et lu un CLEAR — la conclusion « aucune lane n'a fauté » reste vraie, mais la cause n'est pas l'omission.
Le piege est dans le rapport lui-meme : free_paths et "N fichiers bloques / M libres dans le scope" portent sur le scope du claim, pas sur l'espace des PRs ouvertes. Rien dans la sortie B ne dit que la jambe PR n'a pas tourne.
Ce qui le repare
Faire tourner la jambe --pathsaussi quand un numero d'issue est fourni, sans casser ce pour quoi la branche existe (scoper les [OVERRIDE] par my_paths, #10342) :
en mode issue + --paths, ajouter la collision a la meme sortie JSON (open_pr_collisions) plutot qu'un second document sur stdout ;
router le verdict vers exit 2 sur collision cross-lane, contrat deja porte par _run_check_paths ;
controle positif obligatoire dans les tests : issue + --paths intersectant une PR ouverte d'une autre lane -> rc 2, PR nommee. Et un controle negatif : PR de sa propre lane -> rc 0 (self_overlap, on reprend son propre travail).
Hors scope
Ni la semantique du verdict IMPLICIT demandee par #14300 (livrable distinct, candidate-delivered), ni la peremption --stale-threshold (#12751), ni la forme canonique paths: (#12740). Uniquement l'atteignabilite de la jambe PR-ouverte en mode issue.
Le defaut
check_lane_claim.py <issue> --paths <glob>— la forme exacte que prescrit L898 — ne fait jamais tourner la jambe « PR ouverte ». La garde de collision cross-lane n'est atteignable que si aucun numero d'issue n'est fourni.scripts/check_lane_claim.py:3612:Quand issue et
--pathssont presents, le flux retombe sur le mode issue-claim, oumy_pathsne sert qu'a scoper les marqueurs[OVERRIDE](commentaire l. 3610-3611) — jamais a intersecterfiles[]des PRs ouvertes. Le garde existant est donc rendu inatteignable par la forme d'appel que les regles imposent.Mesure A/B — seule difference : la presence du numero d'issue
Chemin temoin :
scripts/notebook_tools/wsl_papermill.py+scripts/notebook_tools/check_lean4_wsl_repl.py, tous deux dans lesfiles[]de la PR #16280 (OPEN, lanemyia-po-2023:CoursIA). Lane appelante :myia-po-2024:CoursIA.check_lane_claim.py --lane myia-po-2024:CoursIA --paths P1 --paths P2check_lane_claim.py **16176** --lane myia-po-2024:CoursIA --paths P1 --paths P2CLEAR;free_paths: [P1, P2];"0 fichiers bloques / 2 libres dans le scope"Le controle positif A est le mode
--pathslui-meme : il est correct, il voit la PR, il rougit. B est la meme commande avec un numero d'issue en tete — et il rend un all-clear silencieux.Cout mesure, ce cycle
La lane
myia-po-2024:CoursIAa claimé #16176 sur la foi duCLEARde B, implemente les deux findings sur les 4 memes fichiers que #16280, ecrit les tests et valide — avant de decouvrir que #16280 est OUVERTE depuis la lane voisine. Travail integralement jeté. Le picker, lui, l'avait signale (TRAVAIL EN COURS : PR #16280 OUVERTE couvre cette issue) ; c'est l'organe de claim qui a rassure a tort.Pourquoi c'est le defaut a corriger plutot que « mal lance »
Le commentaire ai-01 du 2026-09-14 sur #14300 conclut : « Le pont que #14300 appelle existe deja — personne ne l'a lance », et reframe le remede de l'issue sur
--paths. Cette mesure falsifie la premisse : lance dans la forme prescrite, le pont ne repond pas. Les lanes qui « ne l'ont pas lance » peuvent aussi l'avoir lance et lu unCLEAR— la conclusion « aucune lane n'a fauté » reste vraie, mais la cause n'est pas l'omission.Le piege est dans le rapport lui-meme :
free_pathset"N fichiers bloques / M libres dans le scope"portent sur le scope du claim, pas sur l'espace des PRs ouvertes. Rien dans la sortie B ne dit que la jambe PR n'a pas tourne.Ce qui le repare
Faire tourner la jambe
--pathsaussi quand un numero d'issue est fourni, sans casser ce pour quoi la branche existe (scoper les[OVERRIDE]parmy_paths, #10342) :_run_check_pathsen une fonction pure partagee (un seul lecteur, variation-tag-guard: le tag en forme de titre## Grainest illisible par l'organe (38% des merges non attribués) #9485) ;--paths, ajouter la collision a la meme sortie JSON (open_pr_collisions) plutot qu'un second document sur stdout ;exit 2sur collision cross-lane, contrat deja porte par_run_check_paths;--pathsintersectant une PR ouverte d'une autre lane -> rc 2, PR nommee. Et un controle negatif : PR de sa propre lane -> rc 0 (self_overlap, on reprend son propre travail).Hors scope
Ni la semantique du verdict
IMPLICITdemandee par #14300 (livrable distinct,candidate-delivered), ni la peremption--stale-threshold(#12751), ni la forme canoniquepaths:(#12740). Uniquement l'atteignabilite de la jambe PR-ouverte en mode issue.Lane : libre. Genre :
tooling.