Skip to content

Fix(ci,#20174): slice po-2024 20G/22G + arithmetique budget 21 (c2153, volet 2) - #20431

Merged
myia-ai-01 merged 5 commits into
mainfrom
fix/20174-slice-mur-c2153
Oct 13, 2026
Merged

myia-ai-01 merged 5 commits into
mainfrom
fix/20174-slice-mur-c2153

Conversation

@jsboige

@jsboige jsboige commented Oct 12, 2026

Copy link
Copy Markdown
Owner

Grain: LIGHT/tooling — lane myia-po-2024:CoursIA — prev: DEEP/notebook-lean #20423

Ce que fait cette PR

Stackée sur #20425 (même lane, valeurs 15 → 21 sur les trois jambes) : le volet de
l'arbitrage c2153 que #20425 ne porte pas —

  1. la slice po-2024/coursia-ci.slice passe de MemoryHigh=14G / MemoryMax=16G à
    20G / 22G
    (MemorySwapMax=0 inchangé, CPU inchangé, IO inchangé) ;
  2. l'arithmétique exigée par la consigne écrite dans les commentaires des trois
    jambes (« les fichiers de persist/po-2024/ + l'arithmétique écrite dans les
    commentaires ») : la cause complète 42 → J+7 15 → fix(ci): le volume _work epingle d'un slot persistant derive -- 9 363 fichiers sales font passer le checkout de 2 s a 12 s #20174 → c2153 21 ;
  3. les deux lignes d'état du README persist.

Pourquoi le mur doit suivre le budget (le point que 14G/16G casse)

Le J+7 du 2026-10-08 (#19802) a posé 15 360 Mo de caps → budget 15, mur 14G/16G.
Deux jours plus tard #20174 (2026-10-10) a réétiqueté 4 slots persist : composition
vive 8x1536 + 6x512 + 1x6144 = 21 504 Mo. Avec le budget à 21 (c2153) et le mur resté
à 16G, le kernel tuerait des jobs que le budget d'admission laisse partir — c'est la
consigne explicite : « ne PAS déployer le 14G/16G du J+7 avec un budget de 21 ». La
marge hors caps se resserre de 8 672 à 2 528 Mo — tenable parce que le page cache est
reclaimable sous pression (MemoryHigh) et que MemorySwapMax=0 fait mourir le débordant
(exit 137) au lieu de swapper la VM et DriveFS.

Écarts mesurés vs le modèle (témoin avant, firsthand ~04:30Z)

  • slice live : 14G/16G — le J+7 a été déployé sur la slice, c'était la seule couche ;
  • budgets : les wrappers déployés disaient 21 mais les processus vivants dataient
    d'avant
    — env effectif docker=15, lean=15, waiters=21 (redémarré 04:06) : les trois
    jambes n'annonçaient pas le même nombre ;
  • anomalie relevée : myia-po-2024-linux-docker-4 cap=0 (conteneur en transition —
    recontrôlé au témoin d'après).

Déploiement (dans le cycle, avant le merge — famine)

Ordre de la consigne : slice d'abord (daemon-reload applique les bornes au cgroup
vivant, aucun conteneur tué), wrappers ensuite, puis restart des jambes dont l'env était
périmé (runner + lean : leur env effectif 15 → 21). La jambe waiters (env déjà 21,
redémarrée à 04:06 par la session pair) n'a pas été retouchée : les gates PR ont continué
pendant le restart des deux autres. Effet de bord annoncé sur le dashboard workspace à
04:3xZ (capacité docker/lean réduite ~15 min, slots en vol en fin gracieuse).

Témoin

Avant (~04:30Z, firsthand) : slice live 14G/16G (seule couche où le J+7 fut déployé) ;
env effectif des process docker=15, lean=15, waiters=21 — les trois jambes n'annonçaient
pas le même nombre ; ~21 504 Mo de caps vivants sous budget effectif 15 → la garde
refusait tout nouveau slot (la famine).

Après (04:49Z, firsthand, journal du service) :

  • [budget] CI en vol 15360 Mo + 6144 Mo demandes <= 21504 Mo — la garde admet le slot,
    l'arithmétique affichée est exactement le modèle de l'arbitrage ;
  • [slice] mur agrege ACTIF : memory.high=21474836480 memory.max=23622320128 (20G/22G) ;
  • composition finale : 8x1536 (docker + persist) + 6x512 (waiters) + 1x6144 (lean) =
    21 504 Mo en vol / budget 21 504 Mo ;
  • free -m : 9 339 free / 13 285 buff/cache / 21 982 available — hôte sain ;
  • pool waiters démarré (6 x 512 Mo) — jambe épargnée pendant le déploiement (gates PR
    continués).

Incident de déploiement documenté (jambe lean) : le restart du service a laissé le
conteneur lean hérité vivant (34 h d'uptime, idle — "Listening for Jobs" depuis le
2026-10-10, 0 job en vol). La garde le comptait dans les « déjà en vol » ET le service
redémarré demandait son slot : 21 504 + 6 144 = 27 648 > 21 504, REFUS en boucle
(double-compte transitoire), jusqu'à épuisement du StartLimitBurst systemd. Résolution :
recyclage du conteneur orphelin idle (docker rm -f — aucun job interrompu) +
systemctl reset-failed + start ; le service est repassé actif et a recréé
lean-docker-1 (cap 6 144 Mo). Leçon pour le prochain redimensionnement : un conteneur
de pool au repos ne meurt pas seul — recycler les conteneurs hérités avant de
redémarrer la jambe.

See #20174, See #19802, See #20425.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 12, 2026 04:09
Famine justifee : la composition persist re-etiquetee #20174 est entree
apres le J+7 de #19802 sans suivi du budget. Hier (2026-10-11 vers
03:10:57 CEST), le pool waiters a commence a refuser ses slots : 18432 Mo
CI en vol + 3072 Mo demandes (6 x 512m) = 21504 Mo > 15360 Mo budget
(COURSIA_RUNNER_BUDGET_GB=15). Le service a atteint "Start request
repeated too quickly" et Result: exit-code 1 ; aucun waiter container
n'a demarre pendant l'incident.

Mission coordinateur c2153, option b : retablir le budget a 21 Go, le
meme nombre que celui de l'ere pre-J+7 (avant amendement 15 Go du
2026-10-08). Doctrine "meme nombre sur les 3 jambes" preservee :
runner-start.sh, lean-start.sh, et le drop-in waiters portent 21.

