Redressement de la campagne de densité (#13410) — remplissages dégénérés
Mandat user (session directe 2026-09-20, ~20:15 locale) — verbatim :
« Je viens de voir arriver une PR de remplissage horrible, qui fait le contraire de ce qu'elle annonce, et dont les 2 Notebooks sont complètement saccagés par le remplissage. » (instance fondatrice : #17036, commentaire user 20:13:43Z)
« Pas plus d'une "lecture" par sortie de cellule, il faut les consolider quand il y en a plusieurs, et puis remettre les choses au bon endroit, car là il y en a de partout, désordonnées, parfois avant le code, parfois dans la mauvaise partie. »
« Qu'ils prennent le temps de supprimer les remplissages inutiles, de consolider les "lectures ancrées" qui se succèdent au même endroit, de replacer au bon endroit les cellules qui sont mal positionnées. »
La règle (canonique, hard)
- Une sortie de cellule de code = AU PLUS UNE cellule de lecture markdown. S'il y en a plusieurs qui se suivent ou se recouvrent sur la même sortie : consolider en une seule (garder le contenu le plus fort, fusionner, réécrire — jamais empiler).
- Position : la lecture se place immédiatement APRÈS la cellule dont elle lit la sortie — jamais avant le code, jamais dans une autre section.
- Suppression du remplissage inutile : lecture qui paraphrase la sortie visible sans interpréter ; doublon d'une lecture préexistante ; lecture citant des valeurs absentes des sorties committées (fabriquées) ; lecture narrating une cellule d'EXERCICE (solution-leak).
- Le seuil de densité 1200 n'est PAS une cible — ne jamais ré-ajouter de prose pour le maintenir.
Périmètre mesuré
Les 20 paquets
Chaque paquet = un agent d'audit ; partition contiguë par tri de chemin (séries cohérentes).
| Paquet |
Notebooks |
Séries |
PRs densité sources |
| P01 |
12 |
CaseStudies/Diagnostic-Medical/solution; CaseStudies/Diagnostic-Medical/student; CaseStudies/Oncology-Planning |
10 |
| P02 |
12 |
GameTheory |
10 |
| P03 |
12 |
GameTheory; GenAI/Audio/04-Applications; GenAI/FallacyDetection; GenAI/Image/02-Advanced |
10 |
| P04 |
12 |
GenAI/Image/05-History; GenAI/Integrations-DotNet/Aspire; GenAI/Plateformes-Conversationnelles/AI-Engine-WordP |
13 |
| P05 |
12 |
GenAI/RAG-et-Memoire-Semantique; GenAI/SemanticKernel; GenAI/Texte |
10 |
| P06 |
12 |
GenAI/Texte; GenAI/Texte/TransformerVariants; GenAI/Vibe-Coding/Claude-Code/notebooks; GenAI/Video/04-Applicat |
13 |
| P07 |
12 |
IIT/ICT-Series |
8 |
| P08 |
12 |
IIT/ICT-Series |
8 |
| P09 |
12 |
IIT; IIT/ICT-Series |
10 |
| P10 |
12 |
ML/DataScienceWithAgents/01-PythonForDataScience/notebooks; ML/DataScienceWithAgents/02-ML-Cours; ML/DataScien |
8 |
| P11 |
12 |
ML/ML.Net; Math/Serre100; Probas/DecisionTheory/Causal-Bridges; Probas/DecisionTheory/DecInfer |
7 |
| P12 |
12 |
Probas/DecisionTheory/DecPyMC |
1 |
| P13 |
12 |
Probas/Infer; Probas/PyMC; RL |
12 |
| P14 |
12 |
RL; Search/Applications/CSP; Search/Applications/Hybrid |
12 |
| P15 |
12 |
Search/Applications/Hybrid; Search/Part1-Foundations; Search/Part2-CSP |
9 |
| P16 |
12 |
Search/Part4-Metaheuristics; Search/Part4-Metaheuristics/MGS-vs-mealpy; Sudoku; SymbolicAI/Argument_Analysis/g |
8 |
| P17 |
12 |
SymbolicAI/Lean; SymbolicAI/Planners/01-Foundation; SymbolicAI/Planners/03-Advanced; SymbolicAI/Planners/04-Ne |
8 |
| P18 |
12 |
SymbolicAI/SMT/Z3-API; SymbolicAI/SemanticWeb |
11 |
| P19 |
12 |
SymbolicAI/SemanticWeb; SymbolicAI/SmartContracts/02-Solidity-Advanced; SymbolicAI/SymbolicLearning; SymbolicA |
10 |
| P20 |
5 |
SymbolicAI/Tweety |
4 |
Garde-fous éditoriaux (incidents 02/09 et mandate #13410 STOP)
- UTF-8 sans BOM, accents conservés à l'octet près ;
source reste une liste (jamais re-sérialisée en chaîne).
- Markdown-only : cellules code, outputs,
execution_count, metadata et IDs byte-identiques (aucune re-sérialisation générale, aucune re-exécution).
- Ne jamais supprimer de contenu antérieur à la campagne (les commits densité sont identifiables via
git log — seules les cellules ajoutées par la campagne sont supprimables ; une cellule préexistante ne se réécrit que lors d'une consolidation, en préservant sa sémantique).
- Organe objectif :
python scripts/notebook_tools/check_split_reading_cells.py <nb> doit rendre 0 finding après redressement.
- Une PR corrective par paquet (branches
fix/density-redressement-pNN), commits incrémentaux par notebook, body avec tableau par notebook (supprimées/consolidées/repositionnées + ids de cellules).
Process
[CLAIMED] lane myia-po-2025:CoursIA-2 -- paths: <globs du paquet> sur cette issue AVANT d'éditer.
- Audit + PR corrective au fur et à mesure des findings (livraison continue, pas de batch final).
- Revue et merge : ai-01 (avec dossier preflight adjoint en support).
Redressement de la campagne de densité (#13410) — remplissages dégénérés
Mandat user (session directe 2026-09-20, ~20:15 locale) — verbatim :
La règle (canonique, hard)
Périmètre mesuré
main.mainuniquement ; les branches des PRs ouvertes ne se touchent pas.Les 20 paquets
Chaque paquet = un agent d'audit ; partition contiguë par tri de chemin (séries cohérentes).
Garde-fous éditoriaux (incidents 02/09 et mandate #13410 STOP)
sourcereste une liste (jamais re-sérialisée en chaîne).execution_count, metadata et IDs byte-identiques (aucune re-sérialisation générale, aucune re-exécution).git log— seules les cellules ajoutées par la campagne sont supprimables ; une cellule préexistante ne se réécrit que lors d'une consolidation, en préservant sa sémantique).python scripts/notebook_tools/check_split_reading_cells.py <nb>doit rendre 0 finding après redressement.fix/density-redressement-pNN), commits incrémentaux par notebook, body avec tableau par notebook (supprimées/consolidées/repositionnées + ids de cellules).Process
[CLAIMED] lane myia-po-2025:CoursIA-2 -- paths: <globs du paquet>sur cette issue AVANT d'éditer.