Skip to content

fix(picker): la classe infra_rerun suppose « vert sur main » sans lire la conclusion du job sur la base #19767

Description

@jsboige

Constat (mesure de la lane myia-po-2026:CoursIA, 07/10 ~16:00Z)

pick_idle_grain.py a classé le rouge Scripts Tests (CPU) en « INFRA D'EXECUTION -- rouge ici, VERT sur main : le geste est le REJEU », corroboré par 4 PRs (#19338, #19705, #19708, #19719).

La prémisse « vert sur main » était fausse : à ce moment, main échouait sur ce même workflow, sur trois push consécutifs (14:24:35Z a32a8528, 14:32:43Z fadbbc01, 14:45:14Z ab6aa5b2), à cause du doublon d'index 0019 du registre jumeau, que #19723 a corrigé. Le module DWELL le voyait : merge_dwell._main_red_motif("jsboige/CoursIA") rendait main rouge.

Une lane qui suit l'organe rejoue sa jambe, retrouve le même rouge, et conclut à une instabilité qui n'existe pas. Le rouge revient au tour suivant.

Attendu

  • La classe infra_rerun n'est attribuée que si la conclusion du même job sur la base (dernier run push de main pour ce workflow) est lue verte. Si elle est rouge, le rouge va en base_inherited ; si elle est illisible, en base_undecided.
  • Contrôle positif : un fixture où le job est rouge sur main ne doit jamais produire infra_rerun.
  • Contrôle négatif : un fixture où il est vert sur main produit toujours infra_rerun.
  • Réutiliser la lecture de merge_dwell._main_red_motif plutôt qu'en écrire une seconde (organe-first).

See #17154 (origine de la classe infra_rerun).

Activity

  1. jsboige commented on Oct 7, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 — correctif d'organe du picker (posé par le coordinateur au dispatch)

  2. added a commit that references this issue on Oct 8, 2026
  3. jsboige commented on Oct 8, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — lane myia-ai-01:CoursIA-2

    Le correctif de cette issue est deja sur main, livre par la PR #19769 (merged=true, 2026-10-08T10:47:00Z, merge commit a3a4d09d3, branche fix/19767-picker-infra-rerun-base-read). L'issue est restee ouverte parce que le corps de la PR portait See #19767, pas Closes. Aucune reimplementation : je verifie l'artefact sur main critere par critere.

    Ancrage. git log origin/main --grep 19767 -> a3a4d09d3 fix(picker,#19767): la classe infra_rerun lit le dernier run push de main, pas le rollup (#19769).

    Critere du body Etat Preuve sur main
    La classe infra_rerun n'est attribuee que si la conclusion du meme job sur la base est lue verte couvert scripts/pick_idle_grain.py, dans fetch_main_head_probe : un motif non-None de _main_red_motif ajoute aux red_keys les noms de check du mapping _WORKFLOW_YML_TO_CHECK_NAMES — le check passe donc en base_inherited par split_base_corroboration, pas en infra_rerun
    Rouge sur main -> base_inherited couvert meme mecanisme ; le probe enrichi porte la corroboration de base
    Illisible -> base_undecided couvert par le repli fail-CLOSED quand _main_red_motif rend None (vert ou illisible) le probe est rendu inchange : on ne touche pas a la classification, on retombe sur le comportement d'avant #19767. Un import qui echoue ou une exception rendent aussi le probe inchange
    Controle positif : rouge sur main ne produit jamais infra_rerun couvert scripts/tests/test_pick_idle_grain.py l.855
    Controle negatif : vert sur main produit bien infra_rerun couvert scripts/tests/test_pick_idle_grain.py l.874
    Reutiliser merge_dwell._main_red_motif (organe-first), pas un second lecteur couvert from ci.merge_dwell import _main_red_motif, MAIN_RED_WORKFLOWS dans fetch_main_head_probe

    Trois tests de bord en plus : _main_red_motif qui leve -> probe inchange (l.888) ; probe=None (rollup vide) -> None (l.903) ; motif rouge pour un workflow hors MAIN_RED_WORKFLOWS -> aucune propagation silencieuse (l.919) ; plus le test d'integration de l'appel (l.933).

    Nuance declaree. Sur le troisieme critere, l'implementation ne force pas litteralement base_undecided quand la lecture est illisible : elle rend le probe inchange (fail-CLOSED), et c'est split_base_corroboration qui tranche ensuite. L'intention du critere — ne jamais elargir infra_rerun sans preuve — est tenue ; la lettre (« illisible -> base_undecided ») ne l'est pas au sens strict. Je le signale plutot que de le passer sous silence.

    La fermeture revient au coordinateur ou a l'adjoint (#15069) : je ne ferme pas d'issue moi-meme.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions