[M3] Crate fractal-rich : parser HTML → RichBlock enum + fallback (ST-M3-01, ST-M3-02, ST-M3-04) #36

Closed
opened 2026-04-06 01:35:53 +00:00 by charles · 0 comments
Owner

Contexte

Brique fondamentale de M3 : la crate fractal-rich qui parse le HTML d'un message Matrix et extrait les blocs data-fx-* pour les convertir en RichBlock. Le reste du HTML est traité comme fragment standard (ST-M3-01, ST-M3-02, ST-M3-04).

Critères d'acceptation

  • Crate fractal-rich dans le workspace, implémentant le trait Extension
  • RichMessageParser::parse(html) -> Vec<MessageFragment> via html5ever
  • MessageFragment : Html(String) ou Rich(RichBlock)
  • Enum RichBlock couvrant tous les types : Chart, Quiz, CodeRun, Card, Carousel, Timeline, TableSort, Accordion, Progress, Math, Mermaid, Canvas
  • Validation JSON du data-fx-config pour chaque type (rejeter les configs invalides → fallback texte)
  • Chaque bloc conserve le fallback textuel contenu dans le <div> pour les clients non-compatibles
  • Niveau de rendu global (full / static / text) respecté : mode text retourne uniquement les fallbacks

Notes techniques

  • Format : <div data-fx-type="chart" data-fx-config='{"type":"bar",...}'>fallback</div>
  • Dépendances : html5ever, serde_json
  • Dépend de #2 (Extension trait)
  • Voir spec §5.2 pour le format de message et §5.4 pour les schémas JSON
## Contexte Brique fondamentale de M3 : la crate `fractal-rich` qui parse le HTML d'un message Matrix et extrait les blocs `data-fx-*` pour les convertir en `RichBlock`. Le reste du HTML est traité comme fragment standard (ST-M3-01, ST-M3-02, ST-M3-04). ## Critères d'acceptation - [ ] Crate `fractal-rich` dans le workspace, implémentant le trait `Extension` - [ ] `RichMessageParser::parse(html) -> Vec<MessageFragment>` via `html5ever` - [ ] `MessageFragment` : `Html(String)` ou `Rich(RichBlock)` - [ ] Enum `RichBlock` couvrant tous les types : `Chart`, `Quiz`, `CodeRun`, `Card`, `Carousel`, `Timeline`, `TableSort`, `Accordion`, `Progress`, `Math`, `Mermaid`, `Canvas` - [ ] Validation JSON du `data-fx-config` pour chaque type (rejeter les configs invalides → fallback texte) - [ ] Chaque bloc conserve le fallback textuel contenu dans le `<div>` pour les clients non-compatibles - [ ] Niveau de rendu global (`full` / `static` / `text`) respecté : mode `text` retourne uniquement les fallbacks ## Notes techniques - Format : `<div data-fx-type="chart" data-fx-config='{"type":"bar",...}'>fallback</div>` - Dépendances : `html5ever`, `serde_json` - Dépend de #2 (Extension trait) - Voir spec §5.2 pour le format de message et §5.4 pour les schémas JSON
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#36
No description provided.