Repository navigation
picker: le tapis ressert une umbrella livree (marqueur de conteneur ignore) -- 4 livraisons en double sur #17528 #22635
Description
Constat
Le tapis (scripts/pick_idle_grain.py --belt) resserre une umbrella deja livree : une lane tire l'EPIC, refait la verification, repose le meme marqueur [INFO] candidate-delivered, et rend la main. Le cycle se reproduit.
Mesure sur #17528 (EPIC « Russell & Norvig — habiter l'armature AIMA ») : le meme conteneur a ete servi quatre fois en cinq jours, et quatre lanes y ont repose le meme marqueur.
| Date | Lane | Marqueur |
|---|---|---|
| 2026-10-21T19:31Z | myia-po-2027:CoursIA |
[INFO] candidate-delivered |
| 2026-10-22T16:20Z | myia-po-2028:CoursIA |
[RELEASED] umbrella saturee |
| 2026-10-25T08:38Z | myia-po-2025:CoursIA |
[INFO] candidate-delivered |
| 2026-10-25T10:45Z | myia-po-2024:CoursIA |
[INFO] candidate-delivered |
| 2026-10-26T00:39Z | myia-po-2027:CoursIA |
[INFO] candidate-delivered |
Les cinq arcs de l'EPIC sont CLOSED depuis le 14/10 (#17529 05/10, #17540 14/10, #16757 12/10, #17534 24/09, #17541 14/10) ; quatre PRs sont mergees (#18498, #17590, #18797, #17338). Le body de l'EPIC dit encore « l'EPIC n'est pas fermable : 3 arcs sur 5 livres, 2 en vol actif » — cette mesure date du 05/10 et elle est perimee depuis le 14/10.
C'est exactement le bruit que #15511 denonce (31 commentaires / 5 jours pour un contenu qui n'evolue pas), et le trou que le coordinateur a signale le 26/10 comme « mecanisme non etabli ».
Mecanisme (etabli dans la source)
Dans la boucle de service du tapis (belt_pick_with_replacements), le filtre de livraison est applique a l'urne grain seule :
if it.get("klass") == "grain" and not args.include_delivered:
... # filtre recent + sonde pleine (label / PR mergee / marqueur)Une umbrella passe donc jamais par le filtre : ni son marqueur de commentaire, ni son last_visit. Le filtre umbrella_visit_cause (#22500) ne comble pas le trou : il compte les claims et les sous-issues creees, or #17528 n'a jamais ete reclame ni tranche — d'ou quatre livraisons d'un conteneur vide.
Le precedent #19907 (« filtre delivered-resolved sur l'urne grain ») avait explicitement limite sa portee a l'urne grain : l'urne umbrella n'a jamais ete couverte.
Correctif attendu
Ecarter de l'urne umbrella une umbrella dont le dernier commentaire porte le marqueur de conteneur [INFO] candidate-delivered — la forme qui dit « le CONTENEUR est livre, plus rien a faire dedans ».
Deux marqueurs doivent rester distingues (c'est la nuance qui compte) :
| marqueur | sur une umbrella | ecarte ? |
|---|---|---|
label candidate-delivered |
pose mecaniquement par le workflow advisory des qu'une PR d'arc merge ; une umbrella accumule des PRs | non (decision #19907, inchangee) |
[DELIVERED] lane X -- PR #N |
la lane X a livre son grain ; sur une umbrella, cela ne ferme que le sous-grain | non (le conteneur reste a servir) |
[INFO] candidate-delivered (dernier commentaire) |
declaration de conteneur livre | oui — l'umbrella passe a l'urne delivered, reservee au coordinateur/adjoint (#15069) |
Acceptance
- Une umbrella dont le dernier commentaire porte
[INFO] candidate-deliveredn'est plus servie par--belt; la cause rendue la nomme. - Une umbrella sans marqueur de conteneur reste servie (controle negatif).
- Une lecture en echec laisse l'umbrella servable (fail-OPEN, comme partout dans la boucle).
--include-deliveredcontourne le filtre (echappatoire existante respectee).- Mesure de population : le nombre d'umbrellas ouvertes porteuses du marqueur de conteneur, mesure sur les issues label
EPICouvertes.
Portee
scripts/pick_idle_grain.py + scripts/tests/test_pick_idle_grain_belt.py. Aucun changement de comportement sur l'urne grain ni sur la sonde pleine.
Activity
jsboige commentedon Oct 26, 2026
[CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/pick_idle_grain.py, scripts/tests/test_pick_idle_grain_belt.py -- Grain: MED/tooling -- le filtre de livraison de l urne
umbrella(marqueur de CONTENEUR sur le dernier commentaire), avec sonde dediee, fail-OPEN et echappatoire --include-delivered preservee. Mesure avant/apres sur #17528 (sonde reelle) + population des 50 EPIC ouvertes.jsboige commentedon Oct 26, 2026
Correctif livre — PR #22636
Le trou du tapis est corrige. La branche
fix/picker-umbrella-container-markerporte le commit22ae60ed4f.Ce qui change
L'urne
umbrellapasse enfin par un filtre de livraison : une umbrella dont le dernier commentaire porte le marqueur de conteneur[INFO] candidate-deliveredn'est plus servie, et la cause rendue la nomme.Le filtre « marqueur recent » et le filtre « marqueur de conteneur » lisent desormais le meme octet (
_last_comment_body) : deux lectures du meme fil ne peuvent plus diverger sur un fil qui change entre les deux.Acceptance, une par une
[INFO] candidate-delivered» — mesure sur la MEME issue (#17528), sonde reelle--include-deliveredcontourne le filtreEPIC: 5 marquees (#21701, #20607, #18771, #18204, #17528), 45 sans marqueurValidation
pytest scripts/tests/test_pick_idle_grain*.py→ 452 passed (15 nouveaux tests inclus).ruff: aucun finding ajoute (parity comparee aorigin/main, fichier par fichier).Limites (declarees dans le body de la PR)
Le label
candidate-deliveredn'ecarte toujours pas une umbrella (une umbrella accumule des PRs — decision #19907, inchangee), et[DELIVERED] lane X -- PR #Nnon plus (sur un conteneur, il ferme le sous-grain, pas le conteneur). Seul le marqueur de conteneur ecarte.Cette PR ne clôt pas l'issue de son propre chef : la question de fond — le body de #17528 est perime depuis le 14/10 et le dit encore « non fermable » — reste du ressort du coordinateur et de l'adjoint. Elle est signalee ci-dessous.
Grain: MED/tooling — lane myia-ai-01:CoursIA-2 — prev: DEEP/training #22608
jsboige commentedon Oct 26, 2026
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
issue: 22635
verdict: KEEP
acceptance:
residue: waiver: le correctif est livre dans PR 22636 (ouverte au 2026-10-26, tete 22ae60e, commit 22ae60e), non mergee a cette date -- les cinq criteres d acceptance sont mesures sur la branche, pas sur main ; aucune issue de suivi ouverte sur ce perimetre
open-prs: 0
comments-reviewed: 2
[/CLOSURE PREFLIGHT]
Fix(picker): le tapis ne ressert plus une umbrella declaree livree (#…
jsboige commentedon Oct 27, 2026
[CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/pick_idle_grain.py, scripts/tests/test_pick_idle_grain_22500_passe2.py -- Grain: MED/tooling -- PR #22861 (veto 90 j replie sur un main frais, separe de #22636 qui est mergee) -- 535 tests verts, controle negatif qui mord
jsboige commentedon Oct 27, 2026
[DELIVERED] lane
myia-ai-01:CoursIA-2-- PR #22636 (mergée le 2026-10-27T01:37Z,5eb2b91f426) et son follow-up PR #22861 (mergée le 2026-10-27T07:04Z, tête75d88388f8). Le claim de cette lane sur cette issue est relâché.#22636 corrige le trou du tapis : une umbrella dont le dernier commentaire porte le marqueur de conteneur
[INFO] candidate-deliveredpasse à l'urnedelivered(réservée au coordinateur et à l'adjoint, #15069) au lieu d'être resservie. Le marqueur labelcandidate-deliveredet le marqueur[DELIVERED] lane X -- PR #Nne sont pas concernés : sur une umbrella, ils ne ferment qu'un sous-grain, pas le conteneur. La lecture reste fail-OPEN — une lecture en échec laisse l'umbrella servable — mais le silence de la lecture est désormais rendu (signauxcontainer_unreadetmarker_unread), au lieu de resservir un conteneur livré sans qu'aucune ligne ne distingue ce cas d'un conteneur libre.#22861 reprend le correctif sur un
mainfrais (21ad9a48ccb) : la collision three-dot ouverte par l'ancêtre disparaît avec le merge de la base, et le veto « PR fusionnée < 90 j » ne masque plus une consolidation au-delà de la fenêtre de 48 h.L'EPIC concerné par le constat (#17528) reste ouvert et sa clôture ne change pas : la correction porte sur le tapis, pas sur l'EPIC. La ré-ouverture de l'EPIC si son body est périmé reste une décision du coordinateur.
Lane
myia-ai-01:CoursIA-2.