Skip to content

chore(notebooks): normaliser les 633 cellules source en forme chaine sur 162 notebooks mixtes — outil existant, partition par famille #14209

Description

@myia-ai-01

Le defaut

Une cellule dont le source est une chaine unique au lieu d'une liste de lignes rend chaque edition ulterieure illisible en diff : corriger un mot dans une cellule de 40 lignes produit une paire +/- de 40 lignes. nbformat accepte les deux formes ; Jupyter ecrit la forme liste. Le cout n'est donc pas la validite, c'est la relecture.

Il a un cout mesure : la lane myia-po-2025:Maintenance a passe trois commits (d821fbe8, 5a3810d8, plus une relance URGENT) sur #14046 a chasser ce qu'elle croyait etre une re-serialisation. Mesure faite : les 4 cellules concernees etaient neuves, ecrites en forme string des l'origine — il n'y avait aucune forme a restaurer. Le temps a ete depense sur une premisse fausse faute d'un cadrage repo-wide.

L'etendue — mesuree le 2026-09-02 sur main

1 224 notebooks sous MyIA.AI.Notebooks/ (hors .ipynb_checkpoints, hors *_output.ipynb) :

notebooks cellules
MIXTES — une minorite de cellules brise la convention que le reste du meme fichier suit 162 633
INTEGRALEMENT string — le notebook a ete ecrit ainsi de bout en bout 3 45
total portant >= 1 cellule string 165 (13,5 %) 678 (1,72 % des 39 344)

Seuls les 162 mixtes sont la cible. Convertir les 3 integralement-string produit un diff de fichier entier sans valeur pour un relecteur : les exclure explicitement.

Partition par famille (cellules string, notebooks mixtes seuls)

cellules famille
156 QuantConnect
135 GenAI
116 SymbolicAI
82 ML
37 Search
28 Sudoku
21 RL
19 Probas
15 CaseStudies
13 GameTheory
11 IIT

Tetes de liste (string / total)

25/30  (83%)  GenAI/Video/01-Foundation/01-4-Video-Enhancement-ESRGAN.ipynb
16/41  (39%)  ML/ML.Net/ML-1-Introduction.ipynb
15/57  (26%)  QuantConnect/Python/QC-Py-03-Data-Management.ipynb
15/40  (38%)  ML/DataScienceWithAgents/Track2-GoogleADK/Day7-Production/Lab17-Final-Project.ipynb
13/26  (50%)  GenAI/CaseStudies/Barbie-Schreck/barbie-schreck.ipynb
12/27  (44%)  RL/rlpt_3_reward_hacking.ipynb
12/19  (63%)  SymbolicAI/Lean/Lean-12b-Lean-Sensitivity-Theorem.ipynb
11/51  (22%)  SymbolicAI/SemanticWeb/SW-3-CSharp-GraphOperations.ipynb

L'organe existe deja — ne pas en ecrire un autre

scripts/notebook_tools/fix_string_cells.py, 48 tests (livres par #700). Convention nbformat respectee (retour ligne sur toutes les lignes sauf la derniere), --dry-run disponible.

python scripts/notebook_tools/fix_string_cells.py <chemin> --dry-run

Garde obligatoire — la conversion ne doit RIEN changer d'autre

Une normalisation de serialisation touche la forme, jamais le contenu. Avant de committer, controle positif par notebook :

  • le source rejoint de chaque cellule est byte-identique avant/apres ;
  • outputs et execution_count sont inchanges sur toutes les cellules ;
  • le nombre de cellules est inchange.

Si l'un des trois bouge, ce n'est plus une normalisation — c'est une edition de contenu, et elle releve de C.2 (re-execution) et non de ce grain.

Interdit explicite : ne pas en profiter pour toucher la prose, les sorties ou les accents. Un diff de ce grain ne doit contenir que des changements de forme source.

Tier et usage — a lire avant de le piocher

LIGHT. Le litmus de .claude/rules/variation-protocol.md est sans ambiguite : « pourrais-je en generer une douzaine en scannant l'instance suivante ? » — oui, onze fois, une par famille. Consequences :

  • ce grain ne tient pas le plancher G-VAR-1 et consomme le budget G-VAR-2 ;
  • il ne se prend pas deux fois de suite (G-VAR-3, genre LIGHT, ban absolu a 2) ;
  • c'est un remplissage de fin de cycle, jamais un plat principal.

Il est mis en file parce qu'il est reel et mesure, pas parce qu'il est prioritaire.

Decoupage propose

Une PR par famille, dans l'ordre du tableau (les grosses d'abord, elles portent le plus de cout de relecture). Onze PRs au total, chacune citant :

  • le compte avant/apres pour sa famille,
  • la sortie du controle positif ci-dessus,
  • l'exclusion nommee des 3 notebooks integralement-string s'ils tombent dans la famille.

Acceptance

  • les 162 notebooks mixtes ne portent plus de cellule source en forme chaine
  • les 3 notebooks integralement-string sont exclus et nommes (pas convertis)
  • chaque PR cite son controle positif : source rejoint identique, outputs et execution_count inchanges
  • aucun diff de ces PRs ne touche prose, sorties, ou accents
  • la mesure finale est refaite avec le meme instrument et citee

Ce que ce grain ne fait PAS

Il n'ajoute pas de garde CI. Un gate qui rougirait sur toute cellule string bloquerait les outils d'enrichissement qui ecrivent en string (c'est leur sortie naturelle, cf. #14046). La question d'un garde se repose apres la normalisation, sur une base propre, et separement.


Mesure et cadrage : passe de coordination du 2026-09-02, a partir du cout reel constate sur #14046.

No activity

Activity on this issue will appear here.

Activity

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