Record live chat/API evidence for active-workflow slot scoping and close the short-term claim. Co-authored-by: Cursor <cursoragent@cursor.com>
6.7 KiB
6.7 KiB
意图填槽工作流作用域修复 测试报告
一、 测试背景 (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/runrd_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 冒烟。
后续可选:
- 核实 SWITCH_WORKFLOW 对话成功文案与
projects.active_workflow_key落库一致性(非本任务)。 - 「修改/生成调研报告」在部分会话落入参谋闲聊的意图路由,可另开 intent 调优任务。
- test/main 未晋升;项目 143 未改动;
production_ready未改。