| 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 |
同名场景显示“文件名+类型+路径尾段”,且上限 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: 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 |
分组与执行顺序清晰。 |
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 |
直接读取。 |
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)