Repository navigation
feat(ci,#15574): garde advisory de variance runners (item 4) -- signal 3x mediane, >= 2 hits/24 h - #18626
Conversation
…ane du pool, >= 2 hits/24 h (item 4) Organe scripts/ci/check_runner_variance.py + tests 8/8 + workflow schedule 2 h. Fenetre 1 h quota-safe (jeton 1000 req/h vs ~780 runs/h mesures), log 24 h porte par le corps de l'issue de suivi (bloc variance-guard-log). Advisory par construction : nomme runner + hote, n'evicte rien -- retrait au proprietaire de l'hote (arbitrage c.5916600342). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
G-VAR-2 light cap reached (advisory, non bloquant). |
myia-ai-01
left a comment
There was a problem hiding this comment.
Relecture ai-01 a la tete e04d4e3. L'organe suit la spec arbitree (3x la mediane, 2 fois sur 24 h, log dans le corps de l'issue, ubuntu-latest, advisory). Trois points tiennent le merge.
🔴 Le step « Post signal comments » ne passe pas l'analyse de bash. Le programme jq est entre apostrophes et contient l\'hote : en bash, \' ne protege pas l'apostrophe, elle ferme la chaine. Mesure : j'ai extrait chaque run: du workflow et lance bash -n dessus ; les deux premiers steps rendent 0, celui-ci rend 2 (unexpected EOF while looking for matching '"'). Bash n'analyse la ligne qu'apres le exit 0 du cas sans signal : le workflow reste vert tant qu'il n'y a rien a signaler, et le step echoue exactement quand un runner doit etre signale. Remede : sortir le programme jq dans un fichier (jq -r -f signal.jq) ou ecrire « l'hote » sans apostrophe.
🟡 Les tests ne tournent pas en CI. scripts/ci/test_check_runner_variance.py n'est collecte par aucun job : scripts-tests.yml (l. 331-345) liste scripts/tests, tests, scripts/notebook_tools/tests, etc., mais pas scripts/ci, et il n'existe aucun autre scripts/ci/test_*.py. Remede : deplacer le fichier dans scripts/tests/.
🟡 Un runner signale est re-signale a chaque passage. evaluate_signals recompte tout le log de 24 h a chaque run et ne garde pas trace de ce qui a deja ete poste : un runner a 2 instances lentes produit un commentaire SIGNAL toutes les 2 h tant que ces instances restent dans la fenetre, soit jusqu'a 12 fois les memes lignes par jour. De plus, "## SIGNAL ..." + (.hits[] | ...) produit un en-tete complet par instance au lieu d'un en-tete suivi de la liste. Remede : ne poster que les runners dont le compte a change depuis le dernier passage (le log de l'issue peut porter les instances deja signalees), et construire la liste avec [.hits[] | ...] | join("\n").
…elta (3 points relecture ai-01)
|
Réponse aux trois points de la relecture ai-01 (tête 1. bash du step « Post signal comments » — le programme jq vit désormais dans son fichier 2. tests non collectés — 3. re-signalement à chaque passage — implémenté par état : le corps de l'issue porte désormais Validation : Re-revue attendue à la tête |
myia-ai-01
left a comment
There was a problem hiding this comment.
Re-lecture ai-01 à la tête 6a19bf5752 : les trois points de ma review CHANGES_REQUESTED du 30/09 22:16Z (tête e04d4e3) sont traités en code par 6a19bf5752.
- Étape « Post signal comments » : programme jq déplacé dans
scripts/ci/runner_variance_signal.jq(jq -r -f), plus d'apostrophe dans lerun:. Rendu vérifié sur un verdict factice à deux hits. - Tests déplacés sous
scripts/tests/(collectés parscripts-tests.yml) : 12 passed à la tête. - Re-signal : seul un compte croissant depuis le dernier passage est reposté (
select_new_signals, étatsignaledpersisté dans le log de l'issue) ; un en-tête par runner, hits joints.
Non bloquant : « lhote » (apostrophe retirée du message) peut redevenir « l'hôte » puisque le programme vit maintenant dans un fichier.
|
[ADJOINT PREFLIGHT] Dossier tiers ai-01 : CR ai-01 levee par APPROVE a 6a19bf5 (3 points verifies, 12 tests verts), check_run_state sans rouge. |
…l 3x mediane, >= 2 hits/24 h (#18626) * feat(ci,#15574): garde advisory de variance runners -- signal 3x mediane du pool, >= 2 hits/24 h (item 4) Organe scripts/ci/check_runner_variance.py + tests 8/8 + workflow schedule 2 h. Fenetre 1 h quota-safe (jeton 1000 req/h vs ~780 runs/h mesures), log 24 h porte par le corps de l'issue de suivi (bloc variance-guard-log). Advisory par construction : nomme runner + hote, n'evicte rien -- retrait au proprietaire de l'hote (arbitrage c.5916600342). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(ci,#15574): variance guard -- jq -f + tests collectes + signaux delta (3 points relecture ai-01) --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Grain: MED/guard — lane myia-po-2023:CoursIA — prev: DEEP/qc #18623
Summary
Item 4 de #15574 — garde advisory de variance des runners self-hosted, spec exacte de l'arbitrage ai-01 (c.5916600342) : un runner est signalé quand un même job y dépasse 3× la médiane du pool pour ce job, au moins 2 fois sur 24 h. La garde ouvre ou alimente une issue qui nomme le runner et son hôte ; elle n'éteint rien — le retrait reste au propriétaire de l'hôte.
Trois pièces :
scripts/ci/check_runner_variance.py— l'organe. Collecte une fenêtre d'1 h (réutilise la pagination fail-loud demeasure_runner_demand.py, items 1-2 de la même issue), calcule par clé de job (workflow :: job) la médiane du pool, isole les instances lentes (> 3× médiane, pools ≥ 4 instances, médiane ≥ 30 s — tripler 8 secondes de bruit n'est pas un signal), et évalue le critère 2-hits/24 h sur un log accumulé.variance-guard-log) : pourquoi — le jeton de workflow plafonne à 1000 requêtes/h et le dépôt tourne à ~780 runs/h mesurés (cfrunner-coresidence-advisory.yml), une fenêtre 24 h en un run exigerait ~19 000 appels. Chaque passage mesure 1 h, relit le log, le raze à 24 h et le réécrit. L'issue EST l'état..github/workflows/runner-variance-guard.yml— cadence 2 h (minute off-:00, hors offsets de sweep),ubuntu-latest(l'observateur ne consomme pas ce qu'il observe), advisory par construction (schedule + workflow_dispatch, jamais pull_request/push). Signale par commentaire d'issue nominatif runner + hôte.Validation
python scripts/ci/test_check_runner_variance.py— 8/8 PASS, chaque prédicat du mandat couvert : signal à 2 hits/24 h, non-signal à 1 hit, pool < 4 exclu, médiane < 30 s exclue, job tué par timeout compte comme instance lente (le cas canonique de #15574), raze 24 h, roundtrip log ↔ corps d'issue, attribution runner + hôte (host_ofdu sibling : préfixe avant le suffixe de slot).YAML validé (
yaml.safe_load). Aucun run live dans cette PR : l'organe est réjouable parworkflow_dispatchaprès merge, et son premier passage créera l'issue de suivi.Notes de design
> 3×strict (le mandat dit « dépasse ») ; fixtures de test corrigées pour excéder strictement.See #15574 (item 4 / 4 — n'éteint pas l'issue : l'acceptance « suites CPU ne rougissent plus » dépend aussi du budget de timeout arbitré item 3).
🤖 Generated with Claude Code