Repository navigation
pick_idle_grain : sous restriction de secheresse, le genre CONTENU est infere du CHEMIN — 2 des 3 candidats tires etaient META #13972
Description
Grain: MED/guard — lane myia-ai-01:CoursIA — prev: MED/ledger #13956
Le defaut
Quand pick_idle_grain.py detecte une secheresse de substance (G-VAR-1, organe livre par #13884), il « RESTREINT le tirage aux genres CONTENU » et l'annonce en ces termes :
Le tirage ci-dessous est RESTREINT aux genres CONTENU (69 candidats). Ce n'est pas un refus : la lane recoit un grain, et ce grain tient le plancher.
La derniere clause n'est pas garantie. Le genre affiche dans la colonne genre et marque * (= CONTENU) est infere, et au moins pour une classe d'issues il est infere du chemin des fichiers, pas du type de travail. C'est exactement l'inference que variation-protocol.md §1 interdit :
Le GENRE est le TYPE DE TRAVAIL, jamais la famille ou vivent les fichiers. Test : si le prochain grain de ce rollout tombait dans une autre famille, changerais-je le GENRE ? Si oui, le genre decrit le repertoire — reprendre celui du travail.
Mesure — 2026-09-01, lane myia-ai-01:CoursIA, secheresse a 9
Trois tirages consecutifs sous restriction CONTENU. Chaque candidat a ete grounde firsthand avant claim (ce qui est la regle) ; deux des trois n'etaient pas du CONTENU :
| issue | genre affiche par le picker | ce que dit son corps | verdict |
|---|---|---|---|
| #10475 | notebook-dotnet* |
premiere ligne du body : Grain: MED/docs — et le corps ecrit noir sur blanc « Ce grain ne compte pas comme le plat principal d'un cycle (G-VAR-1 : docs est un genre META) — il se fait en plus, jamais a la place » |
META, auto-declare |
| #13745 | notebook-python* |
« [consolidation] notebook_tools/ : 92 orphelins sur 152 + fusions selectives » — consolidation de scripts, acceptance = « chaque orphelin cable / documente / archive » |
META (tooling/refactor), infere du prefixe notebook_ |
| #12422 | notebook-python* |
genre correct, mais premier critere d'acceptance : « Decision user enregistree sur ce depot d'issue avant tout travail » | CONTENU, mais non prenable |
#10475 est le cas le plus net : l'issue porte deja son propre tag Grain:, en toute premiere ligne du body, et il dit docs. L'information exacte etait disponible sans aucune inference — elle n'a pas ete lue.
Pourquoi ca compte plus qu'un affichage inexact
L'organe de secheresse existe pour empecher qu'une lane enchaine les grains META. S'il peut proposer un META etiquete CONTENU, alors une lane de bonne foi qui suit sa recommandation :
- croit tenir G-VAR-1 (« le picker me l'a donne comme CONTENU sous restriction ») ;
- livre un grain META de plus ;
- voit son compteur de secheresse ne pas redescendre au cycle suivant, sans comprendre pourquoi.
Autrement dit le garde peut certifier la sortie de la secheresse tout en la prolongeant. C'est le motif « un organe qui certifie ce qu'il ne teste pas » : le picker mesure la secheresse correctement (le compte des 9 merges META est juste, verifie), mais son remede n'est pas cable a la meme definition de genre que sa mesure.
Seule la discipline de grounding firsthand avant claim l'a attrape ici — trois fois de suite. Une lane qui ferait confiance a la colonne genre ne le verrait jamais.
Piste (non prescriptive)
- Lire le tag
Grain:du body quand il existe — il est deja normalise, deja parse ailleurs dans le harnais (variation_light_cap.py,variation_adjacency_guard.py), et il est autoritatif : c'est le genre que l'auteur de l'issue a declare. Cela reglait Veille série *The Unexpected AI Stack: C#/.NET* — registre des parutions et distillation en grains #10475 seul. - Ne pas inferer
notebook-*d'un chemin contenantnotebook—scripts/notebook_tools/est de l'outillage sur des notebooks, pas un notebook. Le discriminant estMyIA.AI.Notebooks/**/*.ipynbtouche ou non. - Optionnel — quand un corps d'issue contient une clause d'auto-exclusion explicite (« ne compte pas comme le plat principal », « ne pas lancer avant decision user »), la remonter en annotation a cote du candidat, comme le picker le fait deja pour
LIVRAISON RECENTEetTRAVAIL EN COURS. Ces deux annotations existantes sont exactement du meme genre : « lis avant de claimer ».
Le point 3 aurait aussi couvert #12422, dont le blocage n'est pas le genre mais l'acceptance.
Acceptance
- Le genre affiche pour une issue portant un tag
Grain:dans son body est celui du tag, pas une inference -
scripts/notebook_tools/**etscripts/**ne produisent pas un genrenotebook-* - Controle positif : rejouer le tirage du 2026-09-01 sur la lane
myia-ai-01:CoursIA(secheresse 9) et verifier que Veille série *The Unexpected AI Stack: C#/.NET* — registre des parutions et distillation en grains #10475 et [consolidation] notebook_tools/ : 92 orphelins sur 152 + fusions selectives (V3) #13745 sortent du jeu restreint CONTENU — un correctif qui ne change pas ce tirage n'a rien corrige - La restriction de secheresse continue de proposer >= 1 candidat reellement CONTENU (le correctif retrecit le vivier : verifier qu'il ne le vide pas)
See #13086
Activity
fix(pick_idle_grain,#13972): read Grain: tag from body before inferri…
jsboige commentedon Sep 30, 2026
Verification G.9 de fermeture (tranche 8 de #15258, lane myia-po-2024:CoursIA) : fermeture legitime, aucune reouverture.
myia-ai-01a 2026-09-01T10:55:21Z,commit_id: none(fermeture manuelle).fix(pick_idle_grain,#13972): read Grain: tag from body before inferring genre from title— MERGED a 2026-09-01T10:55:19Z (ecart 2 s) —Grain: MED/guard — lane myia-po-2026:CoursIA. Tentative anterieure : tooling(#13972): infer_genre lit le tag Grain du body avant le regex titre #13977 (meme issue).Grain:du body avant le regex de titre).