名称:验证输出 描述:在完成前验证输出是否符合所需模式的模式。在写入最终输出前使用以确保有效性。 允许工具:读取,Bash
验证输出技能
使用自动验证确保输出符合所需模式的模式。
何时使用
- 在写入最终输出文件之前
- 完成任务后
- 生成结构化JSON输出时
快速参考
写入前验证:
./scripts/validate.sh <模式名称> <文件路径>
可用模式
| 模式 | 使用者 | 输出路径 |
|---|---|---|
demand |
产品经理 | memory/reports/demand.json |
design |
架构师 | memory/reports/designs/*.json |
task-output |
实施者 | memory/tasks/*/output.json |
verification |
验证者 | memory/tasks/*/verification.json |
reflection |
反思者 | memory/reflections/*.json |
evolution-proposal |
演进者 | memory/evolution/*.json |
contract |
执行者 | memory/contracts/*.json |
验证流程
步骤1:确定您的模式
基于您的代理角色:
产品经理代理 → demand.schema.json
架构师代理 → design.schema.json
实施者代理 → task-output.schema.json
验证者代理 → verification.schema.json
反思者代理 → reflection.schema.json
演进者代理 → evolution-proposal.schema.json
步骤2:将输出写入临时位置
写入(memory/tasks/{id}/output.json.tmp, 内容)
步骤3:验证
./scripts/validate.sh task-output memory/tasks/{id}/output.json.tmp
步骤4:如果有效,移动到最终位置
mv memory/tasks/{id}/output.json.tmp memory/tasks/{id}/output.json
步骤5:如果无效,修复并重试
常见验证错误及修复方法:
| 错误 | 修复方法 |
|---|---|
'X' 是必需属性 |
添加缺失字段 |
'Y' 不是 ['a', 'b'] 中的一个 |
使用有效的枚举值 |
'Z' 不是 'array' 类型 |
将值包装在数组中:[值] |
不允许附加属性 |
删除额外字段 |
输出格式:紧凑JSON
所有代理输出必须是紧凑JSON(单行,无额外空格):
{"task_id":"001","status":"pre_complete","knowledge_updates":[],"reflection":{"what_worked":[],"what_failed":[],"patterns_noticed":[]}}
必需字段(所有代理)
每个输出必须包含:
{"knowledge_updates":[{"category":"codebase","content":"string","confidence":"certain"}],"reflection":{"what_worked":["string"],"what_failed":["string"],"patterns_noticed":["string"]}}
如果没有更新,则为空数组:
{"knowledge_updates":[],"reflection":{"what_worked":[],"what_failed":[],"patterns_noticed":[]}}
有效值:
category:"codebase"|"convention"|"decision"|"gotcha"confidence:"certain"|"likely"|"uncertain"
写入前验证模式
推荐的代理模式:
1. 在内存中构建输出对象
2. 写入 {输出路径}.tmp
3. 运行:./scripts/validate.sh {模式} {输出路径}.tmp
4. 如果验证通过:
→ mv {输出路径}.tmp {输出路径}
→ 日志:"输出已验证并写入"
5. 否则:
→ 读取验证错误
→ 修复输出对象
→ 从步骤2重试
→ 最多重试3次,然后报告验证失败
常见错误
- 忘记
knowledge_updates(即使是空数组) - 忘记
reflection字段 - 使用无效的枚举值(检查模式允许的值)
- 缺少必需的嵌套字段
- 类型错误(字符串而不是数组等)
- 使用YAML而不是JSON
- 美化打印JSON(使用紧凑格式)
原则
- 写入前验证 - 绝不输出无效数据
- 模式即法律 - 缺少字段 = 被执行者拒绝
- 空值有效 -
"knowledge_updates":[]是可以的 - 快速失败 - 在错误传播前捕获
- 紧凑JSON - 单行,无格式化