Créer la crate fractal-ext : trait Extension + EventBus #2

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

Contexte

La crate fractal-ext est la colonne vertébrale d'extensibilité du projet. Tous les modules (M1–M5) l'implémentent. Elle doit être conçue pour être wrappable par un futur runtime de plugins (Lua via mlua feature send).

Critères d'acceptation

  • Trait Extension défini avec #[async_trait] : id(), name(), on_init(), on_sync_event() (opt-in), on_command() (opt-in), message_decorations()
  • Struct EventBus avec Vec<Box<dyn Extension>> et méthode dispatch()
  • Types communs exportés : AppContext, EventContext, CommandContext, Command, CommandResult, MessageDecoration
  • CommandRegistry dynamique pour les commandes slash
  • Tests unitaires : dispatch vers plusieurs extensions, gestion d'erreur isolée (une extension en erreur ne bloque pas les autres)
  • README.md dans crates/fractal-ext/

Notes techniques

  • Tous les traits utilisent #[async_trait] + Send + Sync
  • EventBus::dispatch log via tracing::warn! en cas d'erreur d'extension, sans propager
  • Point d'ancrage pour le futur plugin Lua : enregistrement dynamique à l'exécution
## Contexte La crate `fractal-ext` est la colonne vertébrale d'extensibilité du projet. Tous les modules (M1–M5) l'implémentent. Elle doit être conçue pour être wrappable par un futur runtime de plugins (Lua via `mlua` feature `send`). ## Critères d'acceptation - [ ] Trait `Extension` défini avec `#[async_trait]` : `id()`, `name()`, `on_init()`, `on_sync_event()` (opt-in), `on_command()` (opt-in), `message_decorations()` - [ ] Struct `EventBus` avec `Vec<Box<dyn Extension>>` et méthode `dispatch()` - [ ] Types communs exportés : `AppContext`, `EventContext`, `CommandContext`, `Command`, `CommandResult`, `MessageDecoration` - [ ] `CommandRegistry` dynamique pour les commandes slash - [ ] Tests unitaires : dispatch vers plusieurs extensions, gestion d'erreur isolée (une extension en erreur ne bloque pas les autres) - [ ] README.md dans `crates/fractal-ext/` ## Notes techniques - Tous les traits utilisent `#[async_trait]` + `Send + Sync` - `EventBus::dispatch` log via `tracing::warn!` en cas d'erreur d'extension, sans propager - Point d'ancrage pour le futur plugin Lua : enregistrement dynamique à l'exécution
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#2
No description provided.