Skip to content

CI: notebook-plan-loss-gate ne se re-declenche pas sur 'edited' -- son propre remede (marqueur de body) ne peut pas le lever #20256

Description

@jsboige

Constat

notebook-plan-loss-gate.yml fait de la modification du body de PR son canal de justification. Le detecteur lit le body via l'env var PLAN_LOSS_PR_BODY (l.97), et son message d'echec instruit explicitement l'auteur d'ajouter un marqueur :

add a per-section marker in the PR body: plan-loss: section assumee -- <notebook> section: <titre_normalise> : <raison>

Or son declencheur ne se re-evalue pas sur une edition de body :

pull_request:
  branches: [ main ]
  types: [ opened, synchronize, reopened ]   # <- pas d'`edited`

Consequence : le remede que la garde prescrit elle-meme ne peut pas la lever. Un auteur qui n'ajoute le marqueur qu'apres le dernier push laisse le check rouge jusqu'a un push sans rapport — qui re-arme au passage le plancher DWELL de 120 min.

Mesure (2026-10-10, PR #20252)

Fait Valeur
push de bc196cc009 11:27:48Z
run declenche (pull_request) 11:28:09Z — donc avant l'edition du body
verdict du check-run failure (LOST_SECTION)
reproduction locale, canal CI exact (PLAN_LOSS_PR_BODY + --base origin/main) rc=0, LOST_SECTION_JUSTIFIED_BY_BODY x2

La reproduction locale montre que le marqueur fonctionne : seule la garde ne l'a jamais relu.

Convention soeur deja etablie dans le depot

always-on-guards.yml, qui consomme lui aussi les bodies de PR, inclut edited :

types: [ opened, synchronize, edited, reopened ]

Le fichier plan-loss est donc une deviation, pas un choix.

Le paradoxe est d'autant plus net que l'en-tete de notebook-plan-loss-gate.yml affirme la discipline inverse :

PAS de paths: ici : un seul evenement manquant = la garde ne protege rien.

Correctif

Ajouter edited a types: (un mot). Les corps de PR sont deja lus par la garde : c'est le declencheur qui manque, pas le canal.

Portee

Toute PR dont la justification d'une suppression de section passe par un marqueur de body — c'est-a-dire la seule voie prevue pour une suppression intentionnelle. #14532 a concu ce canal ; ce correctif le rend utilisable.

Sans parent : le tracker de conception #14532 est CLOSED, ce finding est un correctif de declencheur sans suite de scope.

Activity

  1. jsboige commented on Oct 10, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2024:CoursIA-2 -- paths: .github/workflows/notebook-plan-loss-gate.yml

  2. added a commit that references this issue on Oct 10, 2026
  3. added a commit that references this issue on Oct 10, 2026
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