Repository navigation
ci(cabling,#14615): recable scripts/audit/tests into scripts-tests.yml (family 2/6) - #14670
Conversation
…l (family 2/6) The CI-EXCLUDED line (4 env-dependent failures, DALLE-3 key, measured 2026-08-14) was stale: #12837 (2026-08-28) hermetized the tests and the exclusion was never lifted. Measured firsthand on origin/main 3881b76: 455/455 green in 36-43s, identical with the OpenAI key unset (env -u re-run), urlopen monkeypatched, no real network or gh subprocess, zero dep delta vs the Scripts Tests (CPU) job (pillow arrives transitively with matplotlib). The @pytest.mark.env marker proposed by the dispatch is moot: nothing left to separate. - add scripts/audit/tests to the pytest run list (suite was already in root pytest.ini testpaths) - replace the audit CI-EXCLUDED line with a removal tombstone pointing at the hermeticity proof - add a collection floor-guard step (AUDIT_TESTS_FLOOR=455), same two-signal semantics as #14614 / #14668 floors Combined invocation collects 11860 tests with no collection error; check_self_hosted_runner_policy OK; 57 policy pytest passed locally. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
Une Pour passer ce gate, réécrivez le champ |
…h-auth on 3 integration tests
First CI run of the recabled suite caught two real gaps (checks settled
fails=4, root = Scripts Tests (CPU)):
1. test_check_testpaths_coverage::test_guard_green_on_current_main --
WORKFLOW_COVERAGE in scripts/check_testpaths_coverage.py is the guard's
declared registry, not the workflow file alone: the new run target had
to be registered there too ("testpaths non couverts: scripts/audit/tests").
2. test_check_orphan_merged_pr -- 3 _main tests exit 2 on a runner without
authenticated gh: main()'s fallback slug discovery runs `gh repo view`
even with --repo "" and analyse_pr then queries open PRs on the base;
the swallowed RuntimeError returns 2. Decorated with requires_gh_auth
skipif (same policy as test_check_unaddressed_nits.py, NanoClaw review
#14322 concern 2: skip, not FAILED). 452 run + 3 skip on a bare runner,
455 locally.
Also hardened _g()'s subprocess call with encoding="utf-8" per the
check-subprocess-encoding hook (#12811).
Verified locally: coverage guard 5/5, orphan file 35/35.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Une Pour passer ce gate, réécrivez le champ |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] Review sur 0fe3652 — favourable, vérification indépendante du claim central.
Vérifié firsthand (checkout de la branche) :
- Floor 455 calibré exactement : comptage AST sur
scripts/audit/tests→ 455 fonctions test_ sur 16 fichiers, identique auAUDIT_TESTS_FLOOR: 455posé. Le garde deux-signaux (0 collecté = crash ≠ < floor = régression) reprend la sémantique #14614/#14668 — cohérent. - Le skip-guard
requires_gh_auth(4 tests_main) est la bonne politique : même skip propre que test_check_unaddressed_nits.py (#14322, concern 2 NanoClaw), la docstring trace le pourquoi (découverte slug viagh repo viewmême avec--repo ""). Sur runner sans gh auth → SKIP, pas FAILED. - Le fix
encoding="utf-8", errors="replace"sur_g()est un vrai durcissement (noms de fichier accentués → leassertsur stderr ne peut plus UnicodeDecodeError avant de diagnostiquer). check_testpaths_coverage.pymis à jour en cohérence — pas de liste fantôme.- Security scan clean. CI pending au moment de la review, mais rien dans le diff ne dépend du résultat CI pour être évalué.
(contrainte token : COMMENT only — verdict favorable)
Path-collision (organ #13359/#13615)Cette PR #14670 (
|
|
G-VAR-2 light cap reached (advisory, non bloquant). |
Grain: MED/test -- lane myia-po-2026:CoursIA -- prev: MED/guard #14601
Quoi
Famille 2/6 de #14615 (tranche 2-7 de #13746) : re-câblage de
scripts/audit/tests— 16 fichiers de tests pytest, ~455 tests — dans le job Scripts Tests (CPU) descripts-tests.yml, dont ils étaient exclus par une ligneCI-EXCLUDEDpérimée.Prémisse renversée (mesuré firsthand, séquence datée) : la ligne CI-EXCLUDED invoquait « 4 échecs env-dépendants (test_regen_img1_dalle3.py, clé DALLE-3/OpenAI requise), 405 passent » — mesure po-2024 du 2026-08-14, exacte alors. Mais #12837 (merge 2026-08-28) a hermétisé ces tests (urlopen monkeypatché, redirection des chemins d'assets vers tmp_path, plus aucune clé requise) et la ligne d'exclusion n'a jamais été retirée. La famille dormait non-câblée depuis une semaine pour une raison disparue.
Le marqueur
@pytest.mark.envproposé par le dispatch est donc moot : il n'y a plus rien à séparer — c'est le verdict le plus simple et le plus honnête.Mesures firsthand (G.2, origin/main 3881b76)
pytest scripts/audit/tests -qlocal : 455/455 verts, 36-43 s.env -u OPENAI_API_KEY -u OPENAI_BASE_URL, re-passé) : 455/455 identiques — l'env-var n'entre pas en jeu (docstring du fichier : « all hermetically, no network, no real OpenAI key » ; constaté, pas seulement lu).urllib.request.urlopen(test_regen_img1_dalle3.py:208-227).nbformat,yaml,matplotlib(et pillow via import paresseux — pillow est une dépendance requise de matplotlib, donc déjà transitivement installée). Tout est dans le pip install du job.Floor-guard (455)
Step compagnon
Audit tests collection floor (455)(if: always()), mêmes sémantiques deux-signaux que les floors des tranches sœurs (#14614 GameTheory, #14668 Shared.Tests) : liste vide = panne de collecte, compte < 455 = régression de couverture — exit 1 distincts. Extraction ancrée surN tests collected(pytest ne localise pas sa sortie — contrairement à l'en-têtedotnet --list-testsdu grain précédent), vérifiée N=455 localement.Réparation après premier run CI (settlement fails=4 → commit 0fe3652)
Le premier run de la suite en CI a révélé deux manques réels (le workflow tourne sur sa propre PR — validation native) :
test_check_testpaths_coverage::test_guard_green_on_current_mainROUGE :WORKFLOW_COVERAGEdans scripts/check_testpaths_coverage.py est le registre déclaré du garde, pas le seul fichier workflow — la cible devait y être enregistrée aussi (« testpaths non couverts : scripts/audit/tests »). Fait.test_check_orphan_merged_pr— 3 tests_mainexit 2 sur le runner : la découverte de slug en fallback demain()exécutegh repo viewmême avec--repo "", puisanalyse_prrequête les PRs ouvertes sur la base ; le RuntimeError avalé rend exit 2 sans faute du code. Décorés@requires_gh_authskipif (même politique que test_check_unaddressed_nits.py, review NanoClaw fix(guard,#14199): neutraliser 'avant merge' en position de mention (Position I) #14322 concern 2 : skip, pas FAILED) — 452 exécutés + 3 skips sur runner nu, 455 localement (gh authentifié). Ce sont les seuls tests réellement env-dépendants de la suite — la lignée du marqueur@pytest.mark.envdu dispatch, resserrée à 3 tests nommés.Bonus : durcissement
encoding="utf-8"du helper_grequis par le hook check-subprocess-encoding (#12811).Vérifié localement : garde coverage 5/5, fichier orphan 37/37, suite audit 455/455.
Périmètre
3 fichiers modifiés :
.github/workflows/scripts-tests.yml(+34/−3),scripts/check_testpaths_coverage.py(+1 registre),scripts/audit/tests/test_check_orphan_merged_pr.py(skipif ×3 + helper + encoding).pytest.iniracine inchangé (la suite y est déjà listée ligne 9 — seule l'exclusion workflow la bloquait). Familles 3-6 de #14615 hors PR (G.4 strict, PR séparée par famille).Interleave G-VAR-3 (même genre que #14668)
Cette PR est
MED/testcomme #14668 (famille 1, ouverte) : séquence same-genre de la lane. Leprev:pointe au dernier PR MERGÉ de la lane (#14601, MED/guard — invariant #13475 : jamais une PR ouverte) ; l'interfoliage same-genre avec #14668 est documenté ici et par DM ai-01 : merger #14668 avant celle-ci (ou un PR d'autre genre entre les deux).Tranche partielle (2/6 familles livrées) — le tracker reste ouvert :
See #14615
See #13746