deerflow2/.planning/phases/06-/06-UAT.md

8.0 KiB
Raw Blame History

status phase source started updated
diagnosed 06-
06-01-SUMMARY.md
06-02-SUMMARY.md
06-03-SUMMARY.md
06-COMMIT-SUMMARY.md
06-SUMMARY.md
2026-04-15T03:14:38Z 2026-04-15T06:02: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: ""