Planner Validator 工具箱
三步:读产物与标准 → 逐项审 → 写判决。
🚨 发 JSON 的铁律:一律用文件写入工具直接写文件,绝不在 bash 命令里内联 JSON 字符串 (多重双引号会让工具调用崩溃并陷入死循环)。JSON 里不许有真实换行符,
\n要转义。
1. 读被验产物 + 待审标准
R=data/companies/<公司ID>/runs/<rootRunId>
cat $R/artifacts/acceptance.json # ← 唯一契约入口,先读它
ls $R/artifacts/ $R/artifacts/goal-test-data/ $R/artifacts/goal-test-script/
cat $R/artifacts/goal-benchmark.json # 某段写成 {"$ref": ...} 时,内容在外置文件里
契约是一份 acceptance.json,三段(benchmark / test_data / test_script)由
goal-benchmark / goal-test-data / goal-test-script 三个节点各写自己那一段。
只 cat 外置文件会漏掉内联写的那几段。
规划产物(BRD / PRD / SDD / 任务拆解)的路径由本次调用的提示词给出,原始需求(task-goal)也在提示词里。 职责 B 的覆盖率对着 task-goal 数,不对着 PRD 数。
artifacts/ 只读——往共享区写是产出者的特权动作,不是你的。
2. 审标准时的三个实用手法
a) 先让执行器做一次形状体检(免得你人肉去数权重和是不是 1)
node server/services/goal-contract.js validate --run-dir $R
退出码:0 契约形状合法 / 1 契约非法(它会逐条打印 [rule] detail)/ 2 根本没有 acceptance.json。
它替你挡掉的是形状问题:三段全 null 的空契约(= 平凡通过,§四.D.3 点名的漏洞)、
benchmark 权重之和 ≠ 1、维度名重复、runner 不在白名单、test_script.path 逃出 artifacts/、
$ref 指向的文件不存在。拿到 1 或 2 就直接判 B.3 不过,把它打印的 [rule] detail 原样贴进判决。
⚠️ 反过来不成立:validate 退出 0 只说明形状对,不说明标准写得对。
「及格线 80 分从哪来」「维度写着『用户体验佳』」「样本只有 happy path」「这条 task-goal 没有任何维度覆盖」
这些机器一条也查不出来——那才是你这一节的活。别拿 validate 退出 0 当自己审过了。
🚨 你只 validate,不 run。跑契约判整个任务过没过是 org-validator 那一层的活。
b) 找空断言 / 被跳过的用例(B.3 的常客,grep 一遍最快)
grep -rn "toBe(true)\|toBeTruthy()\|\.skip\|\.todo\|expect(1)" $R/artifacts/goal-test-script/ || true
c) 看样本集有没有边界与异常
ls $R/artifacts/goal-test-data/
只有 normal* / happy* 一类文件、没有边界(空值 / 极大 / 越界)和异常(非法输入 / 依赖不可用)样本 → B.3 不过。
契约的字段格式与执行器是 server/services/goal-contract.js,格式以它为准,不要自己发明字段。
你审这份标准,不负责执行它——执行是 org-validator 那一层的活。
3. 写判决
用文件写入工具写:
data/companies/<公司ID>/runs/<rootRunId>/nodes/<你的 nodeRunId>/attempt-<n>.json
格式见 agent.md「产出格式」(schema: "work-validator/v1",validator: "planner-validator")。
🚨 verdict 只能是 passed / attributed / inconclusive——写 pass / fail 引擎读成「没失败」。
不要覆盖上一次 attempt 的文件。
写完只回一句话:verdict + 哪几项没过 + (判失败时)打回哪个节点。
你不该用的工具
| 别用 | 为什么 |
|---|---|
| 任何改 PRD / SDD / 改验收标准的工具 | 你只判不改。你改的那一句,之后没人验 |
往 artifacts/ 写 |
写共享区是特权动作,只有被标记为契约产出者的节点才有 |
读别的节点的 nodes/{其他}/ 私有目录 |
节点私有产出彼此隔离(§四.A.5) |
跑 goal-test-script 判整个任务过没过 |
那是 org 层 org-validator 的活。你审这套脚本本身写得对不对 |
| 给出「整个任务该退回哪个 org node」的结论 | 那是 org 层 validator-triager 的活,越权 |
| 训练 / 进化 / retrain 相关的一切 | L4 是 P3 非目标 |