Conversation
Two changes: 1. Set message_id on MessageEvent from envelope timestamp so _reply_anchor_for_event returns a valid value for Signal. 2. Pass quoteTimestamp to signal-cli send RPC when reply_to is a numeric timestamp, enabling native Signal quote bubbles on outbound replies.
|
Thanks for rebuilding the quote path around the current Signal adapter. The premise is confirmed on current main: The proposed flow is appropriately scoped: it preserves the sender identity already retained as Automated hermes-sweeper review. |
# Conflicts: # gateway/run.py # tests/gateway/test_signal.py
…main-20260828 # Conflicts: # gateway/run.py
…main-20260828 # Conflicts: # gateway/platforms/base.py # gateway/platforms/signal.py # gateway/run.py
Summary
Add native Signal reply quotes end to end using the displayed-message timestamp and actual sender identity.
This supersedes #30453. Its core idea and original commit are preserved with @xyanglu's authorship, while the implementation is rebuilt for current main and fixes the group-chat author bug identified in review. Addresses the outbound-quote slice of #39043.
Why
signal-cli requires
quoteAuthorwheneverquoteTimestampis present. A Signal group destination is not the author of the quoted message, so usingchat_idcan fail the send RPC. Edited envelopes also have a fresh event timestamp and a distincteditMessage.targetSentTimestampfor the displayed/original message.Changes
targetSentTimestampas the native quote/reaction anchorsourceUuidas quote author, withsourceNumberfallbackquoteTimestampandquoteAuthoratomically, or safely fall back to an unquoted send if either value is invalid/steerqueue fallbacksValidation
Refreshed onto
main@fef0e16feon 2026-09-08; exact head25d09c66de. Native quote metadata and upstream's durable route metadata are both preserved. MessageEvent imports follow the current owner module.scripts/run_tests.sh tests/gateway/test_signal.py tests/gateway/test_queue_command.py— 87 passed, 0 failedscripts/run_tests.sh tests/gateway/test_kanban_routed_transport.py tests/gateway/test_kanban_route_anchor_capture.py— 6 passed, 0 failedgit diff --checkagainst current main: cleanScope and related work
This PR does not implement outbound edits, remote delete, read receipts, or arbitrary agent/MCP reply operations.
Merge sequencing with #67495
Whichever of #67495 and this PR lands second must be rebased and revalidated on the merged Signal envelope path.
The combined implementation must preserve separate timestamp meanings for edits:
editMessage.targetSentTimestampsender_uuidandis_note_to_selffields as well as this PR's native anchorDo not collapse receipt identity and displayed-message anchoring into one raw timestamp field.