Repository navigation
edit/unsend targeting a self-chat's echo row is a silent no-op (only the sent row syncs to the iPhone) #350
Copy link
Copy link
Closed
Labels
P2Normal priority bug or improvement with limited blast radius.Normal priority bug or improvement with limited blast radius.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.User-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.
Description
Environment: macOS 27.0.1, imsg 0.16.0.
What we found (building a bridge that sends into a self-chat): a self-chat stores each sent message twice — a sent row (is_from_me=1) and a received echo row (is_from_me=0), with distinct guids (chat↔message linkage via ck_chat_id; our self-chat carried ~39 such pairs).
imsg edit/imsg unsendtargeting the sent row works end-to-end: the edit delivers to the iPhone, the unsend removes the iPhone's copy.- Targeting the echo row is a silent no-op: exit 0, no error, nothing happens on the iPhone.
Anyone scripting against guids collected from history/watch (which emits both rows) can easily hold the echo guid and wonder why their edit/unsend did nothing.
Suggestion: auto-resolve to the canonical sent row when the target is a self-chat pair member, or at least print a hint/error naming the twin guid. A docs note is a fine fallback.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
P2Normal priority bug or improvement with limited blast radius.Normal priority bug or improvement with limited blast radius.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.User-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.
Type
Fields
Priority
None yet
Activity
clawsweeper commentedon Oct 16, 2026
Codex review: this still needs some work.
Summary
This issue describes a concrete released failure, and current main still accepts edit/unsend targets without checking sent-message eligibility; no fixing PR owns the work.
Reproducibility: Source proves unchecked GUID dispatch and queued acknowledgments, supported by the reporter's release-level comparison; current-main iPhone behavior and native eligibility still need verification, and no live commands or tests were run.
Next step
Verify native sent/echo eligibility and establish failing edit/unsend regressions before adding shared received-target rejection.
Review details
Best possible solution:
Reject ineligible received targets with guidance to select the sent GUID, and retarget automatically only if a verified native twin relationship exists.
Do we have a high-confidence way to reproduce the issue?
Source proves unchecked GUID dispatch and queued acknowledgments, supported by the reporter's release-level comparison; current-main iPhone behavior and native eligibility still need verification, and no live commands or tests were run.
Is this the best way to solve the issue?
A shared helper eligibility check would cover CLI and RPC within the existing sent-message contract; matching twins by text or nearby timestamps could select the wrong message.
AGENTS.md: found and applied where relevant.
Remaining risk / open question:
Codex review notes: model internal, reasoning medium; reviewed against d3c706e6c38c.
Label changes
Label changes:
No label changes.
Label justifications:
P2: The advanced self-chat mutation workflow has limited scope and a reported workaround of choosing the sent GUID.impact:ux-friction: Successful-looking acknowledgments provide no guidance when an echo target leaves the intended message unchanged.Evidence reviewed
Acceptance criteria:
What I checked:
Sources/IMsgHelper/MessageMutation.inc:33, d3c706e6c38c)Sources/IMsgHelper/MessageLookup.inc:51, d3c706e6c38c)Sources/imsg/Commands/BridgeMessagingCommands.swift:66, d3c706e6c38c)Sources/IMsgCore/MessageStore+Queries.swift:26, d3c706e6c38c)Likely related people:
Sources/IMsgHelper/MessageMutation.inc)How this review workflow works
@clawsweeper re-reviewcomments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.@clawsweeper re-reviewor@clawsweeper re-runon an open PR or issue to request a fresh review only.@clawsweeper reviewto request a fresh review only.@clawsweeper explainto ask for more context, or@clawsweeper stopto stop active automation.Reviewed October 19, 2026, 1:59 PM ET / 17:59 UTC.
68 remaining items
steipete commentedon Oct 19, 2026
The fix rejects a received self-chat echo before invoking any native mutation API and tells callers to choose the sent copy (is_from_me=true). The synthetic regression reproduced 11 failed assertions before the fix and passes afterward across all three edit selectors and unsend. Native macOS 27 inspection confirmed the BOOL ownership selector exists on all relevant message types. No live messages were modified. Landed in PR #356.
Commit: e01f113
CI: https://github.com/openclaw/imsg/actions/runs/39309551551
fix: harden message mutations and contact lookups