Skip to content

Fix Signal Desktop v8.0.0 binary ACI compatibility#799

Open
strichter wants to merge 2 commits intobbernhard:masterfrom
strichter:fix/signal-desktop-binary-aci
Open

Fix Signal Desktop v8.0.0 binary ACI compatibility#799
strichter wants to merge 2 commits intobbernhard:masterfrom
strichter:fix/signal-desktop-binary-aci

Conversation

@strichter
Copy link

@strichter strichter commented Feb 28, 2026

Summary

Signal Desktop v8.0.0 switched from string ACI fields (mentionAci, authorAci, targetAuthorAci) to binary ACI encoding (mentionAciBinary, authorAciBinary, targetAuthorAciBinary) in protobuf messages. This causes:

  • Reactions: target author resolves to null → empty reaction messages
  • Mentions: ServiceId is null → mentions silently dropped
  • Quotes: author is null/invalid → entire quote dropped
  • Sync messages: missing destination validation failures

Fix

Two-part patch applied to signal-cli v0.13.24 during the x86_64 source build:

  1. Bump signal-service-java from unofficial_137unofficial_138 — adds dual-format ACI parsing (ServiceId.parseOrNull(stringField, binaryField)) so both old string and new binary formats work.

  2. Defensive null guards in MessageEnvelope.java — for edge cases where ServiceId resolution still returns null/ACI.UNKNOWN:

    • Reactions: filter null getTargetAuthor()
    • Mentions: filter null getServiceId()
    • Quotes: fallback to UNKNOWN_UUID instead of dropping the quote
    • StoryContext/PollVote: null guards on author fields

How it works

  • On x86_64: the source build applies ext/patches/fix-binary-aci.patch to the v0.13.24 checkout, then installDist replaces the release tarball directory. Both the JVM and GraalVM native paths get the fix.
  • On arm64/armv7: continues using the unpatched release tarball (no regression). These architectures will get the fix when signal-cli cuts a new release with unofficial_138.

Verified

Tested end-to-end with Signal Desktop v8.0.0 sending to a linked signal-cli instance:

  • ✅ Reactions from Desktop: targetAuthorUuid populated
  • ✅ Mentions from Desktop: mentions array with UUIDs present
  • ✅ Quotes from Desktop: quote.authorUuid populated

Related

Test plan

  • Build Docker image on x86_64 (podman build .)
  • Verify signal-cli processes reactions from Signal Desktop v8.0.0
  • Verify signal-cli processes mentions from Signal Desktop v8.0.0
  • Verify signal-cli processes quotes from Signal Desktop v8.0.0
  • Verify messages from Signal Mobile still work (backward compatibility)

🤖 Generated with Claude Code

Signal Desktop v8.0.0 switched from string ACI fields to binary ACI
encoding in protobuf messages. This breaks reactions, mentions, quotes,
and other message features when the library cannot parse the new format.

Two-part fix applied via patch to signal-cli v0.13.24 source build:

1. Bump signal-service-java from unofficial_137 to unofficial_138, which
   adds dual-format ACI parsing (string + binary fallback via
   ServiceId.parseOrNull).

2. Add defensive null guards in MessageEnvelope.java for cases where
   ServiceId resolution still fails (e.g. ACI.UNKNOWN). Preserves
   message content with UNKNOWN_UUID fallback rather than dropping
   entire message components (quotes, reactions, mentions, etc.).

The patch is applied during the x86_64 source build. The source-built
installDist output replaces the release tarball, so both the JVM and
native (GraalVM) paths get the fix.

Non-x86_64 architectures continue using the unpatched release tarball
until signal-cli cuts a new release with unofficial_138.

See: AsamK/signal-cli#1944

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The BUILT_LIBSIGNAL_JAR variable captured a relative path that became
invalid after cd /tmp. Switch to capturing just the filename and using
the already-copied absolute path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
strichter added a commit to strichter/signal-cli-rest-api that referenced this pull request Feb 28, 2026
… ACI

Signal Desktop v8.0.0 switched to binary ACI encoding which breaks
reactions, mentions, and quotes in signal-cli v0.13.24. The signal-cli
master branch already includes the fix (signal-service-java
unofficial_138 with dual-format ACI parsing), so building from master
on x86_64 resolves all three issues without needing a patch.

Changes:
- Build from signal-cli master instead of v0.13.24 tag on x86_64
- Use installDist output as the main signal-cli installation
- Detect libsignal-client jar version dynamically (master uses 0.87.1)
- Update signal-cli-native.patch for master's build.gradle.kts
- Move BaseConfig/libsignal workarounds behind arch guard (arm64/armv7 only)

Supersedes bbernhard#799 (patch-based approach).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@strichter
Copy link
Author

Related issue: #796 — this PR fixes the incomplete JSON serialization for reactions (and also mentions and quotes) caused by Signal Desktop v8.0.0's switch to binary ACI encoding. Superseded by #801.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant