feat(presence): delegate typing/paused through the send socket when the store is locked#272
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed June 10, 2026, 6:20 AM ET / 10:20 UTC. Summary Reproducibility: yes. from source inspection: current main returns the Review metrics: none identified. 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
Security Review findings
Review detailsBest possible solution: Merge the narrow IPC delegation after real locked-daemon proof is added, with release notes handled by the release process rather than this feature branch. Do we have a high-confidence way to reproduce the issue? Yes, from source inspection: current main returns the Is this the best way to solve the issue? Yes, the implementation direction is the narrowest maintainable fix because it reuses the existing send delegate socket and preserves the no-socket fallback. The remaining issues are real behavior proof and release-note hygiene, not a different architecture. Full review comments:
Overall correctness: patch is correct AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 00439d47a016. Label changesLabel justifications:
Evidence reviewedWhat 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
|
…he store is locked wacli presence typing|paused fails with a store-lock error whenever a sync --follow daemon is running, because it opens its own client instead of delegating to the daemon. send already routes through the .send.sock IPC; this extends the same mechanism to chat presence so the typing indicator works while the sync daemon holds the lock. Mirrors the existing react delegation path. No behavior change when no daemon socket is present (falls back to the original lock error). Closes openclaw#239
cf5eb9b to
238151f
Compare
|
Maintainer update on head 238151f: I strengthened the branch, but I am intentionally not merging it yet. What changed beyond the original patch:
Local verification:
CI on 238151f passed: test, linux-release-builds, docker. Live-provider blocker: a safe authenticated local WhatsApp account is not available in this checkout. Redacted read-only checks show accounts=[] and the default store authenticated=false, connected=false. Because issue #239 was withdrawn and the prior review's material requirement is real locked-daemon WhatsApp presence behavior, the remaining owner decision is: provide a safe live account/message target for presence proof, or close #272 as withdrawn/unproven. I am not closing or merging it autonomously. |
|
Live proof attempt on current head
Independent UI observation limitation:
I am not merging on this proof. The exact remaining requirement is a safe second WhatsApp account/device/chat where the recipient-side real WhatsApp client can observe the sender's typing indicator after |
|
Owner waiver and final proof for head
Accepted evidence before merge:
Merging with contributor credit preserved from @kidshaker's authored feature commit. |
steipete
left a comment
There was a problem hiding this comment.
Approved with owner waiver recorded and current-head CI green.
|
Landed with the item-specific owner waiver recorded above.
Thank you, @kidshaker. |
Problem
wacli presence typing|pausedfails with a store-lock error whenever async --followdaemon is running. The presence command opens its own client and tries to take the exclusive store lock, but the daemon holds that lock continuously, so presence always errors withstore is locked.The
sendfamily of commands already solves this: when the lock is held they delegate the operation to the running daemon through the.send.sockUnix socket. Chat presence was never wired into that path, so the WhatsApp "typing…" indicator can't be sent while the sync daemon runs.Change
Extends the existing send-delegation mechanism to chat presence, mirroring the
reactpath exactly:send_ipc.go: addspresence_state/presence_mediafields tosendDelegateRequest, acase "presence"inexecuteDelegatedSend, and anexecuteDelegatedPresencehandler that callsa.WA().SendChatPresence(...)on the daemon side.presence.go: whennewAppfails on a held lock,runPresencenow callstryDelegateSend(same pattern assend react) instead of returning the lock error.send_ipc_test.go: JSON round-trip test for the new presence fields.No behavior change when no daemon socket is present:
tryDelegateSendonly triggers when the error is a lock error and the socket exists, otherwise the original error is returned unchanged.Testing
go build ./...✓go vet ./cmd/wacli/✓go test ./cmd/wacli/✓ (existing suite + new test)Closes #239