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

5.6 KiB
Raw Blame History

phase verified status score overrides_applied gaps
06- 2026-04-15T05:24:24Z verified 8/8 must-haves verified 0

Phase 6: 在输入框输入@时,可引用已生成文件和已上传附件 Verification Report

Phase Goal: 在当前线程聊天输入框中实现 @ 文件引用artifacts + uploads并通过 additional_kwargs.files 稳定提交且具备回归测试。
Verified: 2026-04-15T05:24:24Z
Status: verified
Re-verification: Yes — after 06-05 gap closure

Goal Achievement

Observable Truths

# Truth Status Evidence
1 输入 @ 时仅展示当前线程候选并支持连续过滤ATREF-01 ✓ VERIFIED input-box.tsx 基于 thread.values.artifacts + useUploadedFiles(threadId) 聚合候选,findMentionToken + mentionQuery 做过滤。
2 选中后展示可删除 chip而非纯文本 ✓ VERIFIED input-box.tsx 渲染 reference-chip,并支持按钮删除与空输入 Backspace 删除最后一项。
3 同名场景显示“文件名+类型+路径尾段”,且上限 10ATREF-02 ✓ VERIFIED MAX_REFERENCES_PER_MESSAGE = 10;候选与预览均显示 filename + typeLabel + pathTail;超过上限提示“单条消息最多引用 10 个文件”。
4 引用通过 additional_kwargs.files 提交,不新增并行主结构 ✓ VERIFIED hooks.ts 提交链路写入 additional_kwargs: { files: filesForSubmit }
5 引用提交带来源元信息且兼容既有渲染链路ATREF-03 ✓ VERIFIED FileInMessage 保留 ref_kind/ref_source 可选字段,消息渲染链路保持兼容。
6 失效引用软剔除并继续发送文本ATREF-03 ✓ VERIFIED buildFilesForSubmit 丢弃 stalehooks.ts toast 后继续发送。
7 回归测试覆盖候选/chip/上限/软失败ATREF-04 ✓ VERIFIED DF-INPUT-007/008/009 重新验证通过008 不再永久跳过。
8 存在 style/logic/tests/docs 提交分组计划ATREF-04 ✓ VERIFIED 06-COMMIT-GUIDE.md 保持 style -> logic -> tests -> docs 分组约束。

Score: 8/8 truths verified

Required Artifacts

Artifact Expected Status Details
frontend/src/components/workspace/input-box.tsx @ 候选、过滤、chip、键盘交互、上限 10 ✓ VERIFIED 使用 DropdownMenu 候选层,包含类型/路径去歧义显示。
frontend/src/core/threads/hooks.ts 统一提交 additional_kwargs.files ✓ VERIFIED filesForSubmit 汇总后进入提交 envelope。
frontend/src/core/threads/submit-files.ts uploads/references 合并与 artifact 物化 ✓ VERIFIED materializeArtifactReferences + buildFilesForSubmit 正常工作。
frontend/src/core/messages/utils.ts FileInMessage 扩展兼容 ✓ VERIFIED 字段扩展为可选,未破坏旧数据。
frontend/src/core/threads/hooks.test.ts 提交流程与软失败单测 ✓ VERIFIED 4 条测试通过。
frontend/tests/e2e/input-and-compose.spec.ts @ 引用 E2E 回归 ✓ VERIFIED DF-INPUT-007/008/009 全部通过。
.planning/phases/06-/06-COMMIT-GUIDE.md 分组提交计划 ✓ VERIFIED 分组与执行顺序清晰。
From To Via Status Details
input-box.tsx uploads/hooks.ts useUploadedFiles(threadId) ✓ WIRED 候选来源连接正常。
input-box.tsx thread.values.artifacts thread artifacts 候选源 ✓ WIRED 直接读取。
input-box.tsx hooks.ts PromptInputMessage.references ✓ WIRED handleSubmit 将 references 合并后提交。
hooks.ts submit-files.ts buildFilesForSubmit/materializeArtifactReferences ✓ WIRED 提交前标准化已接入。
hooks.ts additional_kwargs.files 提交 envelope ✓ WIRED 主链路输出一致。
input-box.tsx dropdown-menu.tsx Dropdown 候选面板 ✓ WIRED 使用 DropdownMenuContent/Item

Behavioral Spot-Checks

Behavior Command Result Status
提交构建与软失败单测 cd frontend && node --test src/core/threads/hooks.test.ts 4 passed, 0 failed ✓ PASS
类型检查 cd frontend && pnpm -s typecheck exit 0 ✓ PASS
引用回归 E2E `cd frontend && pnpm -s test:e2e --grep "DF-INPUT-007 DF-INPUT-008 DF-INPUT-009"`

Requirements Coverage

Requirement Source Plan Description Status Evidence
ATREF-01 06-02, 06-05 @ 仅显示当前线程候选并支持过滤 ✓ SATISFIED 候选来源与过滤行为已验证。
ATREF-02 06-02, 06-05 chip 展示 + 同名去歧义(文件名+类型+路径尾段)+ 上限 10 ✓ SATISFIED 代码常量/文案/E2E 断言已统一为 10。
ATREF-03 06-01, 06-05 additional_kwargs.files 提交 + 元信息 + stale 软剔除 ✓ SATISFIED hooks + submit-files + 单测通过。
ATREF-04 06-03, 06-05 单测+E2E 回归 + 提交分组计划 ✓ SATISFIED 关键 E2E 用例稳定通过,分组文档完整。

Orphaned requirements for Phase 6: None.

Anti-Patterns Found

File Line Pattern Severity Impact
frontend/src/components/workspace/input-box.tsx 745 TODO connector 占位注释 Info 与 Phase 6 验证目标无阻断关系。

Gaps Summary

No unresolved verification gaps in Phase 6.


Verified: 2026-04-15T05:24:24Z
Verifier: Codex (re-verified with current workspace state)