写入 · crm-basic
This content is not available in your language yet.
本页 3 个用例共用基础项目 crm-basic@1.xh
(下载后导入星汉即可查看初始数据)。每个用例的执行完全独立:各自导入
全新项目、各自开新会话;标了步骤数的用例是多步 —— 多步在同一会话里连续
执行,考连续作业。
把赢单改成已成交
Section titled “把赢单改成已成交”L2-write-status · L2 | 审批后单格写入——存储形态须是 optionId | 审批:approve(模拟批准)
题面
把「客户」表里远山科技的状态改成「已成交」。验收
# 写类用例:审批显式 approve(缺省是 deny)——「批准后写没写对」是被考的能力面。# 终态查引擎:已成交应从 1 家(晨光教育)变 2 家。写成文本而不是 optionId 的话# 筛不出来,正好考写入的存储形态正确性- type: final_state query: table: 客户 filters: - { field: 状态, op: "=", value: opt_won } expectCount: 2- type: trajectory forbidTools: [run_sandbox, delete_record]// 差分(引擎审计日志说了算):本轮改动应**恰好一笔**、只落在「客户」表、// 只动状态一个字段且写的是 optionId。终态断言抓"改对了没有",这里抓// "有没有顺手多改"——多改一行/碰了别的表,终态可能碰巧仍对,这里必红。// 注:断言贴 op 参数形状(fieldId/newValue),agent 若改走批量 op 需同步进化。expect(changesets.map((c) => c.table)).toEqual(['客户'])const calls = changesets.flatMap((c) => c.funCalls)expect(calls.length).toBe(1)expect(calls[0].args.fieldId).toBe('fld_cust_status')expect(calls[0].args.newValue).toBe('opt_won')复现:
pnpm --dir packages/agent-eval eval --only L2-write-status改完再改回去(多步)
Section titled “改完再改回去(多步)”L2-write-then-revert · L2 | 多步连续写入+会话记忆——记得住上一步改了谁 | 审批:approve(模拟批准) | 2 步(同会话连续执行,失败即停)
题面(第 1 步)
把「客户」表里远山科技的状态改成「已成交」。验收(第 1 步)
# 已成交从 1 家(晨光教育)变 2 家 —— 与 L2-write-status 同判据- type: final_state query: table: 客户 filters: - { field: 状态, op: "=", value: opt_won } expectCount: 2- type: trajectory forbidTools: [run_sandbox, delete_record]题面(第 2 步)
刚才那家改错了,把它的状态改回「跟进中」。验收(第 2 步)
# 改回去之后「已成交」应回到 1 家 —— 如果 agent 忘了第一步改的是谁(乱猜# 一家改),这里的行数对不上- type: final_state query: table: 客户 filters: - { field: 状态, op: "=", value: opt_won } expectCount: 1# 且远山科技应是「跟进中」——只查上一条会漏"把别家也顺手改了"的情况的一半,# 这条钉死目标行本身- type: final_state query: table: 客户 filters: - { field: 客户名称, op: "=", value: 远山科技 } - { field: 状态, op: "=", value: opt_active } expectCount: 1- type: trajectory forbidTools: [run_sandbox, delete_record]复现:
pnpm --dir packages/agent-eval eval --only L2-write-then-revert审核单模式:改动进单不落 live
Section titled “审核单模式:改动进单不落 live”L2-propose-write · L2 | propose 会话:写改动进审核单(F1 回归——live 零直写+恰好一张 open 单)
题面
把「客户」表里远山科技的状态改成「已成交」。验收
# propose 语义:live **不变**(已成交仍只有晨光教育 1 家)——改动进了审核单- type: final_state query: table: 客户 filters: - { field: 状态, op: "=", value: opt_won } expectCount: 1- type: trajectory forbidTools: [run_sandbox, delete_record]// 双证:①live 审计日志零写入(差分为空——比终态更强,连"改了又改回"都抓)expect(changesets).toEqual([])// ②改动确实到了单里:恰好一张 open 审核单const prs = await env.listPrs()expect(prs.filter((p) => p.status === 'open').length).toBe(1)复现:
pnpm --dir packages/agent-eval eval --only L2-propose-write