test(zcode): MCP 提示词测试的陈旧断言 —— b0c8719 加方向判据时漏改本文件
## 现象 跑 zcode-mail-bridge 全套(AgentMail 自身 MCP 服务面的测试), `prompt.test.mjs` 红 1 格:「带 in_reply_to 时要说清是回哪封」。 ## 根因:不是回归,是 b0c8719(09-30)漏改测试b0c8719给四桥的 in_reply_to 加了**方向判据**: 只有 parent_from === 自己 时才说「回的是你那封」, 否则是多方线索里的他人续谈(单向续信链曾被逐封误读成双向对话)。 那次改了 lib/relay-policy.js + src/prompt.mjs + relay-policy.test.mjs, **漏改了 prompt.test.mjs**。旧夹具只传 in_reply_to、断言旧的无条件文案 「回的是你那封:m0」,而新代码正确地不再指认方向 ⇒ 假红。 实测三场景确认代码行为符合b0c8719设计意图: 只有 in_reply_to → 「回复到了」但不指认方向 ✓(退回旧行为) + parent_from=自己 → 「回的是你那封:m0」 ✓ + parent_from=别人 → 「多方线索里的续谈…」 ✓ ## 修法 夹具补上 parent_from,并把三个方向场景钉全(真回复 / 多方续谈 / 服务端未升级),含反向断言。 ## 变异验证 变异①:prompt.mjs 丢掉 parent_from===agentName 守卫 → 红 1 格 ✓ 变异②:relay-policy 的 mine 永真 → 红 1 格 ✓ 复原后 16/16 绿;全套 25 文件 397/397。 ## 附带发现(未改) `node --test test/`(目录级)会报一个 test:1:1 的幽灵 fail—— node 把 test/manual/(e2e 手册与证据 json)当测试目录递归了。 用 `node --test "test/*.test.mjs"` 跑即干净。manual/ 内容非自动测试,保留不动。
This commit is contained in:
@ -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 来信:回信责任必须不同', () => {
|
||||
|
||||
Reference in New Issue
Block a user