Le fait
Lance sur un index qui porte encore des entrees non fusionnees (c'est-a-dire pendant un merge non resolu), scripts/regen_quarto_render.py duplique chaque chemin conflite, puis --check auto-certifie le resultat en rendant rc=0.
La cause est dans l'enumeration : l'organe lit l'arbre par git ls-files (scripts/regen_quarto_render.py:281, :318, :338, :375). Or git ls-files emet un chemin non fusionne une fois par stage d'index (1 = base, 2 = ours, 3 = theirs).
Reproduction minimale (7 commandes, hors du depot)
git init -q -b main && cd "$(mktemp -d)" # dans un dossier jetable
git config user.email t@t; git config user.name t
printf 'A\n' > README.md; git add -A; git commit -qm base
git checkout -qb side; printf 'SIDE\n' > README.md; git add -A; git commit -qm side
git checkout -q main; printf 'MAIN\n' > README.md; git add -A; git commit -qm main
git merge side # -> CONFLICT (content): Merge conflict in README.md
git ls-files --unmerged # -> 3 lignes (stages 1, 2, 3) pour le meme chemin
git ls-files '*README.md' # -> README.md, README.md, README.md
Mesure du 2026-10-09, arbre de travail de la lane myia-po-2023:CoursIA-2 :
$ git ls-files --unmerged | head
100644 f70f10e4db... 1 docs/README.md
100644 e5cdc04390... 2 docs/README.md
100644 713f333fa6... 3 docs/README.md
$ git ls-files '*README.md' # motif exact de l'organe
docs/README.md
docs/README.md
docs/README.md
Le cout mesure
Sur la PR #19830 de la lane myia-po-2023:CoursIA, un commit de merge a laisse deux entrees en double, presentes trois fois chacune, dans project.render :
MyIA.AI.Notebooks/SymbolicAI/Lean/README.md et MyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-04-PFR-Primitives-Python.ipynb — 3 fois ;
- compteurs gonfles a 530 READMEs / 1504 carnets (au lieu de 528 / 1502).
Le fichier est passe la CI : regenere sur le meme index non resolu, il se reproduit a l'identique, donc --check rend rc=0. La duplication de l'organe est un point fixe de sa propre verification. Elle n'a ete vue qu'a la main, en comparant le nombre d'entrees dupliquees entre PRs de la lane (toutes a 1, #19830 a 3).
Ce que cette issue demande
- Refuser de tourner sur un index non resolu. Avant d'enumerer, interroger
git diff --name-only --diff-filter=U (ou git ls-files --unmerged) : si non vide, sortir en erreur avec la liste des chemins en conflit — un artefact genere sur un arbre en cours de fusion n'a pas de sens, et le produire en silence est pire que ne rien produire.
- Alternative moins bonne mais suffisante : dedupliquer l'enumeration (
sorted(set(...))). Elle rend un fichier correct mais masque l'etat ; preferer le refus explicite.
- Rendre
--check capable de voir la duplication : au minimum, refuser une liste qui porte la meme entree deux fois (« entree dupliquee : X »), au meme titre qu'une entree manquante. Un --check vert sur un fichier duplique est un faux vert.
- Ne pas confondre avec la duplication preexistante sur
main : docs/reference/branch-cleanup-manifest.README.md figure legitimement deux fois dans _quarto.yml de main (un nom X.README.md matche a la fois le glob *README.md des READMEs et celui des docs). La garde du point 2 doit donc distinguer « duplique dans la meme section » de « present dans deux sections differentes », ou n'agir que sur le premier cas.
Ce que cette issue n'est PAS
Ce n'est pas #19895 (la liste derive sur main sans garde), ni #11451 (exclusion des documents a separateur ---), ni #18911 / #18422 / #18423 (defauts de contenu du rendu). Ici, l'organe fait bien son travail sur un arbre propre : le defaut n'existe que pendant un merge non resolu, et c'est precisement l'instant ou chaque lane le lance.
Part of #19895.
Mesure princeps : PR #19830 (reparation du 2026-10-09, tete b0a24fde2f), lane myia-po-2023:CoursIA-2. Meme defaut observe et corrige sur #19493, #19504, #19537.
Le fait
Lance sur un index qui porte encore des entrees non fusionnees (c'est-a-dire pendant un merge non resolu),
scripts/regen_quarto_render.pyduplique chaque chemin conflite, puis--checkauto-certifie le resultat en rendantrc=0.La cause est dans l'enumeration : l'organe lit l'arbre par
git ls-files(scripts/regen_quarto_render.py:281,:318,:338,:375). Orgit ls-filesemet un chemin non fusionne une fois par stage d'index (1 = base, 2 = ours, 3 = theirs).Reproduction minimale (7 commandes, hors du depot)
Mesure du 2026-10-09, arbre de travail de la lane
myia-po-2023:CoursIA-2:Le cout mesure
Sur la PR #19830 de la lane
myia-po-2023:CoursIA, un commit de merge a laisse deux entrees en double, presentes trois fois chacune, dansproject.render:MyIA.AI.Notebooks/SymbolicAI/Lean/README.mdetMyIA.AI.Notebooks/SymbolicAI/Lean/ANALYSE/ANALYSE-04-PFR-Primitives-Python.ipynb— 3 fois ;Le fichier est passe la CI : regenere sur le meme index non resolu, il se reproduit a l'identique, donc
--checkrendrc=0. La duplication de l'organe est un point fixe de sa propre verification. Elle n'a ete vue qu'a la main, en comparant le nombre d'entrees dupliquees entre PRs de la lane (toutes a 1, #19830 a 3).Ce que cette issue demande
git diff --name-only --diff-filter=U(ougit ls-files --unmerged) : si non vide, sortir en erreur avec la liste des chemins en conflit — un artefact genere sur un arbre en cours de fusion n'a pas de sens, et le produire en silence est pire que ne rien produire.sorted(set(...))). Elle rend un fichier correct mais masque l'etat ; preferer le refus explicite.--checkcapable de voir la duplication : au minimum, refuser une liste qui porte la meme entree deux fois (« entree dupliquee : X »), au meme titre qu'une entree manquante. Un--checkvert sur un fichier duplique est un faux vert.main:docs/reference/branch-cleanup-manifest.README.mdfigure legitimement deux fois dans_quarto.ymldemain(un nomX.README.mdmatche a la fois le glob*README.mddes READMEs et celui des docs). La garde du point 2 doit donc distinguer « duplique dans la meme section » de « present dans deux sections differentes », ou n'agir que sur le premier cas.Ce que cette issue n'est PAS
Ce n'est pas #19895 (la liste derive sur
mainsans garde), ni #11451 (exclusion des documents a separateur---), ni #18911 / #18422 / #18423 (defauts de contenu du rendu). Ici, l'organe fait bien son travail sur un arbre propre : le defaut n'existe que pendant un merge non resolu, et c'est precisement l'instant ou chaque lane le lance.Part of #19895.
Mesure princeps : PR #19830 (reparation du 2026-10-09, tete
b0a24fde2f), lanemyia-po-2023:CoursIA-2. Meme defaut observe et corrige sur #19493, #19504, #19537.