Files
mnote/design/07-ai/process/7-35-reasonix-browser-test-contract-v1.md
T

147 lines
5.3 KiB
Markdown
Raw Normal View History

# Reasonix Browser Test Contract v1
## 状态
- 状态:process
- OwnerAI runtime / browser verification
- 背景:Reasonix 已能作为独立辅助 agent 执行只读审计,但浏览器验收若只输出自然语言结论,主控仍需重测,无法稳定节省 token。
## 目标
把 Reasonix 浏览器测试从“描述性结论”收口为“可审计证据包”。Codex/Hermes 主控只接受带截图、日志、网络、断言和环境前置条件的 Reasonix 浏览器结论。
## 非目标
- 不让 Reasonix 直接裁决业务 bug 是否完成。
- 不让 Reasonix 修改源码、提交 git、回滚文件。
- 不把浏览器测试结论写成长期产品事实源;长期事实仍以 bug/design/checklist 和真实验证日志为准。
## 合同
每个 Reasonix 浏览器测试任务必须产出以下文件:
```text
result.json
final.md
process-handoff.md
process-handoff.json
artifacts/
screenshots/
console.json
network.json
trace-or-steps.md
```
`result.json` 至少包含:
```json
{
"status": "passed | failed | blocked",
"run_id": "reasonix-...",
"target_url": "http://127.0.0.1:3000",
"environment": {
"dev_server_restarted": true,
"cache_cleared": true,
"browser_context": "isolated",
"auth_mode": "test-account",
"workspace_root": "/tmp/..."
},
"steps": [
{
"name": "upload first attachment",
"action": "drag file into editor",
"screenshot": "artifacts/screenshots/01-upload-first.png"
}
],
"assertions": [
{
"name": "attachment opens in tab after second upload",
"expected": "tab count increases and active tab kind is resource",
"actual": "click produced no tab change",
"passed": false,
"evidence": "artifacts/screenshots/04-click-after-second-upload.png"
}
],
"console_errors": [],
"network_failures": [],
"screenshots": [],
"modified_files": []
}
```
## 浏览器前置条件
- 测试前重启 `npm run dev:hot` 或复用主控明确提供的已重启服务。
- 使用全新 isolated browser context;清空 cookies、localStorage、sessionStorage、IndexedDB、Cache Storage。
- 默认使用 `http://127.0.0.1:3000/auth` 的测试账号快速登录。
- local-first 测试必须创建临时页面或临时 workspace,并记录路径。
- 所有上传文件路径必须记录,不能只写“上传文件”。
## 截图要求
用户可见 bug 至少保留:
- 初始状态截图。
- 关键动作后截图。
- 失败状态截图。
- 修复验证时的通过状态截图。
如果 bug 涉及 “点击无反应”,必须同时记录:
- 点击前 tab 列表。
- 点击后 tab 列表。
- 点击目标节点截图。
- console/network。
## 0524 试验集映射
`bugs/0524.md` 可作为第一批协同测试样本:
1. 我的空间拖入附件路径错误:
- 验收:上传后文件实际路径应在当前页面 bundle/下级,而不是与主文件夹同级。
- Reasonix 输出:文件树截图、实际磁盘路径、上传请求、编辑区附件截图。
2. 上传后文件冲突:
- 验收:本页面不误报自写冲突;新建页面不继承旧冲突状态。
- Reasonix 输出:冲突弹窗截图、页面切换后截图、console/network。
3. 隐藏本地 Markdown 标题设置:
- 验收:不同 workspace/source 的默认值区分,用户选择刷新后保持。
- Reasonix 输出:设置变更前后截图、刷新后截图、local/session storage 或后端请求证据。
4. Ctrl+Z/Ctrl+Y 删除链接:
- 验收:删除附件链接后 undo/redo 可恢复/再次删除。
- Reasonix 输出:键盘动作步骤、编辑区 DOM/截图、断言结果。
5. md 文件上传后黑色方块刷新变灰:
- 验收:上传前后和刷新后附件 icon 状态一致,或有明确缺失状态样式。
- Reasonix 输出:刷新前后截图、附件节点属性。
## 主控接受条件
Codex/Hermes 只有在以下条件满足时,才能把 Reasonix 浏览器结果作为验收证据:
- `result.json` 存在且能解析。
- 至少一张截图能直接显示用户可见状态。
- console/network 不为空时已被解释;为空时明确记录为空。
- `modified_files``[]``none`,确认 Reasonix 没有改源码。
- `process-handoff` 已 retain 到 Hindsight,主控可 recall。
## 失败处理
- 缺截图:结果降级为线索,不作为验收。
- 缺 console/network:UI 失败只可作为复现证据,不可作为根因证据。
- 没清缓存或没隔离 browser context:结果标记 `blocked``needs_rerun`
- Reasonix 修改源码:本次测试作废,主控检查 diff 后决定是否保留建议。
## 评价指标
- accepted_browser_findingsReasonix 浏览器发现最终被主控采纳的数量。
- false_browser_leadsReasonix 浏览器结论导致主控走错方向的数量。
- retest_required_ratio:主控必须完全重测的比例。
- artifact_read_time:主控读取证据包并形成判断所需时间。
- missing_artifact_count:缺失截图、console、network、断言的数量。
## Done Gate
- [ ] `reasonix-browser-tester` skill 已补入本合同的最小 artifact 要求。
- [ ] 使用 `bugs/0524.md` 中至少 1 个 bug 进行 Reasonix 浏览器试跑。
- [ ] 试跑后记录 accepted findings / false leads / retest required。
- [ ] 根据试跑结果更新本合同或 Reasonix skill。