Repository navigation
ci(adk,#20002): cabler config/test_providers.py dans la jambe adk-contracts + plancher 30 - #20025
Conversation
…tracts + plancher 30 `config/test_providers.py` ne tournait dans aucune jambe de CI : le job `adk-contracts` n'invoquait qu'un seul fichier, alors que son declencheur (`Track2-GoogleADK/**`, deja present pour #15058) couvrait deja `config/`. La surface CI existait, la collecte manquait -- et son absence etait silencieuse (aucun rouge, aucune trace). - etape `Run provider default contracts` : hote = ce job, pas la liste partagee `scripts-tests`. Le fichier n'importe que pytest + pathlib + importlib.util, et `config/providers.py` que pydantic + pydantic_settings -- aucun litellm/google-adk au niveau module, la raison meme de l'env isole de #15079. Cet env porte deja la chaine pydantic du job : cout d'hebergement nul. - etape `Providers collection floor (30)` : memes deux signaux que les planchers existants -- 0 collecte = crash de collecte, sous le plancher = regression de couverture, jamais du menage. Piege nomme par l'issue, leve AVANT le cablage : le plancher devait etre mesure sous le pin du job (`pydantic==2.12.5`), l'issue rappelant que la suite avait ete mesuree en 2.13.4. Rejeu sur cette tete, venv aux pins exacts : 30 collectes / 30 passees sous le pin, et 30 / 30 sous 2.13.4 -- l'ecart de pin n'est pas materiel, et 30 est le plancher. L'issue annoncait 32 : la mesure sur cette tete donne 30 sous les deux pins. Garde #18888 (`guard_test_root.py`) rejouee apres l'edition : rc=0. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Trivial-diff advisory (#15740, non bloquant). |
|
[ADJOINT PREFLIGHT] |
Path-collision (organ #13359/#13615)Cette PR #20025 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Approuvée à la tête ecb1fe2f6f. Lu : le diff (+37/-0, deux étapes ajoutées au job adk-contracts, sur le modèle des deux qui les précèdent).
La preuve décisive est dans le run de la PR, et non sur un poste. Job ADK runtime contracts (18), id 113664899890, 04:08Z :
- la suite
config/test_providers.pys'exécute :30 passed in 0.12s; - son plancher tient :
OK: 30 tests collected (floor=30); - les contrats existants restent intacts (
18 passed,floor=18).
Le plancher est mesuré sous le pin du job (pydantic==2.12.5), comme le demandait #20002.
Grain: MED/guard — lane myia-po-2027:CoursIA-2 — prev: MED/tooling c.1504 #20016
ci(adk,#20002): cabler
config/test_providers.pydans la jambeadk-contracts+ plancher de collection 30Part of #13504 · See #20002
Le defaut
MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/config/test_providers.pyne tournait dans aucune jambe de CI. Le jobadk-contractsn'invoquait qu'un seul chemin (utils/test_adk_runtime_contracts.py), alors que son declencheur (Track2-GoogleADK/**, deja en place pour #15058) couvrait dejaconfig/. La surface CI existait donc, la collecte manquait — et son absence etait silencieuse : aucun rouge, aucune trace.Verifie sur cette tete : le fichier n'apparait dans aucune etape
pytestdu workflow, ni dans lestestpathsdepytest.ini.Le cablage
.github/workflows/scripts-tests.ymladk-contracts(+37 lignes, 0 suppression)Hote = ce job, pas la liste partagee
scripts-tests(l'hote que l'issue designait) :config/test_providers.pyn'importe quepytest,pathlib,importlib.util;config/providers.pyn'importe quepydantic+pydantic_settings;litellmnigoogle-adkau niveau module — c'est precisement ce qui avait motive l'env isole de feat(ci,#15058): ADK contracts — brancher les 16 tests C1-C7 dans un job dedie (litellm installe, job isole) #15079 pour les contrats C1-C7 ;pydantic==2.12.5+pydantic-settings+python-dotenv: cout d'hebergement nul, zero nouveau paquet.Deux etapes ajoutees, sur le modele exact des deux qui les precedent :
Run provider default contracts— l'execution, absente jusqu'ici ;Providers collection floor (30)—if: always(), memes deux signaux que les planchers existants (0 collecte = crash de collecte ; sous le plancher = regression de couverture, jamais du menage), variableADK_PROVIDERS_FLOOR.Le piege de pin — leve AVANT de cabler
L'issue nommait elle-meme le piege : le job epingle
pydantic==2.12.5, alors que la suite avait ete mesuree sur le poste de l'auteur en 2.13.4. Cabler sans rejouer sous le pin risquait un rouge d'environnement pris pour un rouge de contrat.Rejeu fait d'abord, venv cree aux pins exacts du job (
pydantic==2.12.5,pytest,pydantic-settings,python-dotenv) :pydantic 2.12.5, py 3.13.15, pytest 9.1.1)pydantic 2.13.4)L'ecart de pin n'est donc pas materiel sur cette tete, et le plancher est 30 — la valeur mesuree sous le pin, pas celle du poste de l'auteur (critere 3 de l'issue). L'issue annoncait 32 : la mesure sur cette tete en donne 30 sous les deux pins, donc le chiffre de l'issue ne se reproduit pas ici et c'est 30 qui fait foi.
Verification
yaml.safe_loadsur le workflowpython scripts/ci/guard_test_root.py(garde anti-recidive #18888, qui lit les chemins collectes depuis ce workflow)Track2-GoogleADK/**couvre dejaconfig/: la jambe tirera sur toute PR touchant le fichierLa validation qui fait foi reste le run de cette PR : le nombre de tests est releve au run par l'etape
Providers collection floor (30), pas sur ce poste.Ce que la suite protege
Elle est l'invariant qui lie les defauts declares de
SettingsauxDEFAULTSdeProviderConfig. Le defaut de #14755 est ne exactement la : un identifiant de modele OpenRouter retire du catalogue a survecu comme defaut dansSettings, parce que rien ne comparait les deux —get_provider_configresoutsettings.<p>_model or defaults["model"], et le repli ne s'exerce que si la variable d'environnement est vide, donc les deux valeurs divergent sans bruit. Tant que le fichier n'etait pas collecte, la fermeture apportee par #19972 restait declarative.Hors perimetre (dit, pas fait)
name:du job resteADK runtime contracts (18): le renommer toucherait l'identite d'un check potentiellement requis en protection de branche, pour un gain cosmetique. Les deux planchers sont distincts et nommes (ADK_CONTRACTS_FLOOR/ADK_PROVIDERS_FLOOR), donc rien n'est ambigu a la lecture du job.G-VAR-1 : NON TENU (declare)
MED/guardest un genre META : il ne tient pas le plancher DEEP/CONTENU du cycle. Les candidats DEEP/CONTENU du tapis ont ete mesures ce cycle et sont tous soit deja livres, soit revendiques par une autre lane —#19355(livre, PR #19438),#18395(livre, PR #18644),#18512(livre),#19763(livre, PR #19848),#18953(livre, PR #19155),#19698(livre),#19762(claim vivant po-2024),#19882(claim vivant po-2026), plis 1-5 de l'EPIC Origami#19898(tous revendiques). Constat depose au registre de la lane.See #20002 · Part of #13504
🤖 Generated with Claude Code