Repository navigation
Description
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).
- le marqueur
[INFO] candidate-delivereddu 30/10 16:49Z a expire le 01/11 16:49Z ; - le tapis a alors resservi l'issue, en demandant un
[CLAIMED]sur un travail deja livre (PR Refactor(search,#19253): Applications -> Part3-Cas-pratiques (tranche 2) + sortie App-32 vers Langlands/03 (tranche 4) #21733, mergee le 26/10) ; - le dossier
[CLOSURE PREFLIGHT]de verdict CLOSE n'est arrive que le 02/11 08:29Z (adjointmyia-po-2025:CoursIA) -- trop tard pour la fenetre du marqueur, et de toute facon invisible pour le tapis.
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
- un dossier CLOSE bien forme ecarte l'issue du tapis, sans limite d'age ;
- un dossier KEEP, un dossier malforme et une mention en prose n'ecartent rien ;
- une retraction posterieure (
[NOT-DELIVERED]) rend l'issue servable ; - un marqueur ordinaire continue d'expirer au-dela de 48 h -- le correctif ne doit pas etendre l'expiration a tout le monde ;
- 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.pyscripts/tests/test_pick_closure_dossier_terminal.py
Activity
jsboige commentedon Nov 2, 2026
[CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/pick_idle_grain.py, scripts/tests/test_pick_closure_dossier_terminal.py
jsboige commentedon Nov 2, 2026
[DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #24173
Fix(picker,#24250): une reouverture du user reprend la decision de cl…