Files
Agent-System/.doc/test-reports/2026-09-21-taskrun-scope-persist-test-report.md
T
weichenandCursor 7ff0fb5cdd docs(test): record task scope alias acceptance on dev
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>
2026-09-21 05:09:39 +00:00

5.0 KiB
Raw Blame History

任务作用域 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。

后续:追踪面板改为对话输出在独立任务中做,不纳入本次缺陷修复。