Repository navigation
Conversation
…titre Issue #13972 (acceptance point 1) : quand une issue declare son genre via un tag `Grain: <TIER>/<GENRE>` dans son body, ce tag est autoritatif (variation-protocol.md §1 : « Le GENRE est le TYPE DE TRAVAIL, jamais la famille ou vivent les fichiers »). Sans ce contrat, le picker peut proposer une issue META sous une restriction CONTENU : #10475 a son tag `Grain: MED/docs` en premiere ligne du body mais son titre contient « notebook » -- le regex historique inferait `notebook-python` (META) au lieu de `docs` (CONTENU). Mesure du 2026-09-01 (lane `myia-ai-01:CoursIA`, secheresse 9) : 3 candidats, 2 META sous etiquette CONTENU (#10475 et #13745). Le garde peut certifier la sortie de secheresse tout en la prolongeant silencieusement. Fix : `infer_genre(title, labels, body=None)` tente d'abord `parse_grain_tag(body)`. Si le tag est parseable, son champ `genre` est retourne -- le regex titre+labels devient un fallback. Fallback final inchange (`docs`) -- ne casse pas les 79 tests existants. Tests (81 passants = 79 originaux + 2 nouveaux) : - `test_infer_genre_reads_body_grain_tag_before_title_heuristic_13972` : body `Grain: MED/docs` + titre « notebook regression » -> genre `docs` (autoritatif). Couvre #10475. - `test_infer_genre_falls_back_to_title_heuristic_when_no_grain_tag` : controle positif -- sans tag Grain dans le body, le regex titre continue de matcher `notebook-python`. Hors scope du grain (acceptance points 2, 3, 4 de l'issue) : - discrimination `scripts/notebook_tools/**` vs `MyIA.AI.Notebooks/**` - annotation des clauses d'auto-exclusion (« ne compte pas comme le plat principal ») - vivier CONTENU retrecit reste non-vide (validation end-to-end sur secheresse 9 du 2026-09-01) Grain cible volontairement un point d'acceptance, pas la totality : un commit atomique par point, avec controle positif, est plus verifiable qu'un PR composite. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Grain tag obligatoire (#10045, bloquant).
Pour passer ce gate, le body doit porter en tete une ligne de la forme : Le |
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
Path-collision (organ #13359/#13615)Cette PR #13977 (
|
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
Superseded by #13972 fix on main (commit b0c508b, merged 2026-09-01 09:29Z). This PR (cycle 66, commit 7f2ef7b) implemented the same fix — Closing to clear the DIRTY/mergeable=CONFLICTING slot from the Grain: LIGHT/guard -- lane myia-po-2026:CoursIA -- prev: MED/guard #14045 cycle 93. |
Grain: LIGHT/tooling -- lane myia-po-2026:CoursIA -- prev: LIGHT/guard #13974 cycle 75
Grain
Issue #13972, sous-point acceptance 1 : tag
Grain:du body autoritatif sur le regex titre+labels.Diagnostic
pick_idle_grain.infer_genre(title, labels)regarde le titre et les labels. Quand le titre contientnotebook, le regex matchenotebook-python(META, jamais eligible a une restriction CONTENU). Mais le body peut porter un tagGrain: <TIER>/<GENRE>qui contredit ce regex.Cas #10475 (2026-09-01, secheresse 9 sur
myia-ai-01:CoursIA) :Grain: MED/docs(CONTENU)2.11 LASSO - notebook regression notebook-tools ...notebook-python(META, sort du jeu restreint CONTENU)docs(CONTENU, sort du jeu comme attendu)Mesure du 2026-09-01 : 3 candidats sous restriction CONTENU, 2 META (#10475, #13745). Le garde peut certifier la sortie de secheresse tout en la prolongeant silencieusement.
Fix
infer_genre(title, labels, body=None)tente d'abordparse_grain_tag(body). Si parseable, son champgenreest retourne. Sinon, fallback au regex historique, puisdocspar defaut. Le parsergrain_tag.pyetait deja importe dans pick_idle_grain (utilise pour le guard et le prev), donc zero nouvelle dependance.L'appelant unique (
fetch_pool) passeit.get("body") or ""-- le body est deja charge par legh issue list --json ... body.Verification
79 originaux + 2 nouveaux :
test_infer_genre_reads_body_grain_tag_before_title_heuristic_13972: bodyGrain: MED/docs+ titrenotebook regression ...-> genredocs. Couvre le cas Veille série *The Unexpected AI Stack: C#/.NET* — registre des parutions et distillation en grains #10475.test_infer_genre_falls_back_to_title_heuristic_when_no_grain_tag: controle positif. Sans tag Grain, le regex titre continue de matchernotebook-python. Sans ce test, un correctif qui supprime le regex sans alternative retrecit dangereusement le vivier.Diff
Hors scope (acceptance points 2/3/4 explicites dans l'issue)
scripts/notebook_tools/**vsMyIA.AI.Notebooks/**/*.ipynb(un scriptnotebook_tools/n'est pas un notebook).Ces 3 points sont des grains dedies, atomiques, chacun avec son propre controle positif. Un grain composite (1 PR = 4 acceptance points + test E2E) violerait la regle A du PR-review-discipline (composites trop larges).
Refs #13972 · See #13086
Note post-merge (cycle 82)
Body edite au cycle 82 pour ajouter le prefixe
Grain:manquant en premiere ligne (le tag etait en fin de body, non detectable par le parser canonique). Le tag est maintenant conforme au formatGrain: TIER/GENRE -- lane ... -- prev: TIER/GENRE #N. Pas de modification de code ; le diff reste +62/-2.