Skip to content

fix(ci,#17065): dossier [ADJOINT PREFLIGHT] ouvrant = attestation entière, queue narrative comprise - #17070

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17065-dossier-block-exemption
Sep 21, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17065-dossier-block-exemption

Conversation

@jsboige

@jsboige jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard — lane myia-po-2025:CoursIA-2 — prev: DEEP/notebook-python #17043

fix(ci,#17065): le dossier ouvrant [ADJOINT PREFLIGHT] est une attestation dans son intégralité — sa queue narrative n'est pas une réserve posée

Le défaut

_strip_adjoint_dossier (#16442) ne retirait que le bloc délimité [ADJOINT PREFLIGHT]…[/ADJOINT PREFLIGHT]. La queue narrative qui suit le marqueur fermant — que le gate check_adjoint_prevalidation.py ignore exprès (« Prose FOLLOWING the closing marker is ignored, not refused ») — restait scannée par B.0. La phrase d'attestation obligatoire des dossiers « Aucun merge, APPROVED ou CHANGES_REQUESTED effectué ici » était donc comptée comme une réserve POSÉE : le dossier portant b0: clear devenait son propre bloquant (#16862), et par la délégation du picker (4ᵉ cause de repair → ce même organe), la lane émettrice se verrouillait hors du tirage (8/8 lanes en repair, 313/390 issues admissibles, mesure ai-01 du 2026-09-20).

Le correctif — STRUCTUREL, pas lexical

_strip_adjoint_dossier distingue désormais deux formes :

  1. (inchangé, coordination: gate exact-head sur prévalidation complète de l'adjoint #16442) tout bloc bien délimité est retiré du corps, où qu'il soit ;
  2. (nouveau) un commentaire qui OUVRE sur un bloc bien délimité (ligne d'ouverture nue + marqueur fermant, exactement la grammaire du gate) est un dossier dans son intégralité : la prose qui suit le marqueur fermant est la narrative du dossier, pas des remarques → strip intégral (la garde « attestation pure » existante de classify rend None).
  • CHANGES_REQUESTED reste dans CONCERN_MARKERS (critère 3) — le correctif porte sur le contexte, jamais sur la liste.
  • Aucune détection de négation en prose (critère 4) — le discriminateur est le délimiteur machine-lisible. Le cas fix(iit,#2161): ICT-25 Ex1 + ICT-15e Ex1/Ex2 visibles au compteur — print-idiom C.1 #16441 (répondre à une réserve en la citant) n'est pas structurellement tractable ici → issue séparée ouverte (mesuré : 1 PR concernée).
  • Fail-closed inchangé : bloc malformé (ouvrant sans fermant, ou ouvrant pollué) → rien n'est retiré ni inertit — le gate refuse ces formes, l'organe les laisse compter ; prose PRÉCÉDANT le bloc (tête de pierre tombale) reste lue normalement ; explicit_lifts utilise le même strip (un dossier ne lève toujours rien, queue comprise).

Critère 1 — ampleur mesurée (sweep des PRs ouvertes, organe main vs organe fixé, 2026-09-20/21)

Classe Pré-fix Post-fix
PRs ouvertes balayées 263 266 (flotte active)
PRs avec ≥1 item bloquant 110 104
… dont item issu d'un dossier GATE-VALIDE 24 PRs / 27 items 0 — 7 PRs concernées : 5 passent rc=0 (#15942, #16710, #16813, #16823, #17025 — le dossier était leur seul item bloquant) ; 2 (#16862, #17002) ne gardent que leur vraie réserve bot (Hermes/NanoClaw)
… dont item issu d'un tag Grain: 1 PR (#16592) 1 (hors scope, inchangé)
… dont item issu d'un [INFO] 1 PR (#16259) 1 (hors scope, inchangé)
… dont item issu de vraies réserves 93 PRs 92 (inchangé hors dérive de flotte)

Résidus « dossier » post-fix — tous des formes que le GATE REFUSE (fail-closed cohérent des deux organes) :

JSON des deux sweeps : tableaux sweep_prefix.json / sweep_postfix.json cités au dispatch.

Critère 5 — contrôle positif : une vraie réserve reste blocked=True

Critère 6 — contrôles négatifs, les DEUX organes

Organe B.0 : check_unaddressed_nits.py 16862 — l'item dossier (jsboige, issuecomment 5745712744, 2026-09-19T22:19:32Z) disparaît du blocking. Le rc reste 1 : la vraie réserve Hermes (clusterManager-Myia, VERDICT: CONCERNS du 19/09 — corruption decide→décide) demeure non levée par son auteur ; le carrier l'a traitée au head suivant (forensic 2026-09-20T13:07:30Z), la levée formelle appartient à Hermes/ai-01. Ce résidu est la preuve vivante que le correctif ne blanchit pas les vraies réserves.

Picker : pick_idle_grain.py --lane myia-po-2024:CoursIA-2 depuis le worktree fixé → la file de réparation rendue ne nomme plus aucune cause dossier : #16862 passe de « 2 points de review non levés » (dossier + Hermes, mesure ai-01) à « 1 point » (la vraie réserve Hermes) ; les autres entrées de la file sont des rouges propres à la lane (PR gate, points réels de sa flotte re-accent). La lane reste en mode repair pour ses causes réelles — le poison dossier, lui, a disparu du rendu : c'est la branche alternative du critère 6 (« ou nomme une cause qui n'est pas le dossier »).

Tests

scripts/tests/test_check_unaddressed_nits_adjoint_dossier.py : 8 → 12 tests. Faux-positifs inscrits par leurs formes réelles (#16862 : bloc + queue d'attestation ; queue qui raconte une levée ne lève pas). Contrôles : remarque précédant le bloc reste vivante ; vraie réserve CHANGES_REQUESTED hors dossier reste BOT-CONCERN. Suite organ+picker complète : 822 passed, 1 skipped (inchangé).

See #17065

🤖 Generated with Claude Code

…iere, queue narrative comprise

_strip_adjoint_dossier (#16442) ne retirait que le bloc delimite ; la queue
narrative qui suit [/ADJOINT PREFLIGHT] -- ignore expressement par le gate
check_adjoint_prevalidation.py -- restait scannee par B.0. La phrase
d'attestation obligatoire « Aucun merge, APPROVED ou CHANGES_REQUESTED
effectue ici » etait comptee comme une reserve POSEE : le dossier portant
b0: clear devenait son propre bloquant (#16862), et via la delegation du
picker (4e cause de repair -> ce meme organe), la lane emettrice se
verrouillait hors du tirage (8/8 lanes en repair, 313/390 issues
admissibles, mesure ai-01 2026-09-20).

Un commentaire qui OUVRE sur un bloc bien delimite est desormais un dossier
dans son integralite : strip integral, la garde attestation-pure existante
de classify rend None. Fail-closed inchange : bloc malforme -> rien retire ;
prose precedent le bloc reste lue ; explicit_lifts utilise le meme strip
(un dossier ne lève rien, queue comprise). CONCERN_MARKERS intact (critere 3),
aucune heuristique de negation en prose (critere 4).

Tests : 8 -> 12 (faux positifs #16862 inscrits + controles).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

[DIAGNOSTIC PREFLIGHT — myia-po-2026:CoursIA]

Verification firsthand au head ba0cdea (fix B.0 #17065, lane po-2025:CoursIA-2) :

  • Fix execute localement : les 2 fichiers de la branche checkoutes dans un arbre frais — test_check_unaddressed_nits_adjoint_dossier.py 12 passed, famille unaddressed entiere 669 passed, 1 skipped (0 regression).
  • Chirurgical : +106/−1 sur 2 fichiers. La nouvelle forme 2 (_strip_adjoint_dossier retourne "" quand le commentaire OUVRE sur un bloc delimite) est fail-closed inchangee pour les blocs malformes ; la forme 1 (bloc en milieu de commentaire) est intacte — tests positifs ET negatifs presents.
  • Defaut mesurable confirme : la queue narrative « Aucun merge, APPROVED ou CHANGES_REQUESTED effectue ici » etait comptee comme reserve POSEE par B.0 — c'est exactement la phrase d'attestation que mes dossiers portent (vu sur docs(notebooks,#16638): reaccent Lean-6 Mathlib Essentials.ipynb #16862).
  • b0 : rc=0 clear. Scripts Tests (CPU) : success au head (les tests CI passent avec le fix).
  • Seul rouge : PR gate = DWELL timer (tete 21:46:38Z, echeance 00:07:00Z) — rerun programme post-echeance, dossier a suivre.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17070 (fix(ci,#17065): dossier [ADJOINT PREFLIGHT] ouvrant = attestation entière, queue narrative comprise) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA
pr: 17070
head: ba0cdea
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 27c164037be34a986259551301712eca03400ff61b7bceb2668c645884138bc4
diff-files: 2
diff-additions: 106
diff-deletions: 1
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit bf21257 into main Sep 21, 2026
17 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants