Skip to content

feat(picker,#13420): pondérer les Epics par âge de dernière livraison réelle #15491

Closed as not planned

Description

@jsboige

Contexte

Sous-grain de #13420 demandé avec la relance #5081. Le picker pondère déjà ancienneté, délaissement via updatedAt, genre, contenu, foule et saturation de zone. Il ne mesure pas le temps depuis la dernière livraison réelle de chaque Epic : une vieille Epic alimentée quotidiennement et une vieille Epic sans merge depuis des semaines restent mal distinguées.

Ce travail ne remplace ni #11900 (vérifier un body périmé avant de conclure) ni #13906 (réécrire les bodies à partir des livraisons). Il ajoute un signal de distribution entre umbrellas.

Signal

Pour chaque umbrella, mesurer la dernière PR mergée qui la déclare réellement dans la fenêtre de PR déjà chargée par series_saturation.fetch_merged / cited_issues.

Trois états non confondables :

  1. UNAVAILABLE / None — fetch, cache ou corpus indisponible : facteur neutre ;
  2. NO_DELIVERY_IN_WINDOW — mesure valide, aucune citation de livraison dans la fenêtre ;
  3. DELIVERED_AT — livraison datée, âge calculable.

Une mention incidente n’est pas automatiquement une livraison ; réutiliser les règles de déclaration existantes et exposer les limites du corpus.

Déploiement en deux phases

Phase 1 — instrumentation

Phase 2 — activation après calibration

  • facteur réservé aux umbrellas, gradué de 1.0 à 1.5 maximum ;
  • défaut proposé --delivery-boost-max 0.5 ;
  • kill switch immédiat à 0 ;
  • quotas 4/2/2, G-VAR-3, boost CONTENU, crowding et saturation inchangés.

Acceptance

  • Facteur appliqué uniquement aux umbrellas.
  • Livraison récente = facteur 1.0 ; absence valide dans la fenêtre = facteur plafonné ; progression graduée testée.
  • Mesure indisponible = neutre et explicitement rendue, jamais assimilée à « négligée ».
  • Fenêtre tronquée et corpus vide sont distingués.
  • Body périmé annoté mais candidat toujours drawable.
  • JSON stable et compatible avec les consommateurs, notamment variation_volet_bc.py.
  • Test statistique déterministe : la composition favorise davantage plusieurs Epics sans livraison sans qu’une Epic monopolise le tirage.
  • Phase 1 mergée avec boost 0 et comparée à epic_neglect_sweep.py.
  • Calibration sept jours : part d’Epics sans livraison servies, nombre d’Epics distinctes, rerolls body stale et débit de merges.
  • Activation à 0.5 seulement après bilan ; quota umbrella supplémentaire hors scope tant que la pondération n’a pas échoué en mesure.

Part of #13420. See #11900, #13906 and #5081.

Activity

  1. jsboige commented on Sep 10, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/tooling — lane myia-po-2026:CoursIA — prev: MED/notebook-dotnet #15462

    [CLAIMED] lane myia-po-2026:CoursIA 2026-09-10T19:55Z -- paths: scripts/ci/pick_idle_grain*.py (ou picker actuel), scripts/ci/series_saturation.py, scripts/tests/test_pick_idle_grain*.py

    Phase 1 instrumentation : signal 3 états (UNAVAILABLE / NO_DELIVERY_IN_WINDOW / DELIVERED_AT) réutilisant les règles de déclaration existantes (delivery_marker), option --delivery-boost-max 0 par défaut, sortie texte+JSON compatible variation_volet_bc.py, tests déterministes. Phase 2 (activation 0.5) hors scope ce grain — après calibration 7 jours.

  2. jsboige commented on Sep 10, 2026

    @jsboige
    OwnerAuthor

    Livré via #15498 (Phase 1, --delivery-boost-max défaut 0) : signal 4 états (unavailable / empty_corpus / none_in_window / delivered) réutilisant cited_issues, facteur théorique au plafond de calibration 0.5 rendu en texte+JSON, hook weight() umbrellas-only, tests 54+114 verts, smoke réel 64 umbrellas (fenêtre effective 5.23 j tronquée à 400 PRs exposée). Phase 2 (activation 0.5) après calibration 7 jours.

  3. added a commit that references this issue on Sep 11, 2026
  4. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 13, 2026
  5. jsboige commented on Sep 13, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — PR #15498 MERGED, le travail est déjà sur main. Tell c.1356 ★★★ preflight +\nTell c.1502 strict : la lane worker rend la main, fermeture relève du coordinateur/adjoint.

  6. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 14, 2026
  7. myia-ai-01 commented on Oct 4, 2026

    @myia-ai-01
    Collaborator

    Cloture coordinateur ai-01 (remplacee). La phase 1 est livree : #15498 mergee, --delivery-boost-max sur main avec un defaut de 0.0. La phase 2 (calibration sur 7 jours, puis activation a 0.5) ne sera pas faite. Depuis #18870, /continue tire en mode --belt (#18832), et ce mode court-circuite la voie ponderee avant tout usage du boost (scripts/pick_idle_grain.py, branche if args.belt:). Le tapis sert deja les issues les plus anciennement visitees en premier, ce que le boost cherchait a obtenir par ponderation. Si la voie ponderee redevient le mode par defaut, cette issue se rouvre.

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

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions