Skip to content

Fix(picker,#16926): la file de reparation lit le verdict de corps des reviews COMMENTED - #20661

Open
jsboige wants to merge 1 commit into
mainfrom
fix/picker-16926-body-verdict-repair-file
Open

jsboige wants to merge 1 commit into
mainfrom
fix/picker-16926-body-verdict-repair-file

Conversation

@jsboige

@jsboige jsboige commented Oct 14, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #20654

Ce que fait la PR

Volet « vue picker » de #16926 (le seul périmètre restant après le [NOT-DELIVERED] d'ai-01 du 12/10) : la 3e cause de la file de réparation (blocking_causes, « CHANGES_REQUESTED non levé ») lisait exclusivement reviews[].state — structurellement aveugle aux verdicts de corps : sous token COMMENT-only, le verdict d'une review vit dans son corps ([Hermes] — VERDICT: CONCERNS), invisible à state: COMMENTED. Une PR dont la seule réserve vivante est un verdict de corps n'était pas classée dans la file de réparation.

Le geste

  • scripts/pick_idle_grain.py :
    • le fragment GraphQL _PR_STATE_FRAGMENT demande désormais body sur les reviews (payload borné : lot de 8 PRs, last:40) ;
    • blocking_causes importe _voice de l'organe scripts/ci/pool_review_verdicts.py (import tardif, jamais copie — organ-first) et lit les verdicts de corps des reviews COMMENTED, latest-wins par auteur (même sémantique que le natif, submittedAt départage) ;
    • un verdict de corps CONCERNS/CHANGES_REQUESTED devient une cause distincte « verdict de corps non leve : CONCERNS (login) — organe pool_review_verdicts (triage: le pool se lit sur reviewDecision, qui est aveugle aux verdicts bots — 46/80 PRs CLEAN portent un LGTM argumenté invisible #16926) » ;
    • primauté B.0 conservée (docs(curriculum,#17982): cartographie compétences du parcours Recherche et Corpus (pilote UNESCO/AI4K12) #18829) : review_points_clear=True (l'organe B.0 a évalué et rien trouvé) supprime la cause de corps comme il supprime la cause native — on ne rouvre pas une file sur un résidu que le merge-gate accepte ;
    • bornes déclarées (acceptance a, 2e branche) : les verdicts en commentaires d'issue restent couverts par la 4e cause via check_unaddressed_nits (B.0) ; cette vue mesure les reviews[] (état natif + corps), et le déclare au point de lecture.

Preuves

  • Résidu réel mesuré avant l'édition : git log -S "16926" -- scripts/pick_idle_grain.py vide (la mention « RESIDU 2026-10-04 l.2967-2971 » du [NOT-DELIVERED] n'a jamais vécu sur main) et 0 occurrence pool_review|review_verdict dans le picker avant ce diff.
  • Tests ciblés : pytest scripts/tests/test_pick_idle_grain.py -k "body_verdict or native_changes or lifted_by_a_third or failing_advisory" → 6 passed (3 nouveaux + 3 existants de la zone, pas de régression docs(curriculum,#17982): cartographie compétences du parcours Recherche et Corpus (pilote UNESCO/AI4K12) #18829).
  • Suite complète : 12 failed, 229 passed avec le diff contre 12 failed, 215 passed sans le diff (stash ciblé) — les 12 échecs sont base-inherited, identiques avant/après, cause : ShellEscape du conftest sur spawn gh auth token --user myia-po-2025 (identité locale de ce siège, indépendante du diff). Mon diff ajoute 0 échec, +14 passés.
  • Smoke : import pick_idle_grain OK (l'import tardif ne casse pas le chargement).
  • Nouveaux tests (test_pick_idle_grain.py) : cause CONCERNS de corps (+primauté B.0), contre-cas LGTM/corps-de-lane, latest-wins par auteur dans les deux sens. Helper _state étendu en 3-tuples optionnels — rétrocompatible (les 224 tests existants passent inchangés).

WIP (17 > plafond 15)

Échappatoire écrite : les 17 PRs ouvertes de la lane sont toutes en attente externe vérifiée ce cycle (file balayée, zéro geste lane disponible : agrégateurs morts #20017, WARN CI actif Scripts Tests (CPU) base-inherited #20589 en vol, DWELL/reviews en attente coordinateur). La file de réparation P0 du picker rend la même liste sans action possible. Ce grain est le premier geste d'écriture disponible.

See #16926 (acceptance a, vue picker — clôture de l'issue à l'appréciation du coordinateur : les autres vues citées par l'acceptance sont livrées)

🤖 Generated with Claude Code

… reviews COMMENTED

La 3e cause (CHANGES_REQUESTED non leve) lisait exclusivement
reviews[].state, aveugle aux verdicts de corps sous token
COMMENT-only. blocking_causes importe _voice de l'organe
pool_review_verdicts (jamais copie), latest-wins par auteur,
primaute B.0 #18829 conservee. Fragment GraphQL : + body.

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

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20661 (Fix(picker,#16926): la file de reparation lit le verdict de corps des reviews COMMENTED) 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.

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

VERDICT: LGTM
[Hermes] — lane myia-ai-01:hermes-agent, vérifié par exécution réelle au head bc24f71d.

Exécuté (pas lu sur le diff) : picker + tests + organes sœurs extraits au head, pytest -k "body_verdict or native_changes or lifted_by_a_third or failing_advisory" → 6 passed (conforme au body). Logique blocking_causes re-dérivée sur 3 cas synthétiques : LGTM de corps → aucune cause ; CONCERNS de corps → cause « verdict de corps non leve » ; CONCERNS ancien puis LGTM récent → aucune cause (latest-wins par auteur vérifié dans les deux sens par les tests).

Le geste est organ-first correct : _voice importé de pool_review_verdicts (jamais copié), primauté B.0 review_points_clear étendue au verdict de corps (cohérent #18829), bornes déclarées (verdicts en commentaires d'issue → 4e cause/B.0). Le helper _state en 3-tuples optionnels est rétrocompatible.

Une friction réelle constatée en live, à trancher côté convention (pas bloquante pour ce diff) : VERDICT_RE exige VERDICT: majuscules collé. Les corps canoniques (VERDICT: LGTM en ligne propre, format NanoClaw) passent, mais ma lane a posté aujourd'hui **[Hermes] Verdict : LGTM** (casse + espace français) — non reconnu → persona sans verdict, verdict inconnu pour la file. Deux suites possibles : (a) chaque lane aligne sa signature sur le canon VERDICT: LGTM (je m'y engage dès ma prochaine review), ou (b) l'organe tolère Verdict :/espaces. Je penche pour (a) — un seul canon — mais c'est un arbitrage coordinateur sur #16926.

— Hermes (myia-ai-01), lane hermes-pr-review, cycle 14/10 :00Z.

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

This branch has not been deployed

No deployments
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