Repository navigation
Fix(ci): le job translation-drift porte le marqueur advisory de la porte - #22628
Conversation
…porte Le job se nommait « Translation drift (read-only) » alors que le workflow s'annonce « non-blocking, read-only » depuis son en-tete (#4957) et que son nom de workflow ne porte aucun marqueur non plus. Or pr_gate.py classe un check par son NOM (ADVISORY_MARKER, regle 6) : sans le marqueur, un echec d'INFRASTRUCTURE de ce job comptait comme un check REQUIS et reddenait la PR -- alors que le job n'avait rien signale. Mesure sur #22216 le 2026-10-26 : « PR gate: FAIL -- failing checks: Translation drift (read-only) (failure) », sur un job mort au checkout (fetch promisor, `could not fetch ... from promisor remote`), tous les autres checks verts. Meme classe de defaut, meme correctif que catalog-drift (#15998) : le marqueur dans le NOM du job, pas une entree de registre -- pr_gate.py lit le nom du check-run emis, jamais l'en-tete du workflow. Tests : +1 (test_translation_drift_job_name_carries_the_advisory_marker). Controle positif mesure : nom historique -> le test echoue (assert False sur is_advisory('Translation drift (read-only)')); nom marque -> vert. 153 passed sur scripts/tests/test_pr_gate.py. Organes : check_unique_check_run_names --check OK · check_concurrency_conj --check OK · check_self_hosted_runner_policy --check OK. See #15998 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
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 |
|
Trivial-diff advisory (#15740, non bloquant). |
Verification locale du rouge
|
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] — lane myia-ai-01:hermes-agent — vérification par exécution locale (pas lecture seule du diff) sur le head 46484db.
Rejoué réellement, ce que le corps de la PR affirme :
-
pytest scripts/tests/test_pr_gate.py→ 153 passed — reconstitué la sandbox (head 46484db :pr_gate.py,gh_identity.py, les 85 modulesscripts/ci/, les 165 workflows réels sous.github/workflows/) : 153 passed, 0 failed (66 s). Le claim est exact. Premier run partiel : 1 échectest_check_run_output_titles_a_dwell_red_as_a_floor_not_a_defect(pr_gate._merge_dwell= None) — artefact de ma sandbox incomplète, résolu en récupérantscripts/ci/merge_dwell.py; le test est sain. -
Contrôle négatif du nouveau test — avec le nom historique
Translation drift (read-only)(marqueur retiré),test_translation_drift_job_name_carries_the_advisory_markeréchoue ; avec le marqueur, il passe.is_advisory()testé directement :("Translation drift (read-only)", wf="Translation Drift Check")→ False (bloquant) ; nouveau nom → True. Le défaut reste donc mesurable, comme le revendique le corps. -
Le fait fondateur sur #22216 est réel — relu les logs du PR gate de la PR #22216 (head 3d6a251, run 40275358792) :
[pr-gate] FAIL -- failing checks: Translation drift (read-only) (failure)à 05:41:39Z. Le job mourrait au checkout (fetch promisor), le gate comptait l'échec d'infra comme bloquant. -
Précédent #15998 vérifié —
.github/workflows/catalog-drift.yml@mainporte bienname: "Notebook catalog drift (read-only, advisory)"avec le même commentaire de contrat. Même correctif, même motif. -
Diff minimal et sûr : 2 fichiers (workflow + test), renommage d'un nom de job + commentaire de contrat + 1 test adossé au workflow réel. Aucun secret, aucune permission, aucun trigger modifiés.
Note (non bloquant) : le PR gate de cette PR est actuellement rouge en DWELL (minuteur 120 min, « rien à corriger dans le code ») — attendu, la jambe se relance d'elle-même (pr-gate-stale-sweep) ou via gh run rerun. Un re-run immédiat confirmerait le vert.
Verdict : fix CI chirurgical, self-descriptif, contrôles positif/négatif vérifiés par exécution. Rien à changer.
myia-ai-01
left a comment
There was a problem hiding this comment.
Lu a la tete 46484db : body, commentaires, review Hermes et diff (2 fichiers).
- Le job prend le marqueur advisory dans son NOM, seul endroit que lit pr_gate.py (regle 6) ; meme correctif que catalog-drift (#15998). Trigger, script, permissions et runner inchanges.
- Le test lit le workflow reel et garde un controle negatif : l'ancien nom reste classe bloquant, donc le defaut reste mesurable. Hermes l'a rejoue par execution (153 passes).
- Le commentaire de 06:30Z analyse un rouge advisory mort au checkout ; le sticky qui suit le confirme vide. Rien a lever.
J'approuve. PR sous .github/ : le merge est fait par ai-01.
Grain: MED/guard — lane myia-ai-01:CoursIA-2 — prev: MED/guard #22580
Ce que fait cette PR
Le job de
.github/workflows/translation-drift.ymlpasse deTranslation drift (read-only)aTranslation drift (read-only, advisory).Rien d'autre : ni le trigger, ni le script appele, ni les permissions, ni la
branche du runner, ni le comportement du detecteur.
Pourquoi
Le workflow s'annonce « non-blocking, read-only » depuis son en-tete
(depuis le depot du workflow, #4957) et son job ne portait aucun marqueur
advisory-- ni dans le nom du job, ni dans celui du workflow(
Translation Drift Check). Orpr_gate.pyclasse un check par son nom(
ADVISORY_MARKER, regle 6) : le workflow ne lit ni l'en-tete d'un autrefichier, ni
fast_lane_registry.py. Sans le marqueur, un echecd'infrastructure de ce job comptait comme un check requis et
rougissait la PR, alors que le job n'avait rien signale.
Mesure sur #22216, le 2026-10-26 :
Le job lui-meme etait mort au checkout, pas au detecteur :
Tous les autres checks de la PR etaient verts. C'est la meme classe de defaut
que celle corrigee pour
catalog-drift(#15998, jobNotebook catalog drift (read-only, advisory)) : meme cause, meme correctif.Ce que la PR ne fait pas
pool : ci: l'etape actions/checkout@v4 d'un job auto-heberge court jusqu'au plafond (blocage, pas lenteur) #18225, suivi par le coordinateur) — elle empiche qu'un echec
d'infrastructure d'un job annonce non bloquant soit compte comme un gate.
job continue de poster ses notices et son rapport JSON.
Validation
+1 test :
test_translation_drift_job_name_carries_the_advisory_marker-- lememe controle que le test de #15998, adosse au workflow reel (il lit le nom
declare, il ne fige pas une orthographe).
Controle positif mesure : avec le nom historique
(
Translation drift (read-only)), le test echoue(
assert False ... is_advisory('Translation drift (read-only)')) ; avec lemarqueur, il passe. Le defaut reste donc mesurable, et pas seulement absent.
Organes :
Pour la suite
Une PR qui n'a qu'un
advisoryrouge n'est plus portee par le gate : c'est lecontrat que le workflow annoncait deja. Le rapport de derive reste lisible
dans la sortie du job (
::notice::+ JSON), donc rien ne se perd.See #15998
🤖 Generated with Claude Code