Chen Wei's intake request against a bd_intake snapshot now creates a run, and the chat window still returns the turn after refresh. Co-authored-by: Cursor <cursoragent@cursor.com>
5.0 KiB
5.0 KiB
任务作用域 409 与对话丢失 测试报告
一、 测试背景 (Background)
dev 上以用户「陈威」在项目 6579 发送「编写初始用户需求表」时,接口返回 TASK_SCOPE_UNRESOLVED(409)。刷新页面后该会话没有任何消息。
根因:2026-09-19 任务键命名空间化之后,实例 366 的快照任务键是 bd_intake,前端仍提交旧键 intake。作用域解析做精确匹配,访问门在找不到任务时直接放行,于是请求在创建任务之前以 409 结束,用户消息也还没写入。
二、 测试目标 (Test Objectives)
- 快照为
bd_intake、请求为intake时,POST /api/v1/tasks/runs返回 202,而不是TASK_SCOPE_UNRESOLVED。 - 成功路径写入用户句与助手占位,刷新用的消息窗口能读回这两条。
- 作用域仍无法解析时,409 之前先落库用户句和失败回复(单测覆盖;本次陈威场景已不再走该分支)。
- 验收后端为真实
pi-agent(MiniMax-M2.7-highspeed),不用 stub 输出充当验收数据。
三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux。dev 编排
agent-dev,HTTP:8080,业务库:5433。在fix/taskrun-scope-persist-2026-09-21上执行./scripts/env-service.sh dev rebuild。 - 后端:
go vet ./...;go test -short -count=1 -timeout 20m ./...。 - 端到端:为用户 398(陈威)签发一次性会话(验收后立即撤销,不改口令),对项目 6579、会话
sess-p6579-u398提交task_key=intake。
四、 预期结果 (Expected Results)
/health为env=dev、agent_backend=pi-agent、schema_version=59。- 创建任务 HTTP 202,
status=running,workflow_stage_key=V0.1_triage。 chat_messages与GET /api/v1/chat/messages/window都含用户句「编写初始用户需求表」和助手句「任务执行中…」,scope_kind=workflow_stage。
五、 实际测试结果与判定 (Actual Results & Evaluation)
用例 1:dev 健康与真实 pi-agent
- 测试输入 (Input):
curl -sf http://127.0.0.1:8080/health;curl -sf http://127.0.0.1:18865/health。 - 实际输出 (Actual Output):
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":59,"schema_ready":true,"task_store_ready":true}
pi-agent:ok=true,model_id=MiniMax-M2.7-highspeed。
- 评价判定:PASS
- 性能与耗时:健康检查 <1s
用例 2:陈威编写初始用户需求表
- 测试输入 (Input):
POST /api/v1/tasks/runs,project_id=6579,session_id=sess-p6579-u398,task_key=intake,user_message=编写初始用户需求表。 - 实际输出 (Actual Output):HTTP 202
{"run_id":"run_1789967333594919025","status":"running"}
task_runs:task_key=intake,workflow_stage_key=V0.1_triage,status=running,无 error。
chat_messages:
4362 | user | TRIGGER_TASK | workflow_stage | V0.1_triage | 编写初始用户需求表
4363 | assistant | TRIGGER_TASK | workflow_stage | V0.1_triage | 任务执行中…
- 评价判定:PASS。旧键已解析到 V0.1,任务已创建,对话已落库。
- 性能与耗时:接口约 0.3s 返回 202(生成仍在后台进行)。
用例 3:刷新窗口
- 测试输入 (Input):
GET /api/v1/chat/messages/window?session_id=sess-p6579-u398&days=7(同一用户)。 - 实际输出 (Actual Output):HTTP 200,1 个日期桶、2 条消息:用户「编写初始用户需求表」、助手「任务执行中…」,阶段键
V0.1_triage。 - 评价判定:PASS。刷新读取不再为空。
- 性能与耗时:约 0.3s
六、 自动化测试套件汇总 (Test Suite Execution)
go vet ./...:通过。- 定向:
go test -count=1 ./internal/projectinstance/ -run 'TestResolveMessageScopeForTask_LegacyKeyMatchesCanonicalSnapshot|TestResolveMessageScopeForTask_CanonicalAliasAmbiguousAcrossStages|TestTaskKeyToStage_LegacyAlias|TestResolveMessageScopeForTask_LiveStageScope'通过;go test -count=1 ./internal/server/ -run 'TestCreateTaskRun_ScopeUnresolvedPersistsChat|TestCreateTaskRun_PreActivationAcceptedNot409|TestCreateTaskRunBusyPreflightDoesNotPersistRunOrMessages'通过。 go test -short -count=1 -timeout 20m ./...:internal/projectinstance、internal/server通过。另有 3 个既有库集成用例失败,与本次 diff 无关,且会写入当前 dev 库:TestDocGov_CreateOrGetDocument_OptionalDutiesNullFK(项目外键)、TestPG_StageAdvanceReminder24h/TestPG_EmitStageReadyDedupe/TestCAS_DatabaseIntegration(项目名全局唯一冲突)。
七、 测试结论与后续优化建议 (Conclusion & Next Steps)
达到合入 dev 的标准:陈威场景不再 409,刷新后对话还在。run_1789967333594919025 在取样时仍为 running,正文生成由真实 pi-agent 继续。test/main 不晋升,不改 production_ready。
后续:追踪面板改为对话输出在独立任务中做,不纳入本次缺陷修复。