Skip to content

fix(ci,#18131): queue-ghost-watch reconnait les zombies du 13/09 par identite -- une seule alerte ouverte a la fois - #18133

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18131-ghost-floor-by-identity
Sep 28, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18131-ghost-floor-by-identity

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Constat

queue-ghost-watch ouvre une issue DRIFT par jour depuis le 22/09 : #17399, #17524, #17640, #17796, #17931 et #18036. Ces six issues sont fermees en doublon de #18131.

Les runs « live » sur lesquels l'organe alertait sont 37 runs bloques en queued depuis le 13/09 (08:46-09:10Z) :

cancel comme force-cancel rendent 409 « Cannot cancel a workflow run that has not been queued yet » (mesure sur le run 34749036117). C'est un second incident fantome, permanent. Le cutoff par date du 20/08 le compte comme file vivante.

Ce que fait la PR

  • scripts/ci/gh_queue_health.py
    • KNOWN_ZOMBIE_RUN_IDS : les 37 identifiants mesures, avec la reconnaissance par identite, pas par compte.
    • split_live() : en mode --watch, seuls les runs inconnus bloques au-dela de --stale-hours (24 h par defaut) comptent comme derive. La file fraiche d'un pool sature est rapportee, sans alerter.
    • --now rend les rejeux deterministes.
    • Le verdict de mesure a 4 cases est inchange (verdict() n'est pas touche).
  • .github/workflows/queue-ghost-watch.yml : une DRIFT qui persiste commente l'alerte ouverte, au lieu d'ouvrir une nouvelle issue. Le body affiche la ventilation zombies connus / inconnus bloques / file fraiche.

Validation

  • python -m pytest scripts/tests/test_gh_queue_health.py -q : 30 passed, dont les 24 tests existants intacts et 6 nouveaux :
    • l'ensemble d'identite ;
    • 2 controles negatifs : 18 fantomes + 37 zombies connus donnent OK, et 259 runs frais (le compte de queue-ghost-watch DRIFT: 18 ghosts, 259 live #17796) donnent OK ;
    • le controle positif : un run inconnu bloque depuis plus de 24 h donne DRIFT ;
    • le seuil configurable ;
    • un --now malforme donne BROKEN.
  • Mesure live (27/09 21:29Z, --watch --repo jsboige/CoursIA) : OK, rc=0.
    • Compteurs : ghosts 18, live 37, known_zombies 37, stale_live 0, fresh_live 0.
    • Avant le correctif, ce meme etat rendait DRIFT.
  • Le bloc Python embarque du workflow compile (extraction yaml + compile()), et le YAML se parse.

Hors perimetre

La purge des runs zombies elle-meme : aucune mutation API ne la permet (#13579).

Closes #18131

Grain: LIGHT/guard — lane myia-ai-01:CoursIA

🤖 Generated with Claude Code

…y identity, one open alert at a time

The watcher opened a DRIFT issue every day since 22/09 (6 open alerts). The
"live" runs it alarmed on were 37 runs stuck in queued since 2026-09-13
(cancel and force-cancel answer 409): a second unpurgeable incident that the
2026-08-20 date cutoff counts as live.

- gh_queue_health.py: KNOWN_ZOMBIE_RUN_IDS (the 37 measured IDs) and
  split_live(); in --watch mode only UNKNOWN live runs queued longer than
  --stale-hours (default 24) count as drift. Fresh backlog of a saturated
  pool is reported, not alarmed on. --now makes replays deterministic.
  The four-bucket measurement verdict is unchanged.
- queue-ghost-watch.yml: a persisting DRIFT comments on the open alert
  instead of creating a new issue.
- 6 tests: identity set, 2 negative controls (known zombies, 259 fresh
  runs), positive control (unknown stale run), threshold, malformed --now.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added variation-tag-prev-absent Tag Grain sans 'prev: <TIER>/<GENRE> #<PR>' (adjacence G-VAR-3 inevaluable) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) labels Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (#17990 (merge a 2026-09-27T01:13:22Z)).
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 the variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=4 genre=4 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.

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

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18133
head: 7ec3acf
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: cb852bf2e801c12f0898dd0214471a381ca3120f43e1b01bd024af98340a837c
diff-files: 3
diff-additions: 220
diff-deletions: 15
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 6dd07f4 into main Sep 28, 2026
22 of 23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223) 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-tag-prev-absent Tag Grain sans 'prev: <TIER>/<GENRE> #<PR>' (adjacence G-VAR-3 inevaluable)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci(queue-ghost-watch): second incident fantome (37 runs du 13/09, non purgeables) -- l'organe ouvre une alerte DRIFT par jour

2 participants