Files
Agent-System/.doc/test-reports/2026-09-21-intent-workflow-scoping-test-report.md
weichenandCursor ffd00e70ed docs(test): archive intent workflow scoping acceptance report
Record live chat/API evidence for active-workflow slot scoping and close the short-term claim.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 08:24:26 +00:00

6.7 KiB
Raw Permalink Blame History

意图填槽工作流作用域修复 测试报告

一、 测试背景 (Background)

用户在 dev 商务对接实测发现:填「要修改的文档」等槽位时可能命中其他工作流的文档。根因是意图快照、词表填槽、服务端文档匹配池与前端模板匹配池均缺少激活工作流维度约束。本轮在 fix/intent-workflow-scoping-2026-09-21 完成三层收窄(intent → coordinator/server → web),并以严格拦截 + 引导切换为策略。

二、 测试目标 (Test Objectives)

  • 填槽与文档解析只命中当前激活工作流的文档/任务。
  • 显式点名他流文档时不执行,返回引导切换话术 / ERR_DOC_WRONG_WORKFLOW。
  • active_workflow_key 为空时不过滤,保持存量行为。
  • 相关自动化测试与前端构建全绿;dev /health 可用。

三、 测试方案与环境 (Test Plan & Environment)

  • OS:linux;合入 dev 的 merge:e0665ca4 merge: fix/intent-workflow-scoping-2026-09-21。
  • 环境:dev 8080,./scripts/env-service.sh dev rebuild 后 /health:schema_version=60,agent_backend=pi-agent,kb_ready=true。
  • 验收项目:6579「新的测试项目」,active_workflow_key=main。
  • 分层:单元/包测(intent、projectinstance、server、coordinator)+ 前端 templateMatch / 全量 npm test + 真实 HTTP 对话与 tasks/run。
  • 证据目录:.doc/test-reports/assets/2026-09-21-intent-workflow-scoping/。

四、 预期结果 (Expected Results)

用例 输入 预期
正例·文档列表 GET /api/v1/projects/6579/documents active_workflow_key=main;7 条 bd_* 的 workflow_key=main
正例·阅读 激活 main,「查看调研报告」 命中 main 流「调研报告」正文,不误落到他流
反例·对话 激活 main,「编写项目建议书」 拦截并引导切换到研发设计控制流程
反例·任务 API POST /api/v1/tasks/run task_key=rd_proposal HTTP 409,error_code=ERR_DOC_WRONG_WORKFLOW
正例·任务 API task_key=bd_research 不返回 ERR_DOC_WRONG_WORKFLOW(可因职责/阶段门禁失败)
存量空键 active_workflow_key="" 不触发跨流拦截(单元保证 + 空键项目 live 冒烟)

五、 实际测试结果与判定 (Actual Results & Evaluation)

用例 1:文档列表作用域标注

  • 测试输入:管理员 GET /api/v1/projects/6579/documents?category=workflow
  • 实际输出:active_workflow_key=main,7 条文档,bd_research 等均 workflow_key=main(见 assets/.../docs6579.json)
  • 评价判定:PASS
  • 性能与耗时:<1s

用例 2:激活 main · 查看调研报告(正例)

  • 测试输入:POST /api/v1/chat,项目 6579,消息「查看调研报告」
  • 实际输出:约 48.5s 返回,正文为「# 医疗器械研发项目调研报告 …」(main 流调研报告模板/正文),未出现跨流引导
  • 评价判定:PASS(命中 main 流调研报告)
  • 备注:「修改调研报告 / 生成调研报告」在本会话落点偏参谋闲聊或超时,未作为本用例主证据;任务 API 正例见用例 5

用例 3:激活 main · 编写项目建议书(反例)

  • 测试输入:POST /api/v1/chat,消息「编写项目建议书」
  • 实际输出(约 0.01–0.02s,branch=NEW_INTENT_PREEMPT):
您提到的文档「项目建议书」属于【研发设计控制流程】,当前激活工作流为【商务对接流程】。已阻止跨工作流操作,请先切换到对应工作流后再操作,或改为点名当前工作流的文档。
  • 评价判定:PASS
  • 性能与耗时:即时拦截

用例 4:tasks/run 跨流拦截(反例)

  • 测试输入:POST /api/v1/tasks/run,project_id=6579,task_key=rd_proposal
  • 实际输出:HTTP 409
{"error_code":"ERR_DOC_WRONG_WORKFLOW","message":"您提到的文档「rd_proposal」属于【研发设计控制流程】,当前激活工作流为【商务对接流程】。已阻止跨工作流操作,请先切换到对应工作流后再操作,或改为点名当前工作流的文档。"}
  • 评价判定:PASS

用例 5:tasks/run 激活流任务(正例·门禁对照)

  • 测试输入:同会话 task_key=bd_research
  • 实际输出:HTTP 500,error_reason 含 workflow stage access denied: task "bd_research"——未出现 ERR_DOC_WRONG_WORKFLOW
  • 评价判定:PASS(作用域校验已放行;失败点在既有阶段/职责门禁,符合预期)

用例 6:空 active_workflow_key 回归

  • 测试输入:项目 6537 / 6531(列表字段 active_workflow_key="");tasks/run rd_proposal;intent 单测「no active workflow must never block」
  • 实际输出:live 未返回 ERR_DOC_WRONG_WORKFLOW(6537→500 其他原因,6531→400 其他原因);intent 包测通过
  • 评价判定:PASS(不过滤 / 不误拦)

用例 7:切换后正例(环境说明)

  • 测试输入:对话尝试「切换到研发设计…」后复测「编写项目建议书」
  • 实际输出:部分回复文案称已切到 rdev,但 GET /api/v1/projects/6579 仍为 active_workflow_key=main,故本轮未将「切换后执行」计为独立 PASS
  • 评价判定:DEFERRED(SWITCH_WORKFLOW 持久化非本任务范围;跨流拦截正反例已由用例 3–5 覆盖)

六、 自动化测试套件汇总 (Test Suite Execution)

go vet ./internal/intent/ ./internal/coordinator/ ./internal/server/ ./internal/projectinstance/  → OK
go test -short -count=1 ./internal/intent/ ./internal/projectinstance/ ./internal/server/ \
  -run 'Workflow|WrongWorkflow|ActiveWorkflow|Scope|DocWorkflow'  → ok
web: npm test → 456 pass / 0 fail;templateMatch 相关 33 pass
web: npm run build → OK(含 precompress)
/health → schema_version=60, agent_backend=pi-agent, database_ready=true

原始片段:assets/2026-09-21-intent-workflow-scoping/wf-scope-gotest2.txt、wf-scope-vet2.txt、wf-scope-health.json、wf-scope-live*.json。

七、 测试结论与后续优化建议 (Conclusion & Next Steps)

核心目标已达到上线/合入标准:激活流文档列表标注正确;跨流对话与 tasks/run 严格拦截并引导;激活流任务不再被误判为跨流;空激活键保持兼容。代码已 --no-ff 合入 dev(e0665ca4)并完成 rebuild 冒烟。

后续可选:

  1. 核实 SWITCH_WORKFLOW 对话成功文案与 projects.active_workflow_key 落库一致性(非本任务)。
  2. 「修改/生成调研报告」在部分会话落入参谋闲聊的意图路由,可另开 intent 调优任务。
  3. test/main 未晋升;项目 143 未改动;production_ready 未改。