Skip to content

fix(ci,#17628): remettre en CI les 5 tests session_hygiene (étape séquentielle dédiée) - #17736

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17628-session-hygiene-in-ci
Sep 25, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17628-session-hygiene-in-ci

Conversation

@jsboige

@jsboige jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling -- lane myia-po-2026:CoursIA -- prev: MED/notebooks #17694

#17628 — les 5 tests session_hygiene ne tournaient jamais en CI

Le fait, re-mesuré firsthand

gh run view --job 107202539829 --log → 14989 passed, 103 skipped (conclusion success). Ce chiffre de l'issue est exact au chiffre près : le vert du job Scripts Tests (CPU) ne prouvait rien pour les 5 tests de scripts/tests/test_session_hygiene.py.

Cause : leur skipif de module saute dès que

CI == "true" and RUNNER_OS == "Linux" and PYTEST_XDIST_WORKER is not None

or le pool n'a que des runners Linux self-hosted WSL, et l'étape pytest lance tout sous -n 4 --dist loadscope — la condition matchait donc tout run du job.

Correctif — la voie 1 de l'issue (aucun changement du test)

Le skipif autorise déjà le run séquentiel : sans -n, PYTEST_XDIST_WORKER est absent, donc la condition ne matche pas. Le correctif est donc d'une seule étape additive dans .github/workflows/scripts-tests.yml :

- name: Session hygiene tests, sequential (5)
  if: always()
  run: |
    python -m pytest scripts/tests/test_session_hygiene.py -q --tb=short

Elle relance le fichier seul et sans -n, ce qui désamorce la saturation RLIMIT_NPROC du cumul de subprocess git (cause réelle du skip, #17496 / b8a633f153) tout en rendant la couverture à l'organe scripts/coordination/session_hygiene.py (#16736). if: always() comme les étapes de plancher voisines : même suite principale rouge, on veut le verdict nommé de ces 5 tests plutôt qu'un silence.

Critères d'acceptation (les 2, et où ils sont couverts)

Critère État
Les 5 tests apparaissent en passed (pas skipped) dans un run CI du job couvert — l'étape est dans ce job ; sa preuve est le run CI de cette PR (voir « Preuve » ci-dessous)
La marque xdist_group est opérante (loadgroup) ou retirée si inerte couvert par retrait, mesuré : loadgroup n'apparaît dans aucun job (grep -rn loadgroup .github/ scripts/ pytest.ini → 0), pytest.ini ne pose aucun --dist par défaut, et cette marque est la seule du dépôt. Sous --dist loadscope elle était inerte. La rendre opérante exigerait de basculer un job en loadgroup, qui re-planifie toutes les suites — le workflow documente loadscope comme porteur pour d'autres modules. L'isolation visée est de toute façon obtenue autrement par l'étape séquentielle.

Preuve — contrôles positif ET négatif (pas un vert de complaisance)

Les deux directions ont été mesurées, en simulant les variables du runner Linux :

Invocation Résultat
CI=true RUNNER_OS=Linux, séquentiel 5 passed en 5.99 s ← le correctif produit l'effet voulu
CI=true RUNNER_OS=Linux PYTEST_XDIST_WORKER=gw0 5 skipped en 0.07 s ← la panne d'origine, reproduite

Le second contrôle est celui qui compte : il falsifie l'idée que ces tests tournaient — ils étaient bien sautés sous xdist, et le correctif ne fait pas que « passer au vert », il change la nature de l'exécution.

Limite honnête. Je n'ai pas de runner Linux WSL local : les deux mesures ci-dessus portent le jeu de variables du runner, pas son noyau. Le vert Linux réel sera établi par le run CI de cette PR — l'étape s'y exécute, donc si la RLIMIT_NPROC frappait encore en séquentiel, le run serait rouge et le dirait. C'est auto-référentiel mais c'est la preuve disponible ; je le déclare plutôt que de le taire.

Note de transparence

Le message de commit 49fd0072fc cite « 14981 passed » — coquille de ma part : la mesure vérifiée est 14989 (ci-dessus, relue dans le log du job). Le chiffre juste est celui de ce body ; le commit n'a pas été amendé (protocole : pas de réécriture d'historique).

Périmètre

2 fichiers, +31/−3. Aucun notebook, aucun catalogue. Closes #17628 — les deux critères sont couverts.

🤖 Generated with Claude Code

…uentielle dediee)

Les 5 tests de test_session_hygiene.py ne tournaient JAMAIS en CI : leur
skipif de module saute des que CI=true ET RUNNER_OS=Linux ET
PYTEST_XDIST_WORKER est pose -- or le pool n'a que des runners Linux
self-hosted WSL et l'etape pytest lance tout sous `-n 4 --dist loadscope`.
La condition matchait donc tout run du job (mesure du 2026-09-24, job
107202539829 : 14981 passed, 103 skipped -- le vert ne prouvait rien pour
ces 5).

Le skipif autorise deja le run sequentiel (PYTEST_XDIST_WORKER absent) :
aucun changement du predicat. Ajout d'une etape dediee qui relance le
fichier SEUL et SANS `-n`, ce qui desamorce la saturation RLIMIT_NPROC du
cumul de subprocess git (cause reelle du skip, #17496 / b8a633f) tout
en rendant la couverture a l'organe session_hygiene.py (#16736).

Retire aussi la marque xdist_group(name="serial-git") : elle n'est
operante que sous --dist loadgroup, qu'aucun job n'utilise (loadscope
cote job, aucun --dist par defaut dans pytest.ini) -- inerte partout.
L'isolation visee est desormais obtenue par l'etape sequentielle.

Controles mesures (post-fix) :
- CI=true RUNNER_OS=Linux, sequentiel      -> 5 passed (correctif)
- CI=true RUNNER_OS=Linux + worker xdist   -> 5 skipped (avant)

Closes #17628

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

Preuve Linux declaree au body : le run CI de cette PR a execute l'etape nouvelle Session hygiene tests, sequential (5) -> 5 passed (..... [100%], exit 0), plateforme linux / Python 3.11.16 (job 107928577388, conclusion success). La « limite honnete » du body est levee : le vert Linux reel est etabli, pas seulement le jeu de variables simule.

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17736 (fix(ci,#17628): remettre en CI les 5 tests session_hygiene (étape séquentielle dédiée)) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 25, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17736
head: 49fd007
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: efa3754be081a709cc857fcacf97fb77cd06c04e231619047a8af6a2bbebbdad
diff-files: 2
diff-additions: 31
diff-deletions: 3
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants