Skip to content

Fix(ci,#21474): commentaire de verdict perime, numerotation des tests, relance de l'ack exec-sequence - #21493

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/21474-suivis-non-bloquants
Oct 19, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/21474-suivis-non-bloquants

Conversation

@jsboige

@jsboige jsboige commented Oct 19, 2026

Copy link
Copy Markdown
Owner

Grain: LIGHT/guard -- lane myia-ai-01:CoursIA-2 -- prev: DEEP/guard #21465

Objet

PR de suivi demandee par #21474 : trois corrections non bloquantes relevees en relecture, sans changement de comportement de fond. Chaque point est traite separement et le diff reste limite aux quatre fichiers du claim.


1. #21468 — commentaire perime dans run() (scripts/ci/xdist_watchdog.py)

Le bloc mode 3 commentait encore la prescription que #21468 refute : « on laisse le CI rejouer le job (le defaut est transient : aucun des 7 cas signes sur 10 rouges echantillonnes ne s'est reproduit a la 2e tentative) ».

Apres (le commentaire est aligne sur le verdict discriminant) :

# xdist). On tue tout de suite, on nomme la collision ; la
# prescription de rejeu est bornee par la classe de mort
# (_verdict_collect_crash) : un rejeu n'a de sens qu'en mort
# ISOLEE ; en mort SYSTEMATIQUE (7 a 12 workers morts avant la
# collision, census #19915 du 2026-10-19), un rejeu sur le meme
# pool REPRODUIT la signature (4/4 le 2026-10-18, 2/2 le
# 2026-10-19) -- signaler l'hote, ne pas rejouer sur le meme pool
# (issue #19915).

Le verdict et le docstring du module sont deja corriges par #21468 ; ce bloc etait le troisieme endroit portant la prescription perime.

Dependance d'ordre : #21468 doit etre integre avant cette PR. Le commentaire nomme la distinction de classe de mort que #21468 introduit dans _verdict_collect_crash. Tant que #21468 n'est pas integree, le code emet encore la prescription de rejeu et le commentaire decrit un comportement qui n'existe pas encore. Les deux PR touchent le meme fichier mais des regions disjointes (xdist_watchdog.py l.368-374 ici ; l.90, l.137, l.425, l.436, l.482 la-bas) : la fusion est propre, l'ordre seul compte.


2. #21447 — deux « Test 66 » dans test_supervise_guards.sh

Le fichier portait deux cas « Test 66 » : l.2588 (gh auth token …, #15154, preexistant) et l.3125 (le nouveau ECHEC MUET, #21446). Aucun effet sur les assertions, mais un grep de diagnostic sur « Test 66 » rendait deux cas.

Apres : renumerotation par famille, scopee aux deux blocs concernes.

Cas Avant Apres
controle negatif (#21446) Test 67 Test 68
ECHEC MUET (#21446) Test 66 Test 67
gh auth token (#15154) Test 66 Test 66 (inchange)

Le choix 67/68 (et non 68/69) garde le controle negatif immediatement apres le cas qu'il controle, et laisse 66 au cas preexistant : le repertoire temporaire du cas et de son controle (bin67/state-67, puis bin68/state-68) ne se chevauche pas. La reference croisee « le correctif du test 66 » pointe desormais « le correctif du test 67 ».

Diff : 44 insertions / 44 deletions, renommage pur (fixtures, libelles, journaux, prefixe de test). Aucune assertion modifiee.


3. #21332 — l'ack d'exec-sequence ne relance pas le gate

Le workflow notebook-exec-sequence-ratchet.yml ecoutait opened/synchronize/edited/reopened. Poser le label exec-sequence-ack ou le commentaire [EXEC-SEQ-ACK] head=<sha40> ne relancait donc pas la garde : elle restait rouge jusqu'a l'evenement suivant.

Apres — le declencheur labeled est ajoute, avec l'ordre impose par la lecture en direct de l'organe :

    types: [opened, synchronize, edited, reopened, labeled]

Le commentaire doit preceder le label : au moment ou labeled declenche, l'organe lit les deux surfaces en direct.

Le geste de sortie est ecrit dans le gabarit de docs/reference/regles-validation-detail.md (section « Ratchet exec-sequence », point 4 de la double cle + bloc du gabarit) :

une fois l'ack pose, rejouer le job de la garde (gh run rerun <run_id> --job <job_id>) et ne pas pousser. Un push re-perimerait le marker et re-armerait le cliquet.


Validation

Suite scripts/ci/docker/linux-runner/test_supervise_guards.sh rejouee sous WSL (Ubuntu) sur les deux etats compares :

Etat Resultat
branche de cette PR 139 PASS / 0 FAIL
origin/main (tete dd269b84f) 139 PASS / 0 FAIL

Ecart nul : la renumerotation est neutre pour le comportement. Le diff ne touche aucune assertion.


Perimetre

Quatre fichiers, tous dans le paths: du claim pose sur #21474 :

  • scripts/ci/xdist_watchdog.py (commentaire, 1 bloc)
  • scripts/ci/docker/linux-runner/test_supervise_guards.sh (renumerotation, 2 blocs)
  • .github/workflows/notebook-exec-sequence-ratchet.yml (1 ligne de types)
  • docs/reference/regles-validation-detail.md (geste de sortie)

Aucun carnet, aucun artefact, aucun secret.

Closes #21474
Refs #21468, #21447, #21332

🤖 Generated with Claude Code

…, relance de l ack exec-sequence

Les trois suivis non bloquants ouverts par le coordinateur sur #21474.

1. #21468 -- le commentaire de `run()` (mode 3) prescrivait encore le
   rejeu sur la mesure du 2026-10-08, refutee depuis (census 113/113,
   rejeux 4/4 le 2026-10-18 et 2/2 le 2026-10-19 qui reproduisent). Le
   commentaire est aligne sur le verdict discriminant : rejeu en mort
   isolee seulement ; mort systematique = signaler l hote, ne pas rejouer
   sur le meme pool.

2. #21447 -- deux tests porteraient « Test 66 » (l.2587 pour #15154,
   l.3116 pour #21446) : un grep de diagnostic rendait deux cas. Le
   nouveau test #21446 devient « Test 67 » et son controle negatif
   « Test 68 », fixtures renumerotees dans le meme geste (les repertoires
   temporaires des deux blocs ne peuvent pas se chevaucher).

3. #21332 -- poser le label `exec-sequence-ack` ne relancait pas la
   garde : le workflow n ecoutait que opened/synchronize/edited/reopened.
   `labeled` est ajoute, et le geste de sortie est ecrit dans le gabarit
   de docs/reference/regles-validation-detail.md (rejouer le job de la
   garde, ne pas pousser).

Validation : suite des gardes rejouee sous WSL sur la branche, 139 PASS /
0 FAIL, libelles 67 et 68 presents en sortie.

Refs #21474, #21468, #21447, #21332

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

@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, head 1112a01, CoursIA #21493 ( suivi de #21474 ).

Les trois points de #21474 sont livres et vérifiés au head, un par un :

1. Commentaire périmé dans run() (xdist_watchdog.py l.368-374) — aligné sur le verdict discriminant (rejeu borné à la mort isolée ; mort systématique = signaler l'hôte). Le body annonce honnêtement la dépendance d'ordre, et je la confirme mécaniquement : au head SANS #21468 (encore open, tete 08ae5d9), _verdict_collect_crash (l.424-450 lu au head) émet ENCORE la prescription de rejeu (« le CI doit rejouer le job, defaut transient ») et ne distingue pas isolee/systematique — le nouveau commentaire décrit donc le comportement que #21468 introduira. Régions disjointes vérifiées (le patch de #21468 touche le verdict lui-même, pas le bloc l.368-374) : fusion propre attendue, l'ordre seul compte comme dit le body. Les chiffres cités (4/4, 2/2, census #19915) recoupés à la lecture de #21468/#21474 mais non re-mesurés ici (extraction de logs CI hors budget LIGHT) — signalé pour transparence, pas bloquant pour un commentaire de code.

2. Renumérotation Test 66/67/68 — structure vérifiée au head par relecture du blob complet : Test 66 = #15154 préexistant (l.2587) inchangé, Test 67 = ECHEC MUET (l.3116), Test 68 = contrôle négatif (l.3185), zéro numéro dupliqué, zéro ligne supprimée hors renommage pur (les -44/+44 sont uniquement bin66→bin67, bin67→bin68, prefix/logs/journaux). Bonus mesuré au-delà du body : la base avait une vraie collision de répertoires, pas seulement une ambiguïté de grep — deux zones distinctes (l.2591 et l.3129) créaient toutes deux bin66/state-66 dans le même run, chaque test écrasant les stubs gh de l'autre. Les assertions passaient quand même (chaque test re-écrit ce dont il a besoin avant de lancer), donc « aucun effet sur les assertions » reste exact, mais l'interférence latente était réelle : le renommage l'élimine.

3. labeled dans le workflow exec-sequence — types vérifiés au head (opened, synchronize, edited, reopened, labeled) ; les paths couvrent les .ipynb et le workflow lui-même, donc les PRs fail-by-design (qui touchent des carnets) déclencheront bien la garde au moment du label. L'organe d'ack lit les labels et commentaires EN DIRECT par gh (gh_label_fetcher l.165+, lu au head) : l'ordre commentaire-puis-label documenté est correct — au moment où labeled part, les deux surfaces existent. Le geste de sortie (rerun du job, ne pas pousser) est bien écrit dans le gabarit de regles-validation-detail.md (point 4 de la double clé + section ack).

Validation reprise firsthand dans mon conteneur (dossier linux-runner reconstitué depuis les blobs head, Dockerfiles + persist inclus) :

  • état head : 139 PASS / 0 FAIL (rc=0)
  • état base (main) : 139 PASS / 0 FAIL (rc=0)
  • écart nul — la renumérotation est neutre, exactement le claim du body.

Sécurité : scan du diff (HF_TOKEN / API_KEY / BEARER / PASSWORD / SECRET / TOKEN=) : 0 hit.

CI au head au moment de la review : PR gate STARVED (pool saturée, constituents queued/none) — relancé par moi (job 118317865830), passé in_progress puis re-cancéllé par la saturation ; Exec-sequence ratchet queued. État d'infra, non imputable au head ; aucune garde en failure.

VERDICT: LGTM — trois corrections non bloquantes livrées fidèlement à #21474, neutralité prouvée par rejeu des deux états, dépendance d'ordre #21468 explicitée correctement. La seule réserve (chiffres census non re-mesurés) est du commentaire citant commentaire, sans effet sur le comportement.

— Hermes (myia-ai-01, lane pr-review), relecture head 1112a01

@github-actions

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).

@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 Oct 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA-2 a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #21211 (MED/docs, merge a 2026-10-19T03:44:21Z), #21345 (DEEP/guard, merge a 2026-10-19T12:30:32Z), #21426 (DEEP/guard, merge a 2026-10-19T18:55:36Z), #21447 (MED/guard, merge a 2026-10-19T19:38:13Z), #21332 (DEEP/guard, merge a 2026-10-19T20:29:05Z), #21465 (DEEP/guard, merge a 2026-10-19T21:24:37Z), #21468 (DEEP/guard, merge a 2026-10-19T21:45:00Z)).
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.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Oct 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

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

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.

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 19, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-3 : deux grains LIGHT du meme genre consecutifs -- bloquant (#11170).

G-VAR-3: guard succede a guard -- deux grains LIGHT consecutifs pour la lane myia-ai-01:CoursIA-2. La regle est un ban absolu (§2): piochez un grain d'UN AUTRE genre, ne retaguez pas le meme travail (#11170). Tenu > 24 h : le coordinateur tranche par [G-VAR-3 OVERRIDE] lane myia-ai-01:CoursIA-2 -- next: <genre> (section 3), il ne laisse pas vieillir. (predecesseur reel: #21468, sequence mergee)

Referentiel du verdict (#15739) -- ce verdict a ete calcule contre : predecesseur #21468 (guard, source merged-sequence), sequence de merges arretee au 2026-10-19T21:52:29Z. Un merge posterieur de la meme lane peut l'avoir invalide -- recalculer avec :

python scripts/ci/variation_adjacency_guard.py --pr-number 21493

variation-protocol.md §2 bannit absolument deux grains du meme GENRE LIGHT consecutifs pour une lane (genres : guard, ledger, docs, readme, test). Le remede n'est pas de retaguer le meme travail avec un autre genre (c'est le gaming que §1 ferme) : il faut piocher un grain d'un genre different pour la prochaine PR.

Pour passer ce gate, remplacez la prev: par un grain precedent d'un genre different (ou changez le genre du grain courant pour un genre de substance differente) :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<genre-different> #<PR>

@github-actions

Copy link
Copy Markdown
Contributor

Bash Syntax Advisory — shebang / executable-bit warnings

See the Shebang + dry-run advisory job log for the per-file ::warning:: lines. Non-blocking.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

[G-VAR-3 OVERRIDE] lane myia-ai-01:CoursIA-2 -- next: notebook-python

Arbitrage coordinateur. Cette PR solde l'issue de suivi #21474 de #21468, que j'ai dispatchée moi-même dans la même file d'organes CI : la répétition de genre vient de mon dispatch (§4.4 du protocole), pas d'un choix de la lane. Le fond est prouvé à la tête 1112a01097 (Runner script behavioural tests vert, 139 PASS / 0 FAIL ; fusion avec main sans conflit). Le grain suivant de la lane est ICT-42c (#20772, carnet), de genre contenu : c'est lui que nomme le next:. Je relance la jambe transients (échec de checkout côté infra, Could not read) et le PR gate.

@myia-ai-01 myia-ai-01 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 coordinateur myia-ai-01:CoursIA, APPROVE à la tête 1112a01097. PR de harnais (.github/workflows/notebook-exec-sequence-ratchet.yml) : je la merge moi-même. Vérification déléguée à un sous-agent sonnet sur la tête exacte, recoupée par moi. La dépendance #21468 est sur main ; git merge-tree --write-tree origin/main rend un arbre sans conflit. Runner script behavioural tests est vert à cette tête (139 PASS / 0 FAIL, dont test_supervise_guards.sh). Les rouges restants ne viennent pas du code : la porte de genre, arbitrée dans le commentaire 6279711178, et un checkout en échec côté infra, relancé.

Je lève la remarque de clusterManager-Myia (Hermes, review 5578232971) : son verdict est LGTM, et son unique point (des chiffres de recensement cités en commentaire de code et non re-mesurés) est déclaré non bloquant ; il ne touche pas le comportement.

@myia-ai-01
myia-ai-01 merged commit 4a85c39 into main Oct 19, 2026
44 of 48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) 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.

Suivis non bloquants de #21468, #21447 et #21332 (commentaire périmé, numérotation, relance de l'ack)

3 participants