Skip to content

fix(send): keep tracked message GUIDs in Apple's uppercase form - #391

Merged
steipete merged 4 commits into
openclaw:mainfrom
thurstonsand:fix/tracked-guid-uppercase-pr
Nov 14, 2026
Merged

steipete merged 4 commits into
openclaw:mainfrom
thurstonsand:fix/tracked-guid-uppercase-pr

Conversation

@thurstonsand

@thurstonsand thurstonsand commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Tracked sends lowercased caller UUIDs, while Messages' SMS/RCS relay expects Apple's uppercase form. Preserve canonical uppercase UUIDs in both RPC and helper dispatch, with case-insensitive input and duplicate checks.

Refs #390. The focused regression fails on main with three assertions and passes after this change. Six focused tests cover the UUID round trip, collisions, capability rejection, and uncertain-send fallback prevention. No live messages were sent during maintainer verification. Independent Codex review through P2: scoped-clean. Exact-head CI is required before merge.

Thanks @thurstonsand for the diagnosis, fix, and reported RCS evidence.

The first exact-head CI run caught an older helper-envelope fixture still expecting lowercase. Its isolated synthetic executable reproduced that failure; the updated fixture verifies uppercase identity in both the acknowledgment and dispatched object and passes. No live messaging was used.

@clawsweeper

clawsweeper Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

thurstonsand added a commit to thurstonsand/ansiblonomicon that referenced this pull request Nov 7, 2026
@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. P1 Urgent regression or broken agent/channel workflow affecting real users now. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Nov 7, 2026
@clawsweeper

clawsweeper Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

This PR preserves canonical uppercase UUIDs throughout tracked-message sending and response identities.

Example: Send an RCS message with attempt_id 196ff9d0-c48e-4613-a5db-8af306a69533.

  • Before: The lowercase GUID reaches Messages; affected-release examples remain unsent with error 4.
  • After: The saved GUID is 196FF9D0-C48E-4613-A5DB-8AF306A69533, and the supplied transcript shows delivered status.

Review scores

Measure Result What it means
Overall readiness 🐚 platinum hermit (4/6) A focused, source-correct repair with shipped-entry-point RCS delivery evidence, matching persisted identity, and reported regression-test failures on base and passes on head.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): The updated PR body resolves the previous proof request with redacted output from patched imsg RPC and its helper on macOS 26.5.1: a lowercase caller UUID becomes an uppercase response and saved row, and lowercase status lookup reports delivered RCS with error 0. The demonstrated patched scenario is one RCS contact; SMS-only and patched RCS-group delivery are not demonstrated. Supplied focused test output also shows base failures and head passes.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: Tracked SMS/RCS requests can return success while Messages leaves the outgoing message unsent with error 4.
Reason: The patch repairs a demonstrated failure in an existing sending contract with two focused production edits and no new option or dispatch path.

Merge readiness

✅ Ready for maintainer review

Keep open: current main retains the lowercase conversions behind the reported relay failure, and this PR provides a focused repair with no actionable findings.

Priority: P1
Reviewed head: 40558a5cc5101e651161df9397fb6ed577ff67f8

Before merge

None.

Findings

None.

Agent review details

How this fits together

The JSON-RPC server validates a caller UUID, forwards it through the injected Messages helper into native message construction, and exposes the resulting identity for database status reconciliation.

flowchart LR
 A[RPC caller] --> B[UUID normalization]
 B --> C[History collision check]
 C --> D[Injected helper]
 D --> E[GUID reservation and message construction]
 E --> F[Messages relay]
 F --> G[Messages database]
 G --> H[Status reconciliation]
Loading

Technical review

Best possible solution:

Preserve uppercase UUIDs in both existing normalization owners while retaining case-insensitive reconciliation and duplicate rejection.

Do we have a high-confidence way to reproduce the issue?

Current-main source confirms both lowercase conversions, and the contributor supplies affected-release failures and a controlled uppercase retry comparison; no independent Messages send was run during this read-only review.

Is this the best way to solve the issue?

Removing both conversions is the smallest complete repair for the demonstrated casing failure and preserves the documented caller-owned UUID contract.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 1bc0679663bf.

Provenance checked

  • RPC and helper UUID normalization changes intended behavior with a stated reason (268912b: feat(rpc): add caller-owned tracked send IDs #235 added caller-owned UUIDs for exact send-timeout reconciliation, collision rejection, and helper reservation; no lowercase-specific requirement was recorded.)
  • Existing tracked-send test expectations changes intended behavior with a stated reason (268912b: The original tests enforced matching normalized identities; this PR changes their canonical case to repair the demonstrated relay failure.)
  • Helper feature-fragment placement keeps the original intent (cb58dec: refactor: organize the injected helper into private feature modules #296 moved helper features into private fragments while preserving one compiled translation unit and shared ownership state.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

Likely related people:

  • Peter Steinberger: Raw commit cb58dec adds Sources/IMsgHelper/ChatResolution.inc:31 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: cb58dec17663; files: Sources/IMsgHelper/ChatResolution.inc)

Preflight source

Source unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified.

Review metrics

Metric Value Why it matters
Production and test scope Production +2/-2; tests +8/-8; changelog +2 The repair changes the existing normalization assignments without adding production machinery or test scaffolding.

Root-cause cluster

Relationship: fixed_by_candidate
Canonical: #390
Summary: This PR is the explicit fixing candidate for the casing-related relay failure; UUID substitution remains a separate report.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Labels

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.

Label justifications:

  • P1: The affected-release report establishes a broken tracked SMS/RCS sending workflow that acknowledges requests while messages remain unsent.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (1 earlier review cycle)
  • reviewed 2026-11-07T00:14:22.921Z sha 40558a5 :: needs real behavior proof before merge. :: none

Reviewed November 6, 2026, 10:15 PM ET / November 7, 2026, 03:15 UTC (Revision 2).

@thurstonsand

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. clawsweeper:intake:bug Preliminary submission classification; full source review pending. labels Nov 7, 2026
thurstonsand and others added 3 commits November 13, 2026 21:55
Messages relays SMS and RCS sends through the paired iPhone, and a send under
a lowercase GUID never completes there: chat.db records it unsent with error 4,
while Messages' own Try Again resends the same GUID in uppercase and delivers.
iMessage sends were unaffected.

Amp-Thread-ID: https://ampcode.com/threads/T-01a193d9-7f0b-72f5-b39d-1c64d979b1be
Co-authored-by: Amp <amp@ampcode.com>
@steipete
steipete force-pushed the fix/tracked-guid-uppercase-pr branch from 40558a5 to 99ed6d7 Compare November 14, 2026 05:55

@steipete steipete left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed code and fixture proof; exact-head CI is green.

@steipete
steipete merged commit 1c8651a into openclaw:main Nov 14, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P1 Urgent regression or broken agent/channel workflow affecting real users now. proof: sufficient Contributor real behavior proof is sufficient. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants