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
Le gate de Phase 4 n'accepte qu'UN auteur de dossier : troisieme plafond de debit, mesure sous rate-limit secondaire #17020
Le gate de Phase 4 (scripts/check_adjoint_prevalidation.py) exige que le commentaire-dossier soit ecrit par un seul compte GitHub :
SHARED_GITHUB_LOGIN="jsboige"
...
ifdossier.author!=SHARED_GITHUB_LOGIN:
errors.append(f"comment author must be {SHARED_GITHUB_LOGIN!r}")
(lignes 108 et 397-398 sur main au 2026-09-20)
Le dossier etant l'unique ticket d'entree de la passe de merge, la production de dossiers de toute la flotte passe par un seul compte, dont le quota d'API est partage par toutes les lanes.
La mesure qui rend le plafond visible (2026-09-20, ~17 h UTC)
Identite
gh api user
gh api rate_limit
jsboige
403API rate limit exceeded for user ID 3159389
core 5000/5000, graphql 5000/5000, toutes ressources pleines
myia-ai-01
200
idem, pleines
Deux faits se lisent ensemble :
Le refus est un rate-limit SECONDAIRE (anti-rafale). Il n'apparait pas dans /rate_limit : l'endpoint affichait quota plein sur les 15 ressources pendant que les appels reels rendaient 403. Le seul instrument fiable est la sortie d'un vrai appel.
Pendant ce refus, aucun dossier ne peut etre emis par personne — ni l'adjoint, ni une lane, ni le coordinateur — alors que myia-ai-01 etait a quota plein et que les organes, une fois epingles sur lui (GH_TOKEN=$(gh auth token --user myia-ai-01)), fonctionnaient normalement.
Autrement dit : la flotte disposait d'un reservoir intact et n'avait pas le droit de s'en servir, parce que le gate reconnait l'auteur, pas la lane.
Pourquoi c'est le meme defaut que #16907, une couche plus bas
#16907 a elargi quelle lane peut declarer (ADJOINT_LANE -> QUALIFYING_LANES). Le controle d'auteur est reste : le goulot a simplement change d'etage. C'est [[a-gate-with-one-producer-is-a-throughput-ceiling]] qui recidive, et le troisieme plafond en serie apres le monopole de lane et la course d'empreinte (#16957 / PR #16967).
Piste de correctif (a arbitrer, pas encore un mandat)
Remplacer le scalaire par une allowlist de comptes du cluster, exactement la forme retenue pour les lanes dans #16907 :
Le champ lane: reste ce qu'il est aujourd'hui — une declaration fail-closed, pas une preuve cryptographique d'identite — et la regle anti-auto-prevalidation (self-prevalidation refused, deja presente lignes 390-396) continue d'empecher une lane d'attester sa propre PR. L'elargissement porte sur qui tient le stylo, pas sur qui peut se valider soi-meme.
Ce qui reste a etablir avant d'ecrire une ligne
Le rate-limit secondaire est-il par utilisateur ou par (utilisateur, IP) ? Le message nomme un user ID, mais si la portee inclut l'IP, les lanes distantes n'etaient peut-etre pas bloquees — ce point change l'ampleur du probleme, et il est SUPPOSE, pas mesure.
Quel elargissement conserve la propriete que le gate cherche a garantir : qu'un dossier ne soit pas ecrit par la lane qui porte la PR.
Changement normatif substantiel du harnais : PR + sign-off user avant merge (CLAUDE.md §A). Cette issue porte la mesure et la piste ; elle ne prejuge pas de l'arbitrage.
Le constat
Le gate de Phase 4 (
scripts/check_adjoint_prevalidation.py) exige que le commentaire-dossier soit ecrit par un seul compte GitHub :(lignes 108 et 397-398 sur
mainau 2026-09-20)Le dossier etant l'unique ticket d'entree de la passe de merge, la production de dossiers de toute la flotte passe par un seul compte, dont le quota d'API est partage par toutes les lanes.
La mesure qui rend le plafond visible (2026-09-20, ~17 h UTC)
gh api usergh api rate_limitjsboigeAPI rate limit exceeded for user ID 3159389core 5000/5000,graphql 5000/5000, toutes ressources pleinesmyia-ai-01Deux faits se lisent ensemble :
/rate_limit: l'endpoint affichait quota plein sur les 15 ressources pendant que les appels reels rendaient 403. Le seul instrument fiable est la sortie d'un vrai appel.myia-ai-01etait a quota plein et que les organes, une fois epingles sur lui (GH_TOKEN=$(gh auth token --user myia-ai-01)), fonctionnaient normalement.Autrement dit : la flotte disposait d'un reservoir intact et n'avait pas le droit de s'en servir, parce que le gate reconnait l'auteur, pas la lane.
Pourquoi c'est le meme defaut que #16907, une couche plus bas
#16907 a elargi quelle lane peut declarer (
ADJOINT_LANE->QUALIFYING_LANES). Le controle d'auteur est reste : le goulot a simplement change d'etage. C'est [[a-gate-with-one-producer-is-a-throughput-ceiling]] qui recidive, et le troisieme plafond en serie apres le monopole de lane et la course d'empreinte (#16957 / PR #16967).Piste de correctif (a arbitrer, pas encore un mandat)
Remplacer le scalaire par une allowlist de comptes du cluster, exactement la forme retenue pour les lanes dans #16907 :
Le champ
lane:reste ce qu'il est aujourd'hui — une declaration fail-closed, pas une preuve cryptographique d'identite — et la regle anti-auto-prevalidation (self-prevalidation refused, deja presente lignes 390-396) continue d'empecher une lane d'attester sa propre PR. L'elargissement porte sur qui tient le stylo, pas sur qui peut se valider soi-meme.Ce qui reste a etablir avant d'ecrire une ligne
Gouvernance
Changement normatif substantiel du harnais : PR + sign-off user avant merge (CLAUDE.md §A). Cette issue porte la mesure et la piste ; elle ne prejuge pas de l'arbitrage.