You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[EPIC] Nommage canonique et parcours des notebooks — numéros, accrétions, noyaux et catalogue #5081
Relance du 2026-09-25 — renommer et dégager le chemin principal, série par série
Décision du mainteneur (2026-09-25). Les deux chantiers de cette Epic avancent trop lentement, et la dette grossit à chaque notebook ajouté sous l'ancien nommage. Ces deux chantiers sont :
la normalisation des noms : numéros sur deux chiffres, suffixes de noyau, lettres d'accrétion ;
la consolidation : dégager un chemin de numéros nus qui reste digeste, en faisant redescendre en lettres les numéros trop avancés et les parties avancées de notebooks trop lourds.
Cette section donne l'état de chaque série et le prochain geste. Elle est tenue à jour par ai-01.
Le geste de consolidation, précisé
Une lecture de gradation (procédure ci-dessous) ne se contente plus de classer des fichiers entiers. Elle nomme aussi :
les parties avancées d'un numéro nu à sortir en lettre, cellule par cellule (identifiants de cellule cités), quand un notebook du chemin principal porte en fin de parcours une matière de niveau Recherche ;
les numéros élevés qui doivent redescendre en lettre d'un palier existant, parce qu'ils approfondissent un palier au lieu de prolonger l'arc.
La règle 4 tient toujours : rien de validé n'est retiré. La matière déplacée garde ses sorties, re-exécutées (C.2).
Descendre en sous-séries, garder un escalier (arbitrage du mainteneur, 25/09)
Le second geste de consolidation, le plus lent et le plus exigeant : déclutter une série en faisant descendre d'un cran dans l'arborescence les arcs d'accrétions qui forment un sujet autonome, avec leurs lakes, tout en gardant un escalier dans la série mère (règle 6).
Dossier, pas préfixe. Une sous-série vit dans un sous-dossier de sa série (GameTheory/SocialChoice/, SymbolicAI/Lean/Serre100/). La série Lean est concernée comme les autres.
Un escalier dans la série mère. Le parcours principal garde une référence explicite vers la sous-série, idéalement un notebook capstone léger : le notebook le plus accessible de l'arc, qui reste alors dans la série mère, ou un notebook à écrire s'il manque.
Le capstone peut exécuter ou citer le lake de la sous-série : c'est la forme recommandée. Un lake descend donc même si un notebook du chemin principal le consomme ; celui-ci le référence par son nouveau chemin. Pas de dossier lean/ générique : les lakes suivent leur sous-série.
Finir les deux modèles avant de les copier.Serre100/ a son lake dans son dossier mais aucun escalier depuis la racine Lean. SocialChoice/ n'a pas de capstone, et ses lakes sont restés à la racine de GameTheory.
tranche A livrée le 11/09 (#15586) ; chantier C : PR-1 et PR-2 mergées, PR-3 repliée dans le passage qui suit la gradation (c.5829587332)
lecture de gradation #15615 d'abord (elle nomme aussi les arcs à descendre en sous-série), puis un seul passage de renommage (branche 03 comprise), puis le lot lakes de #4362 et le pilote SocialChoice (capstone, lake dans le dossier)
Une lecture de gradation est un livrable de lecture : un commentaire sur l'issue fille, sans aucune PR. Elle ne compte donc pas dans le cap WIP. ai-01 tranche dans les 24 heures.
Le README d'une série se refond en dernier dans l'arc de la série. La forme cible est décrite dans #3973. Les READMEs de famille qui agrègent plusieurs arcs (GameTheory, SymbolicAI…) sont portés par ai-01.
Doctrine de gradation : les deux dimensions (mandat user du 2026-09-23)
Le user a validé la décision Complexity (#17063) comme modèle, avec cette consigne : « globalement on devrait faire ça sur toutes les séries ». Cette section étend donc à toutes les séries ce que le canon ci-dessous posait pour le nommage. Le numéro et la lettre ne classent pas des fichiers : ils portent deux dimensions pédagogiques.
Dimension
Ce qu'elle porte
Ce qu'on y met
Ce qu'on n'y met jamais
Numéros nus (01, 02, …)
l'arc narratif de la série, lisible par qui la découvre
un concept principal par notebook, qui ne suppose que ce qui le précède
un résultat de recherche, un preprint, une conjecture récente, une chronologie historique
Lettres (b, c, …)
la profondeur : approfondissement, recherche, hommage, variante
la matière pointue actuelle, conservée et re-exécutée
un prérequis dont un numéro suivant aurait besoin
Règles de fabrication (critères de review, toutes séries)
Chaque numéro nu s'ouvre sur « Ce que ce notebook suppose », qui pointe vers un numéro antérieur ou vers rien, et porte une étiquette de public : Découverte, Licence ou Recherche. Un numéro nu étiqueté Recherche est un défaut.
On lit les numéros nus sans avoir ouvert une seule lettre.
Chaque lettre s'ouvre sur un lien vers sa base et nomme les prérequis qu'elle ajoute.
Rien de validé n'est retiré : la matière avancée déménage en lettre, avec ses sorties re-exécutées (C.2).
Un nouveau notebook de recherche ne prend pas un nouveau numéro nu. Il entre comme lettre de la base la plus proche, ou dans une sous-série. S'il manque la marche simple qui le précéderait, on la nomme, puis on l'écrit.
Sous-série : quand une plage de numéros ou de lettres forme un arc autonome (Lean et IA, Conway, formalisations d'un domaine…), elle descend dans un dossier de la série, avec son propre arc gradué, son README et ses lakes. La série mère garde un escalier : une référence explicite depuis son parcours principal, idéalement un notebook capstone léger qui présente la sous-série et peut exécuter ou citer son lake (arbitrage du mainteneur du 25/09, détail sur [EPIC] Lean — harmoniser Mathlib, mutualiser les checkouts, regrouper les lakes (anti-proliferation) #4362 c.5829716177).
Une lane lit les contenus, pas les titres. Elle poste sur l'issue fille le tableau « chemin principal / lettres / sous-séries / marches manquantes », l'impact des renommages (liens, tests, baselines, cellules de code qui citent des noms de notebooks, CI), puis le séquencement des PRs. ai-01 tranche dans les 24 heures : un arbitrage de curriculum ne dort pas dans une issue (#17063 a attendu trois jours). Seul un changement de périmètre de série remonte au user.
Les autres séries viennent ensuite, dans l'ordre où un étudiant les rencontre.
État vivant — relance du 2026-09-10
Cette Epic reste le programme canonique unique de consolidation des noms, numéros, accrétions et parcours. Elle n’est pas remplacée par une nouvelle Epic. Les décisions et livraisons historiques sont conservées intégralement sous ce préambule, mais les tableaux anciens ne constituent plus un état courant.
Mandat consolidé
Le livrable final est le catalogue rendu dans un navigateur : chaque notebook pédagogique propre à CoursIA doit y apparaître sous un nom français, descriptif et ordonnable, avec une hiérarchie série → sous-série lisible et des comptes qui se réconcilient exactement.
obligatoire, stable et représentatif de la série ; la sous-série est explicite lorsqu’elle porte un arc autonome
Numéro
deux chiffres (00 à 99) ; tous les notebooks ont un numéro
Numéros nus
constituent le speed run : leur lecture dans l’ordre couvre tous les domaines essentiels de la série
Accrétions
la base vaut implicitement a ; les approfondissements commencent à b, puis c, etc. ; une lettre différente suppose un contenu substantiellement distinct
Orientation
00 porte la présentation/setup et 00b, 00c ses annexes ; si 01 joue déjà ce rôle, ne pas créer artificiellement 00 et rattacher les annexes à 01b, 01c
Profondeur
absorber les contenus proches dans un notebook plus riche plutôt que multiplier les lettres ; si plusieurs sujets deviennent réellement autonomes, créer une sous-série et un notebook bridge
Noyau
suffixe obligatoire et à casse canonique : Python, CSharp, Lean, etc. ; deux implémentations analogues partagent préfixe, numéro, accrétion et titre, seul le suffixe change
Français
le titre sémantique et le H1 sont français ; le slug de fichier reste portable et professionnel, avec les règles d’encodage du dépôt
Exceptions
uniquement conventions externes/vendored ou plateformes imposées, inscrites explicitement dans l’inventaire ; jamais d’exception silencieuse
Baseline reproductible au 2026-09-10
Mesure sur origin/mainb474cf8f3030d7b90d5c2e798599a45ee38c7211, via git ls-tree, hors checkpoints, .lake et _output :
Mesure
Valeur
Lecture
notebooks pédagogiques scannés
1 244
dénominateur courant
noms reconnus par la grammaire historique
832
412 restent hors parseur historique
noms non reconnus
412
à classifier avant tout renommage ; inclut des conventions de plateforme/sous-série
indices à un chiffre dans une famille allant au moins jusqu’à 10
208
dette de padding encore visible
suffixes reconnus
Csharp 113 · CSharp 16 · Python 43 · Lean 4
casse et couverture hétérogènes
sans suffixe reconnu par cette mesure
1 068
signal à inventorier ; pas une preuve que le kernel est inconnu
Commande de mesure à conserver dans l’issue fille d’inventaire : scanner les chemins suivis par Git, publier le dénominateur, distinguer « non parsé », « kernel inféré » et « exception justifiée ». Aucun chiffre de ce tableau ne décide seul d’un git mv.
âge de dernière livraison réelle par Epic, instrumentation puis calibration
Séquencement anti-collision — obligatoire
W0 avant tout nouveau rollout : inventaire canonique, mapping proposé, gardes de collision/suffixe/slot et tests positifs.
Une série, une lane, une fenêtre : claim GitHub paths: et vérification des PR ouvertes avant édition.
Publier la table actuel → cible → geste → justification → référents avant chaque vague.
Un notebook n’est renommé qu’une fois : padding, préfixe, titre, séparateur et suffixe noyau sont regroupés dans sa vague.
Une PR de renommage ne modifie pas le contenu pédagogique ; une consolidation de contenu est une PR distincte avec preuve de préservation.
Tous les référents vivants sont mis à jour atomiquement : notebooks, README/docs, _quarto.yml, workflows, tests, baselines, registres twins, sidecars et consommateurs cross-dépôt connus.
COURSE_CATALOG.generated.*, les marqueurs CATALOG-STATUS et les traductions bot-owned restent byte-identiques sur la branche feature ; l’automatisation les régénère.
Inventaire canonique exhaustif, versionné et reproductible, avec exceptions explicites et collisions calculées.
Tous les notebooks pédagogiques propres au dépôt respectent le canon adopté ; chaque exception restante est nommée et justifiée.
Les numéros nus de chaque série forment un speed run complet ; les approfondissements sont rattachés à leur parent ; les branches trop profondes sont absorbées ou promues en sous-séries avec bridge.
Les variantes analogues partagent le même identifiant et le même titre, avec parité suivie.
Les gardes empêchent collision, padding régressif, suffixe non canonique, chemin twin mort et libellé de lien mensonger.
Le générateur de catalogue affiche série → sous-série/root, basename canonique cliquable, titre explicite, kernel, statuts et totaux réconciliés.
Le rendu Quarto/GitHub est vérifié en navigateur, desktop et mobile, sans erreur console ni table tronquée.
Chaque vague de renommage prouve zéro référence vivante vers les anciens chemins et laisse les artefacts bot-owned hors diff.
Historique conservé
Mandat user (2026-07-03, verbatim)
Pour les nombreux nouveaux notebooks rajoutés, je pense qu'il faudra une issue pour repenser la numérotation dans un arc narratif et pédagogique cohérent. Les sites officiels peuvent aider parfois, comme pour Infer ou PyMC ; en tout cas souvent, les numéros se suivent simplement à l'opportunité des derniers ajouts alors qu'une renumérotation s'impose.
Problème
Le débit récent (150 PRs mergées les 1-2/07) a ajouté beaucoup de notebooks en fin de série (Infer-18/19, ICT-11/12/13, Search-14, QC-Py-40, Tweety C# 2b/2c/3/4...) : la numérotation suit l'ordre d'arrivée, pas la progression pédagogique. Résultat : des arcs narratifs cassés (un notebook « frontière » inséré après un notebook de synthèse, des ports C# numérotés hors de leur jumeau Python, etc.).
Méthode
Une série à la fois (fille issue par série), en commençant par celles qui ont le plus bougé : Probas/Infer, Probas/PyMC, ICT, Search, Tweety, QC-Py.
S'appuyer sur les progressions des sites officiels quand elles existent : tutoriels Infer.NET (docs Microsoft), galerie PyMC (pymc.io examples), etc. — l'ordre canonique upstream est souvent le bon squelette narratif.
Catalogue intouché sur branche (cron-owned, .claude/rules/catalog-pr-hygiene.md).
Re-exécution non requise si seuls les noms/liens changent (C.2 : modifs markdown/rename), mais vérifier que les papermill paths internes ne référencent pas l'ancien nom.
Fille issue par série avec l'arc narratif cible explicité en table (ordre actuel → ordre cible → justification pédagogique).
Renumérotations livrées en PRs atomiques, liens entrants réparés, CI check-links verte.
READMEs de série resynchronisés dans la même PR (anti-drift prose↔structure).
Part of #4208 (référence publique — axe D finition).
Amendement doctrinal — mandat user 2026-08-30 (verbatim)
Il faudra armer un mouvement qui consolide les notebooks avec 2 directions orthogonales :
les numéros
les lettres
Les numéros permettent d'aller jusqu'au bout de la série. On doit pouvoir les lire dans l'ordre pour un premier survol complet. Les lettres permettent des approfondissements optionnels. Mais il faudrait également les consolider et les hiérarchiser.
Au final, ce mouvement devrait aboutir à diminuer le nombre de numéros, créer quelques nouvelles accrétions de lettres, et puis en supprimer d'autres par les jeux de consolidation dans des lettres antérieures.
Ce mécanisme devrait être généralisé de partout, y compris dans ICT, et on devrait essayer de systématiser les numérotations avec padding zéro un peu de partout. Les paires csharp doivent avoir également une politique de numérotation consistante, ça ne me gêne pas qu'elles partagent le même numéro et accrétion.
[...] c'est une issue potentiellement source de conflits de merges, donc à traiter avec prudence, et une dette technique qu'il faudra bien payer.
Ce que l'amendement change par rapport au mandat de 2026-07-03
Le mandat initial demandait un arc narratif au lieu d'une numérotation d'opportunité. Il ne disait pas combien de numéros une série doit avoir. C'est ce que cet amendement tranche, et il donne aux deux axes un rôle fonctionnel distinct :
Axe
Rôle
Critère de décision
Effet sur le compte
Numéros
la colonne vertébrale : le chemin complet et suffisant. Un lecteur qui lit 01, 02, 03… dans l'ordre a fait un survol complet de la série, sans trou et sans détour.
« ce notebook est-il nécessaire au survol complet ? » Si on peut faire le tour du sujet sans lui, ce n'est pas un numéro.
diminue
Lettres
les approfondissements optionnels, accrochés au numéro dont ils dépendent. Sautables sans casser la lecture.
« de quel numéro cet approfondissement dépend-il ? » — la réponse est son adresse.
augmente (accrétions) et diminue (absorptions)
Le mouvement n'est donc pas un renommage : c'est une requalification. Trois gestes, et un seul est un simple git mv :
Accrétion — un approfondissement neuf naît lettre, jamais numéro. C'est le geste qui empêche la dette de se reformer : sans lui, chaque vague d'ajouts reprend un numéro frais et le travail est à refaire.
Absorption — deux lettres voisines traitant la même matière fusionnent dans la plus ancienne (X-06c + X-06d → X-06c enrichi). C'est le geste qui supprime des lettres, et le plus risqué : il détruit du contenu s'il est mal fait. Il exige une preuve de préservation (« Consolider != Archiver »), donc une PR dédiée qui cite ce qui a été fusionné et où il vit — jamais un git rm.
Baseline mesurée le 2026-08-30
git ls-files sur MyIA.AI.Notebooks/**/*.ipynb, hors _output, .lake, checkpoints ; séries d'au moins 8 notebooks.
Mesure
Valeur
Lecture
numéros entiers distincts
411
la surface que le mouvement doit faire baisser
numéros portant ≥1 lettre
66 (16 %)
les lettres sont sous-employées : 84 % des numéros n'ont aucun approfondissement rattaché
slots-lettres existants
118
lettres de profondeur 2 (ab, bc…)
0
la hiérarchisation des lettres est un terrain vierge — rien à consolider, tout à concevoir
séries zéro-paddées
1 sur 58 (5 mixtes, 52 non paddées)
dette de padding quasi totale
⚠ Ce que ces nombres ne disent pas. Ils viennent d'un motif <prefixe>-<num><lettre?>-<slug> appliqué aux noms de fichiers : ils ne mesurent ni le contenu, ni la nécessité pédagogique d'un notebook. « 411 numéros » n'est pas « 411 numéros de trop » — c'est la surface à instruire, série par série. Aucune démotion ne se décide sur ce tableau ; il dit seulement où le travail est.
Cinq séries n'entrent pas du tout dans le motif — GenAI/Texte (29 nb), DataScienceWithAgents/02-ML-Cours (20), GenAI/SemanticKernel (19), Z3-Linq2Z3 (18), QuantConnect/research (17) : zéro notebook numéroté. Pour elles la question n'est pas la requalification mais l'existence même d'une colonne vertébrale — grain distinct, à ne pas confondre avec celui-ci.
Politique des paires C# — elle existe déjà, il faut la généraliser
Le user tranche : « ça ne me gêne pas qu'elles partagent le même numéro et accrétion ». GameTheory le fait déjà, et devient donc le modèle de référence plutôt qu'un cas à corriger :
Numéro et lettre partagés ; seul le suffixe de langage distingue. C'est cohérent avec la doctrine : le jumeau C# n'est pas une étape de plus du survol, c'est la même étape dans une autre implémentation. Lui donner un numéro propre gonflerait la colonne vertébrale d'un facteur ~2 sans ajouter une seule étape au parcours.
Conséquence pour #12933 (renumérotation paritaire) : son constat DecisionTheory — DecInfer-3 ⇄ DecPyMC-2, sept concepts décalés d'un cran par l'insertion du companion Lean DecInfer-2 — se résout par cet amendement. Le companion formel est un approfondissement, donc une lettre (DecInfer-01b-Lean-ExpectedUtility), et l'alignement des sept suivants tombe de lui-même. #12933 n'appelle pas une politique séparée : elle est une application de la doctrine.
Deux défauts mesurés au passage, à traiter dans la fille GameTheory :
slot 06d porte deux sujets distincts (StatiqueComparative-Sympathie et Sympathie-vs-Engagement) — vraie collision, pas une paire de jumeaux ;
slot 02 porte quatre fichiers via un motif -Part2concurrent de la convention des lettres (-Part2 devrait être une accrétion).
Padding zéro
Cible : deux chiffres (01…99) dans le nom de fichier. Le padding n'est pas cosmétique : sans lui, le tri lexicographique d'un ls, d'un explorateur de fichiers ou d'un README rend 1, 10, 11, 2, 20… — c'est-à-dire qu'il casse exactement la propriété que les numéros existent pour porter. Une série non paddée au-delà de 9 notebooks ne se lit pas dans l'ordre, quelle que soit la qualité de son arc.
Généralisation ICT
Le mandat nomme ICT explicitement. Les deux filles existantes — #7260 (renumérotation) et #11690 (consolidation) — se lisent désormais sous la doctrine : ICT porte 34 numéros pour 7 numéros lettrés, et aucune de ses 61 entrées n'est paddée. C'est la série où l'écart entre « ce qui est nécessaire au survol » et « ce qui a pris un numéro à l'arrivée » est le plus large du dépôt.
Prudence — dette conflictogène, séquencement obligatoire
Le user le dit lui-même. Un git mv de notebook touche : le fichier, les liens entrants hors du dossier, les README de série, les navlinks, le registre de jumeaux, et les entrées de catalogue générées. Deux lanes qui renomment dans la même série produisent un conflit que ni l'une ni l'autre ne sait résoudre proprement.
En plus de la méthode 1-5 ci-dessus :
Une série à la fois, une lane à la fois.[CLAIMED] … paths: MyIA.AI.Notebooks/<serie>/** obligatoire — scope de fichiers explicite, jamais epic-wide.
Requalification et enrichissement ne voyagent pas ensemble. Une PR qui renomme ne modifie aucune cellule ; une PR qui enrichit ne renomme rien. Mêlées, elles rendent le diff illisible et le conflit inarbitrable.
Catalogue byte-identique à main sur la branche — le cron le régénère (catalog-pr-hygiene.md). C'est la source n°1 de conflit sur ce type de PR.
L'absorption exige sa preuve de préservation, citée dans le corps de la PR.
Chaque fille de série produit une table de requalification : nom actuel → nom cible → geste (démotion / accrétion / absorption / padding) → justification, avec le nombre de numéros avant/après.
Une fille ne se ferme pas sur un renommage seul : la propriété à vérifier est que la lecture des numéros dans l'ordre constitue un survol complet de la série — énoncée et vérifiée dans le corps de la PR.
Toute absorption cite ce qu'elle a préservé et où.
Aucun grain de ce mouvement ne touche deux séries à la fois.
Relance du 2026-09-25 — renommer et dégager le chemin principal, série par série
Décision du mainteneur (2026-09-25). Les deux chantiers de cette Epic avancent trop lentement, et la dette grossit à chaque notebook ajouté sous l'ancien nommage. Ces deux chantiers sont :
Cette section donne l'état de chaque série et le prochain geste. Elle est tenue à jour par ai-01.
Le geste de consolidation, précisé
Une lecture de gradation (procédure ci-dessous) ne se contente plus de classer des fichiers entiers. Elle nomme aussi :
La règle 4 tient toujours : rien de validé n'est retiré. La matière déplacée garde ses sorties, re-exécutées (C.2).
Descendre en sous-séries, garder un escalier (arbitrage du mainteneur, 25/09)
Le second geste de consolidation, le plus lent et le plus exigeant : déclutter une série en faisant descendre d'un cran dans l'arborescence les arcs d'accrétions qui forment un sujet autonome, avec leurs lakes, tout en gardant un escalier dans la série mère (règle 6).
GameTheory/SocialChoice/,SymbolicAI/Lean/Serre100/). La série Lean est concernée comme les autres.lean/générique : les lakes suivent leur sous-série.Serre100/a son lake dans son dossier mais aucun escalier depuis la racine Lean.SocialChoice/n'a pas de capstone, et ses lakes sont restés à la racine de GameTheory.État et prochain geste par série
Serre100(pilote) ; puis une PR par sous-série, dossier et lake, dès que la lane repasse sous son cap WIPSocialChoice(capstone, lake dans le dossier)Z3-17tout de suite ;Z3-13après #17678Une lecture de gradation est un livrable de lecture : un commentaire sur l'issue fille, sans aucune PR. Elle ne compte donc pas dans le cap WIP. ai-01 tranche dans les 24 heures.
Le README d'une série se refond en dernier dans l'arc de la série. La forme cible est décrite dans #3973. Les READMEs de famille qui agrègent plusieurs arcs (GameTheory, SymbolicAI…) sont portés par ai-01.
Doctrine de gradation : les deux dimensions (mandat user du 2026-09-23)
Le user a validé la décision Complexity (#17063) comme modèle, avec cette consigne : « globalement on devrait faire ça sur toutes les séries ». Cette section étend donc à toutes les séries ce que le canon ci-dessous posait pour le nommage. Le numéro et la lettre ne classent pas des fichiers : ils portent deux dimensions pédagogiques.
01,02, …)b,c, …)Règles de fabrication (critères de review, toutes séries)
Procédure par série
Une lane lit les contenus, pas les titres. Elle poste sur l'issue fille le tableau « chemin principal / lettres / sous-séries / marches manquantes », l'impact des renommages (liens, tests, baselines, cellules de code qui citent des noms de notebooks, CI), puis le séquencement des PRs. ai-01 tranche dans les 24 heures : un arbitrage de curriculum ne dort pas dans une issue (#17063 a attendu trois jours). Seul un changement de périmètre de série remonte au user.
Argument_Analysis)Les autres séries viennent ensuite, dans l'ordre où un étudiant les rencontre.
État vivant — relance du 2026-09-10
Cette Epic reste le programme canonique unique de consolidation des noms, numéros, accrétions et parcours. Elle n’est pas remplacée par une nouvelle Epic. Les décisions et livraisons historiques sont conservées intégralement sous ce préambule, mais les tableaux anciens ne constituent plus un état courant.
Mandat consolidé
Le livrable final est le catalogue rendu dans un navigateur : chaque notebook pédagogique propre à CoursIA doit y apparaître sous un nom français, descriptif et ordonnable, avec une hiérarchie série → sous-série lisible et des comptes qui se réconcilient exactement.
Le canon cible est :
00à99) ; tous les notebooks ont un numéroa; les approfondissements commencent àb, puisc, etc. ; une lettre différente suppose un contenu substantiellement distinct00porte la présentation/setup et00b,00cses annexes ; si01joue déjà ce rôle, ne pas créer artificiellement00et rattacher les annexes à01b,01cPython,CSharp,Lean, etc. ; deux implémentations analogues partagent préfixe, numéro, accrétion et titre, seul le suffixe changeBaseline reproductible au 2026-09-10
Mesure sur
origin/mainb474cf8f3030d7b90d5c2e798599a45ee38c7211, viagit ls-tree, hors checkpoints,.lakeet_output:Csharp113 ·CSharp16 ·Python43 ·Lean4Commande de mesure à conserver dans l’issue fille d’inventaire : scanner les chemins suivis par Git, publier le dénominateur, distinguer « non parsé », « kernel inféré » et « exception justifiée ». Aucun chiffre de ce tableau ne décide seul d’un
git mv.Axes vivants et résidu
notebook-accretion-numbering.mdprésente surmainNUMBERING-DRIFTlivré ; inventaire DecisionTheory livrécandidate-deliveredà la livraison réelle ; traiter GT-03 après levée du gateSéquencement anti-collision — obligatoire
paths:et vérification des PR ouvertes avant édition.actuel → cible → geste → justification → référentsavant chaque vague._quarto.yml, workflows, tests, baselines, registres twins, sidecars et consommateurs cross-dépôt connus.COURSE_CATALOG.generated.*, les marqueursCATALOG-STATUSet les traductions bot-owned restent byte-identiques sur la branche feature ; l’automatisation les régénère.Critères de sortie globaux
Historique conservé
Mandat user (2026-07-03, verbatim)
Problème
Le débit récent (150 PRs mergées les 1-2/07) a ajouté beaucoup de notebooks en fin de série (Infer-18/19, ICT-11/12/13, Search-14, QC-Py-40, Tweety C# 2b/2c/3/4...) : la numérotation suit l'ordre d'arrivée, pas la progression pédagogique. Résultat : des arcs narratifs cassés (un notebook « frontière » inséré après un notebook de synthèse, des ports C# numérotés hors de leur jumeau Python, etc.).
Méthode
check_docs_links --checksur la branche..claude/rules/catalog-pr-hygiene.md).papermillpaths internes ne référencent pas l'ancien nom.Précédents (modèles)
Acceptance
Part of #4208 (référence publique — axe D finition).
Amendement doctrinal — mandat user 2026-08-30 (verbatim)
Ce que l'amendement change par rapport au mandat de 2026-07-03
Le mandat initial demandait un arc narratif au lieu d'une numérotation d'opportunité. Il ne disait pas combien de numéros une série doit avoir. C'est ce que cet amendement tranche, et il donne aux deux axes un rôle fonctionnel distinct :
01, 02, 03…dans l'ordre a fait un survol complet de la série, sans trou et sans détour.Le mouvement n'est donc pas un renommage : c'est une requalification. Trois gestes, et un seul est un simple
git mv:X-20-Sujet→X-09b-Sujet). C'est le geste qui fait baisser le compte de numéros ; c'est le grain déjà instruit par Reorganisation : ranger en sides (-b/-c) les ajouts recents qui ont pris un numero sequentiel (GT-19..23, Lean-25/26, Audio 04-7..13, ICT-Life, rlpt_, Planners-13) #12375.X-06c+X-06d→X-06cenrichi). C'est le geste qui supprime des lettres, et le plus risqué : il détruit du contenu s'il est mal fait. Il exige une preuve de préservation (« Consolider != Archiver »), donc une PR dédiée qui cite ce qui a été fusionné et où il vit — jamais ungit rm.Baseline mesurée le 2026-08-30
git ls-filessurMyIA.AI.Notebooks/**/*.ipynb, hors_output,.lake, checkpoints ; séries d'au moins 8 notebooks.ab,bc…)⚠ Ce que ces nombres ne disent pas. Ils viennent d'un motif
<prefixe>-<num><lettre?>-<slug>appliqué aux noms de fichiers : ils ne mesurent ni le contenu, ni la nécessité pédagogique d'un notebook. « 411 numéros » n'est pas « 411 numéros de trop » — c'est la surface à instruire, série par série. Aucune démotion ne se décide sur ce tableau ; il dit seulement où le travail est.Cinq séries n'entrent pas du tout dans le motif —
GenAI/Texte(29 nb),DataScienceWithAgents/02-ML-Cours(20),GenAI/SemanticKernel(19),Z3-Linq2Z3(18),QuantConnect/research(17) : zéro notebook numéroté. Pour elles la question n'est pas la requalification mais l'existence même d'une colonne vertébrale — grain distinct, à ne pas confondre avec celui-ci.Politique des paires C# — elle existe déjà, il faut la généraliser
Le user tranche : « ça ne me gêne pas qu'elles partagent le même numéro et accrétion ». GameTheory le fait déjà, et devient donc le modèle de référence plutôt qu'un cas à corriger :
Numéro et lettre partagés ; seul le suffixe de langage distingue. C'est cohérent avec la doctrine : le jumeau C# n'est pas une étape de plus du survol, c'est la même étape dans une autre implémentation. Lui donner un numéro propre gonflerait la colonne vertébrale d'un facteur ~2 sans ajouter une seule étape au parcours.
Conséquence pour #12933 (renumérotation paritaire) : son constat
DecisionTheory—DecInfer-3⇄DecPyMC-2, sept concepts décalés d'un cran par l'insertion du companion LeanDecInfer-2— se résout par cet amendement. Le companion formel est un approfondissement, donc une lettre (DecInfer-01b-Lean-ExpectedUtility), et l'alignement des sept suivants tombe de lui-même. #12933 n'appelle pas une politique séparée : elle est une application de la doctrine.Deux défauts mesurés au passage, à traiter dans la fille GameTheory :
06dporte deux sujets distincts (StatiqueComparative-SympathieetSympathie-vs-Engagement) — vraie collision, pas une paire de jumeaux ;02porte quatre fichiers via un motif-Part2concurrent de la convention des lettres (-Part2devrait être une accrétion).Padding zéro
Cible : deux chiffres (
01…99) dans le nom de fichier. Le padding n'est pas cosmétique : sans lui, le tri lexicographique d'unls, d'un explorateur de fichiers ou d'un README rend1, 10, 11, 2, 20…— c'est-à-dire qu'il casse exactement la propriété que les numéros existent pour porter. Une série non paddée au-delà de 9 notebooks ne se lit pas dans l'ordre, quelle que soit la qualité de son arc.Généralisation ICT
Le mandat nomme ICT explicitement. Les deux filles existantes — #7260 (renumérotation) et #11690 (consolidation) — se lisent désormais sous la doctrine : ICT porte 34 numéros pour 7 numéros lettrés, et aucune de ses 61 entrées n'est paddée. C'est la série où l'écart entre « ce qui est nécessaire au survol » et « ce qui a pris un numéro à l'arrivée » est le plus large du dépôt.
Prudence — dette conflictogène, séquencement obligatoire
Le user le dit lui-même. Un
git mvde notebook touche : le fichier, les liens entrants hors du dossier, les README de série, les navlinks, le registre de jumeaux, et les entrées de catalogue générées. Deux lanes qui renomment dans la même série produisent un conflit que ni l'une ni l'autre ne sait résoudre proprement.En plus de la méthode 1-5 ci-dessus :
[CLAIMED] … paths: MyIA.AI.Notebooks/<serie>/**obligatoire — scope de fichiers explicite, jamais epic-wide.mainsur la branche — le cron le régénère (catalog-pr-hygiene.md). C'est la source n°1 de conflit sur ce type de PR.Axes et filles
Acceptance de l'amendement
nom actuel → nom cible → geste (démotion / accrétion / absorption / padding) → justification, avec le nombre de numéros avant/après.