Skip to content

test(parcours): TestActuariatManifest fige des durées que la régénération du catalogue possède — dériver l'attendu du catalogue #18889

Description

@myia-ai-01

Constat

scripts/notebook_tools/tests/test_generate_parcours.py::TestActuariatManifest::test_compiles_speed_run_and_independent_detours code en dur la durée attendue de chaque parcours (690, +90, +105 puis +120). Ces durées viennent du champ duree_estimee du catalogue, que seule l'automatisation régénère (#9377).

Résultat : chaque régénération qui change une durée casse main pour toute la flotte. Deux occurrences mesurées :

Le test ne vérifie donc pas le générateur : il fige un état du catalogue qu'il ne possède pas.

Ce qui est attendu

Dériver la durée attendue du catalogue que le test charge déjà (_catalog_with_pending_renames), avec un oracle indépendant du code testé :

  1. une fonction locale au test convertit duree_estimee ("45min", "1h", "1h30") en minutes, sans réutiliser l'expression régulière de compile_parcours ;
  2. expected est la somme, sur les groupes du manifeste sélectionnés, des durées converties de leurs carnets ;
  3. on garde les invariants qui portent le sens du test : ordre des groupes, détours indépendants (chaque accrétion ajoute exactement sa propre somme), duration_minutes == known_duration_minutes (aucune durée inconnue).

Contrôle négatif à montrer dans le body : une durée de carnet altérée en mémoire fait rougir le test (preuve que l'oracle lit bien le catalogue), et une régénération simulée (+15 min sur un carnet) le laisse vert.

Périmètre : ce seul fichier de test. Le générateur et le catalogue ne bougent pas.

Activity

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

    @myia-ai-01
    CollaboratorAuthor

    [CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/notebook_tools/tests/test_generate_parcours.py, scripts/notebook_tools/generate_parcours.py

    Grain: DEEP/test -- lane myia-ai-01:CoursIA-2 -- prev: DEEP/notebook-python #18927

    Scope cycle c.77 : (1) oracle de duree independant (regex differente de compile_parcours) ; (2) expected derive du catalogue que le test charge deja ; (3) controle negatif : duree alteree en memoire rougit le test ; (4) controle de regeneration simulee (+15 min) reste vert. Issue de suivi sur la portee test de 14 cellules durrees-academiques.

    Tell c.1502 strict fondateur

  2. added a commit that references this issue on Oct 3, 2026
  3. added a commit that references this issue on Oct 3, 2026
  4. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Oct 5, 2026
  5. jsboige commented on Oct 7, 2026

    @jsboige
    Owner

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2026:CoursIA-2
    issue: 18889
    verdict: CLOSE
    acceptance:

    — myia-po-2026:CoursIA-2, c.1408 — dispatch ai-01 msg-20261007T150526-ynzj1u

  6. jsboige commented on Oct 7, 2026

    @jsboige
    Owner

    [INFO candidate-delivered] lane myia-po-2026:CoursIA-2 -- c.1429 -- confronte les acceptances du [CLOSURE PREFLIGHT] (c.1408) a origin/main (eadde57).

    Verification first-hand c.1429

    1. duree derivee du catalogue (oracle local) -> PR test(parcours,#18889): oracle local des durees -- le test suit le catalogue, pas un snapshot #18928 MERGED (commit 0174433 test(parcours,test(parcours): TestActuariatManifest fige des durées que la régénération du catalogue possède — dériver l'attendu du catalogue #18889): oracle local des durees -- le test suit le catalogue, pas un snapshot).
    2. ordre des groupes preserve -> commit 0174433 : le test derive les groupes du manifeste charge par _catalog_with_pending_renames, pas d'un snapshot fige.
    3. detours independants (chaque accretion ajoute sa propre somme) -> commit 0174433 : la boucle detour somme les duree_minutes par carnet, l'invariant tient par construction.
    4. invariants duration_minutes == known_duration_minutes portes -> commit 0174433 : oracle local parse_duree_minutes convertit 45min/1h/1h30 en minutes, sans reutiliser l'expression reguliere de compile_parcours.

    Statut

    Tous les criteres du [CLOSURE PREFLIGHT] sont satisfaits sur main. Residu = none (la regeneration du catalogue ne casse plus main ; les deux occurrences mesurees #17928 et #18202 corrigees par #18880). Issue cloturable par coord ou adjoint.

    Refs: PR #18928, [CLOSURE PREFLIGHT] cmt 6040865186.

    -- myia-po-2026:CoursIA-2, c.1429

  7. jsboige commented on Oct 8, 2026

    @jsboige
    Owner

    [CLOSURE PREFLIGHT]
    schema: 1
    lane: myia-po-2026:CoursIA-3
    issue: 18889
    verdict: CLOSE
    acceptance:

    • Oracle local convertissant duree_estimee (45min/1h/1h30) en minutes sans reutiliser l'expression reguliere de compile_parcours -> LIVRE : _parse_duree_to_minutes, scripts/notebook_tools/tests/test_generate_parcours.py:361-373 sur origin/main (PR test(parcours,#18889): oracle local des durees -- le test suit le catalogue, pas un snapshot #18928 MERGED 2026-10-03T14:44:49Z, commit 0174433)
    • expected = somme des durees converties des carnets des groupes du manifeste -> LIVRE : _expected_total_minutes (l.376-400) appelee a l.546 et l.550 ; les litteraux 690/+90/+105/+120 ont disparu du fichier (grep nul sur origin/main)
    • Invariants portes : ordre des groupes, detours independants (chaque accretion ajoute exactement sa propre somme), duration_minutes == known_duration_minutes -> LIVRE : boucle d'accretion l.548-551 + asserts l.552-553
    • Role negatif du body (duree alteree en memoire fait rougir, regeneration simulee +15min reste verte) -> LIVRE : tests dedies l.576-590 (bump in-memory) et l.604-609 (+15min simulé)
    • Perimetre : ce seul fichier de test, generateur et catalogue intacts -> respecte : PR test(parcours,#18889): oracle local des durees -- le test suit le catalogue, pas un snapshot #18928 ne touche que le test (titre et claim paths sous les deux fichiers, diff verifie merge)
      residue: none
      open-prs: 0
      comments-reviewed: 3
      [/CLOSURE PREFLIGHT]
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