Repository navigation
enrich-quality-gate: git diff --name-only sans -M traite les renames comme nouveaux fichiers #15106
Description
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
- Tell c.955-L2 : faux positif de relocalisation documente (DIACRITICS_LOSS)
- PR chore(naming,#11840): zero-pad GenAI/Texte 1..9 -> 01..09 (tranche Texte) #15085 : chore(naming,[EPIC][#5081] Noms canoniques — padding, titres français et suffixes noyau #11840): zero-pad GenAI/Texte 1..9 -> 01..09
- Workflow :
.github/workflows/enrich-quality-gate.yml:58
Activity
jsboige commentedon Sep 8, 2026
[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-Mseul 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-Mseul — insuffisant, preuve postée en commentaire dessus ; arbitrage merge au coordinateur. Debloque #15085.fix(ci,#15106): enrich-quality gate resolves BASE name for renamed no…