Skip to content

写入 · crm-basic

This content is not available in your language yet.

本页 3 个用例共用基础项目 crm-basic@1.xh (下载后导入星汉即可查看初始数据)。每个用例的执行完全独立:各自导入 全新项目、各自开新会话;标了步骤数的用例是多步 —— 多步在同一会话里连续 执行,考连续作业。

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')

复现:

Terminal window
pnpm --dir packages/agent-eval eval --only L2-write-status

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]

复现:

Terminal window
pnpm --dir packages/agent-eval eval --only L2-write-then-revert

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)

复现:

Terminal window
pnpm --dir packages/agent-eval eval --only L2-propose-write