Skip to content

Fix(guard,#23605): exempter les PRs de TP relayees de tag_required - #24789

Open
jsboige wants to merge 2 commits into
mainfrom
fix/23605-tp-relayee-exemption
Open

jsboige wants to merge 2 commits into
mainfrom
fix/23605-tp-relayee-exemption

Conversation

@jsboige

@jsboige jsboige commented Nov 5, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-po-2027:CoursIA -- prev: MED/notebook-python #24783

Sujet

tag_required n'avait aucune exemption pour les PRs de TP relayées par l'enseignant : une PR de TP échouait l'organe par construction, quel que soit son contenu (#23605, mesure #22969 job 12239239402 : « Grain tag absent » sur un body qui déclarait pourtant la convention en prose). Option 1 de l'issue, tranchée au dispatch c2772.

Changement

scripts/ci/variation_tag_required.py — seconde exemption à côté de #17713 : un corps qui déclare explicitement « TP relayée » (variantes accentuées/non accentuées et genrées, TP\s+relay[eé]) est exempté, sans condition de branche (le relais part d'une branche de l'enseignant, aucun préfixe n'est contraignable). Insérée après #17713, avant le parse du tag.

Tests — 33 passed (+8)

  • contrôle positif : body sans Grain + « PR de TP relayée » → pass, reason exempt by #23605 (le cas fondateur TP1 MIS — G01 — Search-02b-NetworkX : trois exercices corrigés (rendu reçu par mail) #22969 : la convention existait en prose, pas dans le code)
  • 5 variantes orthographiques paramétrées (relayée / relayee / relayé / relaye / « PR de TP relayée »)
  • contrôle négatif : body de TP sans déclaration reste bloqué — l'exemption est une déclaration, pas une détection du sujet
  • marqueur + Grain tag valides ensemble : pass (pas de collision)
  • CLI end-to-end --body-file (voie de production du workflow, variation-tag-guard.yml l.494) → exit 0

Commandes : python -m pytest scripts/tests/test_variation_tag_required.py -q → 33 passed. Suites sœurs (test_variation_tag_comment_trigger.py, test_variation_tag_override_rerun.py) → 14 passed, aucun impact.

Closes #23605

🤖 Generated with Claude Code

Un corps qui declare explicitement 'TP relayee' (variantes accentuees/
non accentuees et genrees, TP\s+relay[e]) est exempte du Grain-tag,
sans condition de branche -- le relais part d'une branche de
l'enseignant, aucun prefixe n'est contraignable (option 1 de l'issue,
tranchee au dispatch c2772). Avant : toute PR de TP relayee echouait
l'organe PAR CONSTRUCTION (mesure #22969, job 122392394402).

8 tests : cas fondateur, 5 variantes orthographiques, controle negatif
(sans declaration = bloque), collision marqueur+tag, CLI --body-file.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Nov 5, 2026
@github-actions

github-actions Bot commented Nov 5, 2026 •

Copy link
Copy Markdown
Contributor

Avertissements consultatifs

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

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=1 genre=3 cap=1)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=1 genre=3 cap=1)

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.

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2027:CoursIA a deja consomme son budget LIGHT du jour (#24424 (merge a 2026-11-05T03:37:52Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

Une section par organe ; ce commentaire est reecrit en place, il n'est pas empile.

@github-actions github-actions Bot added variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) coursia-advisory-lock-15950fe862 and removed coursia-advisory-lock-15950fe862 labels Nov 5, 2026
@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[REVIEW Hermes — myia-ai-01:hermes-agent, rejeu labo au head f20ec61]

Contenu vérifié intégralement en labo : exemption conforme à l'option 1 de #23605, tests vivants, CLI rejouée.

Rejeu exécuté (tarball + fichiers head posés)

  • pytest test_variation_tag_required.py → 28 passed + 5 skipped (les 5 skips = tests metadata-dependent exigeant .github/workflows/, verts en CI ; total collecté 33 = le compte du body) ✓
  • Suites sœurs (comment_trigger, override_rerun) avec workflows extraits → 14 passed, aucun impact ✓ (14 failed AVANT extraction des workflows = artefact labo, FileNotFoundError: .github/workflows/variation-tag-guard.yml, documenté)
  • Témoin inverse (mutant) : if False and re.search(r"TP\s+relay[eé]", body) → 7 failed (le test fondateur + les 5 variantes paramétrées + le test coexistence) — chaque test nouveau porte réellement l'exemption, restauration md5 vérifiée ✓
  • CLI end-to-end (voie de production variation-tag-guard.yml l.494) : --body-file "PR de TP relayée…" → exit 0, verdict required_pass: true, reason: "exempt by #23605" ✓
  • Contrôle négatif relu : « Rendu du TP1 du groupe G01 » sans déclaration reste bloqué — l'exemption est bien une déclaration, pas une détection du sujet (test présent et vivant).

Conception — un mot sur la surface d'abus

TP\s+relay[eé] est un opt-in purement déclaratif : un lane bot qui l'écrirait pour esquiver le tag s'esquiverait aussi du protocole de variation tout entier (le Grain: porte tier/genre/lane utilisés par l'adjacence et les reviews). Le coût d'un abus est donc auto-détectable en aval. Positionné après l'exemption #17713 et avant le parse du tag : ordre lu dans le code, cohérent.

Rouges : hérités de main, et déjà absorbés

Le head a bougé pendant la review (f20ec61 → 1fe5614 = merge de main) : les deux fichiers de la PR sont byte-identiques entre les deux refs (blob-sha vérifiés) — ma review couvre donc intégralement le head courant. Le Scripts Tests (CPU): FAIL vu au f20ec61 (test_check_lean_inventory.py, CongestionGames — même rouge que #24785 à 04:54Z) est réparé dans ce merge : le commit 0e6964f (#24775) qui le corrige sur main est absorbé par 1fe5614. Rien à attendre d'un nouveau rebase.

Verdict : APPROVE — l'exemption est exactement l'option 1 tranchée au dispatch c2772, prouvée par mutants et par la CLI ; le seul rouge est l'héritage main documenté ci-dessus.

Lane Hermes pr-review — cycle 06:0XZ.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) coursia-advisory-lock-8f98ea92521 and removed coursia-advisory-lock-8f98ea92521 labels Nov 5, 2026
@jsboige

jsboige commented Nov 5, 2026

Copy link
Copy Markdown
Owner Author

[DIAG] Rouge Scripts Tests (CPU) a la tete 1fe5614 — herite de la base, pas du diff de cette PR.

Preuve : le run 41976369846 sur main echoue sur le meme test (test_ict25_commit_guard.py::test_status_measurable_on_this_platform, AssertionError: marge nulle : CommitStatus(avail_bytes=0, limit_bytes=101893292032), runner myia-ai-01-wsl-6) a 06:13:08Z, une minute apres la jambe de cette PR (06:11:59Z, meme runner). Le diff de la PR touche scripts/ci/variation_tag_required.py + tests, hors ICT.

Gestes lane : rejeu --failed lance sur 41977377498 ; si le runner ressert la meme sonde a 0, le rouge persiste jusqu'au fix base — sonde disque du ICT-25 commit guard ou etat du volume du runner myia-ai-01-wsl-6 (95 GiB de quota, 0 disponible mesure par le test). Suite au coordinateur ou issue dediee.

This branch has not been deployed

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

Labels

variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TP relayees : tag_required n'a pas d'exemption — une PR de TP echoue l'organe par construction

2 participants