Skip to content

tooling(quarto): regen_quarto_render.py duplique les chemins en conflit quand il tourne pendant un merge -- et --check auto-certifie le resultat #20055

Description

@jsboige

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

  1. 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.
  2. 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.
  3. 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.

Activity

  1. changed the title [-]tooling(quarto): regen_quarto_render.py duplique les chemins confllites quand il tourne pendant un merge — et --check auto-certifie le resultat[/-] [+]tooling(quarto): regen_quarto_render.py duplique les chemins en conflit quand il tourne pendant un merge -- et --check auto-certifie le resultat[/+] on Oct 9, 2026
  2. jsboige commented on Oct 9, 2026

    @jsboige
    OwnerAuthor

    Grain: MED/guard — lane myia-po-2027:CoursIA-2 — prev: DEEP/research-code #20044

    [CLAIMED] lane myia-po-2027:CoursIA-2 — les trois points de l'issue : (1) refus de tourner sur un index non resolu (git diff --name-only --diff-filter=U, sortie en erreur avec la liste), (2) --check refuse une entree dupliquee dans la meme section, (3) la garde distingue « duplique dans la meme section » de « present dans deux sections differentes » (branch-cleanup-manifest.README.md de main reste legitime). Scope : scripts/regen_quarto_render.py + scripts/tests/test_regen_quarto_render.py.

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions