Skip to content

feat(picker,#18203): geste 5 -- brancher le journal des tirages dans main() - #20092

Merged
myia-ai-01 merged 1 commit into
mainfrom
feat/18203-picker-journal
Oct 10, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feat/18203-picker-journal

Conversation

@jsboige

@jsboige jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling -- lane myia-po-2024:CoursIA-2 -- prev: MED/guard #20089

Ce que fait cette PR

Geste 5 de #18203 : brancher le journal des tirages (module
scripts/coordination/tirage_journal.py, merge #19945) dans main() du
picker. L'angle mort que le geste ferme : « Proposée puis écartée ne se
mesure pas »
-- chaque tirage laisse désormais une trace JSONL append-only
(lane, candidats, grain retenu, mode), sous verrou fichier interprocessus.

Trois points de consigne, une invocation = une entree :

Chemin mode journalise candidats retenu
Reparation (garde rouge/WIP, hors belt) repair PRs rouges de la lane premiere PR a reparer
Tapis --belt belt picks servis tete du tapis
Volee ponderee weighted poignee tiree premier pick

Helper _log_tirage_safe -- best-effort par construction :

  • un defaut de journal (disque plein, verrou expire, module absent) n'arrete
    JAMAIS un tirage : une ligne stderr, le grain est rendu ;
  • INERTE sous pytest sans TIRAGE_JOURNAL_PATH (meme commutateur
    d'environnement que le cache et la sonde delivered) : un test unitaire
    n'ecrit pas dans le state dir machine ;
  • confirmation sur stderr ((journal de tirage : draw_id=... mode=...)),
    jamais sur stdout -- le contrat --json reste du JSON pur.

Preuve

  • 9 tests nouveaux (scripts/tests/test_pick_idle_grain_journal.py) :
    les 3 chemins de main() bout en bout (fixtures reseau hermetiques,
    doctrine fix(picker,#19907): 3e surface de livraison (PR MERGEE <90j citant #N) #19913), le best-effort (defaillance avalee + stderr), l'inertie
    pytest, le module absent, et une invocation belt avec garde rouge = UNE
    entree
    .
  • Regression : 267 tests verts post-rebase (picker 209 + belt 49 +
    journal 9), plus les 14 de la suite du module tirage_journal (Add(coordination,#18203): journal des tirages du picker (geste 5, module + tests) #19945,
    non touchee).
  • Piege attrape pendant l'ecriture : un etat GraphQL de PR aplati est
    silencieusement illisible par blocking_causes -- le garde rouge ne
    declenche pas et le test sort sur le reseau reel (mesure : 42 s -> 0,4 s
    une fois la forme imbriquee commits.nodes[].commit.statusCheckRollup
    restauree). Consigne dans la docstring de _state_red.

Coordination (chemins croises)

PRs ouvertes touchant scripts/pick_idle_grain.py au moment du claim :

Perimetre

Deux sources : le picker (import, helper, trois appels) et le nouveau
fichier de tests. Aucun changement de comportement du tirage lui-meme ;
aucun carnet touche.

See #18203

🤖 Generated with Claude Code

…main()

Trois points de consigne (reparation, tapis, volee ponderee) via le helper
best-effort _log_tirage_safe : un defaut de journal n'arrete jamais un
tirage, et la consigne est inerte sous pytest sans TIRAGE_JOURNAL_PATH
(meme commutateur que le cache et la sonde delivered).

Module scripts/coordination/tirage_journal.py (merge #19945), API
log_tirage verrouillee fichier interprocessus. Une invocation = une entree.

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Smoke live end-to-end (post-push, tete 9a9ea2d778) : premier tirage reel journalise.

pick_idle_grain.py --belt --lane myia-po-2024:CoursIA-2 --json (run de ce cycle, garde rouge declenche -- la lane porte des PRs en attente tierce) :

{"candidates": [10355, 14620, 17799, 16741], "draw_id": "dbf89ddea8ed", "extras": null, "lane": "myia-po-2024:CoursIA-2", "mode": "belt", "retained": 10355, "ts": "2026-10-09T13:27:53Z", "urn": "belt"}

Trois contrats tenus sur donnees reelles :

Lecture brute : read_journal() sur %LOCALAPPDATA%\CoursIA\tirage_journal\journal.jsonl -> 1 entree, exactement celle ci-dessus.

[lane myia-po-2024:CoursIA-2]

@github-actions

github-actions Bot commented Oct 9, 2026

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 commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20092 (feat(picker,#18203): geste 5 -- brancher le journal des tirages dans main()) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA-2
pr: 20092
head: 9a9ea2d
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 41dedc1f821569677e84ce6752833a50108850d21745c76c0f6f1081f8a4bfdf
diff-files: 2
diff-additions: 414
diff-deletions: 0
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 20092
organ-rc: 0
[/ADJOINT PREFLIGHT]

Re-stamp (repli secretariat, dispatch ai01-c2139-restamp-po2027c2) : le dossier precedent etait pose par la lane po-2026:CoursIA-3 (machine materiellement morte depuis le 10/10) ; re-stamp a la meme tete exacte 9a9ea2d778 sous lane vivante. Surfaces relues : AUCUNE review (0) et aucun point humain -- B.0 trivialement clair. Les 3 commentaires posterieurs au dernier commit (13:23:36Z) sont : le smoke live end-to-end de la lane porteuse (premier tirage reel journalise, preuve du fonctionnement) et deux rapports d'organes github-actions (organ-duplication : aucun symbole en collision ; PR-PATH-COLLISION : rapport informatif de coordination #13359/#13615) -- aucun n'est une reserve. Scope : 2 fichiers +414/-0 (pick_idle_grain.py + tests dedies), coherents avec le titre (geste 5 -- brancher le journal des tirages dans main()). Verdict organique --derive-verdict : READY.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants