Skip to content

ci(cabling,#14615): wire GradeBookApp suite into scripts-tests (family 5/6) - #14735

Merged
myia-ai-01 merged 1 commit into
mainfrom
ci/gradebook-tests-cabling-14615
Sep 5, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
ci/gradebook-tests-cabling-14615

Conversation

@jsboige

@jsboige jsboige commented Sep 5, 2026

Copy link
Copy Markdown
Owner

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_" GradeBookApp avait rendu 0 fichier alors que GradeBookApp/test_fuzzy_match_group.py existe (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 : 15
  • GradeBookApp déjà dans pytest.ini testpaths (l.14) ✓
  • Deps module-level de gradebook.py : pandas, numpy (au job ✓) + rapidfuzz, unidecode, openpyxl (absentes du job → ajoutées)
  • Run réel avec deps installées (règle F) : 15 passed en 0,73 s, 0 skip
  • PII : les 2 seuls accès fichier du test relisent un journal qu'il crée lui-même — zéro donnée étudiante (la réserve « PII grading hors CI publique » ne s'applique pas au test, only aux données de notation qui restent sur GDrive privé)

Les 5 registres (leçon wiring + floor-guard)

  1. pip install rapidfuzz unidecode openpyxl ajouté au job Scripts Tests, avec commentaire documentant l'importeur (gradebook.py module top level)
  2. GradeBookApp \ en fin de run list pytest
  3. Ligne CI-EXCLUDED: GradeBookApp retirée, remplacée par le commentaire de re-câblage (famille 5)
  4. Step GradeBook tests collection floor (15) — même sémantique deux-signaux que audit (455) et secrets (148) : 0 collecté = crash de collecte (problème d'install), < floor = régression de couverture
  5. Entrée WORKFLOW_COVERAGE dédiée

Correctif du garde inclus (même sujet)

extract_run_targets filtrait 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érive
  • scripts/tests/test_check_testpaths_coverage.py → 6 passed
  • python -m pytest GradeBookApp -q → 15 passed
  • Simulation floor : N=15 exactement
  • YAML valide (parse ok)

Trois 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

…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>
@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) labels Sep 5, 2026
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-05) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=1 genre=9 cap=10)
  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@myia-ai-01
myia-ai-01 merged commit 74effbd into main Sep 5, 2026
17 checks passed

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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_FLOOR du pattern floor préexistant).
  • Méthode = canonique #14615 : deps au collection time (imports module-level de gradebook.py — pip install ajouté), GradeBookApp dans la run list, entrée WORKFLOW_COVERAGE dédiée, retrait de la ligne CI-EXCLUDED documenté.
  • 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), GradeBookApp ne serait jamais extrait → verify_declared_targets échouerait sur la cible déclarée. Le cas est épinglé par le nouveau test unitaire (GradeBookApp extrait, --tb=short/-q non) — 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

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

Labels

variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants