Skip to content

CI(tests): test_check_lean_orphans écrit ses fixtures en cp1252 — 5 tests rouges sur runner Windows #24554

Closed

Description

@jsboige

Constat (mesuré le 2026-11-04, myia-po-2027:CoursIA, Windows, git 2.56, Python 3.13)

scripts/lean/tests/test_check_lean_orphans.py écrit ses fixtures avec Path.write_text(...) sans encoding=. Sur une locale Windows (cp1252), les caractères « / » des lakefiles de test sortent en 0xAB / 0xBB. L'organe scripts/lean/check_lean_orphans.py relit ces fichiers en encoding="utf-8" et rend alors :

ERROR (scp_pre_fix): cannot read ...\scp\lakefile.lean: 'utf-8' codec can't decode byte 0xab in position 28: invalid start byte

donc main() retourne 2 là où les tests attendent 0 ou 1.

python -m pytest scripts/lean/tests/test_check_lean_orphans.py -q
# 5 failed, 9 passed   (sur la base 709dfb9d85, arbre principal)

Échecs : test_default_advisory_exits_zero, test_strict_exits_one_on_orphan, test_strict_exits_zero_when_clean, test_exclude_whitelists_intentional_orphan, test_instance_18786_approval_defs.

Impact

La jambe Scripts Tests (CPU) est rouge sur toutes les PRs de la flotte (constaté sur #24505, #24535, #24542, #24551 — 30 min de jambe à chaque tête), y compris sur la base : le rouge n'est imputable à aucune PR, mais il masque les vrais échecs de cette jambe et bloque les merges qui l'exigent.

Cause exacte

Les fixtures du fichier contiennent des guillemets français (lean_lib «Foo» where) et les tests écrivent en encodage par défaut du processus (cp1252 sous Windows), alors que l'organe lit en UTF-8 explicite — check_lean_orphans.py:354. Deux encodages, un seul fichier : la divergence n'est visible que sur un siège non-UTF-8, ce qui explique qu'elle n'ait pas été vue là où les tests ont été écrits.

Correctif attendu

Écrire et relire les fixtures en UTF-8 explicite dans ce fichier de tests. Aucun changement de l'organe : c'est bien la fixture qui doit être déterministe, indépendamment de la locale.

Scan de la classe sur scripts/**/*.py (AST, write_text sans encoding dont le source porte du non-ASCII) : cette occurrence est la seule — aucun autre fichier à traiter.

Sans parent : constat local d'un rouge de base sur les tests, non rattachable à une série de carnets.

Activity

  1. jsboige commented on Nov 4, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/guard — lane myia-po-2027:CoursIA — prev: MED/guard #24551

    [CLAIMED] lane myia-po-2027:CoursIA — paths: scripts/lean/tests/test_check_lean_orphans.py -- 2026-11-04T02:4xZ

    Rouge de base mesuré sur la tête 709dfb9d85 (arbre principal, Python 3.13, locale Windows) : 5 failed, 9 passed sur scripts/lean/tests/test_check_lean_orphans.py. Cause : les fixtures écrivent lean_lib «Foo» where avec Path.write_text(...) sans encoding= (cp1252 → 0xAB), alors que l'organe relit en encoding="utf-8" (check_lean_orphans.py:354) → UnicodeDecodeError, main() rend 2 au lieu de 0/1.

    Correctif : encoding="utf-8" explicite sur les 42 appels write_text/read_text du fichier. Aucun changement de l'organe, aucun autre fichier concerné (scan AST de scripts/**/*.py : cette occurrence est la seule write_text non-ASCII sans encoding).

  2. jsboige commented on Nov 4, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2027:CoursIA -- PR #24555 -- paths: scripts/lean/tests/test_check_lean_orphans.py

    Correctif livré : encoding="utf-8" explicite sur les 42 appels write_text/read_text du fichier de tests. Aucun changement de l'organe.

    Mesures :

    • avant (base 709dfb9d85, arbre principal) : 5 failed, 9 passed ;
    • après (branche fix/orphan-test-utf8, commit 693c1f70f4) : 14 passed in 0.33s ;
    • scan AST de scripts/**/*.py (write_text sans encoding= dont le source porte du non-ASCII) : cette occurrence était la seule, donc pas de fichier frère à traiter.

    C'est le rouge qui faisait tomber la jambe Scripts Tests (CPU) sur toutes les PRs de la flotte. La suite complète scripts/lean/tests tournait encore à l'ouverture de la PR ; son compte sera ajouté au corps de #24555 dès qu'il tombe.

    Review/merge = ai-01.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions