From e1f6bf7264381f0ba4d2b80017e1bf4a31cf6491 Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Tue, 12 May 2026 23:44:30 +0200 Subject: [PATCH] notes --- MEMORY.md | 18 +++++++ PROGRAM_CONTENT_ARCHITECTURE.md | 4 +- SESSION_NOTES_2026-05-12.md | 89 +++++++++++++++++++++++++++++++++ SVG_CONTENT_ARCHITECTURE.md | 2 + frontend/src/App.jsx | 10 ++-- frontend/src/styles.css | 48 ++++++++++++++++++ 6 files changed, 163 insertions(+), 8 deletions(-) create mode 100644 SESSION_NOTES_2026-05-12.md diff --git a/MEMORY.md b/MEMORY.md index 67c5a97..783afa2 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -295,3 +295,21 @@ Approche progressive recommandee: - `README.md` - `MEMORY.md` +## Session 2026-05-12 - Architecture contenus programme et SVG fractions + +- Decision structurante: chaque lecon doit suivre l'arborescence canonique `lecon.md`, `fiches/*/fiche.md + fiche.svg`, `cards/*/card_XX.md + card_XX.svg`, `exercices/*/exercices.md + exercices.svg`, `tests/*`, `exercices/parcours_adaptes/*`, `sources/*`. +- `kit_adaptatif`, `svg/`, `card_contexts/` et `exercices_svg/` sont des dossiers legacy. Une nouvelle generation ne doit plus les produire. +- Chaque contenu pedagogique doit garder une section `Sources` ou un contexte equivalent pour audit Education nationale: PDF officiel, extraction locale, cycle, niveau, matiere, theme, date/validation si connue. +- `PROGRAM_CONTENT_ARCHITECTURE.md` est la reference de l'arborescence canonique et du flux pedagogique. +- `01B_fractions` et `01A_nombres_entiers` ont ete migres dans cette structure, dans les deux miroirs `backend/contenus_pedagogiques/...` et `Programme/contenus_pedagogiques/...`. +- Le loader programme doit parcourir les types utiles dans l'UI: `lesson`, `fiche`, `card`, `exercice`, `test`, `support`. Plus de type editorial `kit`. +- Le modele doit charger `lecon.md` comme contexte general, puis le contexte specifique de l'objet actif: fiche, card, exercice ou test. +- `backend/app/program_content.py` lit les parcours adaptes recursivement avec `rglob`, afin que `exercices/parcours_adaptes//exercices.md + exercices.svg` soit visible dans l'arbre et dans le contexte adaptatif. +- La validation globale doit afficher SVG et contexte ensemble. Dans l'onglet `Programme global`, la zone de droite a ete reorganisee: SVG et Markdown se partagent l'espace, et le bouton `Ouvrir dans Validation contenus` flotte discretement en bas a droite. +- Piege majeur sur les fractions SVG: `text@y` est une baseline, pas le bord visible du chiffre. Les tests qui regardent seulement `bar_y - text_y` donnent de faux verts. +- Regle retenue pour les fractions: tester la clairance visible estimee entre barre et glyphes, via `numerator_bottom = y + font_size * 0.25` et `denominator_top = y - font_size * 0.85`. +- Les fractions doivent porter `class="math-expression fraction-g"`, `data-math="fraction"` et un `data-box` recalcule autour du rendu reel. +- Les outils importants: `backend/tools/validate_svg_quality.py`, `backend/tools/regenerate_fraction_exercise_svgs.py`, `backend/tools/compact_fraction_svg_spacing.py`, `backend/tools/migrate_nombres_entiers_content.py`. +- Validation de fin de session: fractions strictes OK dans les deux miroirs, nombres entiers OK pendant migration, `npm.cmd run build` OK apres ajustement UI. +- A retenir pour la suite: avant toute validation humaine des SVG fractions, lancer le validateur strict sur les deux miroirs et inspecter visuellement au moins le premier exercice de chaque famille, car les faux verts de baseline ont deja ete observes. + diff --git a/PROGRAM_CONTENT_ARCHITECTURE.md b/PROGRAM_CONTENT_ARCHITECTURE.md index 2576598..2a67ce1 100644 --- a/PROGRAM_CONTENT_ARCHITECTURE.md +++ b/PROGRAM_CONTENT_ARCHITECTURE.md @@ -156,7 +156,7 @@ Les fractions doivent utiliser une structure testable : - groupe avec `data-math="fraction"` ; - boite de controle `data-box="x y width height"` pour chaque fraction ; - numerateur, barre et denominateur separes sans chevauchement ; -- l'ecart vertical entre le chiffre et la barre ne doit pas depasser environ la moitie de la taille du chiffre. +- l'ecart vertical doit etre controle sur la clairance visible estimee du glyphe, pas seulement sur les coordonnees `y` SVG. Le controle strict est porte par `backend/tools/validate_svg_quality.py --warnings-as-errors`. -Un SVG de fraction qui laisse trop d'air entre numerateur/denominateur et barre doit donc echouer avant validation editoriale. +Un SVG de fraction qui chevauche visuellement la barre, ou qui laisse trop d'air autour d'elle, doit donc echouer avant validation editoriale. diff --git a/SESSION_NOTES_2026-05-12.md b/SESSION_NOTES_2026-05-12.md new file mode 100644 index 0000000..91ac5ee --- /dev/null +++ b/SESSION_NOTES_2026-05-12.md @@ -0,0 +1,89 @@ +# Notes de fin de session - 2026-05-12 + +## Objectif traite + +Validation de l'architecture des contenus pedagogiques et remise en ordre des lecons CM1 `Nombres entiers` et `Fractions`, avec focus fort sur la qualite des SVG fractions et l'ergonomie de l'onglet `Programme global`. + +## Architecture pedagogique retenue + +Chaque lecon doit etre auditable, consultable et chargeable par le modele avec la meme structure : + +- `README.md` : notes editoriales et statut de la lecon ; +- `lecon.md` : lecon complete, contexte general du modele ; +- `fiches//fiche.md` + `fiche.svg` ; +- `cards//card_XX.md` + `card_XX.svg` ; +- `exercices//exercices.md` + `exercices.svg` ; +- `tests/*` : diagnostics et tests de validation ; +- `exercices/parcours_adaptes/*` : remediations apres tests ; +- `sources/*` : contenus de reference migres ou documents originaux utiles. + +Les dossiers `kit_adaptatif`, `svg/`, `card_contexts/` et `exercices_svg/` sont legacy. + +## Migrations effectuees + +- `01B_fractions` est range dans l'arborescence canonique cote `backend` et cote `Programme`. +- `01A_nombres_entiers` est range dans l'arborescence canonique cote `backend` et cote `Programme`. +- Les tests et parcours de l'ancien kit adaptatif `Nombres entiers` ont ete deplaces dans `tests/`, `exercices/parcours_adaptes/` et `sources/`. +- Le loader backend sait lire les nouveaux types `lesson`, `fiche`, `card`, `exercice`, `test`, `support`. + +## Sources et audit + +Regle confirmee : tout contenu pedagogique doit pouvoir indiquer sa source. + +Chaque Markdown de production doit garder une section `Sources` ou equivalent : + +- document PDF officiel ou extraction locale ; +- cycle, niveau, matiere et theme ; +- page, chapitre ou section si connu ; +- date de generation ou validation si connue. + +Reference principale actuelle : `Programme/pdf_collecteur/state/synthese_cycle3_cm1_mathematiques.md`. + +## SVG fractions + +Probleme important corrige : les fractions semblaient valides automatiquement alors que les denominateurs chevauchaient visuellement la barre. + +Cause : dans SVG, la coordonnee `y` d'un `` est une baseline, pas le bord visible du chiffre. Un test base seulement sur `bar_y - text_y` peut donc donner un faux vert. + +Regle retenue : + +- tester la clairance visible estimee des glyphes ; +- utiliser `fraction-g`, `data-math="fraction"` et `data-box` ; +- recalcule des `data-box` apres changement d'espacement ; +- refuser les fractions obliques visibles dans les SVG eleve ; +- lancer le validateur strict avant revue humaine. + +Outils importants : + +- `backend/tools/validate_svg_quality.py` +- `backend/tools/regenerate_fraction_exercise_svgs.py` +- `backend/tools/compact_fraction_svg_spacing.py` + +Validation obtenue : + +- `backend/.../01B_fractions` : 42 SVG, 0 erreur, 0 warning ; +- `Programme/.../01B_fractions` : 42 SVG, 0 erreur, 0 warning. + +## UI Programme global + +Changement ergonomique : + +- le panneau de droite partage mieux l'espace entre SVG et contexte Markdown ; +- le SVG utilise `object-fit: contain` pour rester visible entier ; +- l'ancien panneau `Validation centralisee` est supprime ; +- le bouton `Ouvrir dans Validation contenus` flotte discretement en bas a droite ; +- le bouton plein ecran reste disponible sur le SVG. + +Fichiers concernes : + +- `frontend/src/App.jsx` +- `frontend/src/styles.css` + +Build frontend valide avec `npm.cmd run build`. + +## Points a reprendre ensuite + +- Continuer la deduction des arborescences depuis les PDF officiels pour cycle 3 et cycle 4. +- Generaliser l'arborescence canonique aux prochaines lecons. +- Ajouter a terme une validation raster/screenshot pour detecter les chevauchements visuels que le XML ne capte pas parfaitement. +- Inspecter visuellement le premier SVG de chaque nouvelle famille malgre le validateur, surtout pour les fractions. diff --git a/SVG_CONTENT_ARCHITECTURE.md b/SVG_CONTENT_ARCHITECTURE.md index 7a700a0..89c4324 100644 --- a/SVG_CONTENT_ARCHITECTURE.md +++ b/SVG_CONTENT_ARCHITECTURE.md @@ -52,6 +52,7 @@ Règle de rendu CM1 : - fraction verticale obligatoire ; - barre horizontale visible et séparée des chiffres ; - pas de notation `3/4` dans les SVG destinés à l'élève, sauf dans les notes Markdown ou les contextes de card. +- attention : dans SVG, `text@y` est une baseline ; le validateur doit donc estimer le haut/bas visible du glyphe pour detecter les chevauchements avec la barre. ## Validation automatique minimale @@ -61,6 +62,7 @@ Le validateur doit refuser ou signaler : - groupe `fraction-g` sans numérateur, barre et dénominateur ; - barre qui n'est pas située entre les deux textes ; - espacement vertical trop faible autour de la barre ; +- chevauchement visuel barre/denominateur ou numerateur/barre calcule depuis la boite estimee du texte, pas depuis la seule baseline ; - barre trop courte par rapport aux chiffres ; - SVG sans `viewBox` ou dimensions incohérentes ; - card sans grand rectangle détectable, quand elle doit être découpée. diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 2d68b80..c519fe7 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -251,7 +251,7 @@ function ProgramReviewPanel({ selectedNode, reviewForm, onReviewChange, onSaveRe const status = selectedNode.status || {} const review = selectedNode.review || {} return ( -
+
{selectedNode.type} @@ -298,11 +298,9 @@ function ProgramReviewPanel({ selectedNode, reviewForm, onReviewChange, onSaveRe )} {readOnly ? ( -
- Validation centralisée -

Cet onglet sert à explorer le programme. Les décisions éditoriales se font dans l’onglet Validation contenus.

- -
+ ) : (