From 5f352092b2dae70a9045794b181ca0603bf0e0f5 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 10 Aug 2026 10:24:55 +0000 Subject: [PATCH] =?UTF-8?q?Faire=20gagner=20l'artefact=20le=20plus=20r?= =?UTF-8?q?=C3=A9cent,=20pas=20le=20plus=20ancien?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les exécutions sont parcourues de la plus récente à la plus ancienne, et `nouvelles.update(ajout)` écrase à chaque tour : la PLUS ANCIENNE avait donc le dernier mot. Le commentaire d'à côté annonçait pourtant l'inverse — « le premier référentiel rencontré est le bon » — et c'est bien ce que fait le référentiel, qui se garde par `not os.path.exists`. Les cours, eux, faisaient le contraire. Tant qu'un artefact apportait une séance qui lui était propre, cela ne se voyait pas. Cela se voit dès qu'on REPREND une séance : le rapatriement du 6 août a rendu une séance republiée, il faut le refaire, et le refaire aurait été vain — l'artefact fautif, plus ancien, aurait écrasé le corrigé, et la mauvaise donnée aurait gagné en silence. Trouvé en préparant la reprise, pas en production : c'est le seul défaut de cette série que la donnée n'a pas eu le temps de démontrer. CE QUE L'ARCHIVE DIT DU 6 AOÛT, et ça infirme l'hypothèse du férié. La BRVM a coté tous les 6 août hors week-end depuis 2015 — sept sur sept — et tous les 7 août — huit sur huit. Le 7 août est bien la fête nationale ivoirienne, mais la BRVM est régionale : elle ne ferme pas pour la fête d'un seul de ses huit États. Les vingt autres trous de l'archive suivent tous un motif de férié : 1er janvier, 1er mai, lundi de Pâques, Assomption, lundi de Pentecôte, Aïd. 2026-08-06 est le seul qui n'en suive aucun. La séance a existé, elle manque parce que l'ingestion de ce jour-là a été annulée à mi-course, et elle reste à reprendre. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Mu7CkW6727S9ZyRbiYyRk9 --- .github/workflows/versement.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/versement.yml b/.github/workflows/versement.yml index 59d3c92..b029f3f 100644 --- a/.github/workflows/versement.yml +++ b/.github/workflows/versement.yml @@ -229,7 +229,16 @@ jobs: f"ET sur des séances déjà présentes, donc " f"retirées à dessein — {anciennes[0]}…" f"{anciennes[-1]}") - nouvelles.update(ajout) + # LE PLUS RÉCENT GAGNE, ET `update` FAISAIT L'INVERSE. + # Les exécutions sont parcourues de la plus récente à la + # plus ancienne ; `update` écrase à chaque tour, si bien + # que la PLUS ANCIENNE avait le dernier mot. Tant qu'un + # artefact par séance suffisait, cela ne se voyait pas. + # Cela se voit dès qu'on reprend une séance : un + # rapatriement corrigé serait écrasé par celui qu'il + # corrige, et la mauvaise donnée gagnerait en silence. + for k, v in ajout.items(): + nouvelles.setdefault(k, v) if not nouvelles: print("\nRien à verser : l'archive contient déjà tout.")