Skip to content

[#13844 Phase 2] Collision de nom : le pilote 4 vise docs/curriculum/trading.md, un id GÉNÉRÉ (cron l'écraserait) #15821

Description

@jsboige

Part of #13844

Signalé à la livraison du pilote 1 (PR #15819, #15805).

Le piège

docs/curriculum/_inventory.md § « Phase 2+ » nomme docs/curriculum/trading.md comme cible du pilote 4 (« QuantConnect/Python refonte + partner-course + C# »). Or trading est l'un des 5 ids du dict PARCOURS de scripts/notebook_tools/generate_parcours.py (={ia-classique, ia-symbolique, genai, trading, recherche}) : la page trading.md est régénérée chaque jour sur main par catalog-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.md pour 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)

  1. Renommer la cible du pilote (ex. trading-quant.md, trading-narratif.md) — cohérent avec genai-rush.md (pilote 1), _inventory.md, stage5_mamba_ssm.md, tous manuels et hors dict. Zéro changement générateur.
  2. Migrer l'entrée trading du générateur (ex. vers trading-catalog.md) et mettre à jour les liens — plus invasif, à ne faire que si le nom trading.md a 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.

Activity

  1. myia-ai-01 commented on Sep 12, 2026

    @myia-ai-01
    Collaborator

    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.md 2026-09-12 20:31 — tous les cinq à la même minute générés, réécrits par catalog-cron.yml
    _inventory.md 2026-09-03 23:06 manuel
    stage5_mamba_ssm.md 2026-07-20 00:47 manuel

    Les cinq ids du dict PARCOURS de scripts/notebook_tools/generate_parcours.py sont exactement les cinq fichiers réécrits ce soir. trading.md en 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 trading du générateur vers trading-catalog.md toucherait le générateur, les liens de PARCOURS.md, et tout référent externe du chemin docs/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.md n'a par ailleurs pas de valeur établie à préserver : il est référencé depuis PARCOURS.md ligne 12, et c'est tout.

    Pourquoi trading-narratif.md plutôt que trading-quant.md

    Le 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. -quant décrit le sujet et se confondrait avec une seconde page catalogue ; -narratif nomme 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 :

    1. 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) ;
    2. 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 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

  2. jsboige commented on Sep 13, 2026

    @jsboige
    OwnerAuthor

    [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.md dans 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.

  3. jsboige commented on Sep 13, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2023:CoursIA — 2026-09-13T00:5xZ — PR #15883 (branch fix/15821-pilote4-target-name, head 0f66e2f8c6, 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 dict PARCOURS). 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).

  4. added a commit that references this issue on Sep 13, 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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions