交付证据闸门
先判断声明是否被证据支持,再汇报进度。不要把“文件存在”“脚本跑过”“数据库有状态”自动升级为外部完成。
核心判决
把每条声明放入以下证据链:
claim:声称完成了什么。artifact:本地产物是否存在。local_validation:格式、测试或脚本是否通过。external_acceptance:真实平台、公开页面、收件箱、支付系统或用户端是否确认接受。business_proof:订单、结算、退款和复购等经营结果是否存在。
不得跨级推断。artifact 只能证明本地有产物,不能证明已发布;published 字段只能证明系统记录了状态,不能证明公开可读;支付订单不能自动证明已结算收入。
标准状态
只使用以下状态:
proven:指定验收面已经核验,证据可定位且时间有效。local_only:本地产物或本地校验成立,外部结果未核验。needs_external_acceptance:完成声明依赖真实外部界面、回执或读取结果。stale:证据有日期,但已超过任务允许的新鲜度。contradicted:当前证据直接否定声明。unknown:证据不足,不能判断。
同时给出置信水平:high、medium、low 或 unknown。
工作流
1. 找真源
先找并完整读取 SOURCE_OF_TRUTH.md、项目规则、验收说明和当前台账。存在多个真源时,按作用域和更新时间列出冲突,不要静默选择。
2. 拆声明
把复合句拆成原子声明。例如“已部署并开始赚钱”至少拆成:
- 代码已部署;
- 公开服务可访问;
- 支付链路可用;
- 存在真实订单;
- 存在已结算收入。
3. 做只读预检
运行:
python3 scripts/audit_delivery.py \
--root /path/to/project \
--claim "已经发布" \
--claim "已经产生收入" \
--fresh-days 30 \
--output /path/to/audit.json
该脚本只读取文件名、路径、大小和修改时间,不读取文件正文,不访问网络,不修改被审计项目。把脚本结果视为“证据候选”,不要视为最终判决。
4. 核验对应验收面
根据声明选择验收面:
| 声明 | 最低验收面 |
|---|---|
| 可发布、可导入 | 目标平台真实导入或预检结果 |
| 已发布 | 公开 URL、未登录读取或平台回读 |
| 已部署 | 生产 URL、健康检查或生产日志 |
| 已同步 | 目标端回读、差异比对或校验和 |
| 已导出、已恢复 | 清单、数量差异、正文可读性和缺口 |
| 已付款、已赚钱 | 订单、支付、退款与结算分别核验 |
外部界面无法访问时,状态必须停在 needs_external_acceptance。
5. 输出审计报告
按以下结构输出:
## 判决
| 声明 | 状态 | 置信 | 证据 | 缺口 |
|---|---|---|---|---|
## 当前可确认
- ...
## 尚不能确认
- ...
## 下一项最小验收动作
1. ...
每条证据必须带路径、URL、回执标识或精确日期。动态事实未带日期时,默认不能作为当前证据。
边界
- 不读取或上传凭据、Cookie、浏览器历史和私密会话正文。
- 不因找到
done、published、ready等词就判定完成。 - 不把历史 AI 总结当作当事人原话或当前事实。
- 不在没有外部回执时使用
proven。 - 不修改原项目;用户明确要求修复时,再进入单独的变更任务。
详细证据模型见 references/evidence-model.md。3 个可复现使用场景见 examples/cases.json。SkillHub 商品页字段见 assets/skillhub-listing.json。