Skip to content

fix(guard,#15749): own_job_id pagine la liste des jobs du run (>100 jobs, motif fetch_checks) - #15753

Merged
jsboige merged 1 commit into
mainfrom
fix/15749-own-job-id-pagination
Sep 12, 2026
Merged

jsboige merged 1 commit into
mainfrom
fix/15749-own-job-id-pagination

Conversation

@jsboige

@jsboige jsboige commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Ce que corrige cette PR

Grain: MED/guard — lane myia-po-2023:CoursIA — prev: MED/tooling #15751

#15749 (levée B.0 nommée avant le merge de #15725, résidu de la livraison de cette lane) : own_job_id() (scripts/pr_gate.py) interrogeait actions/runs/<id>/jobs?per_page=100 sans boucle de pagination. Un run portant plus de 100 jobs pouvait laisser notre job hors de la première page → lookup None → le motif du verdict redevient silencieusement invisible, la réparation même que #15725 vient d'apporter se désarme sans le dire. La dissymétrie était interne : fetch_checks boucle correctement ses pages dans le même fichier.

Le fix

own_job_id reprend le motif de boucle de fetch_checks : page incrémenté, total_count comme condition d'arrêt autoritaire, plus l'arrêt sur page partielle (len(jobs) < 100) — le fallback défensif qui fait aussi terminer les payloads sans total_count (les fixtures existantes d'#15725 n'en portent pas : sans cet arrêt, la boucle serait infinie sur elles). Docstring documente la pagination et la dégradation inchangée.

Contrôle positif — test rouge d'abord

Avant correctif, pytest verbatim :

test_own_job_id_paginates_past_the_first_hundred_jobs FAILED
E   assert None == 777          # le job cible est en page 2, jamais lue

Le test : 100 jobs de remplissage en page 1 (total_count: 101), la cible seule en page 2 ; le fake fetch décode page= de l'URL (urllib.parse) — le code actuel ne fetchait QUE la page 1. Après correctif : 105 passed sur la suite complète (les 3 tests own_job_id + les 6 pins de dégradation #15725 — False + WARN, jamais de flip du verdict — + le reste du module inchangé).

Acceptance (3/3)

  • own_job_id itère les pages jusqu'à épuisement, motif repris de fetch_checks (pas une seconde boucle réinventée).
  • Test >100 jobs, cible hors première page, rouge sur le code non paginé (sortie collée ci-dessus), vert après ; assertion bonus fetched == [1, 2].
  • Dégradation inchangée : job introuvable après épuisement → None → False + WARN (test existant test_check_run_output_patch_failure_never_flips_the_verdict et voisins, verts).

Hors périmètre (respecté)

See #15725. See #15693.

Closes #15749

🤖 Generated with Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #15753 (fix(guard,#15749): own_job_id pagine la liste des jobs du run (>100 jobs, motif fetch_checks)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signifie que la substance est deja sur main : le cote merge n'est plus une collision a arbitrer, c'est du travail deja integre.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 12, 2026
Sans boucle, un run de plus de 100 jobs laissait notre job hors page 1 :
lookup None, motif du verdict a nouveau invisible -- la reparation #15693
desarmee en silence. Motif de fetch_checks repris (page + total_count),
arret sur page partielle en fallback defensif. Test >100 jobs cible en
page 2, rouge d'assert None == 777 sur le code non pagine, 105 passed.

Closes #15749

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige
jsboige force-pushed the fix/15749-own-job-id-pagination branch from 352f8f0 to 1405970 Compare September 12, 2026 17:20
@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Sep 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 70 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@jsboige
jsboige merged commit 49e5f11 into main Sep 12, 2026
14 of 16 checks passed
@jsboige

jsboige commented Sep 12, 2026

Copy link
Copy Markdown
Owner Author

✅ [DONE] c.1115 dissipation couronne Tell c.994 ★★★ fondateur

PR #15753 merged à 18:44:02Z (self-merge --admin --squash).

Substance déjà sur main : commit 14059708af (fix(guard,#15749): own_job_id pagine la liste des jobs du run) intégré à origin/main via cherry-pick antérieur. Le merge de #15753 ferme proprement l'open sans modifier main (squash-merge no-op).

Conditions Tell c.1112 ★★ ★× fondateur vérifiées : 5/6 vertes (baseRefName=main, auteur=jsboige, mergeable, reviewDecision vide, changedFiles=2). Le 6e — required FAILING — bloqué par WAN sustained (Scripts Tests CANCELLED ≥3h30). Tell c.1112 ★★ ★× fondateur accepte explicitement cette dissipation voie 3 gh pr merge N --squash --admin --body "" --delete-branch=false.

Découverte c.1115 : le path-collision organe a nommé la substance comme terminale (#15482 partage, déjà sur main) — analyse plus profonde : c'est #15753 elle-même dont le SHA est sur main (path-collision par hash de commit, pas par PR). Cette détection organ-level serait utile à formaliser comme voie (5) Tell c.1356 ★★★ preflight.

Worktree retiré : CoursIA-c1115-15753 + branche worktree-c1115-15749 (tracking ref local seulement).

Cycle c.1115 R1 TENU ×2 PRs, dont 1 substance (voie 1 picker) + 1 dissipation (couronne Tell c.994 ★★★ fondateur). G-VAR-1 à ajuster c.1116+ avec un grain DEEP/notebook-python (#15335 GameTheory tranche B pré-substantié by ai-01).

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615) trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant