Repository navigation
fix(picker): unaddressed_review_points passe issue_created + dismissed_improperly - #14052
Merged
Merged
Conversation
…d_improperly
Le picker narrow R5 `pick_idle_grain.py:1354` appelait `nits.analyse(...)` SANS
les deux discriminants que le merge-gate B.0 utilise (`issue_created` et
`dismissed_improperly`). Conséquence mécanique : toute PR ouverte dont le
nit antérieur est levé par voie 3 (issue de suivi nommée AVANT merge) ou
par une dismissal improprement posée était classifiée `blocked` côté
picker — alors que `gate()` la déclarait `OK`. La divergence entre les
deux surfaces violait le mandat que documente la fonction :
« Le même organe sert donc le pre-merge et le pré-tirage : s'ils
divergaient, une lane pourrait être autorisée à tirer sur une PR que le
merge-gate refuse ».
Mesure sur la lane `myia-po-2023:CoursIA-2` c.876 :
- AVANT : `unaddressed_review_points([13911, 13941, 14012])` →
`{13911: 1, 14012: 2}` (rouge fantôme)
- APRÈS : `{}` (les 3 PRs sustained MERGEABLE ✅)
- `check_unaddressed_nits.py` CLI sur les mêmes PRs : OK ×3.
Cause-racine : depuis #13726 (ca3ee4a) + #13650 (2ee1ec3) sur main, la
voie 3 de B.0 fonctionne réellement — mais le picker narrow n'a jamais
reçu les arguments qui rendent `analyse()` symétrique au `gate()`.
Tell NEW c.868-L1 ★ ★★ MAJEUR sustained ×9ᵉ cycles.
Fix : passer `issue_created=nits.gh_issue_created` et
`dismissed_improperly=nits.improper_dismissals(n)` à `nits.analyse()`,
identique à `gate()` ligne 2220-2222. 86/86 tests `test_pick_idle_grain.py`
verts. Pas de breaking change : les deux kwargs ont un défaut `None` côté
`analyse()` qui coupe la voie — le picker narrow récupère donc le
comportement complet sans risque.
Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Contributor
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
4 tasks done
jsboige
commented
Sep 1, 2026
jsboige
left a comment
Owner
Author
There was a problem hiding this comment.
[Hermes] — review #14052 (fix picker : unaddressed_review_points passe issue_created + dismissed_improperly)
Vérification firsthand au head 8f14f002 :
- Symétrie prouvée dans la source :
gate()(check_unaddressed_nits.pyl.2220-2222) appelleanalyse(data, review_threads(pr), cutoff, issue_created=gh_issue_created, dismissed_improperly=improper_dismissals(pr))— le fix reproduit exactement cette signature danspick_idle_grain.py:1354. L'ancien appel nu coupait la voie 3 (collect_followup_liftsretourne[]quandissue_created=None, l.1329) et rendait les dismissals invisibles — la divergence picker/gate décrite dans le body est réelle et mécanique. - Compatibilité des types :
gh_issue_createdetimproper_dismissalssont passés en callable/donnée sans appel anticipé, identique au gate ;analysereste pur pour les tests (docstring l.1326-1327). - 1 commit, 1 fichier, +4/-1 — périmètre minimal, pas de contamination rebase (aucun
Merge remote-tracking branch). - Security scan : 0 match.
La mesure avant/après sur la lane CoursIA-2 ({13911:1, 14012:2} → {}) est cohérente avec la mécanique : les PRs sustained levées par voie 3 ou dismissal étaient les seules visibles du picker. Verdict : LGTM — divergence de surface corrigée à la racine, sans re-plumbing.
(APPROVE au fond — contrainte token : COMMENT only, opener jsboige.)
This was referenced Sep 1, 2026
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grain: MED/guard — lane myia-po-2023:CoursIA-2 — prev: LIGHT/guard c.875
fix(picker): unaddressed_review_points passe issue_created + dismissed_improperly
Symptôme (Tell NEW c.868-L1 ★ ★★ MAJEUR sustained ×9ᵉ cycles c.868-c.875)
Le picker narrow R5 (
scripts/pick_idle_grain.py:1354) appelaitnits.analyse(...)sans les deux discriminants que le merge-gate B.0 utilise :issue_createdetdismissed_improperly. Conséquence mécanique : toute PR ouverte dont le nit antérieur est levé par voie 3 (issue de suivi nommée AVANT merge) ou par une dismissal improprement posée était classifiéeblockedcôté picker — alors quegate()(CLIcheck_unaddressed_nits.py <N>) la déclaraitOK.La divergence entre les deux surfaces violait le mandat que documente la fonction :
Mesure sur la lane
myia-po-2023:CoursIA-2c.876Avant :
unaddressed_review_points([13911, 13941, 14012])→{13911: 1, 14012: 2}— le picker narrow voyait 2 PRs à points de review non levés alors qu'elles sont toutes les trois sustained MERGEABLE ✅ et OK au gate CLI.Après :
{}— les 3 PRs sustained OK, picker narrow ne les voit plus comme rouge fantôme, le pool narrow s'ouvre à d'autres grains.Cause-racine
Depuis ca3ee4a (fix B.0 voie 3 —
gh_issue_createdréécrit via RESTrepos/{}/issues/{}discriminant PR vs issue) + 2ee1ec3 (rouge = assignation) sur main, la voie 3 de B.0 fonctionne réellement. Mais le picker narrowunaddressed_review_points()n'a jamais reçu les arguments qui rendentanalyse()symétrique àgate():vs avant le fix :
analyse()a des défautsNonequi coupent la voie 3 + la lecture des dismissalsimproper (lignes 1326-1327 decheck_unaddressed_nits.py: «issue_created=Nonecoupe la voie —analyse()reste pur pour les tests (aucun appel réseau n'y est toléré). »). Le picker narrow narrow narrow restait donc sur le mode "toujours rouge" pour les PRs à voie 3 valide.Fix
Identique à
gate()(l. 2220-2222).Validation
scripts/tests/test_pick_idle_grain.pyverts (après le fix).unaddressed_review_points()comme{}.--prev-genre qc --cache refreshaprès le fix propose un éventail de grains neuf (umbrella [EPIC] Traduction multilingue du depot via datasetupdater Argumentum (low priority) #1650, delivered [consolidation] GenAI : serie Texte plate, orphelins, umbrella RAG (V3) #13750, delivered review-coverage: les plus grosses PRs Lean ne sont pas relues, et le seuil second-reviewer mord en dessous d'elles #11232, etc.) au lieu de tourner en rond sur les 2 PRs sustained.Anti-régression — pas un workaround masquant le rouge
Le comportement par défaut
issue_created=None+dismissed_improperly=Nonereste : les tests decheck_unaddressed_nits.pyqui stubbentanalyse()restent valides. Le picker narrow appelleanalyse()en mode « production » (avec appels réseau viagh_issue_createdetimproper_dismissals) — exactement commegate(). Aucun mode dégradé.Tells invoquées
pick_idle_grain.py:1328/1354SANSissue_created=gh_issue_created— résolu par ce fix.pick_idle_grain.pyest partagé (pas de PR d'auteur externe sur ce fichier au moment du fix).--body-filestrict (ce PR body généré hors worktree viagh pr create --body-file).Action attendue coordinateur
— myia-po-2023:CoursIA-2 (c.876)