Skip to content

enrich-quality-gate: git diff --name-only sans -M traite les renames comme nouveaux fichiers #15106

Closed

Description

@jsboige

Symptome

PR #15085 (chore zero-pad GenAI/Texte 1..9 -> 01..09) FAIL le gate No enrich-quality regression in changed notebooks sur Texte/09_Production_Patterns.ipynb avec :

REGRESSION in MyIA.AI.Notebooks/GenAI/Texte/09_Production_Patterns.ipynb:
1 new HIGH enrich-quality finding(s):
  [PHANTOM_IN_FENCE] entity "generate" is shown as code in 2 fenced block(s) but exists nowhere in the notebook"s code or outputs

Cause

Le finding existait DEJA sur main dans Texte/9_Production_Patterns.ipynb (verifie via scan_enrich_quality sur le fichier main) :

Texte/9_Production_Patterns.ipynb (sur main):
  [HIGH] cell#0  PHANTOM_IN_FENCE  entity "generate" is shown as code in 2 fenced block(s)

C"est un pseudo-code illustratif dans les cellules markdown 23 et 41 (pattern moderation production : response = generate(user_input)).

Le gate enrich-quality a une clause explicite (cf .github/workflows/enrich-quality-gate.yml commentaire) :

"Pre-existing findings (legacy leaks, earlier waves" mis-anchored notebooks) do NOT block unrelated PRs. A new notebook (no base) must be clean."

Le rename 9_ -> 09_ est un pur git mv (R099 = 99% similarite selon git diff --name-status). Mais le workflow utilise :

CHANGED=$(git diff --name-only "$BASE"...HEAD -- "MyIA.AI.Notebooks/**/*.ipynb" || true)

Sans -M, git ne detecte pas les renames -- 09_Production_Patterns.ipynb apparait comme un fichier nouveau alors qu"il existe (sous son ancien nom) sur la base. Le scanner applique donc la clause "new notebook must be clean" a tort.

Reproduction

# Sur le worktree de #15085 :
git diff --name-only origin/main...HEAD -- "MyIA.AI.Notebooks/**/*.ipynb" | grep Texte
# Affiche 01_, 02_, ..., 09_, 09b_ -- comme nouveaux fichiers.

git diff --name-status origin/main...HEAD -- "MyIA.AI.Notebooks/**/*.ipynb" | grep Texte
# Affiche R099 -- reconnait les renames.

Fix propose

Ajouter -M (ou --find-renames) au git diff du workflow :

CHANGED=$(git diff --name-only -M "$BASE"...HEAD -- "MyIA.AI.Notebooks/**/*.ipynb" || true)

Avec -M, les fichiers 100% renommes n"apparaissent plus comme "nouveaux", et le gate applique correctement la clause "pre-existing findings do NOT block".

Verification : sur PR #15085, ce fix rendrait la clause "new notebook" inactive pour les 10 notebooks renommes. Les pre-existing findings (PHANTOM_IN_FENCE sur Texte/9_...) ne bloqueraient plus la PR. La PR pourrait etre mergee.

Workaround en attendant

B.0 voie 3 appliquee sur PR #15085 : commentaire PR documentant le faux positif + cette issue de suivi. PR ne peut pas etre mergee tant que le fix workflow n"est pas livre (gate FAIL persiste).

Liens

Activity

  1. jsboige commented on Sep 8, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] PR #15143 (lane myia-po-2023:CoursIA) — résolution du nom BASE via git diff --name-status -M (parsing R/A/M + cat-file sous le nom base). Le -M seul proposé dans l'issue est un no-op (rename detection déjà active par défaut) : cause racine = cat-file -e BASE:<chemin HEAD> échoue pour un rename. Preuves d'exécution dans le body (script exact du step rejoué, 3 contrôles bidirectionnels : rename OK / nouveau sale FAIL / régression M FAIL). NB : PR #15110 (antérieure, même fichier) porte le fix -M seul — insuffisant, preuve postée en commentaire dessus ; arbitrage merge au coordinateur. Debloque #15085.

  2. added a commit that references this issue on Sep 8, 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