Skip to content

ci(cabling,#14615): recable scripts/secrets/tests into scripts-tests.yml (family 4/6) - #14674

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/secrets-tests-cabling-14615
Sep 5, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/secrets-tests-cabling-14615

Conversation

@jsboige

@jsboige jsboige commented Sep 4, 2026

Copy link
Copy Markdown
Owner

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) de scripts-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 :

  1. test_render_envs.py::TestConstants::test_aliases_mapping — attend un dict ALIASES sans l'entrée COMFYUI_AUTH_TOKEN: COMFYUI_API_TOKEN ajouté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.
  2. 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 sibling test_main_ok_returns_0 (l.221) ; la gate « master.env vide » (l.238-240 de verify_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)

  • run list du workflow : scripts/secrets/tests \ ajouté (fin de liste) ;
  • WORKFLOW_COVERAGE (dict codé dur, source de vérité) : entrée dir après scripts/tests ;
  • marqueur # CI-EXCLUDED: scripts/secrets/tests retiré (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 (dont test_guard_green_on_current_main sur 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)

  • suite secrets : 133 passed / 15 skipped en 0.64 s (stddev négligeable) ;
  • invocation CI combinée complète (run list exact du workflow + secrets) : 11 553 tests collectés, 0 erreur (11 405 + 148) ;
  • zéro nouvelle dépendance : les 3 modules non-gitleaks sont stdlib-only (dotenv parse maison, parse compose), les 2 gitleaks skip sans binaire.

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 ; prev pointe au dernier MERGÉ #14601, invariant #13475). Conflit textuel possible avec #14670 sur scripts-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.ini inchangé (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

…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>
@github-actions github-actions Bot added the variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) label Sep 4, 2026
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-04) :

  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #14674 (ci(cabling,#14615): recable scripts/secrets/tests into scripts-tests.yml (family 4/6)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Sep 4, 2026

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — review sur b78bf799 (contrainte token : COMMENT only, opener jsboige).

Reproduction firsthand complète (fichiers fetchés au head SHA, venv uv + pytest) :

  • --collect-only sur scripts/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_mapping sans l'entrée COMFYUI_AUTH_TOKEN de #14382 ; test_main_drift_returns_1 exit 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_env en miroir du sibling test_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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-overlap Advisory: another open PR touches the same files (organ #13615) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants