refactor(imessage): remove retired split-send coalescing#108436
Conversation
|
@clawsweeper review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
7697b7d to
2418416
Compare
|
Codex review: needs real behavior proof before merge. Reviewed July 17, 2026, 12:58 PM ET / 16:58 UTC. Summary PR surface: Source +84, Tests -127, Docs -53, Generated 0. Total -96 across 24 files. Reproducibility: not applicable. as a cleanup PR. The relevant acceptance scenario is clearly defined, but the final packaged dependency and exact OpenClaw head cannot be exercised together until Review metrics: 3 noteworthy metrics.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Use Do we have a high-confidence way to reproduce the issue? Not applicable as a cleanup PR. The relevant acceptance scenario is clearly defined, but the final packaged dependency and exact OpenClaw head cannot be exercised together until Is this the best way to solve the issue? Yes on architecture, but not yet on sequencing: moving split-send ownership upstream and using doctor-only migration is the cleanest boundary, while setting an unavailable hard floor cannot safely merge. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 12e7f91047e6. Label changesLabel justifications:
Evidence reviewedPR surface: Source +84, Tests -127, Docs -53, Generated 0. Total -96 across 24 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (10 earlier review cycles; latest 8 shown)
|
4af135a to
61ebd5b
Compare
c471cf7 to
a5aaf05
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
a5aaf05 to
a79a392
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Marking this PR draft because the upstream prerequisite is not met in the currently supported bridge. Exact-head live proof on macOS 26.4.1 with imsg 0.12.3 used one composed message containing text plus a URL. Apple stored it as a text row without the URL followed by a URLBalloonProvider row. An independent imsg watch emitted two events, and this PR's OpenClaw gateway created two agent turns. The live rows exposed a narrow upstream fix: in both attempts, the preview row's reply_to_guid exactly matched the originating text row's guid. The upstream fix is now proposed in openclaw/imsg#181. It uses that structural association while preserving the existing chat, sender, direction, handle, row-order, time-window, and URL-containment checks across history, watch, stats, and unread paths. Durable failure-before/pass-after output is posted at openclaw/imsg#181 (comment). This PR should return to review after the fixed imsg release becomes OpenClaw's minimum supported version and the same live scenario produces one imsg event and one OpenClaw turn. The doctor migration itself passed disposable-config validation, but that is not sufficient while split-send behavior still regresses. Retest and proof plan after the fixed imsg release
|
|
@clawsweeper re-review |
a79a392 to
0a143a3
Compare
|
@clawsweeper re-review Please resweep exact head |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Co-authored-by: Omar Shahine <[email protected]>
0a143a3 to
a50228f
Compare
|
Land-ready at exact head Proof completed:
The prior ClawSweeper release-provenance move is satisfied by the immutable v0.13.2 formula, release, and source links in the PR body. No live iMessage send was performed from this machine under the maintainer constraint; the PR records that gap and uses the requested focused tests plus released upstream source proof instead. |
|
Merged via squash.
|
Co-authored-by: Peter Steinberger <[email protected]> Co-authored-by: Omar Shahine <[email protected]>
Closes #91243
What Problem This Solves
OpenClaw still carried an unreachable iMessage split-send coalescing path after #111527 removed
channels.imessage.coalesceSameSenderDmsfrom the config schema and added its doctor migration. That dead path duplicated behavior now owned by releasedimsgand left stale tests and documentation behind.Why This Change Was Made
This rewrites the original contributor branch on current
mainand finishes the owner-boundary cleanup: it removes the hardcoded flag, 7-second compatibility debounce, URL-balloon classification branches,balloon_bundle_idplumbing, and obsolete path tests. Genericmessages.inboundbatching remains unchanged and still uses the bounded iMessage merge helper when operators configure it.The installed dependency path is source-backed. The plugin does not bundle an
imsgbinary; setup installssteipete/tap/imsg, whose formula currently selects released v0.13.2 (formula, release). In that release:coalesceURLPreviewMessagesvalidates chat, direction, sender/handle, row order, a five-second window, and URL containment before merging (MessageStore+URLPreviews.swift:12-93).User Impact
iMessage command-plus-URL compositions continue to arrive as one logical message through
imsg0.13.1 and newer, without an OpenClaw-specific setting or added DM delay.openclaw doctor --fixremoves the retired key from existing config. If an olderimsgstill emits split rows, operators should update it rather than re-enable a second OpenClaw coalescer.Release-note context: removes the retired OpenClaw-side iMessage split-send coalescer now that released
imsgowns the behavior. Credits Omar Shahine (@omarshahine), author of PR #108436 and reporter of #91243.Evidence
Exact head:
a50228f8b1f4e2575cd9e6928b58825d17f9432b.node scripts/run-vitest.mjs extensions/imessage/src/monitor.behavior.test.ts extensions/imessage/src/monitor.last-route.test.ts extensions/imessage/src/monitor.plugin-payload.test.tspassed 3 files and 199 tests (final rerun).node scripts/check-docs-mdx.mjs docs/channels/imessage.md docs/channels/imessage-from-bluebubbles.md docs/concepts/messages.mdpassed all 3 files.node scripts/docs-link-audit.mjschecked 6,157 internal links with 0 broken.node scripts/generate-docs-map.mjs --checkpassed after regenerating the removed heading projection.node scripts/check-changed.mjspassed in Blacksmith Testboxtbx_01ky6jk4yahr7dsdb1e3qcf8sz(extension production/test typechecks, zero lint findings, docs formatting, dependency pins, plugin boundaries, database guards, and 0 runtime import cycles): https://github.com/openclaw/openclaw/actions/runs/29978804320.$HOME/.claude/skills/autoreview/scripts/autoreview --mode branch --base origin/mainexited 0:autoreview clean: no accepted/actionable findings reported.git diff --checkpassed.No live iMessage send was performed from this machine, by design. The behavior contract is proven from the released upstream source plus focused OpenClaw tests.