diff --git a/plugins/zcode-mail-bridge/test/prompt.test.mjs b/plugins/zcode-mail-bridge/test/prompt.test.mjs index d8f6e29..6aea410 100644 --- a/plugins/zcode-mail-bridge/test/prompt.test.mjs +++ b/plugins/zcode-mail-bridge/test/prompt.test.mjs @@ -28,8 +28,24 @@ test('新任务:说明这是新邮件,并给出发件人/主题/邮件 id', test('★ 回信不是新任务:带 in_reply_to 时要说清是回哪封', () => { // 模型分不清「新任务」与「回信」时,会把对方一句「已收到」再当待办做一遍。 - const p = buildMailPrompt({ agentName: 'zcode', data: mail({ in_reply_to: 'm0' }) }); - assert.match(p, /回的是你那封:m0/); + // + // ★ 2026-10-02 修陈旧断言(b0c8719 漏改):b0c8719 给 in_reply_to 加了 + // **方向判据**——只有 parent_from === 自己时才说「回的是你那封」 + // (单向续信链曾被逐封误读成双向对话)。本测试当时只传了 in_reply_to, + // 断言的却是旧的无条件文案 ⇒ 假红。夹具补上 parent_from,并顺手把 + // 三个方向场景钉全(改 relay-policy 而漏改 prompt 的测试正是这个教训)。 + const mine = buildMailPrompt({ agentName: 'zcode', data: mail({ in_reply_to: 'm0', parent_from: 'zcode' }) }); + assert.match(mine, /回的是你那封:m0/); + + // 多方续谈:父邮件是别人发的,不得宣称「回的是你那封」 + const others = buildMailPrompt({ agentName: 'zcode', data: mail({ in_reply_to: 'm0', parent_from: 'pi' }) }); + assert.doesNotMatch(others, /回的是你那封/); + assert.match(others, /续谈/); + + // 服务端未升级(无 parent_from):退回「回复到了」但同样不指认方向 + const noParent = buildMailPrompt({ agentName: 'zcode', data: mail({ in_reply_to: 'm0' }) }); + assert.doesNotMatch(noParent, /回的是你那封/); + assert.match(noParent, /回复.*到了|回复到了/); }); test('★ 人来信 vs Agent 来信:回信责任必须不同', () => {