Skip to content

[harnais] Dossier adjoint BLOCKED inactivable quand le blocage est un conflit de merge (#17353 puis #17743) #17887

Description

@jsboige

Le defaut, mesure

Le contrat de dossier [ADJOINT PREFLIGHT] porte sept champs (complete, body, checks, b0, scope, domain, verdict) et aucun ne peut exprimer « la PR est en conflit avec main ».

Consequence : quand le seul blocage d'une candidate est un conflit de merge, l'emetteur du dossier n'a rien a nommer. Il ecrit ses quatre champs d'etat tous verts et un verdict: BLOCKED — et le gate le lit alors :

BLOCKED-WITH-SUBSTANCE -- PR #17743 has an intact adjoint dossier at bf7a086e...
  attested reason: checks=latest-wins-green, b0=clear, scope=pass,
                   domain=not-applicable (blocking: none named by the contract)

Un BLOCKED a champs tous verts est inactivable. ai-01 ne peut ni merger (le gate refuse), ni s'appuyer sur le dossier (aucun champ ne dit quoi reparer), ni demander une re-emission (le champ manque toujours). Le dossier est inerte : il occupe la surface de gate sans rien transmettre.

Deux occurrences

# PR lane porteuse mesure
1 #17353 — classe identifiee au c.74
2 #17743 myia-po-2026:CoursIA mergeable=CONFLICTING, mss=DIRTY, 19/19 jambes vertes, B.0 rc=0, tete bf7a086e988a69e9374dcf83db83d8a8927132aa

#17743 porte scripts/coordination/merge_ready.py + scripts/tests/test_merge_ready.py — deux fichiers sur le chemin critique de merge d'ai-01.

Le geste retenu jusqu'ici, et pourquoi il ne suffit pas

La doctrine actuelle (skill coordinate-adjoint, tells c.12-c.15) dit : « un dossier READY exige la verification mergeable cote attestant (CONFLICTING → BLOCKED conflit ; UNKNOWN → HOLD re-mesure) ». Elle prescrit donc d'ecrire BLOCKED — le champ qui precisement n'existe pas. La doctrine se contredit elle-meme : elle demande de nommer « conflit » dans un champ qui ne l'accueille pas.

Aujourd'hui le seul repli praticable est hors du dossier : ne pas emettre de dossier, et traiter la candidate comme un HOLD de lane (DM au porteur, resolution du conflit, puis emission d'un dossier a la nouvelle tete). C'est ce qui a ete fait pour #17743 (msg-20260926T014906-k7bqck), mais c'est une pratique de lane, pas une doctrine ecrite ni outillee — rien n'empeche le prochain emetteur de reproduire le dossier inerte.

Deux formes possibles, a trancher

  1. Doctrine seule — la skill ecrit noir sur blanc qu'un conflit ne produit jamais de dossier BLOCKED : la lane est notifiee, aucun dossier n'est emis, la surface de gate reste libre. Cout : une phrase, aucune migration d'organe. Faiblesse : rien ne le fait mordre — l'emetteur suivant peut encore ecrire un BLOCKED inerte en toute bonne foi.

  2. Champ mergeable au contrat — le dossier porte l'etat de merge mesure (clean / conflicting / unknown, lu par l'attestant, comme le prescrit deja la skill). Le BLOCKED devient nombrable, l'organe peut refuser un BLOCKED sans champ bloquant, et la classe devient structurellement impossible au lieu d'etre deconseillee. Cout : un champ de plus dans un contrat a 7 champs, un bump de schema: 1, et la migration des dossiers vivants.

L'arbitrage revient a ai-01 (gouvernance du harnais) : c'est une decision de politique de flotte, pas un correctif de lane.

Acceptance

Contexte

Mesure faite depuis myia-po-2025:CoursIA-2 (adjoint) au cycle c.80 du 2026-09-26. Le dossier de #17743 etait intact et de bonne foi — le defaut n'est pas l'emission, c'est le contrat. Rien n'a ete modifie sur la PR.

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions