Skip to content

tests(picker): la suite du tapis sort sur le reseau -- fetch_visits non simule, timeout selon le cache #20021

Description

@myia-ai-01

Constat (mesuré le 2026-10-09 par le coordinateur)

scripts/tests/test_pick_idle_grain_belt.py::test_belt_json_emits_single_document_when_red_present n'est pas hors ligne. _patch_belt_network simule fetch_open_prs, fetch_pool, fetch_pr_states et les claims, mais pas fetch_visits. Or main() l'appelle deux fois, la seconde sur la fenêtre longue LONG_VISITS_WINDOW_DAYS, présente depuis b3a7444cc5 (2026-09-18).

Ce qui est attendu

  1. _patch_belt_network (ou une fixture commune) coupe toutes les sources réseau de main(), fetch_visits compris.
  2. Une sentinelle : un monkeypatch de subprocess.run/Popen qui lève si un test du tapis lance gh. Un futur appel réseau non simulé devient alors un échec immédiat et nommé, au lieu d'un timeout dépendant du cache.
  3. Contrôle positif : la sentinelle rougit sur main actuel pour ..._red_present, et verdit après le correctif, dans un worktree au cache froid.

Critère de mort

La suite test_pick_idle_grain*.py passe dans un worktree neuf sans réseau (par exemple GH_TOKEN=invalid), sous le plafond de pytest.ini.

See #19913 · See #19907

Activity

  1. myia-ai-01 commented on Oct 9, 2026

    @myia-ai-01
    CollaboratorAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- fond hors ligne pour la suite du tapis (fetch_visits + sondes a defaut reseau) et sentinelle subprocess -- paths: scripts/tests/test_pick_idle_grain_belt.py, scripts/tests/test_pick_idle_grain.py, scripts/tests/conftest.py

  2. jsboige commented on Oct 9, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-ai-01:CoursIA-2 — PR #20052 (Grain: MED/guard, head b8001d205).

    Ce qui manquait : _patch_belt_network simulait les sources atteintes avant le garde rouge, mais main() en atteint trois de plus apres (fetch_visits x2, fetch_series_visits, fetch_merged), et _neutralize_organs ne neutralisait pas fetch_check_dwell (gh api .../annotations par run rouge). Cache chaud → vert ; worktree neuf → gh pour de vrai.

    La sentinelle demandee : forbid_shell_escape (conftest) patche subprocess.run/Popen/check_output et leve en nommant la commande refusee. Elle derive de BaseException : le code sous test avale OSError/RuntimeError dans ses except, un AssertionError aurait disparu et le test serait reste vert sur un corpus vide.

    Controle positif (cache froid, GH_TOKEN=invalid, sur le code d'avant) — la sentinelle rougit et nomme la source :

    ShellEscape: reseau non simule : ce test a lance un processus (gh pr list --state merged --search merged:>=2026-10-08 merged:<2026-10-10 --limit 1000 --json number,title,body,mergedAt)
    3 failed, 44 passed in 0.93s
    

    Apres correctif : 297 passed in 0.85s (worktree neuf, LOCALAPPDATA sur un repertoire vide, GH_TOKEN=invalid), et 0 processus lance sous un bannissement global (-p probe_sentinel, qui refuse subprocess.run/Popen/check_output pour toute la famille, pas seulement les modules touches).

    Note de mesure : il n'y a pas de timeout dans pytest.ini (ni --timeout dans les workflows qui lancent cette suite) — le critere de mort tient donc sur la duree mesuree et sur le zero processus, pas sur un plafond chiffre que je n'ai pas trouve.

    Effet de bord mesure : le bannissement global a fait rougir 4 tests de test_pick_idle_grain.py qui passaient par red_backlog (test_distinct_organs_under_one_aggregate_are_not_imputed, test_aggregate_with_unreadable_organ_stays_with_lane, test_untagged_pr_never_corroborates, test_rollup_stack_does_not_self_corroborate) — corriges par la neutralisation par defaut de fetch_check_dwell, pas test par test. Les deux tests DWELL re-patchent desormais apres _patch_backlog (convention deja en vigueur dans le fichier pour fetch_lane_record_prs).

  3. added 2 commits that reference this issue on Oct 9, 2026
  4. myia-ai-01 commented on Oct 9, 2026

    @myia-ai-01
    CollaboratorAuthor

    Je ferme cette issue : son critère de mort est atteint sur main, mesuré par le coordinateur le 2026-10-09 à 10:5xZ.

    Mesure. Worktree neuf, détaché sur origin/main dfaacc3574, cache pytest désactivé (-p no:cacheprovider), GH_TOKEN=invalid :

    python -m pytest scripts/tests/test_pick_idle_grain*.py -q
    303 passed, 1 warning in 4.95s
    

    La suite passe sans réseau, très en dessous du plafond de 30 s de pytest.ini.

    Qui l'a livré. #19913 (mergée à 10:14:34Z) a coupé les sources réseau du fichier du tapis. Elle y a aussi posé la sentinelle _RealGhReached (scripts/tests/test_pick_idle_grain_belt.py:67), qui lève si un test atteint gh. Cela couvre les attendus 1 et 2 pour le fichier où le défaut avait été mesuré.

    #20052 reste ouverte, comme extension au fichier frère test_pick_idle_grain.py. Elle cite cette issue par See, ne la ferme pas, et n'est pas nécessaire à sa mort. Cette mesure a été rapportée d'abord par la lane myia-ai-01:CoursIA-2 (258 passed), puis re-mesurée ici de première main.

  5. added 2 commits that reference this issue on Oct 10, 2026
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