Repository navigation
Organe: filet des Concerns user sans reponse sur les issues (angle mort B.0) #20183
Description
Probleme
Le depot a un filet pour les remarques du user sur les PRs (B.0, scripts/check_unaddressed_nits.py, exit 1 au merge). Il n'a rien pour les remarques du user sur les issues : un commentaire « Concern: ... » du mainteneur peut rester sans reponse indefiniment — le merge-gate ne la voit pas (pas une PR), le tapis sert l'issue selon ses criteres propres (le grain, pas le fil), et la condensation du dashboard emporte le signalement.
Mesure fondatrice (coordinateur, 08/10 — RAPPORTEE, l'organe devra la reproduire) : 17 Concerns poste par le user, dont, a la date de mesure, sans reponse sur : #16741, #18205, #18446, #18112, #19578, et les deux de #19898 (08/10 10:11Z et 21:00Z).
Le user arbitre par pull (registre des questions) — mais un Concern enterre dans un fil d'issue n'atteint meme pas le registre.
Spec du detecteur
Entree : les issues (pas les PRs — B.0 les couvre) mises a jour depuis une date de depart parametrable (proposition : 2026-09-25). Enumeration par GraphQL search (search(type: ISSUE, updated:>...), plus efficace que le REST pour cette fenetre.
- Detection du Concern : commentaire de l'auteur
jsboigedont le corps commence parConcern(pattern^Concern). C'est la forme mesuree du user (ex : [Epic Origami] openai/math — distillation par plis : replier 372 familles sur nos lacs, cluster par cluster #19898, « Concern: Il me semble qu'il y a des resultats... »). - FP classe 1 — l'ACK d'agent : un commentaire commençant par
Concern pris/Concern note/Concern traiteest un ACK de lane sous le compte partage, PAS un Concern user. Mesure : Auto-auditer notre flotte selon les 10 principes du Singapore Consensus #16757, Serre100 : remettre Whisper-WebUI en service et transcrire deux vidéos de J.-P. Serre (conférence du centenaire, correspondance Grothendieck) pour distillation #17889 — un matcheur naive^Concernles compte comme Concerns neufs. Le sous-pattern^Concern (pris|note|traite|acquitte)se classe ACK. - Recherche de la reponse : commentaire ULTERIEUR (n'importe quel auteur) qui traite le Concern. Deux formes mesurees :
- avec le mot — ex [Epic Origami] openai/math — distillation par plis : replier 372 familles sur nos lacs, cluster par cluster #19898 : « Reponse ai-01 a tes deux Concerns (08/10, 10:11Z et 21:00Z) », poste 2026-10-09T22:37Z ;
- sans le mot — [Epic] Geometry sous Lean : re-parenting de la serie, lake geometry_lean doublant les notebooks, notebook escalier d'entree #18601 : la reponse existe mais ne cite pas « Concern ».
Le detecteur ne peut donc PAS exiger le mot pour qualifier une reponse.
- Verdict par issue : liste des Concerns non traites, avec timestamp et extrait.
La tension a trancher (le coeur de la spec)
« Reponse ulterieure » ne peut pas vouloir dire « n'importe quel commentaire ulterieur » : un echange de lanes sans rapport apres le Concern marquerait a tort « traite ». Proposition a valider par la mesure, pas decretee :
- une reponse qui CITE le Concern (le mot, le timestamp du Concern, ou une citation de son texte) ; OU
- une PR/commit ulterieur citant l'issue dont le perimetre couvre le sujet du Concern ; OU
- au plancher : n'importe quel commentaire ulterieur d'une autre lane, avec flag
MANUAL_REVIEW.
Le plancher mecanisable rend la liste COMPLETE (aucun Concern oublie) quitte a sur-signaler ; l'arbitrage fin reste humain. Fail-closed : un Concern dont le traitement n'est pas prouve reste dans la liste.
Controles (passes a livrer, dates dans le rapport)
| Controle | Attendu |
|---|---|
| Positif, etat 08/10 : #19898, les deux Concerns du user (10:11Z, 21:00Z) | NON-REPONDUS a cet instant |
| Positif, etat courant : meme issue, reponse du 2026-10-09T22:37Z | REPONDUS |
| Negatif FP-ACK : #16757, #17889 | les « Concern pris... » ne comptent PAS comme Concerns user |
| Negatif FP-reponse : #18601 | la reponse sans le mot est reconnue (pas un faux « sans reponse ») |
Acceptance
- Organe
scripts/ci/check_issue_concerns.py: rend la liste des Concerns user sans reponse sur les issues ouvertes (JSON + texte), reproduit la mesure fondatrice et publie la sienne. - Les controles ci-dessus passes.
- Cablage : la sortie alimente la ligne
[DONE]du coordinateur (restitution cyclique) — pas de nouveau registre parallele.
Gouvernance
Sans parent : issue d'outillage nee d'un dispatch coordinateur (mission « filet Concerns », DM ai-01, cycle c.362).
Activity
myia-ai-01 commentedon Oct 9, 2026
[CLAIMED] lane myia-ai-01:CoursIA-2 -- organe de recensement des Concerns sur issues, puis extension aux classes de la campagne #20185 (claim pose par le coordinateur au dispatch)
Cet organe devient la phase 0 de la campagne corrective #20185 : retrouver dans les fils d'issues les remarques restées sans réponse.
Ce que la campagne attend de lui, en plus de la spec ci-dessus :
user-remark,reviewer-reserve,external-unanswered,ask-unansweredetclosed-over-remark(définies dans Campagne fil-non-lu : retrouver les remarques restées sans réponse dans les fils d'issues (passes de 10 par les bots) #20185), ou refuser par écrit, classe par classe, celles qui ne sont pas mécanisables. La plus difficile estuser-remark: sous le login partagé, elle se repère à l'absence de signature de lane. Toute ambiguïté va enMANUAL_REVIEW.gesture-after: un claim, une vérification, une livraison ou un dossier de clôture posé après la remarque non traitée.La première livraison peut se limiter à la classe
user-concern, tant que les contrôles passent. Les autres classes viennent ensuite, chacune dans une PR séparée.jsboige commentedon Oct 9, 2026
[CLAIMED-AMEND] lane myia-ai-01:CoursIA-2 -- paths: scripts/ci/check_issue_concerns.py, scripts/tests/test_check_issue_concerns.py
Scoping du claim epic-wide pose au dispatch, sur la seule tranche livree.
PR #20186 — classe
user-concern(phase 0 de #20185).Mesure fondatrice reproduite (figee au 2026-10-09T00:00:00Z) : 7 Concerns non
resolus dans exactement les six issues nommees par cette issue — #19898 (x2),
#16741, #18205, #18446, #18112, #19578. Mesure propre publiee : 580 issues
ouvertes lues, 20 Concerns recenses, 5 non resolus (#3973, #5105, #13410,
#13483, #14366). Les quatre controles passent, 25 tests unitaires verts.
Les cinq autres classes de #20185 (
user-remark,reviewer-reserve,external-unanswered,ask-unanswered,closed-over-remark) restent alivrer, chacune par sa PR : ce claim ne couvre que la tranche ci-dessus.
Fix(ci,#20186): forme non interpolante dans le test des Concerns
Fix(ci,#20186): le filet des Concerns couvre tous les logins de lane
Feat(ci,#20183): filet des Concerns user sans reponse sur les issues (#…