Repository navigation
fix(feishu): checked receipt for a saved private-chat target - #36
Conversation
A Feishu user target that names its private chat (openId + chatId) can now be posted with receipt: true. The receipt must match that exact chat id; an open_id-only user target still refuses with capability-unavailable. Needed by BotHarness/DeepSeekBot#3842 so a Bot's proactive DM to its owner is delivered with a checked receipt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lpx6qoDVkpmp8Trm3GtaAJ
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
Requested by Vain · project thread
Why
Part of BotHarness/DeepSeekBot#3842. A Bot's proactive post always asks for a checked receipt, but Feishu only gave receipts for group targets, so a Bot could never proactively DM its owner (
capability-unavailable).Change
delivery-service.sendChecked: a Feishuusertarget that names its private chat (openId+chatId, already accepted bynormalizeRoute) haschatIdas its receipt conversation.FeishuRuntime.sendProactiveText: allowsreceipt: truefor such a target. It still sends byopen_idand requires the responsechat_idto equal that exactchatId, otherwisesend-result-unknown.open_id-only user target still refuses withcapability-unavailablebefore sending.Verification
proactive-markdown.test.mjs) and service (delivery-service.test.mjs) cover the matched receipt, the mismatched chat (send-result-unknown) and the open_id-only refusal.node --test test/delivery-service.test.mjs test/channels/feishu/*.test.mjs: 803 pass, 0 fail.npm testshows the same timing failures (device auth, stream stop, Discord API) on cleanmainin this container. They are unrelated to this change.Generated by Claude Code
Summary by CodeRabbit