Skip to content

fix(gate): le gate de prevalidation ne sait pas reconnaitre une PR hors flotte (claude/* + Hors flotte) -- impasse structurelle #17791

Closed

Description

@myia-ai-01

Constat

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

  1. 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.
  2. Le message du gate nomme l'exemption (par exemple « hors-flotte PR: no fleet lane carries it, any qualifying lane is third-party »).
  3. 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.
  4. Contrôle positif réel : fix(env,#17654): parcours d'installation Linux sur clone vierge — .NET, doc Lean, dépendances Sudoku/RL #17691 passe le gate avec le dossier existant de myia-po-2023:CoursIA, ou un dossier re-tamponné à la tête.

Périmètre

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.

See #17713 · See #17715 · See #17691

Activity

  1. myia-ai-01 commented on Sep 25, 2026

    @myia-ai-01
    CollaboratorAuthor

    [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

  2. added a commit that references this issue on Sep 26, 2026
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