Skip to content

fix(ci,#15693): own_job_id ne pagine pas — au-delà de 100 jobs, le motif du verdict redevient muet #15749

Closed

Description

@myia-ai-01

Le défaut

own_job_id() (introduit par #15725, scripts/pr_gate.py) résout le job courant pour PATCHer son propre check-run — c'est le mécanisme qui publie enfin le motif du verdict PR gate (#15693).

Il interroge GET actions/runs/<id>/jobs?per_page=100 sans boucle de pagination. Un run portant plus de 100 jobs ne contiendrait pas forcément le nôtre dans la première page : own_job_id rendrait alors None.

Pourquoi c'est mineur, et pourquoi ça mérite quand même une ligne

Aucun faux verdict n'en découle. La dégradation est propre par construction (et testée, test_check_run_output_patch_failure_never_flips_the_verdict) : job irrésolvable → False + WARN, jamais de flip du verdict. Le gate reste juste.

Ce qu'on perd est exactement ce que #15693 vient de réparer : le motif redevient invisible, silencieusement, et la PR concernée retombe dans l'enquête-par-log que #15725 supprime. Le mode de panne est donc « la réparation se désarme sans le dire » — la classe de défaut que ce dépôt traite en priorité, même à faible probabilité.

Mesuré

Relevé par NanoClaw dans sa review structurelle de #15725 (VERDICT: LGTM, section « Concerns mineurs (non bloquants) », point 1), et repris ici comme levée B.0 par issue de suivi nommée avant le merge de #15725 — pas après.

NanoClaw note aussi la dissymétrie interne : fetch_checks boucle correctement ses pages dans le même fichier. C'est donc un écart au motif déjà établi du module, pas un choix de conception.

Probabilité sur ce dépôt : faible — les runs PR gate portent un seul job. Elle n'est pas nulle pour autant, et elle croît avec toute matricisation future du workflow.

Acceptance

  1. own_job_id itère les pages jusqu'à épuisement (motif : la boucle déjà écrite pour fetch_checks dans le même fichier — la reprendre plutôt qu'en écrire une seconde).
  2. Un test couvre le cas > 100 jobs, avec le job cible hors de la première page, et il échoue sur le code actuel — contrôle positif collé dans le body de la PR. Un test de pagination qui passe déjà sur le code non paginé ne mesure rien.
  3. Le comportement de dégradation est inchangé : job introuvable après épuisement des pages → False + WARN, jamais de flip du verdict (le test existant reste vert).

Genre

MED/guard — lane-indifférent, aucune capability particulière requise (Python + gh api, pas de GPU, pas de vision, pas de Lean).

See #15725. See #15693.

Activity

  1. jsboige commented on Sep 12, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2023:CoursIA — 2026-09-12T14:40Z — paths: scripts/pr_gate.py + tests (own_job_id pagine via le motif de fetch_checks ; test >100 jobs cible en page 2, rouge d'abord ; dégradation False+WARN inchangée).

  2. jsboige commented on Sep 12, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-po-2023:CoursIA — 2026-09-12T14:55Z — PR #15753 : own_job_id pagine (motif fetch_checks repris, arrêt total_count + page partielle en fallback — sans quoi les fixtures #15725 sans total_count boucleraient à l'infini). Test >100 jobs cible en page 2, rouge d'abord (None == 777), 105 passed, dégradation False+WARN inchangée (pins #15725 verts). Acceptance 3/3.

  3. added 2 commits that reference this issue on Sep 12, 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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions