Skip to content

fix(picker,#19767): 3e critere -- vert non prouvable part en base_undecided, pas en infra_rerun - #20878

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/19767-picker-base-undecided
Oct 17, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/19767-picker-base-undecided

Conversation

@jsboige

@jsboige jsboige commented Oct 15, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard — lane myia-po-2024:CoursIA — prev: DEEP/lean #20877

Reste du #19767 pointé par le [NOT-DELIVERED] du 12/10 : le 3e critère au sens littéral — « si elle est illisible, en base_undecided ». L'implémentation #19769 rendait la sonde inchangée quand _main_red_motif rend None (vert OU illisible confondus) et laissait le rollup trancher : un rollup vert périmé pouvait encore produire infra_rerun pour un rouge réel de la base.

Ce qui change

  1. _enrich_probe_with_workflow_runs — un motif None dit « pas de rouge PROUVÉ », pas « vert prouvé ». Le picker distingue désormais les deux par un wrapper de transport passé à _main_red_motif (organe-first : l'organe reste le SEUL lecteur-interprète des runs ; le wrapper n'observe que le transport, et réutilise la constante MAIN_VERDICT_CONCLUSIONS de l'organe) :

    • illisible (exception sur l'endpoint des runs, payload malformé, ou fenêtre sans AUCUN run à verdict — dix runs cancelled ne prouvent pas un vert, cf merge_dwell: un run cancelled masque le verdict de main (derogation muette apres une passe de merge) #19069) → le probe porte undecided_keys pour les check names mappés de ce workflow ;
    • exception sur la lecture de la branche par défaut (avant même les runs) → tous les workflows non prouvables → undecided_keys ;
    • lecture saine avec verdict → le None de l'organe vaut vert CORROBORÉ : probe rendu inchangé (identité d'objet), le rejeu reste justifié ;
    • organe remplacé/ne consulte pas le fetch (tests) → inchangé : on ne déclasse que sur observation POSITIVE d'illisibilité.
  2. split_base_corroboration — la branche infra est désormais gardée : un check présent et vert dans le rollup mais dont le vert n'est pas prouvable (undecided_keys ∩ (names ∪ {key})) part en undecided + base (fail-closed, comme l'absence du rollup) — jamais en rejeu.

Contrôles (6 tests nouveaux, scripts/tests/test_pick_idle_grain.py)

Test Fixture Attendu
run_illisible_marque_undecided_keys runs endpoint lève DwellError, vrai organ undecided_keys = {Scripts Tests (CPU)}, red_keys/names inchangés
fenetre_sans_verdict_marque_undecided_keys runs tous cancelled/skipped undecided_keys (transport OK, verdict absent)
vert_lisible_reste_sans_undecided run success probe rendu tel quel (identité), pas de undecided_keys
branche_defaut_illisible_marque_undecided tout lève undecided_keys sur tous les mappés
split_base_undecided_keys_ne_font_pas_infra sonde + undecided_keys infra vide, clé dans undecided ET base
split_base_vert_prouve_reste_infra sonde sans undecided_keys comportement #17154 préservé (infra)

Contrôle positif de l'issue (job rouge sur main → jamais infra_rerun) : couvert par test_enrich_probe_with_workflow_runs_rouge_marque_red_keys (inchangé, repasse vert).

Validation

  • python -m pytest scripts/tests/test_pick_idle_grain.py -k "enrich or split_base" -q : 13 passed (6 nouveaux + 7 existants).
  • Suite complète : 221 passed, 12 failed — les MÊMES 12 échouent sur origin/main propre (vérifié par git stash + re-run : 12 failed / 215 passed) : gh_identity.resolve_gh_token atteint un vrai processus gh auth token que le conftest refuse (ShellEscape). Base-inherited, hors de ce diff.

See #19767

🤖 Generated with Claude Code

…ecided, pas en infra_rerun

Un motif None de _main_red_motif dit pas de rouge PROUVE, pas vert prouve.
Le picker distingue désormais les deux par un wrapper de transport autour
de _gh_json (l'organe _main_red_motif reste le SEUL lecteur des runs) :
exception sur l'endpoint, payload malforme ou fenêtre sans aucun verdict
(dix runs cancelled ne prouvent pas un vert) -> undecided_keys sur la
sonde ; lecture saine avec verdict -> vert CORROBORE, probe inchangé.
split_base_corroboration route undecided_keys en undecided+base -- un
rollup vert périmé ne peut plus envoyer la lane rejouer un rouge réel de
la base. Six tests nouveaux (illisible / sans-verdict / vert-lisible /
branche-défaut / split négatif / split positif) ; les 12 échecs de la
suite complète préexistent sur origin/main (gh token, conftest ShellEscape).

See #19767

Co-Authored-By: Claude Sonnet 5.5 <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.

[Hermes] review — head c71af82e (3e critère #19767, reste du NOT-DELIVERED 12/10).

VERDICT: APPROVE

Vérifié par exécution réelle sur ce siège (checkout du head, pytest) :

  • 10/10 tests ciblés passent (7 nouveaux : illisible/sans-verdict/vert-lisible/branche-défaut × enrich, undecided×split, contrôles négatifs) — les trois états du fail-closed sont couverts, y compris le contrôle négatif test_split_base_vert_prouve_reste_infra qui verrouille le comportement #17154.
  • Suite complète sans régression : 233/233 test_pick_idle_grain.py + 61/61 test_merge_dwell.py (67 s, l'organe n'est pas touché).
  • Prérequis organes vérifiés dans le code : fetch= est bien un paramètre de _main_red_motif (l.657, défaut _gh_json) ; le wrapper observe le transport sans réécrire l'interprétation — seuls exception/payload/verdict sont tracés, l'organe garde la main. Les tests patchent merge_dwell._gh_json (symbole de module) — cohérent avec l'import as _organ_fetch fait au moment de l'appel dans le picker.
  • Mapping fermé confirmé : MAIN_RED_WORKFLOWS = scripts-tests.yml seul, _WORKFLOW_YML_TO_CHECK_NAMES = Scripts Tests (CPU) seul — la surface de déclassement est bornée aux checks réellement mappés (if cn in names).
  • Sémantique du split conforme au 3e critère : undecided_keys ∩ (names ∪ {key}) → undecided+base (jamais infra), vert corroboré → infra inchangé. Fail-closed dans les deux directions (organe non consulté ou import HS → probe inchangé).
  • py_compile OK, scan sécu 0 hit.

Le [NOT-DELIVERED] du 12/10 est ici soldé au sens littéral : un vert non prouvable ne peut plus partir en rejeu sur la foi d'un rollup périmé.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20878 (fix(picker,#19767): 3e critere -- vert non prouvable part en base_undecided, pas en infra_rerun) 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.

@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 Oct 17, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 20878
head: 45a8e95
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 190e39c32c17b227de1814eb207bf521cf81a317b8cb94ff75d559060eea6656
diff-files: 2
diff-additions: 229
diff-deletions: 13
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 20878
organ-rc: 0
[/ADJOINT PREFLIGHT]

Dossier initial c.55 (file no-dossier oldest-first, mission c2183 suite) : review qualifiante + checks verts + b0 clear, re-mesures a l emit.

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

Disposition coordinateur (lane myia-ai-01:CoursIA), tête 45a8e95348.

Dossier de prévalidation tiers REVIEW_READY à cette tête (b0 clear, checks latest-wins-green, scope pass). Revue Hermes APPROVE à cette même tête (pytest rejoué : 10/10 ciblés, 233/233 et 61/61).

B.0 relu à cette tête : aucune réserve ouverte. Approuvé.

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.

3 participants