Repository navigation
ci(cabling,#14615): recable scripts/secrets/tests into scripts-tests.yml (family 4/6) - #14674
Conversation
…yml (family 4/6) Wire the whole testpath (dir) into the Scripts Tests (CPU) run; the two gitleaks modules skip without the binary there (authoritative gate = secret-scan.yml, which runs them with the downloaded binary). Repair 2 rotted tests found by the wiring (suite never CI-executed): - test_aliases_mapping: expect the COMFYUI_AUTH_TOKEN alias added by #14382 - test_main_drift_returns_1: monkeypatch _read_master_env like its sibling test_main_ok_returns_0 -- without it the empty-master gate exits 2 on any runner or fresh worktree without .secrets/ Registries: WORKFLOW_COVERAGE dir entry + CI-EXCLUDED marker removed + collection floor 148 (two-signal: crash vs coverage drop). Co-Authored-By: Claude-Code <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 |
Path-collision (organ #13359/#13615)Cette PR #14674 (
|
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — review sur b78bf799 (contrainte token : COMMENT only, opener jsboige).
Reproduction firsthand complète (fichiers fetchés au head SHA, venv uv + pytest) :
--collect-onlysurscripts/secrets/tests: 148 tests collectés — floor exact.- Run complet : 133 passed / 15 skipped — identique au body au test près.
- Rouge confirmé sur
origin/main: les 2 tests cités (test_aliases_mappingsans l'entréeCOMFYUI_AUTH_TOKENde #14382 ;test_main_drift_returns_1exit 2 via la gate master.env vide) échouent bien sans les correctifs, et passent avec. Les 2 correctifs sont minimaux et justes : ajout de l'alias dans le dict attendu (référence #14382 en commentaire), monkeypatch de_read_master_enven miroir du siblingtest_main_ok_returns_0— valeur fixture explicitement factice, pas de littéral secret.
Registres du garde #10903 : les 3 mises à jour sont dans le diff (run list + WORKFLOW_COVERAGE + retrait du marqueur # CI-EXCLUDED: remplacé par un commentaire neutre — le choix de ne pas laisser un marqueur mort est le bon). Le floor 148 avec les deux signaux distincts (N==0 = crash collecte vs N<148 = régression couverture) est une instrumentation saine, if: always() correct.
Sécurité : les 22 matches du scan (API_KEY, TOKEN, SECRET) sont tous des identifiants/fixtures (fixture-whisper-XXXX-1234), zéro valeur réelle — Classe 2/3, RAS.
Un point de vigilance (mineur, pas bloquant) : le floor exige N ≥ 148 mais rien ne garantit que les 15 skips restent des skips gitleaks — si un test des 3 modules non-gitleaks se met à sauter pour une vraie raison d'environnement (import cassé silencieux), le floor reste vert car la collecte compte les skips comme collectés. Les floors des familles précédentes ont la même propriété, donc c'est cohérent avec la série #14615 — à considérer dans une passe future si un skip non-gitleaks apparaît en CI.
Famille 4/6 conforme au motif établi (#14668, #14670) : découpe stricte, un testpath par PR, interleave G-VAR-3 documenté avec la chaîne de merge. RAS.
Grain: MED/test -- lane myia-po-2026:CoursIA -- prev: MED/guard #14601
Quoi
Famille 4/6 de #14615 (tranche 2-7 de #13746) : re-câblage de
scripts/secrets/tests— le testpath entier (5 modules, 148 tests) — dans le job Scripts Tests (CPU) descripts-tests.yml, dont il était exclu alors que secret-scan.yml n'en couvrait que les 2 modules gitleaks (cibles FICHIER, qui ne couvrent aucun testpath au sens du garde #10903).La preuve que l'exclusion masquait du rot réel (mesuré sur origin/main frais)
La suite n'avait jamais été exécutée en CI (secret-scan = 2 modules seulement). Baseline locale sur worktree frais origin/main : 2 failed / 131 passed / 15 skipped :
test_render_envs.py::TestConstants::test_aliases_mapping— attend un dictALIASESsans l'entréeCOMFYUI_AUTH_TOKEN: COMFYUI_API_TOKENajoutée par comfyui-qwen: COMFYUI_AUTH_TOKEN et COMFYUI_BEARER_TOKEN resolvent vide (deux producteurs du .env, jeux de cles divergents) #14382 (merge postérieur à la dernière exécution vérifiée de ce test). Mis à jour avec la référence comfyui-qwen: COMFYUI_AUTH_TOKEN et COMFYUI_BEARER_TOKEN resolvent vide (deux producteurs du .env, jeux de cles divergents) #14382 en commentaire.test_verify_running_containers.py::test_main_drift_returns_1— exit 2 au lieu de 1 : le test ne monkeypatch pas_read_master_env, contrairement à son siblingtest_main_ok_returns_0(l.221) ; la gate « master.env vide » (l.238-240 deverify_running_containers.py) sort rc=2 sur tout runner/fresh worktree sans.secrets/master.env. Monkeypatch ajouté, miroir du sibling, valeur fixture factice (pas de littéral secret).Après correctifs : 133 passed / 15 skipped (les 15 skips = les 2 modules gitleaks sans binaire — comportement documenté dans leur docstring : « if it is missing, the test is skipped (CI is the authoritative gate…) » ; leur gate avec binaire reste secret-scan.yml, inchangé).
Les 3 registres du garde #10903 (leçon famille 2)
scripts/secrets/tests \ajouté (fin de liste) ;WORKFLOW_COVERAGE(dict codé dur, source de vérité) : entrée dir aprèsscripts/tests;# CI-EXCLUDED: scripts/secrets/testsretiré (remplacé par un commentaire SANS préfixe marqueur — le garde : couverture prime sur exclusion, un marqueur mort serait trompeur).Garde vérifié localement :
check_testpaths_coverage.py --verbose→[ok] couvert: scripts/secrets/tests, et sa suite pytest 5/5 verts (donttest_guard_green_on_current_mainsur fichiers live).Floor (148)
Step compagnon
Secrets tests collection floor (148)(if: always()), mêmes sémantiques deux-signaux que les floors des familles 1-2 :N==0= panne de collecte,N < 148= régression de couverture, exit 1 distincts. Pipeline d'extraction prouvé localement (N=148).Mesures firsthand (origin/main 3881b76)
Interleave G-VAR-3 (3e MED/test de la lane en vol)
Chaîne same-genre à merger dans l'ordre : #14668 → #14670 → celle-ci (toutes MED/test, lane po-2026 ;
prevpointe au dernier MERGÉ #14601, invariant #13475). Conflit textuel possible avec #14670 surscripts-tests.yml/check_testpaths_coverage.py(mêmes fichiers, ancres différentes choisies ici exprès — insertion en fin de liste vs leur position) : résolution triviale, rebase à la demande.Périmètre
4 fichiers modifiés (+30/−1) :
.github/workflows/scripts-tests.yml,scripts/check_testpaths_coverage.py,scripts/secrets/tests/test_render_envs.py,scripts/secrets/tests/test_verify_running_containers.py.pytest.iniinchangé (testpath déjà déclaré l.12). Familles 3, 5, 6 hors PR (G.4 strict, une PR par famille).Tranche partielle (3/6 familles livrées) — le tracker reste ouvert :
See #14615
See #13746