Skip to content

fix(test,#18027): le test du plafond d'admission attend la decision du 3e demandeur - #18040

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18027-cap-test-sync
Sep 27, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18027-cap-test-sync

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Grain: LIGHT/test — lane myia-ai-01:CoursIA — prev: LIGHT/guard #18030

Constat

Sous Windows natif, test_admission_cap_machine_wide_two_worktrees échouait avec attendu 2 admissions, vu [0, 0, 0] : le troisième demandeur était admis alors que le plafond vaut 2 (#18027).

Cause : la synchronisation du test, pas le plafond

Le plafond est appliqué. Le test ne le mettait pas à l'épreuve sous Windows :

  • les deux premiers runs tenaient leur part du cap pendant SLEEP_CMD, soit 4 s fixes ;
  • le troisième compte les runs vivants dans live_registered_budgets() (scripts/lean/lean_exec.py:323-339, filtre pid_alive ligne 335), puis refuse si registered + budget > cap (lean_exec.py:1637) ;
  • avant ce comptage, l'admission passe par scan_native_population(), qui lance tasklist (lean_exec.py:238-249), puis par measure_resources().

Mesuré sur myia-ai-01 (Windows 11, Python 3.14.3) : tasklist /FO CSV /NH prend 3,6 s, et un lean_exec.py run -- python -c pass complet prend 6,2 s (trois mesures : 6,24 / 6,18 / 6,20 s). Quand le troisième comptait, les deux premiers avaient fini leurs 4 s : registered = 0, admission accordée.

Contre-épreuve sur le code de main, sans toucher à lean_exec.py : même test, maintien porté à 4 s → FAIL [0, 0, 0] ; porté à 15 s → PASS.

Correctif

Le maintien ne dépend plus d'une durée. Les deux premiers runs attendent un fichier de libération, que le test ne pose qu'après la décision du troisième demandeur (garde de sécurité : 90 s). Le troisième lance une commande immédiate : s'il était admis à tort, il rendrait 0 tout de suite au lieu d'attendre une libération qui ne viendrait qu'après lui.

Les assertions sont inchangées : deux admissions, troisième refusé en EXIT_REFUSED, motif cap. C'est le principe déjà écrit dans le test pour l'enregistrement (#15940) : se synchroniser sur l'état observable, jamais sur un délai.

Validation

  • Windows natif, test ciblé : 1 passed (14,7 s).
  • Témoin négatif : contrôle registered + budget > cap désactivé dans lean_exec.py (copie de sauvegarde puis restauration) → le test échoue avec attendu 2 admissions, vu [0, 0, 0]. Le test détecte donc toujours un plafond non appliqué.
  • Fichier complet scripts/lean/tests/test_lean_exec.py sous Windows : 46 passed, 1 skipped (186 s).
  • CI Linux : jambe Scripts Tests (CPU) de cette PR.

Closes #18027

🤖 Generated with Claude Code

…u 3e demandeur, pas 4 s

Sous Windows natif, une admission lean_exec coute ~6,2 s (tasklist ~3,6 s),
plus que les 4 s de SLEEP_CMD : les deux premiers runs etaient morts quand
le 3e comptait les runs vivants, qui etait donc admis ([0, 0, 0]). Les deux
premiers attendent desormais un fichier de liberation pose apres la decision
du 3e. Assertions inchangees ; temoin negatif verifie (cap desactive -> FAIL).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@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 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=3 genre=3 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 github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre test dans la famille META (docs/guard/ledger/readme/test) + diff de 23 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18040
head: da73942
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: a336651c77380c2dabd64023da435f7aeaf3c63b3c2b04916d8d96379bbc554d
diff-files: 1
diff-additions: 21
diff-deletions: 2
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]

Prévalidation tierce, sans approbation ni autorisation de merge. Le champ bloquant est checks : dernière jambe PR gate à la tête exacte en échec DWELL, échéance affichée 2026-09-27T13:07:00Z ; c'est un minuteur, pas une erreur du test. Scripts Tests (CPU) est vert. Corps complet, quatre commentaires, zéro review, zéro thread inline et diff +21/-2 lus. Le test remplace le délai fixe de 4 s par un fichier de libération posé après la décision du troisième demandeur, avec garde de 90 s ; son exécution immédiate rend détectable une admission fautive. Validation Windows 46 passed, 1 skipped et témoin négatif sont rapportés par l'auteur dans le body ; CI CPU est verte. B.0 ne trouve aucun nit non levé. Les avis G-VAR-2 et trivial-diff sont advisory ; le budget LIGHT et la politique de merge restent à arbitrer par ai-01, sans les assimiler au rouge DWELL. Une fois le minuteur levé, réémettre un dossier READY sur les surfaces vivantes si tous les contrôles sont verts. Ne pas pousser pour franchir le plancher.

@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18040
head: da73942
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 6f9b62f5d0c6c1febfed821b7b6f7fe32452e5a2adc7c3970e4e9811c8f112ed
diff-files: 1
diff-additions: 21
diff-deletions: 2
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Prévalidation tierce à la tête exacte, sans approbation ni autorisation de merge. Le corps entier, les quatre avis automatisés, le dossier BLOCKED précédent, zéro review et zéro thread inline ont été relus ; diff du test +21/-2, aucune autre modification. Le maintien des deux premiers processus dépend maintenant d'un fichier posé après la décision du troisième ; la garde de 90 s borne l'attente. À cette tête, la dernière jambe PR gate est SUCCESS (12:40Z), tout comme Scripts Tests (CPU) et les autres noms latest-wins, sans jambe en cours ; B.0 rc=0 après lecture du précédent dossier. OPEN/MERGEABLE/CLEAN. Le minuteur DWELL antérieur est levé ; le budget LIGHT G-VAR-2 et l'avis trivial-diff restent des sujets de décision du coordinateur, non des échecs de checks. Validation Windows 46 passed, 1 skipped et témoin négatif sont rapportés dans le body par l'auteur ; je n'ai pas rejoué ces tests localement. Décision finale et merge réservés à ai-01.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) 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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

lean_exec : sous Windows natif, le plafond d'admission laisse passer un 3e demandeur (test_admission_cap_machine_wide_two_worktrees)

2 participants