test(06): record mention-upload misclassification gap and closure plan

This commit is contained in:
肖应宇 2026-04-15 15:34:10 +08:00
parent 7ea2bceb78
commit 3caa2d6ce1
2 changed files with 98 additions and 2 deletions

View File

@ -0,0 +1,81 @@
---
phase: 06-
plan: 06
type: execute
wave: 5
depends_on:
- 06-05
gap_closure: true
files_modified:
- backend/packages/harness/deerflow/agents/middlewares/uploads_middleware.py
- backend/tests/test_uploads_middleware_core_logic.py
autonomous: true
requirements:
- ATREF-04
must_haves:
truths:
- "提及文件ref_kind=mention发送时不应被识别为本次新上传文件。"
- "<uploaded_files> 的 new_files 区块仅包含真实上传附件,不包含 mention 引用。"
artifacts:
- path: "backend/packages/harness/deerflow/agents/middlewares/uploads_middleware.py"
provides: "按 metadata 区分真实上传与 mention 引用"
contains: "_files_from_kwargs"
- path: "backend/tests/test_uploads_middleware_core_logic.py"
provides: "mention 引用过滤回归测试"
contains: "ref_kind"
---
<objective>
关闭 UAT 新增 gap修复“ref_kind=mention, ref_source=upload 被当作本次上传文件”的误判。
Purpose: 保持提及文件与真实上传附件在后端语义分离,避免 injected <uploaded_files> 误导模型。
Output: Middleware 仅接收真实上传文件为 new_filesmention 引用不再进入 uploaded_files state update。
</objective>
<context>
@.planning/phases/06-/06-UAT.md
@backend/packages/harness/deerflow/agents/middlewares/uploads_middleware.py
@backend/tests/test_uploads_middleware_core_logic.py
</context>
<tasks>
<task type="auto">
<name>Task 1: 过滤 mention 引用,避免误判为新上传</name>
<files>backend/packages/harness/deerflow/agents/middlewares/uploads_middleware.py</files>
<action>
`_files_from_kwargs` 解析 `additional_kwargs.files` 时,若条目 `ref_kind == "mention"` 则直接跳过,不纳入 `new_files`。保留现有 filename 校验、size/path 归一化、磁盘存在性检查逻辑。
</action>
<acceptance_criteria>
- `ref_kind=mention` 条目不会进入返回列表。
- 普通上传条目(无 ref_kind行为不变。
- `before_agent``<uploaded_files>` 注入仅反映真实上传。
</acceptance_criteria>
</task>
<task type="auto">
<name>Task 2: 补充回归测试覆盖 mention 过滤</name>
<files>backend/tests/test_uploads_middleware_core_logic.py</files>
<action>
新增测试:当 files 中包含 `ref_kind=mention`(含 `ref_source=upload`)时,`_files_from_kwargs` 不返回该条目;并验证 mixed list 下真实上传仍可保留。
</action>
<acceptance_criteria>
- 新增测试在修复前失败、修复后通过。
- 不影响已有核心 middleware 测试。
</acceptance_criteria>
</task>
</tasks>
<verification>
- `cd backend && pytest -q tests/test_uploads_middleware_core_logic.py -k "mention or files_from_kwargs"`
</verification>
<success_criteria>
- UAT 新增 gap 的 root cause 与修复措施一一对应。
- 计划可直接由 `/gsd-execute-phase 6 --gaps-only` 执行。
</success_criteria>
<output>
After completion, create `.planning/phases/06-/06-06-SUMMARY.md`
</output>

View File

@ -8,7 +8,7 @@ source:
- 06-COMMIT-SUMMARY.md
- 06-SUMMARY.md
started: 2026-04-15T03:14:38Z
updated: 2026-04-15T03:33:07Z
updated: 2026-04-15T06:02:00Z
---
## Current Test
@ -43,7 +43,7 @@ reason: "本地无法测试失效引用。"
### 5. 带引用的消息可正常发送并保持文件上下文
expected: 发送包含引用的消息后,消息成功进入对话流;引用对应的文件信息在后续上下文中可用。
result: issue
reported: "文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention包含 ref_kind/ref_source上传文件会被当作上下文传参且在输入中的任何时候输入@都应出现候选列表,不应仅在输入框为空时出现。"
reported: "文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention包含 ref_kind/ref_source上传文件会被当作上下文传参且在输入中的任何时候输入@都应出现候选列表,不应仅在输入框为空时出现。发送提及文件时也会被误认为发送文件(例如 ref_kind=mention、ref_source=upload 的对象被当作 upload"
severity: major
## Summary
@ -127,3 +127,18 @@ blocked: 0
- "选择候选后仅移除当前 mention token不影响其余已输入文本"
- "补充“已有文本 + 中途 @ + 选中文件”回归测试"
debug_session: ""
- truth: "提及文件ref_kind=mention发送时应保留 mention 语义,不应被系统识别为“本次新上传文件”。"
status: failed
reason: "User reported: 在发送提及文件的时候,系统误认为我的提及文件是发送文件。因为上传时传了 {filename,size,path,status,ref_kind:mention,ref_source:upload}。"
severity: major
test: 5
root_cause: "后端 UploadsMiddleware 在 `_files_from_kwargs` 中仅按 `filename/size/path/status` 解析 `additional_kwargs.files`,没有排除 `ref_kind=mention`,导致 mention 引用被归类为 new_files 并注入 `<uploaded_files>` 的“uploaded in this message”块。"
artifacts:
- path: "backend/packages/harness/deerflow/agents/middlewares/uploads_middleware.py"
issue: "`_files_from_kwargs` ignores `ref_kind/ref_source` and classifies mention references as newly uploaded files"
- path: "frontend/src/core/threads/submit-files.ts"
issue: "references use `ref_kind=mention` with `ref_source=upload|artifact`; middleware currently does not honor this discriminator"
missing:
- "在 `_files_from_kwargs` 过滤 `ref_kind=mention` 条目,不将其计入 new_files"
- "补充 middleware 单测覆盖 mention 条目不被识别为本次上传"
debug_session: ""