Repository navigation
Refresh BlueBubbles contacts and reconcile room participant profiles - #238
Open
chrisbutler wants to merge 1 commit into
Open
chrisbutler wants to merge 1 commit into
chrisbutler wants to merge 1 commit into
Conversation
chrisbutler
requested review from
cnuss,
trek-boldly-go and
tulir
as code owners
October 15, 2026 16:23
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BlueBubbles contact names and photos can remain stale after the Mac address book changes. Updating a ghost's global profile also does not reliably refresh its per-room membership profile, so the same person can have a correct name in a direct chat and a phone number in a group.
This refreshes the BlueBubbles cache before the existing hourly sync, updates existing ghosts at startup and during periodic sync, and reconciles existing unified (
any) direct rooms and joined group participant profiles. Group changes preserve membership and extension fields, skip already-current profiles, retain existing photos when the source has none, and verify writes by reading the member state back. No rooms are created by contact updates. Custom name overrides remain respected.The connector now serializes refreshes, protects cache readers, retains its previous cache on transient empty/error responses, tolerates a missing avatar, and avoids dumping full contact/photo records into trace logs. Ongoing refresh uses the existing
bridge.periodic_syncsetting; it must be enabled for hourly updates. Contact or photo deletion is deliberately not propagated as destructive profile removal.Validation:
go test ./...passed on macOS arm64.go test -race ./imessage/bluebubblespassed.This PR contains only contact synchronization changes. Implementation and tests were developed with Codex assistance and exercised locally; no user contact data or room IDs are included.