[SETUP-02] Crate fractal-ext : trait Extension + EventBus + AppContext #72

Closed
opened 2026-04-06 01:41:15 +00:00 by charles · 1 comment
Owner

Contexte

Fondation architecturale partagée par tous les modules M1–M5. Le crate fractal-ext définit le contrat que chaque module doit implémenter (trait Extension) et le bus d'événements central (EventBus) permettant la communication entre les crates sans couplage fort.

Critères d'acceptation

  • Trait Extension défini avec toutes ses méthodes :
    • fn id(&self) -> &str
    • fn name(&self) -> &str
    • async fn on_init(&mut self, ctx: &AppContext) -> Result<()>
    • async fn on_sync_event(&self, event: &AnySyncEvent, ctx: &EventContext) -> Result<()>
    • async fn on_command(&self, cmd: &Command, ctx: &CommandContext) -> Result<Option<CommandResult>>
    • fn message_decorations(&self, event: &TimelineEvent) -> Vec<MessageDecoration>
  • AppContext : accès à la session Matrix, au client matrix-rust-sdk, à la config globale
  • EventBus : enregistrement dynamique des extensions + dispatch des événements Matrix
  • CommandRegistry : enregistrement dynamique des commandes / par les extensions
  • Types partagés : MessageDecoration, Command, CommandResult, EventContext, CommandContext
  • Tests unitaires du dispatch EventBus avec une extension mock

Notes techniques

#[async_trait]
pub trait Extension: Send + Sync {
    fn id(&self) -> &str;
    fn name(&self) -> &str;
    async fn on_init(&mut self, ctx: &AppContext) -> Result<()>;
    async fn on_sync_event(&self, event: &AnySyncEvent, ctx: &EventContext) -> Result<()>;
    async fn on_command(&self, cmd: &Command, ctx: &CommandContext) -> Result<Option<CommandResult>>;
    fn message_decorations(&self, event: &TimelineEvent) -> Vec<MessageDecoration>;
}
  • Tous les modules M1–M5 dépendent de ce crate
  • Prépare l'architecture pour un futur système de plugins (ADR-001) sans l'implémenter
  • Doit être Send + Sync pour usage dans des contextes async multi-thread (tokio)
## Contexte Fondation architecturale partagée par tous les modules M1–M5. Le crate `fractal-ext` définit le contrat que chaque module doit implémenter (trait `Extension`) et le bus d'événements central (`EventBus`) permettant la communication entre les crates sans couplage fort. ## Critères d'acceptation - [ ] Trait `Extension` défini avec toutes ses méthodes : - `fn id(&self) -> &str` - `fn name(&self) -> &str` - `async fn on_init(&mut self, ctx: &AppContext) -> Result<()>` - `async fn on_sync_event(&self, event: &AnySyncEvent, ctx: &EventContext) -> Result<()>` - `async fn on_command(&self, cmd: &Command, ctx: &CommandContext) -> Result<Option<CommandResult>>` - `fn message_decorations(&self, event: &TimelineEvent) -> Vec<MessageDecoration>` - [ ] `AppContext` : accès à la session Matrix, au client matrix-rust-sdk, à la config globale - [ ] `EventBus` : enregistrement dynamique des extensions + dispatch des événements Matrix - [ ] `CommandRegistry` : enregistrement dynamique des commandes `/` par les extensions - [ ] Types partagés : `MessageDecoration`, `Command`, `CommandResult`, `EventContext`, `CommandContext` - [ ] Tests unitaires du dispatch EventBus avec une extension mock ## Notes techniques ```rust #[async_trait] pub trait Extension: Send + Sync { fn id(&self) -> &str; fn name(&self) -> &str; async fn on_init(&mut self, ctx: &AppContext) -> Result<()>; async fn on_sync_event(&self, event: &AnySyncEvent, ctx: &EventContext) -> Result<()>; async fn on_command(&self, cmd: &Command, ctx: &CommandContext) -> Result<Option<CommandResult>>; fn message_decorations(&self, event: &TimelineEvent) -> Vec<MessageDecoration>; } ``` - Tous les modules M1–M5 dépendent de ce crate - Prépare l'architecture pour un futur système de plugins (ADR-001) sans l'implémenter - Doit être `Send + Sync` pour usage dans des contextes async multi-thread (tokio)
Author
Owner

Fermé en doublon : ce travail a été réalisé dans la PR #76 (issue #2). La crate fractal-ext avec le trait Extension, EventBus et CommandRegistry est déjà mergée sur main.

Fermé en doublon : ce travail a été réalisé dans la PR #76 (issue #2). La crate `fractal-ext` avec le trait `Extension`, `EventBus` et `CommandRegistry` est déjà mergée sur `main`.
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#72
No description provided.