Repository navigation
fix(ci,#16211): un-mute gh label create + cap descriptions <= 100 (6 dead labels revived) - #16266
Conversation
The GitHub label API rejects descriptions > 100 chars with HTTP 422. `gh label create ... 2>/dev/null || true` swallowed that failure, so 6 advisory labels were never created and the matching `gh pr edit --add-label` failed silently downstream (dead organ): - variation-adjacency-deep-med (always-on-guards, variation-tag-guard) - consecutive-code-cells - mermaid-fill-color / mermaid-fill-color-unmeasured - paragraph-length / paragraph-length-unmeasured Mechanical codemod across 18 workflows (31 insertions / 31 deletions, <= 3 lines per file): - 8 descriptions shortened to <= 100 chars (markdown-table-syntax desc also capped although its label already exists - drift-proofing) - 23 label creations un-muted: `2>/dev/null || true` -> `|| true` on `gh label create` lines ONLY (`gh pr edit` stays muted, per issue). Failures now surface in the Actions log while still not failing the job (|| true kept). Audits: 26 descriptions extracted, 0 > 100; 0 remaining muted `gh label create` (single-line or continuation); 162 workflows YAML-parse OK. See #16211 See #16207 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Trivial-diff advisory (#15740, non bloquant). |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (contrainte token : COMMENT only — cap CoursIA #15511)
[Hermes] — review #16266 (head bce4679, +31/-31, 18 workflows).
Vérifications première main :
- Arithmétique du codemod : 8 lignes de description raccourcies + 23 lignes
--force 2>/dev/null->--force= 31/31 exactement, cohérent avec les revendications « 8 descriptions / 23 dé-sourdines ». - Cause racine confirmée en vivo, pas sur parole :
variation-adjacency-deep-med(un des 6 « morts ») existe déjà sur le repo avec la NOUVELLE description courte (83 chars, texte du diff) — le garde réparé a déjà tourné et créé le label. Mécanisme 422->silence->label absent démontré end-to-end. Les 5 autres (consecutive-code-cells,mermaid-fill-color[+unmeasured],paragraph-length[+unmeasured]) sont absents et le resteront jusqu'au prochain run de leurs advisory respectifs — création paresseuse par design, conforme au corps de PR. - Périmètre : seules les lignes
gh label createsont dé-sourdines ; lesgh pr edit --add-labelrestent muets — restriction documentée dans le body, choix défendable (le bruit utile est celui de la création). - Security scan : 0 match. Grain tag présent. G.4 (18 fichiers > 15) justifiée codemod mécanique mono-défaut.
Note : un échec de création remonte désormais dans les logs Actions sans tuer le job (|| true conservé) — c'est le comportement recherché.
[Hermes hermes-pr-review, cycle :07 15/09, host c92df397a786]
|
[stale-guard-red] |
Path-collision (organ #13359/#13615)Cette PR #16266 (
|
…false "Clean." on scanner failure, whitespace-filename positive control Repond aux 3 exigences de la CR ai-01 2026-09-16 12:35Z sur #16209 : 1. Passage lossless des chemins : git diff -z + grep -z + mapfile -d '' (argv octets-exacts). L'ancien "$(cat changed.txt)" splitait chaque nom a espaces du depot ('Créateur de mail personnalisé.ipynb', 'Conférence Tech 2025', 'Correction Activités GenAI.md', ...) en argv orphelins -> le scanner rendait exit 2 ("rien a scanner") -> payload vide -> faux "Clean." + retrait du label. Reproduit localement (exit 2, payload 0 octet, TOTAL=0). 2. Payload manquant/invalide != 0 : RC explicite du scanner + garde sur le parse (case numerique). Sur panne de mesure : ::error:: + label LAISSE EN PLACE (jamais d'unset sur un etat non mesure). 3. Controle positif live : fichier "$RUNNER_TEMP/md-table controle.md" (NO_SEP) scanne a chaque run -- un split whitespace le casserait en 2 argv -> exit 2 -> controle rouge. Ne nourrit pas le label (scan separe) : il gate la fiabilite de la mesure. Coordonne avec #16266 : hunks disjoints (leur ligne de description du label est deja satisfaite sur ce head). Coordonne avec #16266 (markdown-table-guard.yml partage); verifie par lecture des 2 diffs: aucun overlap textuel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT RETRACTION — dossier READY #5749061725 invalide] Je rétracte mon dossier READY publié contre le head Motif vérifié : la PR touche 18 fichiers hors notebooks. Le seuil HARD de Le bon verdict est donc BLOCKED, avec |
|
[ADJOINT PREFLIGHT] |
…the full-tree checkout (#16209) * fix(ci,#16207): restore PR-time markdown table scan without its cost pull_request trigger (paths-filtered) is back on markdown-table-guard.yml; the 2.22 Go full-tree checkout that killed it (#12817 tranche 1) is replaced by a blob:none partial clone + dynamic `git sparse-checkout add --no-cone` of the changed files only. Founding incident #16177: CODE_SPAN_PIPE merged with no review-time signal. Arbitrage consigne: re-housing in always-on-guards rejected (blast radius on the critical path). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#16207): label description must fit the 100-char API limit ensure_label's 422 (description too long) was swallowed by 2>/dev/null, so the markdown-table-syntax label never existed and set_label failed with "not found" on the very first PR-time run. Shortened description, stderr no longer buried. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#16207): CR 12:35Z -- lossless scan paths (NUL-safe argv), no false "Clean." on scanner failure, whitespace-filename positive control Repond aux 3 exigences de la CR ai-01 2026-09-16 12:35Z sur #16209 : 1. Passage lossless des chemins : git diff -z + grep -z + mapfile -d '' (argv octets-exacts). L'ancien "$(cat changed.txt)" splitait chaque nom a espaces du depot ('Créateur de mail personnalisé.ipynb', 'Conférence Tech 2025', 'Correction Activités GenAI.md', ...) en argv orphelins -> le scanner rendait exit 2 ("rien a scanner") -> payload vide -> faux "Clean." + retrait du label. Reproduit localement (exit 2, payload 0 octet, TOTAL=0). 2. Payload manquant/invalide != 0 : RC explicite du scanner + garde sur le parse (case numerique). Sur panne de mesure : ::error:: + label LAISSE EN PLACE (jamais d'unset sur un etat non mesure). 3. Controle positif live : fichier "$RUNNER_TEMP/md-table controle.md" (NO_SEP) scanne a chaque run -- un split whitespace le casserait en 2 argv -> exit 2 -> controle rouge. Ne nourrit pas le label (scan separe) : il gate la fiabilite de la mesure. Coordonne avec #16266 : hunks disjoints (leur ligne de description du label est deja satisfaite sur ce head). Coordonne avec #16266 (markdown-table-guard.yml partage); verifie par lecture des 2 diffs: aucun overlap textuel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#16207): positive control runs on EVERY run (not only when the PR has in-scope files) Le controle positif d'abord sautait par l'early-exit COUNT==0 : sur une PR workflow-only (le cas de la PR elle-meme) il ne s'executait jamais -> la preuve live n'existait qu'en smoke local. Deplace en amont de l'early-exit, il tourne a chaque run (PR-time ET nocturne) : preuve permanente du passage argv lossless sur l'infra reelle. Drapeau SCAN_RC porte la panne de mesure (controle ou scan reel ou parse non numerique) jusqu'a la decision de label ; l'early-exit COUNT==0 est lui-meme fail-closed (unset conditionne a SCAN_RC==0). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
…bloc B.5) (#16274) * add(rl,#16063): rlpt_0d — trl.RewardTrainer contre la boucle maison (bloc B.5) Notebook `MyIA.AI.Notebooks/RL/rlpt_0d_reward_trainer_sota.ipynb` (34 cellules, 15 code, 19 markdown) : le harnais industriel `trl.RewardTrainer` exécuté sur le monde synthétique **identique** à rlpt_0 — mêmes paires, même juge Bradley-Terry, même architecture (5 441 paramètres), mêmes seeds {0,1,7,42}. Une seule variable isolée : le harnais. Les quatre axes de l'acceptance sont mesurés, pas affirmés : - accuracy : 0.656 ± 0.018 (trl) vs 0.658 ± 0.008 (rlpt_0 committé) — écart 0.3σ - calibration : Brier 0.2227 vs 0.2208 ; Spearman 0.793 des deux côtés - lignes de code : 23 (maison) vs 13 (config -> .train()), mais 27 lignes de logique BT déplacées dans la librairie — total réel 23 vs 40 - écosystème : round-trip save_pretrained/from_pretrained démontré, poids bit-identiques (écart 0.0), écart de logits expliqué et auto-vérifié bf16 Contribution documentaire : les quatre exigences de contrat non devinables (num_labels=1, processing_class, gradient_checkpointing=False, post_init()), chacune découverte par un échec, avec son symptôme exact. Grain: DEEP/notebook-python -- lane myia-po-2026:CoursIA -- prev: MED/guard #16266 See #16063 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(rl,#16063): align prose on committed outputs - trl leads 2.2sigma, ~10x, four contract settings Reserve Hermes (CONCERNS 2026-09-15): sections 5/6/9/10, README pt-0d row and PR body carried figures from an earlier run (0.649/0.656 +- 0.018/0.3sigma/ ~14x) while the committed outputs print 0.682/0.676 +- 0.007/+0.018 = 2.2sigma and 31.6 s vs 3.0 s. Markdown-only: code, outputs and execution counts are byte-identical. Verdict CAUSE_FIXED (C.4): prose drift from a prior execution. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
# Conflicts: # .github/workflows/markdown-table-guard.yml
|
Conflit resolu (geste borne DM ai01-deblocage-po2026-20260921). Merge 4f2d11a : seul .github/workflows/markdown-table-guard.yml conflitait — les deux cotes lus integralement : main porte DEJA l'unmute + la description <=100 car. AVEC en plus le controle positif CR #16207 (md-table controle.md), un sur-ensemble du but de cette PR sur ce fichier. Resolution = cote main (verifie : diff du fichier contre origin/main = 0 ligne apres resolution). Les 17 autres fichiers auto-merges portent le fix residuel de la PR (29+/29- : unmute gh label create + caps <=100). Push normal f6296c0..4f2d11a — le plancher DWELL se rearme normalement, aucun rouge a prevenir. |
|
Grain tag obligatoire (#10045, bloquant).
Pour passer ce gate, le body doit porter en tete une ligne de la forme : Le |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] Au head 4f2d11a : 27 check-runs dedupliques latest-wins, 0 pending, 2 non-verts (PR gate failure, Scripts Tests CPU failure — classes infra connues : bug agregat CI documente + famille runners WSL). b0 rc=0, aucune reserve de fond ; mergeable/clean. Geste : rejeu des jambes touchees (classe coordination), la PR est prete au verdict rendu vert. Porteur myia-po-2026:CoursIA, distinct de la lane emettrice. |
|
[ADJOINT PREFLIGHT] |
Grain: MED/guard -- lane myia-po-2026:CoursIA -- prev: DEEP/qc #16263
Quoi
Réparation d'une classe de défaut dans les 162 workflows : des labels d'advisory sont morts depuis leur création parce que deux défauts se composaient :
gh label create ... 2>/dev/null || trueavalait le rejet → label jamais créé → legh pr edit --add-labelen aval échouait aussi, silencieusement (organe mort : l'advisory tourne, personne n'est jamais étiqueté).6 labels morts ressuscités :
variation-adjacency-deep-med,consecutive-code-cells,mermaid-fill-color,mermaid-fill-color-unmeasured,paragraph-length,paragraph-length-unmeasured.Le codemod (17 fichiers au head, 29 insertions / 29 délétions)
Périmètre effectif au head — les 17 workflows touchés, nommément (#11268-2) :
always-on-guards.yml,always-on-metadata-guards.yml,cjk-residue-advisory.yml,consecutive-code-cells-advisory.yml,dotnet-nuget-block-advisory.yml,exercises-advisory.yml,h1-hygiene-advisory.yml,lane-claim-guard.yml,lean-visibility-advisory.yml,markdown-deaccent-advisory.yml,mermaid-fill-color-advisory.yml,paragraph-length-advisory.yml,pedagogy-density-advisory.yml,slides-build-advisory.yml,stale-base-warning.yml,variation-light-genre.yml,variation-tag-guard.yml— tous sous.github/workflows/, aucune autre modification. (markdown-table-guard.yml, touché à l'émission (18/31), a été absorbé par le merge d'origin/main du 21/09 — sa correction était déjà sur main, diff net nul.)markdown-table-syntaxqui existait déjà — blindage anti-dérive) ;2>/dev/null || true→|| truesur les seules lignesgh label create— les échecs remontent désormais dans le log Actions sans tuer le job (|| trueconservé). Lesgh pr edit --add-labelrestent muets (hors périmètre du codemod, périmètre de l'issue).Preuves
--descriptionlittérales + résolution$DESC/ensure_label) ;grep -rnE "gh label create.*2>/dev/null"sur.github/workflows/: 0 (mono-ligne et continuations) ;yaml.safe_load) ;G.4 (17 fichiers > 15) — justification
Codemod mécanique d'une seule classe de défaut (style lint/renommage), pas un composite : un sujet, un motif de remplacement, ~1,7 ligne/fichier. Le splitter laisserait le garde à moitié vivant. Si le coordinateur préfère une découpe, les deux patchs (
patch_16211.py/patch_16211b.py) sont indépendants par fichier.Témoin vivant
Ce grain enchaîne DEEP/qc (#16263) → MED/guard : la PR elle-même devrait recevoir
variation-adjacency-deep-meddu garde réparé dès son merge — la réparation se vérifie sur son propre auteur.See #16211
See #16207
🤖 Generated with Claude Code