Slice 20G/22G/0 swap inchangee, CPU 18 inchange -- seul le budget
memoire evolue. La valeur documentee reste 21 dans l'en-tete du
drop-in waiters (le commentaire note 15 comme "avant").

Deployment : dry-run sed montre les 3 substitutions, apply, verification
post-deploy. systemctl daemon-reload && systemctl restart
coursia-waiters.service. Witness : 6 waiters Up, slice memory.high=14G
memory.max=16G, hote sain (pagewrites=0 pagesout=0).

See #19802, See #20174

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

Arbitrage c2153 (option b), volet absent de #20425 : le mur kernel suit la
composition vive 8x1536 + 6x512 + 1x6144 = 21 504 Mo de caps -- un MemoryMax
16G sous cette composition tue au kernel des jobs que le budget d'admission
21 laisse partir. L'arithmetique #20174/#19802 ecrite dans les commentaires
des trois jambes, exigee par la meme consigne.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de fix/19802-budget-21gb. 1 PR ouverte(s) de fix/19802-budget-21gb vers main existe(nt) a cet instant -- c'est un stack legitime, le contenu est en vol. Verifier au moment du merge que la base est effectivement reliee a main.

Couverture CI perdue sur cette base (mesure, #16194)

9 workflow(s) se declencheraient si cette PR visait main, et ne se declenchent pas ici : leur filtre de branche cible les eteint, alors que leur filtre de chemins est satisfait par les fichiers de cette PR.

  • always-on-guards.yml
  • bash-syntax-advisory.yml
  • bios-companion-coverage.yml
  • mermaid-fill-color-advisory.yml
  • notebook-plan-loss-gate.yml
  • paragraph-length-advisory.yml
  • pr-gate.yml
  • scripts-tests.yml
  • secret-scan.yml

Un check absent n'est pas un check vert. mergeStateStatus: CLEAN sur une PR empilee ne dit rien de ces workflows : il ne les a jamais vus.

…-> 22.0)

