Skip to content

macOS 27: Pin is not in the Conversation menu, and Hide Alerts can't be verified (plistlib fails on upiExpiryDate) #132

Open

Description

@ianswope

Tested #122 on macOS 27.0.1 against c4ff570, after reinstalling the Mac bridge (checksums match the repo). The test was a read 1:1 SMS conversation, run through conversationAct() in collector.ts, the same call the menu item makes. Both halves fail, for different reasons. Both fail closed: nothing was left pinned or muted.

1. Pin / Unpin: the menu item does not exist on 27

pin   {"ok":false,"error":"imsg-read: 'Pin' was not available"}   4539 ms

Here is Messages' Conversation menu with that DM selected:

Show Details, Show Contact Card, -, Mark as Unread, Mark All as Read, Hide Alerts, -,
Block Person…, Delete Conversation…, -, Send Mail…, Send File…, -, Share My Screen,
Ask to Share Screen, -, FaceTime Video, FaceTime Audio, -, Call +1 (630) … Using iPhone

No Pin or Unpin there. I also searched every menu bar menu for an item containing "Pin" and found none. On 27, pinning seems to be only in the sidebar's right-click menu.

2. Hide / Show Alerts: the click happens, verification can't read the record

mute    {"ok":false,"error":"imsg-read: Hide Alerts was clicked but Messages' records cannot confirm the conversation is muted"}   6932 ms
unmute  {"ok":false,"error":"imsg-read: 'Show Alerts' was not available"}   4401 ms

chat_muted() returned None because alerts_flag() cannot parse chat.properties for this chat. plutil -p reads the blob without trouble:

"hasViewedPotentialSpamChat" => true
"LSMD" => 2026-10-04 23:54:56 +0000
"upiExpiryDate" => 0001-01-01 00:00:00 +0000
...

Python 3.9's plistlib (the system python3 on this Mac) cannot read it:

File ".../plistlib.py", line 550, in _read_object
    result = (datetime.datetime(2001, 1, 1) +
OverflowError: date value out of range
...
plistlib.InvalidFileException: Invalid file

upiExpiryDate is year 1, which is earlier than datetime can represent, so the whole dictionary fails to load. On this Mac, 85 of 1542 chat rows with properties contain upiExpiryDate. For each of those, alerts_flag() returns "unknown". That means muted_conversations() can never list them, and a Hide or Show Alerts on any of them can never be verified.

A fix may only need to read ignoreAlertsFlag without materialising every date, for example with a date-tolerant bplist reader, or by catching OverflowError and falling back to plutil -convert json. I haven't tried either.

One further observation I can't explain yet. After the Hide Alerts click, the blob still has no ignoreAlertsFlag, and the menu still offers "Hide Alerts", not "Show Alerts". So either the click did not take on 27 or the flag now lives somewhere else. The conversation was left with alerts on, the same as before the test.

Environment

  • Gateway: macOS 27.0.1, /usr/bin/python3 3.9.6 (Xcode)
  • Blip c4ff570, push_read=thread; read pushes (--chat) work on the same Mac

Activity

  1. nixfred commented on Oct 8, 2026

    @nixfred
    Owner

    Thank you so much, @ianswope, for testing the Pin and Hide Alerts changes from #122 on macOS 27.0.1 and for writing it up so carefully. The menu listing, the exact errors, the plistlib failure on upiExpiryDate (85 of 1542 chats), and your note that nothing was left pinned or muted all made this easy to understand. I've put it on the list to fix, covering the missing Pin item on 27 and the alerts check that can't read those chats. I really appreciate the time you put into this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions