feat: add Messages Name & Photo sharing#173
Conversation
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
|
Codex review: found issues before merge. Reviewed July 11, 2026, 3:06 PM ET / 19:06 UTC. Summary Reproducibility: not applicable. This PR adds a new optional private-API capability rather than fixing a defined current-main regression. Review metrics: 4 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Keep the branch draft until it removes the changelog edit, demonstrates consented exact-head liveness and receiver-visible targeting, and receives explicit shared-owner approval for the supported public API and macOS boundary. Do we have a high-confidence way to reproduce the issue? Not applicable: this PR adds a new optional private-API capability rather than fixing a defined current-main regression. Is this the best way to solve the issue? Unclear: the narrowed fail-closed design is appropriately conservative, but its exact runtime behavior and permanent compatibility contract remain unproven and unapproved. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 10c91b10924e. Label changesLabel changes:
Label justifications:
Evidence reviewedSecurity concerns:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (3 earlier review cycles)
|
…oto-sharing # Conflicts: # .agents/skills/imsg/SKILL.md # CHANGELOG.md # README.md # Sources/IMsgCore/IMsgBridgeProtocol.swift # Sources/IMsgHelper/IMsgInjected.m
|
Exact-head proof for
Remaining gate: receiver-visible liveness/share proof on a SIP-disabled Messages host. The available Mac has SIP enabled, the prepared SIP-off host is unavailable, and no recipient was explicitly confirmed for this privacy-sensitive share. No profile was sent. Keeping the PR draft rather than overriding that proof gate. |
Summary
IMNicknameControllersingleton and anIMHandleimsg name-photo status|sharecommands plus BlueBubbles-compatible bridge actions and Photon-compatible RPC method namesThe watcher change from #166 remains intentionally excluded. The two policy-oriented fallback selectors are also excluded because receiver-visible send behavior is unproven; unsupported runtimes fail closed.
Validation
Exact head:
7bf716fb756c38948f751188baf03269a013199dmake test— 477 tests passedmake lint— passed; existing non-serious warnings onlymake build— universal CLI (arm64/x86_64) and helper (arm64e/arm64/x86_64) built and signedmake build-dylib— passed with one existing deprecation warningLive proof
Validated in a macOS 26.5 Parallels VM with SIP disabled and the exact helper injected. Bridge v2 reported both Name & Photo selectors, read-only status returned in 0.21 seconds, an SMS chat failed closed, and an explicitly approved direct iMessage chat invoked the four-argument force-send selector in 0.20 seconds while Messages remained responsive.
Live validation also found and fixed a false-success edge: when no usable personal profile exists, the helper now waits for controller initialization, reports
personal_nickname_loadedandhas_personal_nickname, and refuses the share rather than returningrequested: true. Messages setup produced the profile locally, but Apple's CloudKit upload failed in the VM; after that failure the exact-head build correctly reportedavailable: falseand rejected the share. Receiver delivery therefore remains unclaimed, matching the command contract.Credit
This replacement preserves Omar's authorship in the commit trailer and thanks @omarshahine in the changelog.