Record project 6275 PI 409 DOC_BUSY plus Docker screenshots, mark CHAT-INTENT-STATE PASS, and archive the short-term so CURRENT has no in_progress rows. Co-authored-by: Cursor <cursoragent@cursor.com>
7.2 KiB
7.2 KiB
对话意图与运行态可恢复性 测试报告
一、 测试背景 (Background)
真实会话出现诊断探针污染、只读“总结”误触发文档写任务、刷新后错误动作退化、文档被编辑时无持续状态提示。本报告验证本轮代码整改;真实 PI 浏览器验收须在合入 dev 并重建容器后补录。
二、 测试目标 (Test Objectives)
- 文档名词和只读动作不触发
task_runs - 明确写动作仍正确映射
intake/user_requirements - 错误信息、恢复动作与任务请求可从历史消息重建
- 文档租约可经项目文档 API 投影并显示为编辑中
- 文档忙分型为
DOC_BUSY,不提供误导性重试动作 - Go 与前端全量基础门禁通过
三、 测试方案与环境 (Test Plan & Environment)
- 日期:2026-09-13 UTC
- 分支/worktree:
fix/conversation-intent-state/.worktrees/fix-conversation-intent-state - 后端:Go 单元与
-short全量套件;未启动 worktree 容器 - 前端:Node test + Vitest + TypeScript/Vite production build
- 现场取证:dev PostgreSQL 只读查询;未修改用户消息、任务或文档
四、 预期结果 (Expected Results)
| 场景 | 预期 |
|---|---|
总结一下用户初始需求表 |
进入服务端鉴权只读总结链路,返回已有正文摘要且不创建任务 |
请开始编写用户初始需求表 |
映射 intake |
| 失败消息刷新 | 恢复 errorInfo.actions 与 taskRequest |
| 文档有有效租约 | API 返回 holder/到期/心跳;正文和抽屉显示编辑中 |
| 并发写命中租约 | DOC_BUSY,不创建误导性重试动作 |
五、 实际测试结果与判定 (Actual Results & Evaluation)
用例 A:只读负例与明确写入正例
- Input:
tsx --test src/engine/templateMatch.test.ts - Actual Output: 12 tests PASS;含 5 个只读负例与 2 个明确写入正例
- Evaluation: PASS
用例 B:刷新后错误/任务上下文恢复
- Input:
vitest run ...chatWindowArtifact.test.ts - Actual Output: 结构化错误动作、原请求与 legacy busy 分型测试 PASS
- Evaluation: PASS
用例 C:租约服务端投影与前端合并
- Input:
go test -short ./internal/docgov;vitest run ...deliverableSync.test.ts - Actual Output: active lease holder/expiry/heartbeat 投影与前端映射 PASS
- Evaluation: PASS
用例 D:真实现场状态核对
- Input: 只读查询
sess-p143-u9、task_runs、task_run_events、document_records - Actual Output: 误启动 run
run_1789270446838831656于 03:42 UTC 完成,质量 100;租约已释放;用户数据未被本轮修改 - Evaluation: PASS(根因证据);不代表修复后 E2E
用例 E:真实 PI + 浏览器刷新/双标签页
- Input: 新建项目
INTENT双标签-061002(id 6275,禁止 143)/sess-p6275-u10;Tab APOST /api/v1/tasks/runs「请开始编写用户初始需求表」真实pi-agent;租约出现后 Tab B 再 POST;浏览器双标签打开同一项目 - Actual Output:
- health/ready schema 38、
agent_backend=pi-agent - Tab A
202run_1789452602295343365status=running;2ms 内lease_holder_type=squad - Tab B HTTP 409
DOC_BUSY,响应无run_id;PGtask_runs仅 1 行 - 聊天窗 assistant
error_info.code=DOC_BUSY且actions=[],另有task_status=running占位;再次 GET window 同集 - 真实 PI completed(约 280s,质量 100);租约在终态探测后 1ms 已空(无需客户端刷新)
- 终态后再 GET window:DOC_BUSY 卡仍
actions=[],无重试动作 - 浏览器(Docker Playwright,宿主机缺 libatk):双标签可见「本文档正由【项目助手】编辑/生成中」、聊天
DOC_BUSY、发送按钮 disabled、刷新后仍无重试。截图assets/2026-09-15-conversation-intent-dual-tab/screenshots/
- health/ready schema 38、
- Evaluation: PASS
- 性能与耗时: API 活验 281s;Docker UI 4.4s。产物:
assets/2026-09-15-conversation-intent-dual-tab/live.json、playwright-docker.json - 诊断污染:
sess-p143-u9未写入、未删除历史探针
用例 F:dev 集成冒烟
- Input:
go vet ./...、go test -short ./...、前端测试/构建、/health、/ready - Actual Output: 全部 PASS;前端 Node 187 + Vitest 24;
dev rebuild后/ready返回 HTTP 200,数据库、schema 27 与 task store 均 ready - Evaluation: PASS;但
env-service.sh dev restart只重启旧镜像,不能作为新代码已部署的证据
用例 G:服务端鉴权只读文档总结
- Input: 原句意图测试、协调层只读 reader 测试、文档别名选择测试、提示注入隔离测试
- Actual Output: 原句识别为
QUERY_DOC_STATUS/query_topic=doc_summary;正文只从服务端项目/阶段权限过滤后的 reader 获取;无PendingAction;生成目录仅允许reply.md - Evaluation: PASS
用例 H:dev 真实 PI 隔离会话总结
- Input:
fixture-summary-20260913-codex-01/ project 143 /总结一下用户初始需求表 - Actual Output:
QUERY_DOC_STATUS、query_topic=doc_summary、target_doc=用户初始需求表、reply_source=pi-agent、pending_action=null;返回现有文档实质摘要;task_runs前后均为 0;租约前后为空;用户原会话sess-p143-u9最大消息 ID 仍为 567 - Evaluation: PASS;fixture 的 2 条消息、1 条会话及 2 个隔离对话工作区已精确清理,清理后消息/run 均为 0
用例 I:容器代码新鲜度
- Input: 先
dev restart,再重建 app 镜像后重复用例 H - Actual Output: restart 后仍返回旧版
CASUAL_CHAT;重建后返回新版QUERY_DOC_STATUS/doc_summary - Evaluation: 首次 FAIL、整改后 PASS;
./scripts/env-service.sh dev rebuild已实跑通过,集成冒烟统一改用该命令
用例 J:文档 busy 服务端预检
- Input: 文档持有有效人工租约时请求
/api/v1/tasks/runs,携带明确写入语句 - Actual Output: HTTP 409 /
DOC_BUSY;响应不含run_id;服务端持久化 user + assistant 两条消息,assistant 含error_info.actions=[]与原task_request - Evaluation: PASS;刷新后仍可恢复“当前请求未创建新任务”的状态卡,且不会显示重试按钮
六、 自动化测试套件汇总 (Test Suite Execution)
go vet ./... PASS
go test -short ./... PASS(全部 Go 包)
cd web && npm test PASS(Node 187 + Vitest 24)
cd web && npm run build PASS(Vite 生产构建)
git diff --check PASS
硬编码 localhost 调试上报扫描 PASS(0 命中)
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
代码级、构建门禁、真实 PI 只读总结与 新建项目双标签 busy 已通过。项目 6275 / run_1789452602295343365:并发写 409 DOC_BUSY 不新增第二 run;刷新后 actions=[];PI 终态后租约自动解除。浏览器双标签截图见 assets/2026-09-15-conversation-intent-dual-tab/screenshots/。真实会话 sess-p143-u9 中的诊断消息与误启动产物只记录证据,不在未获确认时删除或回滚。production_ready 仍为 no(CI 三工作流 E2E / 前端抽检等其它 blocker)。