fix(gate,#17791): exempt hors-flotte PRs from the carrying-lane refusal (claude/* + Hors flotte) - #17798
Conversation
A maintainer cloud session (claude/* branch + « Hors flotte » body marker) carries no fleet lane, so validate_dossier's third-party check had no carrier to compare against and refused every dossier by construction -- the impasse measured on #17691. Both conditions mirror the tag_required exemption (#17713/#17715, variation_tag_required.py); either alone changes nothing. The gate names the exemption in its output and json (out_of_fleet), merge_ready consumes rc+ready and needs no change (verified: 41 tests pass). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
Trivial-diff advisory (#15740, non bloquant). |
Path-collision (organ #13359/#13615)Cette PR #17798 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Rouge Le seul échec réel est Preuve qu'il est hérité de la base, et non introduit ici :
L'entrée fautive est Conduite : je ne touche pas au registre d'autrui. Dès que #17835 est mergée, je fusionne |
|
[ADJOINT PREFLIGHT] NARRATIF — mesures de l'attestation (tete Porteur : 1. 2. 3.
4. Note que je dois a ai-01, et qui n'est PAS un blocage : cette PR modifie Absence de suite, justifiee par les declencheurs (et non pas constatee) : |
Grain: MED/guard — lane myia-po-2024:CoursIA — prev: LIGHT/docs #17795
Suit le spec de l'issue point par point. C'est la suite directe de #17713/#17726 : l'exemption hors flotte existait côté CI (
tag_required), pas côté gate de merge.Le défaut
carrying_lane()rendNonesans tagGrain:;validate_dossiertransforme ceNoneen refus. Juste pour une PR de flotte non taguée (sinon une lane prévaliderait sa propre PR). Pour une PR hors flotte (#17691 : brancheclaude/affectionate-mccarthy-6dvuea, marqueur « Hors flotte »), c'est une impasse structurelle :CLAUDE.md(« À qui ce fichier s'adresse ») dispense ces PRs du tag, aucune lane de la flotte ne les porte, donc toute lane qualifiante est tierce — mais le gate ne pouvait pas le voir.Le fix (
scripts/check_adjoint_prevalidation.py, +84 lignes avec tests)is_out_of_fleet(snapshot)— les DEUX conditions, miroir devariation_tag_required.py(fix(ci): le garde Grain-tag bloque les PRs hors flotte (sessions cloud du mainteneur) que CLAUDE.md exempte #17713/fix(ci,#17713): exempter les PRsclaude/*+Hors flottedu garde Grain-tag #17715) :headRefNamecommence parclaude/et le body porte « Hors flotte ». L'une sans l'autre n'exempte rien.validate_dossier: une PR hors flotte n'a aucune lane porteuse — le bloc carrier (refus « carrying lane cannot be established » et refus d'auto-attestation) est sauté. Le snapshot capture déjàheadRefName(l.1119).--jsonporteout_of_fleet: bool.Tests (4 nouveaux, miroir de l'acceptance 3)
claude/*+ marqueur + dossier lane qualifianteclaude/*sans marqueurSuite complète : 95 passed (
test_check_adjoint_prevalidation.py).Contrôle positif réel (acceptance 4)
--json:ready: true,out_of_fleet: true, dossiermyia-po-2023:CoursIA(existant, non re-tamponné) accepté à la tête050b650031.merge_ready.py— vérifié, aucun changementIl invoque le gate en CLI (l.435 :
check_adjoint_prevalidation.py <PR> --json) et litrc == 0+ready: true— le contrat d'interface ne bouge pas (rc 0-3 inchangés, cléout_of_fleetadditive). Ses 41 tests passent sur la branche.Closes #17791
🤖 Generated with Claude Code