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
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).
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
CLEANportant unVERDICT: LGTMbot argumenté (cf. #16926), passées au gate, oldest-first.exit 0no [ADJOINT PREFLIGHT] dossier comment founddiscussion surfaces changedcontent after closing markerlane must be 'myia-po-2025:CoursIA-2'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_dossierrefuse 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é :
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é :
check_unaddressed_nits.pyen fait[/ADJOINT PREFLIGHT]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 blocBLOCKEDne 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 changedne 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 comptecomments-revieweddé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 — nicomment_limit, nineutral_after, ni deux versions successives du gate :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 --jsonnomme déjàignored_overrides[].why.Acceptance
parse_dossierignore la prose après le marqueur au lieu de la refuser — les 4 PRs passentrc=1 → rc=0discussion surfaces changednomme la surface divergente, pas seulement deux hachages--fingerprintrendu à une lane documente qu'il doit être calculé en dernier, après toute édition de corpsPérimètre de la mesure
37 PRs
CLEANà verdict bot LGTM, passées au gate deorigin/mainle 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).