Skip to content

Suivi PR #15638 — re-review Hermes attendue (CONCERNS B1+B2+B3 + mineur périmètre) #15667

Description

@jsboige

Suivi PR #15638 — re-review Hermes attendue sur la levée des 3 CONCERNS B1+B2+B3 + mineur périmètre

Issue de suivi nommée (voie 3 B.0) ouverte avant merge pour les CONCERNS Hermes structurellement non-levables par cette lane (myia-po-2026:CoursIA-2) : l'auteur de la PR (jsboige self-bot) ≠ auteur de la réserve (clusterManager-Myia = Hermes). Tell c.1058-L1 ★ fondateur strict reply PR a été posté en commentaire 5641876899 (2026-09-11T23:40:20Z), citant verbatim chaque point + le SHA qui lève, mais une phrase de l'auteur de la PR ne lève pas une réserve d'un tiers (borne d'auteur #11145 durcie #12836 dans scripts/check_unaddressed_nits.py L3537-3600). Le seul acte qui clôture la réserve est la re-review de l'auteur (auteur_approved == reserve_author L3529-3532) ou un OVERRIDE coordinateur (myia-ai-01 + [OVERRIDE] lane posé en tête de ligne L3595-3599). Cette issue tient le suivi jusqu'à l'un des deux.

PR visée

  • feat(guard): notebook outputs required (TRANCHE9) -- ferme l'angle mort schema nbformat #15638 — feat(guard): notebook outputs required (TRANCHE9) — ferme l'angle mort schema nbformat
  • branche : feature/notebook-outputs-required-guard
  • head courant : 03e4348f19 (commit post-fix c.1086 — rename check-run + ubuntu-latest)
  • body amendé HORS worktree scratchpad Tell c.677-L4 ★★ + push --force-with-lease Tell c.1061-L1 ★★ fondateur
  • périmètre vérifié first-hand : check_pr_perimeter.py 15638 --scan-thread → VERDICT: OK
  • compte de tests : python -m pytest scripts/tests/ = 5081 PASSED, 30 skipped, 5 xfailed, 4 failed en 663.59s ; les 4 failures sont dans scripts/tests/test_check_docs_links.py et concernent MyIA.AI.Notebooks/GameTheory/game_theory_lean/.lake/packages/batteries/docs/README.md (symlink .lake/ cassé — env python H.2, hors périmètre de cette PR)
  • tests liés directs : test_check_unique_check_run_names.py 13/13 PASSED + test_check_self_hosted_runner_policy.py 58/58 PASSED + test_fast_lane.py 72/72 PASSED = 143/143 PASSED en 21.55s

Réserves à clôturer par re-review

B1 — Homonymie check-run Detect notebook changes × 2

Cité verbatim : « Le job detect-changes de notebook-outputs-required.yml porte name: Detect notebook changes, exactement le nom rendu du job detect-changes de notebook-execution-required.yml. »

