Repository navigation
feat(picker,#13420): pondérer les Epics par âge de dernière livraison réelle #15491
Description
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 :
UNAVAILABLE/None— fetch, cache ou corpus indisponible : facteur neutre ;NO_DELIVERY_IN_WINDOW— mesure valide, aucune citation de livraison dans la fenêtre ;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
- option
--delivery-boost-max 0par défaut ; - texte et JSON : fenêtre demandée/réelle, troncature, état, date/âge, nombre de livraisons, facteur théorique et diagnostic de body [EPIC] Les body d'Epic ne sont jamais réécrits — 47/51 ignorent leurs propres livraisons #13906 ;
- l’Epic au body périmé reste tirable, mais la sortie route vers mise à jour/decision coordinateur.
Phase 2 — activation après calibration
- facteur réservé aux umbrellas, gradué de
1.0à1.5maximum ; - 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.
Activity
jsboige commentedon Sep 10, 2026
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.
jsboige commentedon Sep 10, 2026
Livré via #15498 (Phase 1,
--delivery-boost-maxdéfaut 0) : signal 4 états (unavailable / empty_corpus / none_in_window / delivered) réutilisantcited_issues, facteur théorique au plafond de calibration 0.5 rendu en texte+JSON, hookweight()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.feat(picker,#15491): instrument umbrella last-real-delivery age (Phas…
jsboige commentedon Sep 13, 2026
[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.
myia-ai-01 commentedon Oct 4, 2026
Cloture coordinateur ai-01 (remplacee). La phase 1 est livree : #15498 mergee,
--delivery-boost-maxsur 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,/continuetire en mode--belt(#18832), et ce mode court-circuite la voie ponderee avant tout usage du boost (scripts/pick_idle_grain.py, brancheif 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.