Skip to content

harness(gate): la prevalidation Phase 4 accepte une lane TIERCE qualifiante, pas une lane unique #16906

Description

@myia-ai-01

Constat mesuré (cycle ai-01 du 2026-09-19)

Le gate d'entrée de la Phase 4 (scripts/check_adjoint_prevalidation.py) n'accepte un dossier
de prévalidation que d'une seule lane, codée en dur :

ADJOINT_LANE = "myia-po-2025:CoursIA-2"

Passe mesurée ce soir sur les 14 candidates annoncées READY par leur lane :

Verdict du gate Nombre
no [ADJOINT PREFLIGHT] dossier comment found 10
discussion surfaces changed (course au SHA) 2
exit 0 2

Les lanes postent [READY] et [DELIVERED] ; le gate ne lit que le bloc de l'adjoint. Le débit de
dossiers d'une lane unique EST le débit de merge du dépôt entier
, quel que soit le travail de
prévalidation réellement produit ailleurs dans la flotte. Le pool est repassé au-dessus de 200 PRs
ouvertes pendant que 6 lanes produisaient des vérifications que le gate ne sait pas lire.

Ce que le gate protège réellement

La valeur du gate n'est pas le nom d'une lane : c'est que la prévalidation soit tierce —
quelqu'un d'autre que le porteur a lu les trois surfaces B.0 à head exact et l'a attesté dans un
contrat machine-lisible. Un dossier de myia-po-2023:CoursIA sur une PR portée par
myia-po-2027:CoursIA satisfait exactement cette propriété.

Le lane du dossier reste une déclaration fail-closed, pas une preuve cryptographique : le login
GitHub jsboige est partagé par toutes les lanes. Élargir l'ensemble des lanes acceptées ne dégrade
donc pas une garantie d'identité qui n'a jamais existé — mais il faut fermer la porte que cet
élargissement ouvre : l'auto-attestation.

Changement proposé

  1. QUALIFYING_LANES — ensemble explicite des 10 lanes du cluster, en remplacement de
    ADJOINT_LANE dans la validation. Une lane hors de l'ensemble échoue toujours fermé.
  2. Refus de l'auto-prévalidation : le tag Grain: ... lane <machine:workspace> du body nomme la
    lane porteuse. Si elle est identique à la lane du dossier, le gate refuse. Une lane ne se
    contresigne pas elle-même.
  3. Un body sans tag Grain: lisible n'est pas une autorisation : le contrôle
    d'auto-attestation ne peut simplement pas s'y faire, et le contrôle de lane qualifiante
    s'applique quand même.

Tout le reste du contrat est inchangé : schema: 1, head exact, surfaces-sha256, trois surfaces
B.0, checks latest-wins, scope, domaine, verdict.

Gouvernance

Changement normatif substantiel du harnais (CLAUDE.md §A) — couvert par le mandat user direct du
2026-09-19 : « si les workers ne corrigent pas assez, il faut sans doute corriger le harnais ou le
picker en ce sens », dans le contexte du P0 débit de merges.

Acceptance

  • QUALIFYING_LANES remplace ADJOINT_LANE dans validate_dossier
  • Refus explicite de l'auto-prévalidation via le tag Grain:
  • Test : une lane inconnue (et une chaîne malformée) échoue fermé
  • Test : une lane tierce qualifiante passe
  • Test : la lane porteuse déclarée ne peut pas se prévalider elle-même
  • Test : un tag Grain: absent n'autorise pas
  • Suite complète verte, gate non régressé sur PRs live

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