No reviewers
Labels
No labels
module:M0-setup
module:M1-stt
module:M1-stt
module:M2-ai
module:M2-ai
module:M3-rich
module:M3-rich
module:M4-bridge
module:M4-bridge
module:M5-bonus
module:M5-bonus
module:setup
priority:high
priority:high
priority:low
priority:low
priority:medium
priority:medium
type:chore
type:chore
type:feature
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/my-fractal!168
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/53-55-56-57-bridge-ui"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements four issues in the
fractal-bridgecrate:#55 — Similarity scoring and merge suggestions (
similarity.rs)levenshtein_distance()andlevenshtein_normalized()— normalized similarity in [0.0, 1.0]similarity_score(a, b)— weighted score: display_name ×0.4, shared phone in native_id ×0.5, same bridge server ×0.1MergeSuggestion { contact_a, contact_b, score }suggest_merges(contacts, threshold)— returns pairs above threshold sorted by descending scoreDEFAULT_MERGE_THRESHOLD: f64 = 0.6#57 — Bridge detection in room details (
room_bridge.rs)RoomBridgeInfo { room_id, bridge_type, bot_user_id, detected_puppets }detect_room_bridge(room_id, member_ids)— iterates members, callsBridgeType::detect(), majority-vote determines the room bridge type; falls back toBridgeType::NativeRoomBridgeDetails { info, linked_contact }#53 — Reply channel selector (
reply_channel.rs+contact.rs)preferred_channel: Option<String>toUnifiedContactReplyChannel { user_id, bridge_type, display_name }ReplyChannelSelector { contact }available_channels(contact)— maps all identities toReplyChannelselect_channel(contact, user_id)— updatespreferred_channel#56 — Contact fusion UI model (
fusion.rs)ContactFusionStateenum:Idle,Selecting { candidates },Confirming { a, b, score },DoneContactFusionModel { state, rejected_pairs }withpropose_merge(),confirm(),reject(),reset()merge_contacts(a, b)— unions identities (deduplicated by user_id), keeps display_name and id of the contact with the most identitiesFiles changed
crates/fractal-bridge/src/contact.rs— addedpreferred_channelfieldcrates/fractal-bridge/src/similarity.rs— newcrates/fractal-bridge/src/room_bridge.rs— newcrates/fractal-bridge/src/reply_channel.rs— newcrates/fractal-bridge/src/fusion.rs— newcrates/fractal-bridge/src/lib.rs— updated module declarations and re-exportsCloses #53, #55, #56, #57