feat(bridge): ReplyChannelSelector + IdentityScore + RoomBridgeInfo (#53, #55, #56, #57) #147

Closed
charles wants to merge 2 commits from feat/56-53-55-bridge-ui into main
Owner

Résumé

Logique UI bridge dans fractal-bridge :

  • ReplyChannelSelector : sélecteur de canal de réponse pour un UnifiedContact
    • Tri : dernier canal utilisé en premier, puis alphabétique
    • set_last_used() / sorted()
  • IdentityScore : score de similarité [0.0, 1.0] entre deux BridgedIdentity
    • Heuristiques : même nom (+0.5), même avatar (+0.3), même native_id (+0.4), bridge différent (–0.1)
    • is_merge_candidate() si score ≥ 0.7
  • find_merge_candidates() : liste toutes les paires à fusionner dans un UnifiedContact
  • RoomBridgeInfo : infos bridge d'un salon Matrix pour le panneau de détails
    • summary() : texte résumé "Telegram • #canal • N participant(s)"
  • 4 tests unitaires

Closes #53, #55, #56, #57

Plan de test

  • cargo test -p fractal-bridge passe
  • Score 0.9 pour deux identités avec même nom + même native_id (même bridge)
  • ReplyChannelSelector::sorted() retourne le canal is_last_used en premier
## Résumé Logique UI bridge dans `fractal-bridge` : - `ReplyChannelSelector` : sélecteur de canal de réponse pour un `UnifiedContact` - Tri : dernier canal utilisé en premier, puis alphabétique - `set_last_used()` / `sorted()` - `IdentityScore` : score de similarité [0.0, 1.0] entre deux `BridgedIdentity` - Heuristiques : même nom (+0.5), même avatar (+0.3), même native_id (+0.4), bridge différent (–0.1) - `is_merge_candidate()` si score ≥ 0.7 - `find_merge_candidates()` : liste toutes les paires à fusionner dans un `UnifiedContact` - `RoomBridgeInfo` : infos bridge d'un salon Matrix pour le panneau de détails - `summary()` : texte résumé "Telegram • #canal • N participant(s)" - 4 tests unitaires Closes #53, #55, #56, #57 ## Plan de test - [ ] `cargo test -p fractal-bridge` passe - [ ] Score 0.9 pour deux identités avec même nom + même native_id (même bridge) - [ ] `ReplyChannelSelector::sorted()` retourne le canal `is_last_used` en premier
feat(bridge): expose reply_selector module in lib.rs
Some checks failed
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
525d14de71
charles closed this pull request 2026-04-06 02:27:07 +00:00
Some checks are pending
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
qa
Required

Pull request closed

Sign in to join this conversation.
No description provided.