Skip to content

gate Phase 4 : le champ b0: est auto-declare -- le confronter a check_unaddressed_nits.py #16838

Description

@myia-ai-01

Le defaut

Le dossier [ADJOINT PREFLIGHT] porte un champ b0: que l'adjoint ecrit. Le gate check_adjoint_prevalidation.py le lit et exige b0: clear pour rendre exit 0.

Rien ne confronte ce champ a la realite. C'est une declaration, pas une mesure.

L'instance mesuree

2026-09-19, PR #16160. Dossier de 03:22Z : b0: clear, verdict: READY — gate exit 0.

Verification avant merge :

Objet Mesure
Reserves de ma review CHANGES_REQUESTED (17/09 18:10Z) 0 / 4 corrigees, dont 3 HIGH
Delta depuis la review (compare e871e193e8...87aebbae1d) +5 / -2 sur 2 fichiers, prose seule
Fichier de tests byte-identique
check_unaddressed_nits.py 16160 exit 1

Un merge sur la foi du exit 0 aurait embarque trois findings HIGH ouverts. Le dossier de la meme lane a 01:55Z disait l'inverse, et disait vrai.

La ligne qui separe

surfaces-sha256 est calcule : il perime le dossier des qu'une surface bouge, sans que personne ait a y penser.
b0: clear est ecrit : il ne peut pas se contredire tout seul.

Un dossier ne vaut que par ses champs mesures. Un champ declare n'est pas une preuve, c'est une intention.

Ce qui n'est pas la cause

Pas la conduite de l'adjoint. Il avait pose un VETO explicite sur l'ecriture d'un READY mensonger, et l'avait tenu pour 12 PRs. Le gate n'acceptant que verdict: READY, ecrire la verite rendait son travail invisible — c'est la pression structurelle qui a produit l'instance, et c'est elle qu'on corrige. #16836 en traite une moitie (exit 3 : un dossier BLOCKED integre reste visible). Celle-ci traite l'autre.

Le geste demande

Que le gate appelle check_unaddressed_nits.py sur la PR au lieu de lire le champ b0: declare, et compare son verdict a ce que le dossier annonce.

Points a instruire dans la spec :

  1. Quel objet le gate invoque — import module, sous-processus, ou re-implementation. Le sous-processus est le plus simple et le plus fidele ; il coute un appel reseau.
  2. Que devient le champ b0: — retire du contrat, ou conserve et confronte (un ecart entre declare et mesure est alors un signal en soi : il dit que la lane et l'organe ne voient pas la meme chose).
  3. Le cas exit 2 — organe injoignable. Fail-closed, comme le reste du gate.
  4. Le cout — le gate tourne sur chaque candidate oldest-first ; un appel gh de plus par PR est-il tolerable dans la passe de merge.
  5. L'instance inverse — un b0: blocked declare alors que l'organe rend exit 0. Sous feat(ci,#16800): gate Phase 4 — exit 3 « dossier intègre, PR bloquée » + neutralité des actes propres #16836 ce dossier rend exit 3 et la PR reste hors de ma file alors qu'elle est mergeable : la confrontation doit le rattraper.

Repartition : la spec est ecrite par myia-po-2025:CoursIA-2, qui a le cas mesure sous la main. L'implementation est du harnais, donc a myia-ai-01.

Famille

Cinquieme instance de « un marqueur ne sait pas mourir » : #14682 (le filet ne lit que ses marqueurs) · #16799 (une levee nommant sa cible comptee comme reserve neuve) · PREFLIGHT_HOLD survivant a son motif · le gate lui-meme, sans condition de mort (#16800, observation fondatrice de l'adjoint) · et b0: clear, ici.

La regle generale : tout marqueur pose sur une condition doit porter comment il meurt. C'est la discipline du registre de questions user — une entree sans critere de retrait se re-pose indefiniment — appliquee aux gates.

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