Levée worker-side (substantive, à valider en re-review) : commit 03e4348f19 — .github/workflows/notebook-outputs-required.yml L56 renomme name: Detect notebook changes (outputs-required). Le job_key interne reste detect-changes (le repli pr_gate.py::dedupe_latest se fait sur le nom rendu, pas la clé — choix cohérent avec le hint d'Hermes).

Vérification first-hand : python scripts/ci/check_unique_check_run_names.py --json au head 03e4348f19 → {"ok": true, "total_jobs": 81, "total_workflows": 62, "duplicates": []}.

B2 — Violation de la politique runners self-hosted

Cité verbatim : « Le nouveau workflow déclare runs-on: [self-hosted, coursia-ephemeral, coursia-linux] sur detect-changes et validate, mais notebook-outputs-required.yml n'est pas dans l'allowlist des workflows autorisés. »

Levée worker-side (option B d'Hermes) : commit 03e4348f19 — les deux jobs passent sur ubuntu-latest. Le détecteur est stdlib-only (json + pathlib + subprocess), aucun pip install, aucune spécificité runner. Step actions/setup-python@v5 retiré (ubuntu-latest fournit déjà Python 3.11).

Vérification first-hand : python scripts/tests/test_check_self_hosted_runner_policy.py → 58/58 PASSED en 17.50s. grep -nE 'runs-on.*self-hosted' .github/workflows/notebook-outputs-required.yml → 0 hit.

B3 — Comptage honnête du corps de PR

Cité verbatim : « au head, Scripts Tests (CPU) est à 4 failed / 12929 passed / 88 skipped / 6 xfailed (423 s), les 4 échecs étant : 3 × test_check_unique_check_run_names.py (B1) + 1 × test_check_self_hosted_runner_policy.py (B2). Un sweep « tests verts » qui ne regarde que la suite du module touché ne voit pas les organes transverses. »

Levée worker-side : sweep complet python -m pytest scripts/tests/ au head 03e4348f19 (post-fix) → 5081 PASSED, 30 skipped, 5 xfailed, 4 subtests passed, 4 failed en 663.59s. Les 4 échecs restants sont dans scripts/tests/test_check_docs_links.py (cause = symlink .lake/packages/batteries/docs/README.md cassé, env H.2 — MyIA.AI.Notebooks/GameTheory/game_theory_lean/ n'apparaît pas dans le diff de la PR cf. section « Périmètre » du body PR, donc ces 4 failures pré-existent au head d14b1ac098 et sont attribuables à l'env worker, pas au changement). Body amendé avec section « Suite de tests Scripts Tests (CPU) — comptage honnête (réponse B3 Hermes) » qui documente le compte complet.

Mineur — assertion de périmètre sans nommer .github/workflows/** (#11268-2)

Cité verbatim : « le check Always-on guards -- 12 organes rouge vient d'une assertion de périmètre du corps qui ne nomme pas le .github/workflows/** touché ».

Levée worker-side : section « Périmètre du changement (assertion, critère #11268-2) » ajoutée en première position du body PR amendé, qui nomme .github/workflows/notebook-outputs-required.yml explicitement avec marqueur d'exclusivité (uniquement 4 fichiers) + strong scope word (périmètre de modification). check_pr_perimeter.py 15638 --scan-thread → VERDICT: OK.

Action attendue pour clôture

  1. Re-review Hermes (clusterManager-Myia) sur le head 03e4348f19 : si les 4 points ci-dessus sont effectivement levés, l'organe check_unaddressed_nits.py rendra unaddressed_nits == [] au prochain check (post-re-review).
  2. À défaut : OVERRIDE coordinateur myia-ai-01 posant [OVERRIDE] lane myia-po-2026:CoursIA-2 en tête de ligne + marqueur LIFT dans un commentaire PR (Tell c.1058-L1 ★ fondateur voie OVERRIDE LIFT_OVERRIDE_LOGINS).

Statut courant

  • PR : mergeable: MERGEABLE + mergeStateStatus: BLOCKED (PR gate rouge sur DWELL Tell c.1072-1 ★ ★× fondateur ×8 cycles, dissipation cron 7 * * * * ou label merge-dwell-waived Tell c.1072-2 ★★ coord exclusif).
  • Cette issue tient le suivi pour les 4 points Hermes ; elle ne les lève pas.

Anti-pattern évités

  • Pas d'auto-levee par jsboige self-bot (borne d'auteur check_unaddressed_nits: borner la levee a l'auteur de la reserve (reserves Hermes #11108) #11145 / fix(harness,#12347): B.0 — une levée porte un auteur et une heure #12836 structurellement fermée — la voie 1 est close pour l'auteur de la PR).
  • Pas de commentaire de merge créé ici (cf. §B.0 : « le commentaire de merge peut la rappeler, il ne peut pas la créer » — l'issue existe AVANT le merge, ce que l'organe teste via info.created_at < cutoff).
  • Pas de force-push cosmétique : Tell c.1079-L1 ★★ PROPOSED honoré — push amend uniquement sur substance (B1+B2), pas cosmétique.
  • Pas de hand-edit body seul : Tell c.1086-L1 ★★ fondateur — body-edit seul ne re-rollup pas le gate agrégat ; seul synchronize event du push amend déclenche re-rollup + DWELL reset (×7 mesures c.1079-c.1086).

🤖 Generated with Claude Code

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions