Skip to content

gate: 21 % des dossiers de prevalidation sont refuses sur l'enveloppe, pas sur leur contenu #16928

Description

@myia-ai-01

Le constat

Le gate d'entrée de la Phase 4 (scripts/check_adjoint_prevalidation.py) refuse des dossiers de prévalidation complets et tiers pour des motifs qui ne portent sur aucune de leurs propriétés de fond. Mesuré sur un cycle entier.

Passe du 2026-09-19/20 : 37 PRs CLEAN portant un VERDICT: LGTM bot argumenté (cf. #16926), passées au gate, oldest-first.

Verdict du gate Nombre Nature du refus
exit 0 3 — (mergées)
no [ADJOINT PREFLIGHT] dossier comment found 21 fond : pas de dossier
discussion surfaces changed 6 fond : empreinte divergente
content after closing marker 4 enveloppe
lane must be 'myia-po-2025:CoursIA-2' 3 enveloppe

7 PRs sur 34 bloquées — 21 % — le sont sur l'enveloppe du dossier, pas sur son contenu.

Défaut 1 — la prose après le marqueur de fermeture

parse_dossier refuse tout commentaire dont le bloc délimité est suivi de texte. Son propre docstring annonce pourtant : « Parse one strictly delimited dossier comment without interpreting prose ». Le parser refuse de parser ce qu'il refuse aussi d'interpréter.

Ce que les quatre lanes avaient écrit sous le marqueur — c'est-à-dire ce qui est jeté :

### Verifications firsthand au head exact 6863c90613
- **B.0** : check_unaddressed_nits.py 16789 rc=0 ; 6 commentaires et 1 review Hermes (LGTM, COMMENTED) lus, 0 thread inline.

Le travail est fait, tracé, daté au head exact. Il est refusé sur la place de la phrase.

Rien n'est masqué par la tolérance, et c'est mesuré :

Cas Ce que check_unaddressed_nits.py en fait
réserve écrite après [/ADJOINT PREFLIGHT] survit au strip → atteint la classification B.0
réserve écrite dans le bloc absorbée — sémantique voulue de #16442/#16443

et côté gate, content = lines[1:closing] : un champ écrit après le marqueur n'est jamais lu. Un test de contrebande le prouve (verdict: READY écrit sous un bloc BLOCKED ne retourne pas le verdict).

Défaut 2 — la lane unique

Traité par #16906. Trois PRs portent un dossier tiers valide rejeté au seul motif que la lane émettrice n'est pas celle codée en dur.

Défaut 3 — le refus d'empreinte est indiagnosticable (ouvert)

Les 6 PRs discussion surfaces changed ne sont pas un défaut d'enveloppe : le blocage est légitime. Mais il est inexploitable, et c'est un problème distinct.

Mesure : pour 5 d'entre elles, le corps de PR n'a jamais été édité (lastEditedAt: null), le compte comments-reviewed déclaré est exact (il vaut l'index du dossier, comme le contrat l'exige), et l'empreinte déclarée n'est reproduite par aucune des configurations testées — ni comment_limit, ni neutral_after, ni deux versions successives du gate :

#16802  sha declare=2aee2d4382174eec  -> aucune configuration ne le reproduit
#16839  sha declare=fc93c93eb660d061  -> aucune configuration ne le reproduit
#16847  sha declare=abffb06f6923d056  -> aucune configuration ne le reproduit
#16893  sha declare=5b5d8af4e03ab722  -> aucune configuration ne le reproduit

Le gate rend deux hachages opaques et aucun moyen de savoir quelle surface a divergé. Une lane qui reçoit ce refus ne peut rien en faire d'autre que re-fabriquer le dossier en aveugle — c'est-à-dire refaire toute la lecture B.0.

Ce que ça demande : que le refus nomme la surface divergente (corps / titre / commentaire n° / review n°), comme check_unaddressed_nits.py --json nomme déjà ignored_overrides[].why.

Acceptance

  • parse_dossier ignore la prose après le marqueur au lieu de la refuser — les 4 PRs passent rc=1 → rc=0
  • Un test prouve qu'un champ écrit après le marqueur n'est pas lu (contrebande réfutée)
  • Les 6 PRs à empreinte réellement divergente restent refusées (fail-closed préservé)
  • Le refus discussion surfaces changed nomme la surface divergente, pas seulement deux hachages
  • Le --fingerprint rendu à une lane documente qu'il doit être calculé en dernier, après toute édition de corps

Périmètre de la mesure

37 PRs CLEAN à verdict bot LGTM, passées au gate de origin/main le 2026-09-19/20. Les comptes ne valent que pour ce sous-ensemble. Le défaut 3 est mesuré sur 5 des 6 PRs concernées.

Voir #16906 (lane tierce), #16926 (aveuglement du triage), #16800 (exit 3).

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

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions