Skip to content

test_check_kernel_suffix_canon : un plantage du garde est indiscernable d'un verdict rouge (stdout vide, stderr jeté) #16186

Description

@myia-ai-01

Le symptôme

scripts/tests/test_check_kernel_suffix_canon.py::TestRenameAwareness::test_rename_to_noncanonical_case_in_adopted_series_reddens est tombé sur le run 34866111429 (PR #15123, job Scripts Tests (CPU), runner linux, Python 3.11.16, git 2.43.0) :

AssertionError: 'case_deviation' not found in ''
= 1 failed, 13544 passed, 91 skipped, 8 xfailed in 228.85s =

Le stdout du garde est vide (zéro octet). C'est la seule information que le test ait laissée.

Le défaut : un plantage et un verdict rouge sont indiscernables

Le test vérifie deux choses, dans cet ordre :

self.assertEqual(r.returncode, 1, "...doit rougir\n" + r.stdout + r.stderr)   # l.310
self.assertIn("case_deviation", r.stdout)                                      # l.313 — sans message

Un garde qui plante sort en 1 — exactement le code attendu d'un refus légitime. L'assertion de code retour passe donc par coïncidence, et son message (le seul à porter r.stderr) n'est jamais imprimé. L'assertion suivante échoue contre une chaîne vide, sans diagnostic. Le traceback qui nomme la cause est jeté.

Ce n'est pas propre à ce test : les 22 assertIn(..., r.stdout) du fichier sont sans message, alors que les 14 assertEqual(r.returncode, ...) portent tous r.stdout + r.stderr.

C'est le défaut que ce fichier a été écrit pour attraper, appliqué à lui-même. Son propre docstring :

Se taire a tort. Un garde qui ne denombre pas ce qu'il a regarde rend le meme verdict sur "tout est conforme" et sur "je n'ai rien lu".

Ce qui est mesuré (et ce qui ne l'est pas)

Mesure Résultat
Le garde, scénario exact, Linux natif (ext4), git 2.43.0 — la version du runner 25/25 conformes, case_deviation=1, 749 octets de stdout, stderr vide
Le test, Windows, git 2.50.1 passe (1 passed in 0.73s)
scripts-tests.yml sur main, 4 derniers runs success (14:59, 14:54, 12:56, 12:41)
main @ be8e2ce5a 09:55, classé « rouge de base » par plusieurs lanes The self-hosted runner lost communication with the server — perte d'infrastructure, pas ce test

Le garde n'est pas en cause : il imprime toujours au moins son dénominateur (notebooks examines : N), quel que soit son verdict. Un stdout vide n'est donc jamais un verdict de ce garde.

La cause racine reste inconnue, et c'est exactement le problème : l'instrument qui l'aurait nommée a été construit pour la taire.

Coût déjà payé

Trois lanes ont diagnostiqué ce rouge séparément, chacune concluant « rouge imputé à la base, pas réparable par moi » — un verdict correct sur une prémisse fausse (main est vert). Le picker de myia-po-2026:CoursIA-2 l'a reproduit en sortie d'outil.

Correctif

_run_guard est le point de passage unique des 16 tests. L'invariant « ce garde parle toujours » s'y vérifie une fois et couvre tout le fichier — un stdout vide y lève une AssertionError qui imprime le stderr.

Cela ne répare pas la cause racine : cela garantit que sa prochaine occurrence la nomme, au lieu de coûter un cycle à trois agents.

Grain: MED/tooling lane myia-ai-01:CoursIA

Activity

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

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions