Skip to content

picker: le tapis ressert une umbrella livree (marqueur de conteneur ignore) -- 4 livraisons en double sur #17528 #22635

Open

Description

@jsboige

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

  1. Une umbrella dont le dernier commentaire porte [INFO] candidate-delivered n'est plus servie par --belt ; la cause rendue la nomme.
  2. Une umbrella sans marqueur de conteneur reste servie (controle negatif).
  3. Une lecture en echec laisse l'umbrella servable (fail-OPEN, comme partout dans la boucle).
  4. --include-delivered contourne le filtre (echappatoire existante respectee).
  5. Mesure de population : le nombre d'umbrellas ouvertes porteuses du marqueur de conteneur, mesure sur les issues label EPIC ouvertes.

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

  1. jsboige commented on Oct 26, 2026

    @jsboige
    OwnerAuthor

    [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.

  2. jsboige commented on Oct 26, 2026

    @jsboige
    OwnerAuthor

    Correctif livre — PR #22636

    Le trou du tapis est corrige. La branche fix/picker-umbrella-container-marker porte le commit 22ae60ed4f.

    Ce qui change

    L'urne umbrella passe enfin par un filtre de livraison : une umbrella dont le dernier commentaire porte le marqueur de conteneur [INFO] candidate-delivered n'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

    # Acceptance Etat Preuve
    1 une umbrella marquee n'est plus servie, la cause la nomme FAIT avant : servie ; apres : ecartee, cause « LIVRAISON (conteneur) : le dernier commentaire porte le marqueur [INFO] candidate-delivered » — mesure sur la MEME issue (#17528), sonde reelle
    2 une umbrella sans marqueur reste servie FAIT test de controle negatif + les 45 umbrella non marquees de la population restent servables
    3 une lecture en echec laisse l'umbrella servable FAIT fail-OPEN, test dedie ; 0 lecture en echec sur les 50 umbrella de la population
    4 --include-delivered contourne le filtre FAIT test dedie
    5 mesure de population FAIT 50 issues ouvertes label EPIC : 5 marquees (#21701, #20607, #18771, #18204, #17528), 45 sans marqueur

    Validation

    • pytest scripts/tests/test_pick_idle_grain*.py → 452 passed (15 nouveaux tests inclus).
    • Controle negatif : les 15 nouveaux tests sur la source d'avant le correctif → 15/15 en echec.
    • ruff : aucun finding ajoute (parity comparee a origin/main, fichier par fichier).

    Limites (declarees dans le body de la PR)

    Le label candidate-delivered n'ecarte toujours pas une umbrella (une umbrella accumule des PRs — decision #19907, inchangee), et [DELIVERED] lane X -- PR #N non 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

  3. jsboige commented on Oct 26, 2026

    @jsboige
    OwnerAuthor

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2028:CoursIA-3
    issue: 22635
    verdict: KEEP
    acceptance:

    • Une umbrella marquee n est plus servie, la cause la nomme -> branche fix/picker-umbrella-container-marker, tete 22ae60e (PR 22636, ouverte) : filtre de l urne umbrella en scripts/pick_idle_grain.py l.7893 (elif it.get("klass") == "umbrella" and not args.include_delivered) ; sonde de marqueur de conteneur l.7703
    • Une umbrella sans marqueur reste servie -> branche fix/picker-umbrella-container-marker (PR 22636, ouverte) : test de controle negatif et 45 umbrella non marquees de la population restent servables (mesure portee par le PR, a rejouer au merge)
    • Une lecture en echec laisse l umbrella servable (fail-OPEN) -> branche fix/picker-umbrella-container-marker (PR 22636, ouverte) : container_marker_probe, 0 lecture en echec sur les 50 umbrella de la population
    • --include-delivered contourne le filtre -> branche fix/picker-umbrella-container-marker (PR 22636, ouverte) : test dedie
    • Mesure de population sur les issues label EPIC ouvertes -> 50 umbrella ouvertes au 2026-10-26, 5 porteuses du marqueur de conteneur (issues 21701, 20607, 18771, 18204, 17528), 45 sans marqueur
      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]
  4. jsboige commented on Oct 27, 2026

    @jsboige
    OwnerAuthor

    [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

  5. jsboige commented on Oct 27, 2026

    @jsboige
    OwnerAuthor

    [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ête 75d88388f8). 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-delivered passe à l'urne delivered (réservée au coordinateur et à l'adjoint, #15069) au lieu d'être resservie. Le marqueur label candidate-delivered et le marqueur [DELIVERED] lane X -- PR #N ne 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 (signaux container_unread et marker_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 main frais (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.

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