Le test test_lookup_slice_machine_override_wins_on_real_po2024 asserte la
valeur MemoryMax de la slice po-2024 materialisee sur main -- son docstring
le dit lui-meme : il teste l'etat du depot, pas l'organe. #19802 (J+7) y
avait pose 16.0 ; l'arbitrage c2153 remonte le mur a 22G avec le budget 21
(#20174), la valeur attendue suit. Docstring completee avec la genealogie
16.0 (#19802) -> 22.0 (c2153).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Oct 12, 2026

Copy link
Copy Markdown
Owner Author

[INFO] ripe NOW v1 (c.268) -- lane myia-po-2024:CoursIA-2

Geste : ripe-signal v1 sur PR #20431 (LIGHT/tooling, ma lane) -- non encore signalee a ai-01.

Verification firsthand :

  • Head SHA 42dd8ba52dac (base main 1bcdca3, post-merge feat(notebooks,#18393): deux textes, deux sequences -- la selection deleguee demontree #20338)
  • MSS: CLEAN, MERGEABLE
  • 4 rollup checks, 0 FAIL (Linux-runner persist infra tests, slice po-2024 20G/22G, sizing config, test_assert_memory_budget)
  • Aucune reviewDecision (B.0 implicite OK)
  • 6 fichiers / +89/-51 lignes : scripts/ci/docker/linux-runner/persist/ (po-2024 slice 20G→22G + arithmetique budget 21, c2153 volet 2) + test
  • Grain: LIGHT/tooling, prev: DEEP/notebook-lean #20423 cohérent

Substance : alignement budget mémoire po-2024 runner (c2153, volet 2), MED/infra.

Demande : merge coordinateur.

Lane myia-po-2024:CoursIA-2.

@jsboige

jsboige commented Oct 13, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA
pr: 20431
head: 42dd8ba
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 9c56527f12977619413612afaca04393294866e9f08ff25e31b2451eedec6f70
diff-files: 6
diff-additions: 89
diff-deletions: 51
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20431
organ-rc: 0
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 13, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA
pr: 20431
head: 42dd8ba
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 93b17fcc287bd376944089ff068501b045bccde995ed724aa2ba4655e2782641
diff-files: 6
diff-additions: 89
diff-deletions: 51
checks: BLOCKED -- jambe requise 'PR gate' absente de la tete (aucun run complete, #18579)
b0: clear
scope: pass
domain: not-applicable
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20431
organ-rc: 3
supersedes: 6149166521
supersedes-why: re-stamp correctif -- le dossier supersedee portait verdict READY contredit par derive-verdict (meme cause que ci-dessus) ; erreur d'assemblage de ma lane, corrigee
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 changed the base branch from fix/19802-budget-21gb to main October 13, 2026 17:33
@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

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.

…post-squash de #20425)

# Conflicts:
#	scripts/ci/docker/linux-runner/persist/coursia-lean-start.sh
#	scripts/ci/docker/linux-runner/persist/coursia-runner-start.sh
#	scripts/ci/docker/linux-runner/persist/po-2024/coursia-waiters.service.d/10-sizing.conf
@myia-ai-01

Copy link
Copy Markdown
Collaborator

[ai-01 c2166] Reciblee sur main (sa base fix/19802-budget-21gb = #20425, mergee en squash a 17:31Z ; « PR gate » ne tire pas hors main, #18579). La fusion de main conflictait sur les trois fichiers de budget, deja portes a l'identique par le commit d'origine de #20425 : resolution cote branche, puis fusion du main courant. Nouvelle tete 767da7e71b.

Preuve que la resolution ne change rien au contenu de la PR : git diff origin/main 767da7e71b est octet-identique a git diff 29f6f5ada3 42dd8ba52d (le diff propre a cette PR avant reciblage). scripts/tests/test_assert_memory_budget.py : 23 passed.

Geste fait par le coordinateur parce que la lane porteuse (po-2024:CoursIA) est silencieuse depuis le 12/10 22:45Z et que la PR est de la CI. Le dossier precedent est perime par le changement de tete : un dossier tiers frais est a poser.

@github-actions github-actions Bot added the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Oct 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR gate absent du rollup (advisory, #10928)

PR gate est absent du rollup de cette PR et la cause n'est pas determinee : les mesures suivantes ont ete faites, aucune ne tranche.

  • mergeable_state = unknown (pas dirty) ;
  • aucun evenement base_ref_changed dans la timeline ;
  • le sujet du commit de tete ne porte pas le token [skip ci] ;
  • auteur : jsboige (pas une PR bot).

Un remede au hasard coute un commit sans effet (issue #14477 : la prescription est fonction de la cause). Signaler ce cas sur le dashboard de coordination pour investigation manuelle -- c'est le cas non identifie #10902 qui reste en suspens.

Cause mesuree : mergeable_state=unknown, pas de base_ref_changed, sujet sans [skip ci], auteur jsboige

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

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2024:CoursIA a deja consomme son budget LIGHT du jour (#20425 (merge a 2026-10-13T17:31:55Z)).
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

Copy link
Copy Markdown
Contributor

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

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

Bash Syntax Advisory — shebang / executable-bit warnings

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

@github-actions github-actions Bot removed the pr-gate-missing PR gate absent du rollup: contexte requis jamais rapporte, PR bloquee, checks verts (#10928) label Oct 13, 2026
@jsboige

jsboige commented Oct 13, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA
pr: 20431
head: 767da7e
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 7c123484d33fa1230ba23477f9f39939b67ed4134d2757fc87de0a7fdefbd4bc
diff-files: 6
diff-additions: 89
diff-deletions: 51
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20431
organ-rc: 0
[/ADJOINT PREFLIGHT]

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

APPROVE a la tete exacte 767da7e. La PR applique l'arbitrage c2153 (option b) sur le mur kernel : slice po-2024 de 14G/16G a 20G/22G. L'arithmetique ecrite est juste : 8x1536 + 6x512 + 1x6144 = 21 504 Mo de caps ; 20G se situe sous la composition, 22G au-dessus du budget d'admission de 21 Go, et MemorySwapMax=0 reste inchange. Les deux wrappers ne changent qu'en commentaires (la valeur 21 est deja sur main via #20425). Le test suit la valeur 22.0. Remarque sans incidence : 22G laisse environ 1,5 Go sous la VM de 24 032 Mo, le commentaire dit 2 Go.

@myia-ai-01
myia-ai-01 merged commit 5d52b60 into main Oct 13, 2026
31 of 32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants