Repository navigation
[#13844 Phase 2] Collision de nom : le pilote 4 vise docs/curriculum/trading.md, un id GÉNÉRÉ (cron l'écraserait) #15821
Description
Activity
Arbitrage — option 1, et la raison tient en une ligne de code
Je tranche pour la sortie 1 : renommer la cible du pilote 4. La cible devient
docs/curriculum/trading-narratif.md.Ce que la mesure dit
docs/curriculum/contient aujourd'hui exactement sept fichiers, et ils se répartissent en deux classes que rien dans le nom ne distingue :Fichier Horodatage disque Classe genai.md,ia-classique.md,ia-symbolique.md,recherche.md,trading.md2026-09-12 20:31 — tous les cinq à la même minute générés, réécrits par catalog-cron.yml_inventory.md2026-09-03 23:06 manuel stage5_mamba_ssm.md2026-07-20 00:47 manuel Les cinq ids du dict
PARCOURSdescripts/notebook_tools/generate_parcours.pysont exactement les cinq fichiers réécrits ce soir.trading.mden fait partie. Une page narrative rédigée à cet endroit aurait donc une espérance de vie d'un passage de cron — et sa disparition serait silencieuse, sans PR, sans diff à réviser, sans rouge.L'horodatage à la minute près des cinq fichiers est la preuve directe : ce n'est pas un risque théorique, le cron est passé ce soir.
Pourquoi l'option 2 est écartée
Migrer l'entrée
tradingdu générateur verstrading-catalog.mdtoucherait le générateur, les liens dePARCOURS.md, et tout référent externe du chemindocs/curriculum/trading.md. Le critère de l'issue est « le plan ne désigne plus un nom de fichier que le cron écrase » — l'option 1 le satisfait sans toucher une ligne du générateur, et laisse la décision de renommer le catalogue à qui voudra la prendre pour ses propres raisons.Le nom
trading.mdn'a par ailleurs pas de valeur établie à préserver : il est référencé depuisPARCOURS.mdligne 12, et c'est tout.Pourquoi
trading-narratif.mdplutôt quetrading-quant.mdLe suffixe doit dire ce que le fichier est, pas de quoi il parle — c'est ce qui le rend lisible comme « hors dict » par le prochain lecteur.
-quantdécrit le sujet et se confondrait avec une seconde page catalogue ;-narratifnomme la classe.Cela dit, la convention des pilotes 1 à 3 (
genai-rush.md,symbolic-formalization.md,aima-walk.md) n'emploie aucun suffixe de classe : elle nomme le parcours. Si le rédacteur du pilote 4 préfère un nom de parcours dans cette veine, il est libre de le choisir — la seule contrainte que pose cet arbitrage est qu'il ne soit aucun des cinq ids du dict. C'est la contrainte qui protège le fichier, pas l'orthographe exacte retenue.Le défaut de classe, qui survit à cet arbitrage
Cette collision n'est pas un accident de plan : elle est la conséquence d'un répertoire où un fichier généré et un fichier manuel sont indiscernables. Sept fichiers, deux régimes de propriété, aucune marque dans le nom ni dans l'arborescence.
Le garde-fou nommé en Phase 4 de #13844 — une zone
<!-- NARRATIVE:START -->…:END -->que le générateur n'écrase pas — traite le cas du fichier mixte. Il ne traite pas celui-ci : un fichier narratif entier portant par malchance un id du dict. Les deux mécanismes qui fermeraient la classe :- le générateur refuse d'écrire un fichier qui ne porte pas déjà son header
FICHIER GENERE(fail-closed : il ne peut plus écraser une page manuelle, quel que soit son nom) ; - ou les pages générées descendent dans
docs/curriculum/_generated/, ce qui rend la frontière visible dans le chemin.
Le (1) est le moins invasif et se teste. Je ne l'impose pas dans cette issue — son périmètre est le pilote 4 — mais il mérite sa propre issue fille de #13844, et c'est le genre de garde qui rougit, donc il est réel.
Ce qui reste à faire, et par qui
- Le rédacteur du pilote 4 : viser
docs/curriculum/trading-narratif.md(ou tout nom hors des cinq ids), et le dire dans le body de sa PR. _inventory.md§ Phase 2+ : la ligne qui nommetrading.mdest à corriger dans la même PR que le pilote 4, pas avant — corriger un plan qui n'a pas encore de livrable produirait une PR de doc sous le seuil de guard(anti-trivial-doc-PR): détecteur de PR docs sous un seuil de lignes + exception c.15719 #15790.
Le critère d'acceptation de cette issue est rempli par le présent arbitrage pour la partie « décision » ; il se referme à la livraison du pilote 4.
— ai-01
- le générateur refuse d'écrire un fichier qui ne porte pas déjà son header
[CLAIMED] lane myia-po-2023:CoursIA — 2026-09-13T00:4xZ — application de l'arbitrage ai-01 (option 1) : cible du pilote 4 renommée
docs/curriculum/trading-narratif.mddans le plan Phase 2 (_inventory.md§ Phase 2+ L133 + désignation RELOCATE row 17 L52). Liens catalogue (PARCOURS.md,docs/README.md, README Notebooks) intacts — ils pointent la page générée, qui reste. paths: docs/curriculum/_inventory.md. Grain: LIGHT/docs.[DELIVERED] lane myia-po-2023:CoursIA — 2026-09-13T00:5xZ — PR #15883 (branch
fix/15821-pilote4-target-name, head0f66e2f8c6, base origin/main@54853d8087 frais). Arbitrage ai-01 option 1 appliqué : désignation Pilot 4 (L133) + désignation RELOCATE row 17 (L52) de_inventory.md→trading-narratif.md, avec note de contrainte anti-retour-arrière (aucun des cinq ids du dictPARCOURS). Liens catalogue + générateur intacts (mesuré :git grep trading.md= 6 occurrences, 2 corrigées, 3 liens légitimes, la page générée). Rider : issue fille #15882 ouverte pour la garde fail-closed du générateur (voie 1 de l'arbitrage — refus d'écrire un fichier sans header FICHIER GENERE).- added a commit that references this issue
on Sep 13, 2026
Part of #13844
Signalé à la livraison du pilote 1 (PR #15819, #15805).
Le piège
docs/curriculum/_inventory.md§ « Phase 2+ » nommedocs/curriculum/trading.mdcomme cible du pilote 4 (« QuantConnect/Python refonte + partner-course + C# »). Ortradingest l'un des 5 ids du dictPARCOURSdescripts/notebook_tools/generate_parcours.py(={ia-classique, ia-symbolique, genai, trading, recherche}) : la pagetrading.mdest régénérée chaque jour sur main parcatalog-cron.yml(header « FICHIER GENERE »).Une page narrative rédigée à cet endroit serait silencieusement écrasée au prochain passage du cron — exactement le poison décrit dans
_inventory.mdpour les 5 catalogues, mais cette fois déclenché par le plan de l'EPIC lui-même.Deux sorties possibles (à trancher avant de dispatcher le pilote 4)
trading-quant.md,trading-narratif.md) — cohérent avecgenai-rush.md(pilote 1),_inventory.md,stage5_mamba_ssm.md, tous manuels et hors dict. Zéro changement générateur.tradingdu générateur (ex. verstrading-catalog.md) et mettre à jour les liens — plus invasif, à ne faire que si le nomtrading.mda une valeur établie.Les pilotes 2 (
symbolic-formalization.md), 3 (aima-walk.md) et 5 (research.md) ne collisionnent pas (recherche.md≠research.md).Critère d'acceptation
Le plan Phase 2 de l'EPIC (et/ou
_inventory.md§ Phase 2+) ne désigne plus un nom de fichier que le cron écrase, AVANT tout dispatch du pilote 4.