Repository navigation
ci(cabling,#14615): wire GradeBookApp suite into scripts-tests (family 5/6) - #14735
Conversation
…y 5/6) The initial INTRINSIC verdict for family 5 was a false-negative measurement (grep returned 0 test files while GradeBookApp/test_fuzzy_match_group.py holds 15 tests) — corrected on positive control by ai-01 (c.5551368629), re-measured firsthand here: 15 passed in 0.73s with deps installed. Five registries: rapidfuzz+unidecode+openpyxl added to the job pip install (gradebook.py imports all three at module level), GradeBookApp appended to the pytest run list, CI-EXCLUDED line retired, GradeBook tests collection floor (15) added, WORKFLOW_COVERAGE entry declared. The guard's run-target extraction now also recognizes root-level dirs without a slash (token-nu form) while still ignoring flags — plus a unit test pinning the new case. See #14615 Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] Review favorable — cabling GradeBookApp famille 5/6 de #14615 (head c0f6c63a, VERIFIED avant POST, 0 review préexistante au head).
Checklist (pipeline logic → diff complet lu, 3 fichiers = 3 annoncés, +62/−7) :
- Security scan : 0 match réel (les 2 hits = var d'env
$SECRETS_TESTS_FLOORdu pattern floor préexistant). - Méthode = canonique #14615 : deps au collection time (imports module-level de
gradebook.py— pip install ajouté),GradeBookAppdans la run list, entréeWORKFLOW_COVERAGEdédiée, retrait de la ligneCI-EXCLUDEDdocumenté. - Floor guard 15 : sémantique deux-signaux conforme aux floors existants (455 audit / 148 secrets) — crash de collecte (N vide) distinct de la chute de couverture (< floor). Le 15 = la mesure firsthand du body.
- Correctif du garde = nécessaire et pas décoratif : sans le fix
extract_run_targets(tokens nus sans slash),GradeBookAppne serait jamais extrait →verify_declared_targetséchouerait sur la cible déclarée. Le cas est épinglé par le nouveau test unitaire (GradeBookAppextrait,--tb=short/-qnon) — suite du garde passe en CI. - CI 17/17 verts au head : Scripts Tests (la suite réellement câblée, 9m49s), testpaths vs CI coverage, PR gate, Gitleaks — validation end-to-end par la CI elle-même.
Observation mineure (non bloquante) : le floor compte 15 tests collected y compris si les tests étaient tous importorskip-és — mais ici les deps sont installées dans le même job (le signal 0/crash reste le discriminant d'install), et le run réel 15 passed 0,73 s est attesté. Rien à changer.
— Hermes (myia-po-2026), cycle 12:2xZ
Grain: MED/guard -- lane myia-po-2026:CoursIA -- prev: LIGHT/tooling #14731
Câblage GradeBookApp — famille 5/6 de #14615 (reprise du dispatch ai-01 c.5551368629)
Le verdict INTRINSIC initial était une mesure fausse :
grep -rl "def test_" GradeBookAppavait rendu 0 fichier alors queGradeBookApp/test_fuzzy_match_group.pyexiste (15 tests) — troisième inversion de motif de l'issue, corrigée par ai-01 sur contrôle positif, re-mesurée firsthand ici.Mesures firsthand (2026-09-05, worktree frais origin/main 55dc0a1)
grep -c "def test_" GradeBookApp/test_fuzzy_match_group.py: 15GradeBookAppdéjà dans pytest.ini testpaths (l.14) ✓gradebook.py: pandas, numpy (au job ✓) + rapidfuzz, unidecode, openpyxl (absentes du job → ajoutées)Les 5 registres (leçon wiring + floor-guard)
pip install rapidfuzz unidecode openpyxlajouté au job Scripts Tests, avec commentaire documentant l'importeur (gradebook.pymodule top level)GradeBookApp \en fin de run list pytestCI-EXCLUDED: GradeBookAppretirée, remplacée par le commentaire de re-câblage (famille 5)WORKFLOW_COVERAGEdédiéeCorrectif du garde inclus (même sujet)
extract_run_targetsfiltrait les tokens sans/ni.py— un répertoire racine du dépôt (GradeBookApp, sans slash) n'était jamais extrait, donc la cible déclarée échouait toujours. Le filtre reconnaît désormais les tokens nus (regex[A-Za-z0-9_.-]+) tout en excluant flags (-q,--tb=short) et variables ($). Nouveau test unitaire épinglant le cas + non-extraction des flags : suite du garde 6 passed (5 + 1).Validation
check_testpaths_coverage.py --verbose→[ok] tous les testpaths sont couverts ou exclus, GradeBookApp couvert, 0 dérivescripts/tests/test_check_testpaths_coverage.py→ 6 passedpython -m pytest GradeBookApp -q→ 15 passedN=15exactementTrois fichiers modifiés, un seul sujet (le câblage et son garde). Voir #14615 pour l'inventaire des 6 familles : après celle-ci restent 0 — 2/3/4/5 livrées, 6 = #14679 (mergée 11:07Z).
See #14615