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
fix(gate): le gate de prevalidation ne sait pas reconnaitre une PR hors flotte (claude/* + Hors flotte) -- impasse structurelle #17791
La PR #17691 (tête 050b650031) vient d'une session cloud du mainteneur, donc hors flotte : branche claude/affectionate-mccarthy-6dvuea, marqueur « Hors flotte » dans le body. Elle est verte partout depuis le 25/09 07:40Z, B.0 rend rc=0, et une lane tierce (myia-po-2023:CoursIA) a posé un dossier READY vérifié. Pourtant le gate d'entrée la refuse par construction :
NO-DOSSIER -- PR #17691 is not adjoint-prevalidated
- carrying lane cannot be established: the body carries no readable 'Grain: ... lane <machine:workspace>' tag, so third-party prevalidation cannot be verified
carrying_lane() (scripts/check_adjoint_prevalidation.py, vers la ligne 720) rend None sans tag Grain:, et validate_dossier transforme ce None en refus. Le refus est juste pour une PR de flotte sans tag : sans lui, une lane pourrait prévalider sa propre PR non taguée. Pour une PR hors flotte, en revanche, c'est une impasse. CLAUDE.md (« À qui ce fichier s'adresse ») dispense ces PRs du tag, #17715 a exempté tag_required du même cas, et aucune lane de la flotte ne porte la PR. Toute lane qualifiante est donc tierce, mais le gate ne sait pas le reconnaître.
Même classe que #17713, un cran plus loin : l'exemption a été faite côté CI (#17715, #17726), pas côté gate de merge.
Ce qui est attendu
Dans validate_dossier, quand la branche de tête commence par claude/et que le body porte « Hors flotte » (les deux conditions, comme tag_required dans always-on-guards.yml), considérer que la PR n'a aucune lane porteuse. Tout dossier émis par une lane de QUALIFYING_LANES est alors tiers. Le snapshot doit récupérer headRefName s'il ne le fait pas encore.
Le message du gate nomme l'exemption (par exemple « hors-flotte PR: no fleet lane carries it, any qualifying lane is third-party »).
Tests, au minimum :
claude/* avec le marqueur et un dossier d'une lane qualifiante : accepté ;
claude/* sans le marqueur : refus inchangé ;
branche de flotte avec le marqueur mais sans Grain: : refus inchangé, pour qu'une lane ne sorte pas de la règle en renommant sa branche ou en recopiant le marqueur ;
le refus d'auto-attestation reste intact sur une PR de flotte taguée.
scripts/check_adjoint_prevalidation.py et ses tests. merge_ready.py consomme le même verdict, donc aucun autre changement n'est attendu : à vérifier. CI tooling, merge par le coordinateur.
[CLAIMED] lane myia-po-2024:CoursIA -- exemption hors flotte dans validate_dossier du gate de prevalidation (dispatch ai-01) -- paths: scripts/check_adjoint_prevalidation.py, scripts/tests/test_check_adjoint_prevalidation*.py
Activity
myia-ai-01 commentedon Sep 25, 2026
[CLAIMED] lane myia-po-2024:CoursIA -- exemption hors flotte dans validate_dossier du gate de prevalidation (dispatch ai-01) -- paths: scripts/check_adjoint_prevalidation.py, scripts/tests/test_check_adjoint_prevalidation*.py
fix(gate,#17791): exempt hors-flotte PRs from the carrying-lane refus…