diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index ef0dc44c..22237150 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -13,6 +13,7 @@ | owner | task | branch | worktree | mutex | status | |-------|------|--------|----------|-------|--------| +| Cursor | 2026-09-21-intent-workflow-scoping | fix/intent-workflow-scoping-2026-09-21 | - | intent+web+docgov | in_progress | | Cursor | 2026-09-21-workflow-doc-key-unification | fix/workflow-doc-key-unification-2026-09-21 | .worktrees/fix-workflow-doc-key-unification-2026-09-21 | docgov+web | done | | Cursor | 2026-09-21-dev-deep-test-four-issues | fix/dev-deep-test-four-issues-2026-09-21 | - | web+intent+taskrun | done | | Cursor | 2026-09-21-trace-panel-to-chat | feature/trace-panel-to-chat-2026-09-21 | - | trace-impact+web | done | diff --git a/.doc/ops/short-term/2026-09-21-intent-workflow-scoping.md b/.doc/ops/short-term/2026-09-21-intent-workflow-scoping.md new file mode 100644 index 00000000..db775adf --- /dev/null +++ b/.doc/ops/short-term/2026-09-21-intent-workflow-scoping.md @@ -0,0 +1,68 @@ +--- +title: "意图填槽工作流作用域修复" +status: in_progress +created: 2026-09-21 +updated: 2026-09-21 +owner: Cursor +branch: fix/intent-workflow-scoping-2026-09-21 +worktree: "-" +mutex: intent+web+docgov +--- + +# 意图填槽工作流作用域修复 + +## 目标 + +意图识别填槽(target_doc / target_task)只命中当前激活工作流的文档与任务;显式点名其他工作流的文档时拦截并引导切换工作流,不误触、不执行。 + +## 背景 + +用户反馈:填「要修改的文档」等槽位时可能命中其他工作流的文档。根因链(2026-09-21 调研): + +1. `intent.ContextSnapshot` 无 workflow 字段,`ToSnapshot()` 丢弃 `Project.ActiveWorkflowKey`;server 默认上下文硬编码 `CurrentWorkflow: "intake"` +2. `extractDocName` 词表全是 main(bd_)流文档名,无按流归属约束 +3. 消费端匹配池 `ListWorkflowDocumentsByProject` 仅按 project_id 过滤(跨工作流全量),`selectReadableWorkflowDocument` 双向 contains 模糊匹配取首个命中 +4. 前端 `resolveTaskTemplateForMessage` 匹配池 `currentProjectDeliverables` 仅按 projectId 过滤;`activeWorkflowKey` 只用于徽标展示 + +## 范围 + +- 批次1 `feat(intent)`:`ContextSnapshot` 增加 `ActiveWorkflowKey`;`ToSnapshot` 下传;docgov 命中他流文档名时打 `workflow_scope_mismatch` 标记不误填 +- 批次2 `feat(coordinator+server+projectinstance)`:`ActiveWorkflowTaskKeys` 辅助查询;文档匹配池收窄到激活流;`ErrDocWrongWorkflow` 拦截引导;TRIGGER_TASK 任务键归属校验;enrich 时注入真实 `active_workflow_key` +- 批次3 `feat(web)`:`DeliverableItem.workflowKey`;文档列表 API 附带 `workflow_key` 与 `active_workflow_key`;templateMatch 匹配池按激活流过滤,他流点名返回 wrongWorkflow 提示 +- 批次4:真实环境验收 + 测试报告 + 合回 dev + +## 非目标 + +- 不迁移 `document_records` 表(不加 workflow_instance_id 列) +- 不改 `production_ready`、不晋升 test/main、不动项目 143 +- 不改 SWITCH_WORKFLOW 意图本身行为 +- UI 文档展示列表保持全量(仅匹配池收窄) + +## 渐进安全策略 + +`active_workflow_key` 为空或查不到激活实例(存量单流项目、planning 态)→ 不过滤,保持现状行为。 + +## 步骤 + +1. [ ] 批次1:intent 快照与工作流词表归属 +2. [ ] 批次2:服务端匹配池收窄与拦截引导 +3. [ ] 批次3:前端模板匹配池收窄 +4. [ ] 批次4:真实环境验收、报告归档、合回 dev + +## 验收标准 + +- [ ] 激活 main 流说「修改调研报告」→ 命中 main 流文档(正例) +- [ ] 激活 main 流说「编写系统需求规格书」(pm/rd 流文档)→ 拦截 + 引导切换(反例) +- [ ] 激活 pm/rdev 流后同名操作 → 正常执行(切换后正例) +- [ ] 存量无 active_workflow_key 项目 → 行为不变(回归) +- [ ] `go vet ./...`、`go test -short ./...`、`web: npm test && npm run build` 全绿 + +## 相关链接 + +- Plan: `~/.cursor/plans/意图填槽工作流作用域修复_dba2ab4c.plan.md` +- Handoff: +- Test report: `.doc/test-reports/2026-09-21-intent-workflow-scoping-test-report.md` + +## 证据 / 备注 + +用户在 dev 商务对接实测发现跨工作流误命中。用户在方案确认时选定:严格拦截 + 引导切换;等四问题修复 mutex 释放后独立分支推进。