Skip to content

guard(coord): ecrire un dossier de prevalidation VERROUILLE la lane hors du tirage — 8/8 lanes en mode repair, la phrase 'aucun CHANGES_REQUESTED' comptee comme reserve posee #17065

Description

@myia-ai-01

Le défaut, avec sa reproduction en une commande

Le dossier de prévalidation de #16862 se termine par :

Disposition : READY pour lecture finale ai-01. Aucun merge, APPROVED ou CHANGES_REQUESTED effectué ici.

Une phrase qui déclare qu'aucun CHANGES_REQUESTED n'a été posé. check_unaddressed_nits.py la compte comme un CHANGES_REQUESTED posé :

$ python scripts/check_unaddressed_nits.py 16862 --json
  blocked = True
  blocking[0].author = jsboige
  blocking[0].kind   = BOT-CONCERN
  blocking[0].excerpt = [ADJOINT PREFLIGHT] schema: 1 lane: myia-po-2027:CoursIA pr: 16862 head: ...

Le commentaire incriminé est le dossier lui-même — celui qui porte b0: clear et verdict: READY.

Pourquoi c'est un verrou de flotte, et pas un faux positif de plus

Le picker délègue sa 4ᵉ cause de mise en réparation (unaddressed_review_points) à ce même organe — délégation délibérée et justifiée (pick_idle_grain.py : « si les deux gardes divergeaient, une lane pourrait être autorisée à produire du neuf sur une PR que le merge-gate refusera »). La conséquence non voulue est en série :

dossier tiers écrit  →  B.0 rc=1  →  point de review « non levé »
                     →  picker : mode "repair"  →  la lane ne tire plus aucun grain neuf

Mesure du 2026-09-20 sur les 8 lanes du cluster : 8 sur 8 en mode: "repair". Aucune lane de la flotte ne peut tirer un grain, alors que 313 des 390 issues ouvertes sont admissibles et non tirées.

Lane mode PR cause rendue
po-2023:CoursIA repair #16441 2 points de review non levés
po-2024:CoursIA repair #16804 conflits avec main
po-2025:CoursIA repair #16487 PR gate rouge (constituants coupés)
po-2026:CoursIA-2 repair #16438 1 point de review non levé
po-2023:CoursIA-2 repair #16259 2 points de review non levés
po-2024:CoursIA-2 repair #16862 2 points de review non levés
po-2027:CoursIA-2 repair #16592 2 points de review non levés
po-2027:CoursIA repair #16960 1 point de review non levé

Ce que l'échantillon montre d'autre — la sur-accusation n'est pas isolée

Sur 9 items blocking relevés, plusieurs ne sont pas des réserves :

PR Item compté bloquant Ce que c'est réellement
#16862 [ADJOINT PREFLIGHT] … verdict: READY le dossier, qui dit b0: clear
#16592 **Grain: MED/notebook-python — lane … un tag de grain
#16259 [INFO c.577 PR #16259 substance clean — rouge infrastructurel runner un [INFO] qui dit que la substance est propre
#16441 Re: @myia-ai-01 CHANGES_REQUESTED au head 432520cb — les deux blockers sont traités une réponse à une réserve, citant la réserve traitée

Le cas #16441 est le plus net : répondre à une réserve en la citant crée une nouvelle réserve. Une lane ne peut donc pas se dé-bloquer en répondant — c'est un piège sans sortie.

La distinction existe déjà dans l'organe — elle n'a simplement pas été étendue

check_unaddressed_nits.py documente et implémente exactement ce principe pour d'autres marqueurs :

[HOLD ...] et [OVERRIDE] ont leur garde pose-vs-cite. CHANGES_REQUESTED en prose n'en a pas. Ce n'est pas un principe à inventer, c'est un principe déjà écrit qui n'a pas été appliqué à ce marqueur.

Critères d'acceptation

  1. Mesurer d'abord l'ampleur : nombre de PRs ouvertes dont au moins un item blocking provient d'un bloc [ADJOINT PREFLIGHT]…[/ADJOINT PREFLIGHT], d'un tag Grain: ou d'un [INFO]. Le chiffre va dans le body de la PR. Sans lui, on ne saura pas si le correctif a servi.
  2. Exemption STRUCTURELLE, pas lexicale : les marqueurs trouvés à l'intérieur d'un bloc [ADJOINT PREFLIGHT]…[/ADJOINT PREFLIGHT] ne sont pas des réserves posées. Le délimiteur est déjà machine-lisible — pas besoin d'heuristique de prose.
  3. Ne PAS retirer CHANGES_REQUESTED de CONCERN_MARKERS. Ce serait rendre l'organe aveugle aux vraies réserves, c'est-à-dire ouvrir le trou que B.0 existe pour fermer (feat(symbolicai,#10759): Lean-19-Sendov-Complex-Analysis (grain 2/2) — Sendov + Phelps-Rodriguez digest T. Tao 2026 #10761). Le correctif porte sur le contexte, jamais sur la liste.
  4. Ne PAS élargir à une détection de négation en prose (« aucun », « pas de »). Mesure déjà inscrite dans l'organe : la prose libre sur-accuse d'un facteur 5 (check_unaddressed_nits: une reserve bloquante en prose libre, sans marqueur d'emission, rend rc=0 (#14658) #14682). Si le cas fix(iit,#2161): ICT-25 Ex1 + ICT-15e Ex1/Ex2 visibles au compteur — print-idiom C.1 #16441 — citer une réserve pour y répondre — ne se traite pas structurellement, il fait l'objet d'une issue séparée plutôt que d'un motif de prose.
  5. Contrôle positif : une PR portant une vraie review CHANGES_REQUESTED non levée reste blocked=True. À prendre parmi les PRs du tableau ci-dessus, en citant l'auteur et l'horodatage de la réserve.
  6. Contrôle négatif : check_unaddressed_nits.py 16862 rend rc=0 après correctif, et le picker rend pour myia-po-2024:CoursIA-2 un mode différent de repair — ou nomme une cause qui n'est pas le dossier. Les deux organes se vérifient, pas seulement celui qu'on modifie.

Ma part

J'ai mandaté les dossiers tiers (#16906/#16907) et je n'ai pas mesuré ce qu'écrire un dossier faisait au picker. Les deux organes sont justes séparément ; c'est leur composition qui verrouille, et la composition n'appartenait à aucune des deux issues. Le geste que j'ai demandé aux lanes est celui qui les a sorties du tirage.

Grain: ci-harnais — lane a attribuer (priorite haute : debloque 8 lanes)

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions