---
status: resolved
phase: 06-
source:
  - 06-01-SUMMARY.md
  - 06-02-SUMMARY.md
  - 06-03-SUMMARY.md
  - 06-COMMIT-SUMMARY.md
  - 06-SUMMARY.md
started: 2026-04-15T03:14:38Z
updated: 2026-04-15T10:05:00Z
---

## Current Test

[testing complete]

## Tests

### 1. 输入 @ 可看到当前线程文件候选并可过滤
expected: 在输入框输入 @ 后出现候选列表，继续输入关键字可过滤，且候选仅来自当前线程。
result: issue
reported: "出现的候选列表，应该在紧贴在input的上方"
severity: cosmetic

### 2. 选择候选后显示引用 chip 且支持删除/去重
expected: 选择候选后，输入区显示可删除 chip；重复选择同一文件不会重复新增；可通过删除按钮或 Backspace 移除最后一个 chip。
result: issue
reported: "我希望引用的图片出现在textarea中而不是在input上方，而且不要复用tag组件"
severity: major

### 3. 引用上限为 10，超过会被阻止并提示
expected: 单条消息最多只能添加 10 个引用；尝试添加第 11 个时出现错误提示且不会新增。
result: issue
reported: "限制为6个。且点击后端列表的时候不要收起input"
severity: major

### 4. 失效引用会被自动移除，但文本发送不被阻断
expected: 当某个已选引用失效时，发送时会提示“部分引用已失效，已自动移除”，其余内容仍成功发送。
result: skipped
reason: "本地无法测试失效引用。"

### 5. 带引用的消息可正常发送并保持文件上下文
expected: 发送包含引用的消息后，消息成功进入对话流；引用对应的文件信息在后续上下文中可用。
result: issue
reported: "文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention（包含 ref_kind/ref_source），上传文件会被当作上下文传参；且在输入中的任何时候输入@都应出现候选列表，不应仅在输入框为空时出现。发送提及文件时也会被误认为发送文件（例如 ref_kind=mention、ref_source=upload 的对象被当作 upload）。"
severity: major

## Summary

total: 5
passed: 0
issues: 5
pending: 0
skipped: 1
blocked: 0

## Gaps

- truth: "在输入框输入 @ 后出现候选列表，继续输入关键字可过滤，且候选仅来自当前线程。"
  status: failed
  reason: "User reported: 出现的候选列表，应该在紧贴在input的上方"
  severity: cosmetic
  test: 1
  root_cause: "候选面板使用 `DropdownMenuContent` 默认定位，且未绑定输入框锚点/上边缘约束，导致面板位置与输入区视觉预期不一致。"
  artifacts:
    - path: "frontend/src/components/workspace/input-box.tsx"
      issue: "mention dropdown positioned by generic menu behavior, not explicitly anchored above textarea"
  missing:
    - "将候选列表定位策略改为紧贴输入区上方（含滚动与窗口边界处理）"
  debug_session: ""
- truth: "选择候选后，输入区显示可删除 chip；重复选择同一文件不会重复新增；可通过删除按钮或 Backspace 移除最后一个 chip。"
  status: failed
  reason: "User reported: 我希望引用的图片出现在textarea中而不是在input上方，而且不要复用tag组件"
  severity: major
  test: 2
  root_cause: "当前引用展示放在输入区外层绝对定位容器，并复用了 `Tag` 组件；未实现 textarea 内联引用预览组件。"
  artifacts:
    - path: "frontend/src/components/workspace/input-box.tsx"
      issue: "references rendered in absolute `bottom-full` area using `Tag`"
    - path: "frontend/src/components/ui/tag.tsx"
      issue: "component reused for mention chips against UX requirement"
  missing:
    - "实现 textarea 内联引用卡片/图片缩略块"
    - "替换 Tag 复用，使用专用引用 UI 组件"
  debug_session: ""
- truth: "单条消息最多只能添加 10 个引用；尝试添加第 11 个时出现错误提示且不会新增。"
  status: failed
  reason: "User reported: 限制为6个。且点击后端列表的时候不要收起input"
  severity: major
  test: 3
  root_cause: "上限常量硬编码为 10；同时选择候选后调用 `setMentionOpen(false)` 并存在外部点击收起逻辑，导致输入态被打断。"
  artifacts:
    - path: "frontend/src/components/workspace/input-box.tsx"
      issue: "`MAX_REFERENCES_PER_MESSAGE = 10` and mention selection closes dropdown/input focus"
  missing:
    - "上限从 10 改为 6 并同步提示文案"
    - "选择候选后保持输入框展开与焦点，不自动收起"
  debug_session: ""
- truth: "发送包含引用的消息后，消息成功进入对话流；引用对应的文件信息在后续上下文中可用。"
  status: failed
  reason: "User reported: 文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention（包含 ref_kind/ref_source），上传文件会被当作上下文传参；且在输入中的任何时候输入@都应出现候选列表，不应仅在输入框为空时出现。"
  severity: major
  test: 5
  root_cause: "artifact 引用仅以前端构造的 `additional_kwargs.files` 元数据提交，缺少后端可解析的上下文绑定信号；另外 `@` 触发依赖当前 token 解析，未覆盖“任意输入位置”策略。"
  artifacts:
    - path: "frontend/src/core/threads/submit-files.ts"
      issue: "references appended as metadata only; no backend-compatible context discriminator beyond ref_source"
    - path: "frontend/src/core/threads/hooks.ts"
      issue: "submit envelope does not include explicit artifact-context contract for backend resolution"
    - path: "frontend/src/components/workspace/input-box.tsx"
      issue: "mention trigger tied to `findMentionToken` result and closes when token not matched"
  missing:
    - "补充 artifact 引用的后端可消费上下文字段（与 uploads 对齐）"
    - "确保任意输入位置输入 `@` 都可触发候选"
  debug_session: ""
- truth: "若已输入文本，在任意位置输入 `@` 仍应弹出候选；选择文件后不得清空已输入问题文本。"
  status: failed
  reason: "User reported: 如果已经输入了文字，再输入@的时候，应该弹出候选列表，如果选择了文件，不要清空已经输入的问题"
  severity: major
  test: 5
  root_cause: "当前选择候选后会执行文本 token 替换并 `trimEnd`，在已有输入场景可能导致用户已输入问题文本被截断或清空。"
  artifacts:
    - path: "frontend/src/components/workspace/input-box.tsx"
      issue: "`selectMentionCandidate` mutates textarea value when resolving mention token"
  missing:
    - "选择候选后仅移除当前 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: ""

## Resolution Addendum (2026-04-15)

本文件中的 issue/gap 条目保留为当时验收记录；其对应问题已在后续补丁中完成闭环：

- 06-05：输入交互/上限/去歧义与回归稳定性
- 06-06：后端 mention 误判 upload 修复
- 260415-owq（quick）：
  - mention 引用改为路径直读，不再二次上传
  - mention 预览并入附件预览栏并复用附件组件
  - `<mentioned_files>` 进入上下文且 memory 过滤覆盖

当前状态以 `06-VERIFICATION.md` 的最终验证结论为准。
