From 0e1381870021b4d175af280081b57c5419244beb Mon Sep 17 00:00:00 2001 From: MT-Mint <798521692@qq.com> Date: Wed, 15 Apr 2026 13:26:44 +0800 Subject: [PATCH] docs(planning): refresh phase-06 verification to resolved --- .planning/phases/06-/06-VERIFICATION.md | 112 ++++++++---------------- 1 file changed, 38 insertions(+), 74 deletions(-) diff --git a/.planning/phases/06-/06-VERIFICATION.md b/.planning/phases/06-/06-VERIFICATION.md index 1d386e12..1140c6ce 100644 --- a/.planning/phases/06-/06-VERIFICATION.md +++ b/.planning/phases/06-/06-VERIFICATION.md @@ -1,40 +1,18 @@ --- phase: 06- -verified: 2026-04-15T03:50:52Z -status: gaps_found -score: 6/8 must-haves verified +verified: 2026-04-15T05:24:24Z +status: verified +score: 8/8 must-haves verified overrides_applied: 0 -gaps: - - truth: "ATREF-02: 选中文件后以可删除 chip 展示,并在同名场景显示“文件名 + 类型 + 路径尾段”,引用上限 10" - status: failed - reason: "实现与测试已切换为上限 6,且候选/预览未显示“类型”维度。" - artifacts: - - path: "frontend/src/components/workspace/input-box.tsx" - issue: "MAX_REFERENCES_PER_MESSAGE=6,提示文案为“单条消息最多引用 6 个文件”;候选 detail 仅 pathTail/ref_source,无类型徽标。" - - path: "frontend/tests/e2e/input-and-compose.spec.ts" - issue: "DF-INPUT-009 断言与“上限 6”绑定。" - missing: - - "若 requirement 仍为 ATREF-02(上限 10),需把上限与提示、断言统一回 10。" - - "补齐同名去歧义中的“类型”展示(文件名 + 类型 + 路径尾段)。" - - truth: "ATREF-04: 引用能力具备自动化回归验证(单测 + E2E)及按 style/logic/tests/docs 的提交分组计划" - status: partial - reason: "提交分组计划已存在,但 E2E 覆盖存在强制 skip 与不稳定断言,回归稳定性不足。" - artifacts: - - path: "frontend/tests/e2e/input-and-compose.spec.ts" - issue: "DF-INPUT-008 使用 testInfo.skip(true) 永久跳过;DF-INPUT-009 运行失败(strict locator 冲突)。" - - path: ".planning/phases/06-/06-COMMIT-GUIDE.md" - issue: "分组计划存在且格式正确(通过)。" - missing: - - "将 DF-INPUT-008 从永久 skip 改为可执行场景或条件化 fixture 注入。" - - "修复 DF-INPUT-009 断言稳定性(避免 getByText 严格模式多命中)。" +gaps: [] --- # Phase 6: 在输入框输入@时,可引用已生成文件和已上传附件 Verification Report **Phase Goal:** 在当前线程聊天输入框中实现 `@` 文件引用(artifacts + uploads),并通过 `additional_kwargs.files` 稳定提交且具备回归测试。 -**Verified:** 2026-04-15T03:50:52Z -**Status:** gaps_found -**Re-verification:** No — initial verification +**Verified:** 2026-04-15T05:24:24Z +**Status:** verified +**Re-verification:** Yes — after 06-05 gap closure ## Goal Achievement @@ -42,48 +20,39 @@ gaps: | # | Truth | Status | Evidence | | --- | --- | --- | --- | -| 1 | 输入 `@` 时仅展示当前线程候选并支持连续过滤(ATREF-01) | ✓ VERIFIED | `input-box.tsx` 由 `thread.values.artifacts` + `useUploadedFiles(threadId)` 聚合候选,`findMentionToken` + `mentionQuery` 做过滤。 | -| 2 | 选中后展示可删除 chip,而非纯文本 | ✓ VERIFIED | `input-box.tsx` 使用 `references` 状态渲染内嵌预览,`移除引用` 按钮与空输入 `Backspace` 删除最后一项。 | -| 3 | 同名场景显示“文件名+类型+路径尾段”,且上限 10(ATREF-02) | ✗ FAILED | 当前为上限 6(`MAX_REFERENCES_PER_MESSAGE = 6`,toast“最多 6 个”);候选 detail 为 `pathTail/ref_source`,无“类型”字段。 | -| 4 | 引用通过 `additional_kwargs.files` 提交,不新增并行主结构 | ✓ VERIFIED | `hooks.ts` 两条提交链路均写入 `additional_kwargs: { files: filesForSubmit }`;`buildFilesForSubmit` 统一 uploads + references。 | -| 5 | 引用提交带来源元信息且兼容既有渲染链路(ATREF-03) | ✓ VERIFIED | `FileInMessage` 含 `ref_kind/ref_source` 可选字段;`message-list-item.tsx` 读取 `additional_kwargs.files` 并正常渲染。 | -| 6 | 失效引用软剔除并继续发送文本(ATREF-03) | ✓ VERIFIED | `buildFilesForSubmit` 统计并丢弃 `stale`;`hooks.ts` toast 后仍继续 `thread.submit`。 | -| 7 | 回归测试覆盖候选/chip/上限/软失败(ATREF-04) | ✗ FAILED | 单测通过;但 E2E 有永久 skip(DF-INPUT-008)且 DF-INPUT-009 失败。 | -| 8 | 存在 style/logic/tests/docs 提交分组计划(ATREF-04) | ✓ VERIFIED | `06-COMMIT-GUIDE.md` 明确 `style -> logic -> tests -> docs` 且含分组文件清单与命令。 | +| 1 | 输入 `@` 时仅展示当前线程候选并支持连续过滤(ATREF-01) | ✓ VERIFIED | `input-box.tsx` 基于 `thread.values.artifacts` + `useUploadedFiles(threadId)` 聚合候选,`findMentionToken` + `mentionQuery` 做过滤。 | +| 2 | 选中后展示可删除 chip,而非纯文本 | ✓ VERIFIED | `input-box.tsx` 渲染 `reference-chip`,并支持按钮删除与空输入 `Backspace` 删除最后一项。 | +| 3 | 同名场景显示“文件名+类型+路径尾段”,且上限 10(ATREF-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` 丢弃 `stale`;`hooks.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:** 6/8 truths verified +**Score:** 8/8 truths verified ### Required Artifacts | Artifact | Expected | Status | Details | | --- | --- | --- | --- | -| `frontend/src/components/workspace/input-box.tsx` | `@` 候选、过滤、chip、键盘交互 | ✓ VERIFIED | 实现齐全,但与 requirement 的“上限10+类型徽标”不一致。 | -| `frontend/src/core/threads/hooks.ts` | 统一提交 `additional_kwargs.files` | ✓ VERIFIED | 两条 submit 链路均使用 `filesForSubmit`。 | -| `frontend/src/core/threads/submit-files.ts` | uploads/references 合并与 artifact 物化 | ✓ VERIFIED | `materializeArtifactReferences` + `buildFilesForSubmit` 可用。 | -| `frontend/src/core/messages/utils.ts` | `FileInMessage` 扩展兼容 | ✓ VERIFIED | 扩展字段为可选,未破坏旧路径。 | +| `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 回归 | ⚠️ HOLLOW — wired but data disconnected | 用例存在;DF-INPUT-008 永久 skip,DF-INPUT-009 当前失败。 | -| `.planning/phases/06-/06-COMMIT-GUIDE.md` | 分组提交计划 | ✓ VERIFIED | 顺序、规则与样例齐全,且 tests 组最小 E2E 验证已覆盖 `DF-INPUT-009`。 | +| `frontend/tests/e2e/input-and-compose.spec.ts` | `@` 引用 E2E 回归 | ✓ VERIFIED | `DF-INPUT-007/008/009` 全部通过。 | +| `.planning/phases/06-/06-COMMIT-GUIDE.md` | 分组提交计划 | ✓ VERIFIED | 分组与执行顺序清晰。 | ### Key Link Verification | From | To | Via | Status | Details | | --- | --- | --- | --- | --- | -| `input-box.tsx` | `uploads/hooks.ts` | `useUploadedFiles(threadId)` | ✓ WIRED | 实际调用存在。 | -| `input-box.tsx` | `thread.values.artifacts` | thread 内 artifacts 候选源 | ✓ WIRED | 直接读取 `thread.values.artifacts`。 | -| `input-box.tsx` | `hooks.ts` | `PromptInputMessage.references` | ✓ WIRED | `handleSubmit` 将 `references` 合并进 message,提交给上层 `onSubmit`。 | -| `hooks.ts` | `submit-files.ts` | `buildFilesForSubmit/materializeArtifactReferences` | ✓ WIRED | 已 import 并用于提交前标准化。 | -| `hooks.ts` | `additional_kwargs.files` | 提交 envelope | ✓ WIRED | `thread.submit` 中写入 `additional_kwargs.files`。 | -| `input-box.tsx` | `dropdown-menu.tsx` | Dropdown 候选面板 | ⚠️ PARTIAL | 当前候选面板为自定义 `