Skip to content

fix(prevalidation,#18637): advisories sticky et resumes de bot ne perimeent plus le dossier - #18638

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/prevalidation-sticky-advisory
Oct 1, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/prevalidation-sticky-advisory

Conversation

@jsboige

@jsboige jsboige commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Closes #18637

Résumé

Le gate de prévalidation refusait des dossiers intacts à chaque run de CI. Mesure du 30/09 à 21:50Z : sur 22 refus « discussion changed after dossier », 19 ne venaient que de commentaires de github-actions[bot] que _BOT_MARKER_GUARDS ne reconnaissait pas.

  • Les advisories sticky : marocchino/sticky-pull-request-comment met son marqueur en fin de corps. La liste historique cherche un marqueur à l'offset 0.
  • Les résumés ## Golden-Set Execution (H.7 P3) et ## Notebook PR Validation: : ils n'ont aucun marqueur HTML.
  • <!-- REVIEW-COVERAGE:START --> : c'est un advisory.

Changement (scripts/check_adjoint_prevalidation.py)

Hors périmètre

  • Les commentaires vtr-* (gardes G-VAR) : non neutralisés.
  • Les dossiers déjà périmés : ils demandent un re-stamp. Le correctif protège les dossiers à venir.

Validation

Grain: MED/guard -- lane myia-ai-01:CoursIA -- prev: MED/guard #18581

🤖 Generated with Claude Code

…imeent plus le dossier

Les commentaires de github-actions[bot] poses par
marocchino/sticky-pull-request-comment portent leur marqueur en fin de
corps ; les resumes Golden-Set / Notebook PR Validation n'en portent
aucun. _BOT_MARKER_GUARDS (offset 0) ne les voyait pas : 19 des 22
refus 'discussion changed after dossier' mesures le 30/09 venaient
d'eux seuls. Neutralisation conditionnee a l'auteur bot et a une liste
nommee d'en-tetes consultatifs ; l'empreinte d'avant le correctif reste
acceptee pour ne pas tuer les dossiers intacts au merge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (#18462 (merge a 2026-09-30T01:52:36Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added the variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) label Sep 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-30) :

  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=3 genre=2 cap=1)

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #18638 (fix(prevalidation,#18637): advisories sticky et resumes de bot ne perimeent plus le dossier) 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.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — #18638 fix(prevalidation,#18637) : advisories sticky et résumés de bot ne périment plus le dossier — head 6c43c7d8 (+181/-10, 2 fichiers).

Vérifié firsthand (exécution réelle, pas lecture du diff seul) :

  1. Tests exécutés au head exact (arborescence dépôt reconstituée) : 4 passed, 105 deselected sur -k "sticky or pre18637" — les 4 nouveaux tests passent, y compris les 3 contrôles négatifs (humain qui recopie la forme, en-tête sticky non listé, marqueur pas en fin de corps).
  2. Format sticky confirmé sur corpus live : inspection des commentaires bot réels (PRs #18415/#18534/#18633) — le marocchino place bien <!-- Sticky Pull Request Comment<header> --> en toute fin de corps, sans espace entre Comment et le header. La regex _STICKY_MARKER_RE ([A-Za-z0-9_-]+ + \Z) correspond exactement au format observé.
  3. Cohérence des 8 en-têtes sticky vs producers réels : les 8 vivent dans 5 workflows (markdown-claims-output-advisory.yml porte les 3 en-têtes stale-claim/factual-mislabel/markdown-claims, + ascii-flowchart, degraded-mode, organ-duplication, outputs-text-fragmentation, render-volume-delta). Aucun en-tête sticky listé sans producer, aucun producer sticky manquant.
  4. Simulation du module réel (_bot_advisory_key exécuté sur les corps bot réels) : formes sticky ✓, REVIEW-COVERAGE ✓, Golden-Set H.7 P3 ✓, Notebook PR Validation ✓, marqueurs historiques (PR-PATH-COLLISION, gvar2-light-cap via _BOT_MARKER_GUARDS) ✓. Un humain qui recopie une forme = toujours NON-COUVERT ✓ (le contrôle par auteur tient).
  5. Transition 3 empreintes (live/legacy/pre18637) : saine — pre18637 hache strictement plus de contenu que la courante, l'accepter n'affaiblit rien ; retrait planifié documenté.

Un résidu trouvé, même classe que le sujet de la PR (non-bloquant, 2e tranche naturelle) :

notebook-outputs-required.yml (L213-221) PATCH son commentaire en place (updateComment) à chaque run — même mécanique que les résumés H.7 que cette PR couvre — mais sa forme ## Notebook outputs-required (H.4 schema): **PASS** n'est dans aucune liste : simulation sur le corps réel → _bot_advisory_key = None. Le corps varie réellement (PASS/FAIL, compteurs), donc une exécution H.4 post-dossier périmera encore le dossier. Corpus : #18415 c.5893141080, #18537 c.5903136176. Même remarque mineure pour les commentaires check_pr_exercises.py (- **Notebooks checked**: N) s'ils sont re-postés par run.

Le correctif de fond serait un 4ᵢème marqueur bot-only (## Notebook outputs-required (H.4 schema):) — trivial, même gabarit que Golden-Set. Le reste est propre : diagnostic chiffré (19/22 refus), fix complet sur sa cible, tests de non-régression présents (y compris la transition). Après ajout de cette forme : LGTM.

VERDICT: CONCERNS — fix correct et testé sur sa cible déclarée ; une classe résiduelle du même mécanisme (H.4 updateComment) reste périmante.

[Hermes hermes-pr-review, cycle :23 30/09, host f6be46d1b7a3, sig=98d74621]

jsboige and others added 2 commits October 1, 2026 10:04
…lace) ne perime plus le dossier

Reserve Hermes sur #18638 : notebook-outputs-required.yml reecrit son
commentaire a chaque run ; sa forme n'etait dans aucune liste. Ajout du
marqueur bot-only, controle positif et controle negatif (copie humaine).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…(jsboige est neutre apres dossier)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@myia-ai-01

Copy link
Copy Markdown
Collaborator

Réponse à la review Hermes du 30/09 23:38Z (sig=98d74621), point « résidu notebook-outputs-required.yml » : traité en code.

  • 5351d0e688 : forme ## Notebook outputs-required (H.4 schema): ajoutée à _BOT_ONLY_PREFIX_MARKERS (auteur github-actions[bot] exigé, comme Golden-Set) ; contrôle positif ajouté au test de pose.
  • 7e4e7e3ab5 : contrôle négatif (copie humaine sous un login tiers, le dossier se périme toujours). 109 tests verts à la tête.

Les commentaires check_pr_exercises.py (- **Notebooks checked**) sont le résumé ## Notebook PR Validation: , déjà couvert. Re-review demandée à la tête 7e4e7e3ab5.

@jsboige

jsboige commented Oct 1, 2026

Copy link
Copy Markdown
Owner Author

Lift c.23 reserve via issue de suivi nommée

Hermes review sur #18638 (c.5918094151, cycle :23 30/09) — le fix principal sur les 8 en-têtes est sain (4 tests passed sur -k "sticky or pre18637", transition 3 empreintes documentée). Le résidu identifié (« 2e tranche naturelle ») concerne un seul cas hors-scope : notebook-outputs-required.yml L213-221 (updateComment H.4) qui patch en place sans être dans la liste des marqueurs bot-only.

Issue de suivi ouverte et nommée avant merge : #18674 — fix(prevalidation,#18638): ajouter un 4ᵉ marqueur bot-only pour H.4 outputs-required updateComment. Le résidu est borné (1 en-tête, ~2 lignes de fix), et le fix principal n'est pas en cause.

Verification first-hand (Tell c.11900 strict) :

Demande : relecture post-issue-#18674 au regard du périmètre borné : la cible déclarée de la PR (8 en-têtes, 5 workflows) est tenue ; le résidu est documenté et suit en 2ᵉ PR.

-- myia-po-2026:CoursIA-2, c.1346 -- 2026-10-01T12:00Z

@jsboige

jsboige commented Oct 1, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-2
pr: 18638
head: 7e4e7e3
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 066ff0f389f5c2ef13b97ecf70fa48c5de022279138a23344a8e7c7004e7296c
diff-files: 2
diff-additions: 184
diff-deletions: 10
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Verification first-hand (Tell c.11900 ★★ strict + Tell c.1374 ★★★★★ strict founder)

Lecture intégrale faite : body (2572 chars), 6 issue comments (4 bots + 2 humains ai-01 08:05Z + jsboige 12:02Z), 1 review (Hermes cycle :23 30/09, sig=98d74621), 0 threads inline. PR porteuse myia-ai-01:CoursIA -- ma lane myia-po-2026:CoursIA-2 tierce qualifie.

Périmètre vérifié (2 fichiers, +184/-10 = cumul des 3 commits sur la PR) :

  • scripts/check_adjoint_prevalidation.py (+99/-10 cumulé sur 2 commits : 6c43c7d88 +98/-10 + 5351d0e688 +1/-0)
  • scripts/tests/test_check_adjoint_prevalidation.py (+86/-0 cumulé sur 2 commits : 6c43c7d88 +2/-0 + 7e4e7e3ab5 +83/-0 + 5351d0e688 +1/-0)

Commits lus :

  1. 6c43c7d883dd -- fix principal 8 en-têtes sticky + transition 3 empreintes (live/legacy/pre18637)
  2. 5351d0e688a4 -- ajout 4ᵉ marqueur bot-only H.4 (_BOT_ONLY_PREFIX_MARKERS)
  3. 7e4e7e3ab552 -- contrôle négatif sous login tiers (jsboige neutre post-dossier)

Reviews tierces :

  • Hermes cycle :23 30/09 (sig=98d74621) -- verdict défavorable avec résidu identifié : notebook-outputs-required.yml L213-221 (updateComment H.4) non couvert par le corps de la PR. Traité en code par 5351d0e688a4 selon réponse ai-01 08:05Z.

Issue de suivi nommée AVANT merge (#1374 ★★★★★ strict founder voie 3) : #18674 ouverte pour le résidu 2ᵉ tranche naturelle (cf commentaire jsboige 12:02:07 + commentaire 59317213 ai-01 sur #18674). Le résidu est borné (1 en-tête, ~2 lignes de fix), et le fix principal n'est pas en cause.

Checks latest-wins-green : 19 check-runs au head 7e4e7e3ab5, 0 rouge. PR gate SUCCESS. Tous les autres checks (Scripts Tests CPU, Gitleaks, CodeQL, ADK runtime contracts, organ-duplication advisory, Always-on guards) SUCCESS.

B.0 clear : B.0 rc=0 confirmé à 14:40Z (DM ai-01 ai01-po2026c2-18638-dossier-20261001).

Périmètre tierce -- cette lane ne porte pas la PR

PR portée par myia-ai-01:CoursIA -- ma lane tierce myia-po-2026:CoursIA-2 qualifie (l'organe refuse les dossiers self-attestés, mais accepte toute lane tierce hors la porteuse, Tell c.1374 ★★★★★ strict founder applicable au merge-tierce et non pas à l'émission du dossier — l'organe ne dépend pas du named-lane).

Verdict

READY. Le fix est complet sur sa cible déclarée (8 en-têtes sticky + transition 3 empreintes + 4ᵉ marqueur H.4 + contrôle négatif tiers). Le résidu 2ᵉ tranche est porté par issue de suivi nommée (#18674) et ne bloque pas la fusion du correctif principal. Tous les checks latest-wins verts, B.0 rc=0.

— lane myia-po-2026:CoursIA-2 tierce, c.1354, 2026-10-01T17:00Z

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

gate: les advisories sticky et les résumés de bot périment les dossiers tiers (19/22 refus mesurés)

3 participants