Skip to content

fix(picker): le dossier de cloture CLOSE est un signal de livraison TERMINAL (cas #19253) #24172

Closed

Description

@jsboige

Grain: MED/tooling — lane myia-ai-01:CoursIA-2 — prev: MED/guard #24142

Sans parent : correctif d'outillage du tapis, sans rapport avec les partitions d'audit #17073.

Defaut mesure

Le tapis roulant sert une issue consolidation livree tant qu'un marqueur de livraison la couvre ; au-dela de 48 h, ce marqueur expire (#22500) et l'issue redevient servable. C'est voulu pour une consolidation inachevee.

Mais une consolidation cloturee par un dossier [CLOSURE PREFLIGHT] de verdict CLOSE doit rester ecartee : le dossier est la decision finale du depot sur cette issue, et il n'a pas d'age.

Or le tapis ne connaissait que la grammaire des marqueurs ([INFO] candidate-delivered, [DELIVERED] lane). Le dossier etait dans le fil, et le tapis ne le voyait pas.

Cas reel : #19253 (serie Search, label consolidation).

Mesure, sur le fil reel

Lecture d'evenement sur le fil de #19253, avant / apres correctif, a deux instants :

T0 (maintenant) T1 (04/11 08:00Z -- le marqueur du 02/11 07:31Z a alors expire)
avant non ecarte par le filtre d'evenement servi
apres ecarte -- LIVRAISON (dossier de cloture CLOSE) ecarte

Meme entree pour les deux colonnes : les commentaires de l'instantane local (gh_snapshot, format GraphQL). La colonne « avant » est l'implementation de origin/main, la colonne « apres » celle de la branche de ce correctif.

Correctif propose

Reutiliser l'ORGANE canonique scripts/check_closure_dossier.py::parse_dossier -- pas une copie de sa grammaire : le dossier a ses champs obligatoires, ses regles de forme, et un gate (check_closure_dossier.py rc=0) qui le valide. Un dossier qui parse sans erreur et porte verdict: CLOSE devient un evenement de livraison terminal : il arme l'etat de livraison, mais il ne porte pas d'heure (stamp=None), donc la regle des 48 h ne peut pas l'expirer.

L'ANNONCE de cloture (Fermeture sur dossier ... verdict CLOSE) est reconnue aussi : sinon le DERNIER commentaire du fil redevenirait le seul point lu, et le dossier resterait invisible.

Un dossier malforme (champ manquant, ligne malformee) n'est PAS un signal : il est ignore (fail-OPEN), pas devine. Un dossier de verdict KEEP ne signale rien.

Acceptance

  1. un dossier CLOSE bien forme ecarte l'issue du tapis, sans limite d'age ;
  2. un dossier KEEP, un dossier malforme et une mention en prose n'ecartent rien ;
  3. une retraction posterieure ([NOT-DELIVERED]) rend l'issue servable ;
  4. un marqueur ordinaire continue d'expirer au-dela de 48 h -- le correctif ne doit pas etendre l'expiration a tout le monde ;
  5. controle positif bout en bout : la consolidation [Search] Réorganiser la série : parties explicites, fin des dossiers d'opportunité (Applications, Discrepancy) — proposition à arbitrer #19253, servie a T1 par l'implementation actuelle, ne l'est plus.

Fichiers

  • scripts/pick_idle_grain.py
  • scripts/tests/test_pick_closure_dossier_terminal.py

Activity

  1. jsboige commented on Nov 2, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/pick_idle_grain.py, scripts/tests/test_pick_closure_dossier_terminal.py

  2. jsboige commented on Nov 2, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #24173

  3. added a commit that references this issue on Nov 2, 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