docs(phase-06): diagnose UAT gaps and add gap closure plan
This commit is contained in:
parent
16cc99febb
commit
ce731aff30
|
|
@ -0,0 +1,94 @@
|
||||||
|
---
|
||||||
|
phase: 06-
|
||||||
|
plan: 04
|
||||||
|
type: execute
|
||||||
|
wave: 4
|
||||||
|
depends_on:
|
||||||
|
- 06-01
|
||||||
|
- 06-02
|
||||||
|
- 06-03
|
||||||
|
gap_closure: true
|
||||||
|
files_modified:
|
||||||
|
- frontend/src/components/workspace/input-box.tsx
|
||||||
|
- frontend/src/components/ai-elements/prompt-input.tsx
|
||||||
|
- frontend/src/core/threads/submit-files.ts
|
||||||
|
- frontend/src/core/threads/hooks.ts
|
||||||
|
- frontend/src/core/threads/hooks.test.ts
|
||||||
|
- frontend/tests/e2e/input-and-compose.spec.ts
|
||||||
|
- .planning/phases/06-/06-UAT.md
|
||||||
|
autonomous: true
|
||||||
|
requirements:
|
||||||
|
- ATREF-01
|
||||||
|
- ATREF-02
|
||||||
|
- ATREF-03
|
||||||
|
- ATREF-04
|
||||||
|
---
|
||||||
|
|
||||||
|
<objective>
|
||||||
|
关闭 06-UAT 中的 4 个缺口:候选位置、引用展示形态、上限与输入态保持、artifact 引用上下文可用性与任意输入位置 @ 触发。
|
||||||
|
</objective>
|
||||||
|
|
||||||
|
<context>
|
||||||
|
@.planning/phases/06-/06-UAT.md
|
||||||
|
@frontend/src/components/workspace/input-box.tsx
|
||||||
|
@frontend/src/components/ai-elements/prompt-input.tsx
|
||||||
|
@frontend/src/core/threads/submit-files.ts
|
||||||
|
@frontend/src/core/threads/hooks.ts
|
||||||
|
@frontend/src/core/threads/hooks.test.ts
|
||||||
|
@frontend/tests/e2e/input-and-compose.spec.ts
|
||||||
|
</context>
|
||||||
|
|
||||||
|
<tasks>
|
||||||
|
|
||||||
|
<task type="auto" tdd="true">
|
||||||
|
<name>Task 1: 修正 @ 候选定位与触发策略</name>
|
||||||
|
<action>
|
||||||
|
- 让候选列表始终紧贴输入区上方渲染(相对 textarea 锚点)。
|
||||||
|
- 在输入中的任意位置输入 `@` 都可触发候选,不再要求输入框空白态。
|
||||||
|
- 选择候选后保持 input 展开与焦点,不自动收起输入态。
|
||||||
|
</action>
|
||||||
|
<acceptance_criteria>
|
||||||
|
- `@` 在任意输入位置触发候选;
|
||||||
|
- 候选面板位置紧贴输入区上边缘;
|
||||||
|
- 点击候选后输入区保持可继续输入。
|
||||||
|
</acceptance_criteria>
|
||||||
|
</task>
|
||||||
|
|
||||||
|
<task type="auto" tdd="true">
|
||||||
|
<name>Task 2: 重构引用展示与数量约束</name>
|
||||||
|
<action>
|
||||||
|
- 将引用图片/文件预览渲染到 textarea 区域内,不再显示在 input 上方独立层。
|
||||||
|
- 不复用 `Tag` 组件,改为专用引用预览 UI。
|
||||||
|
- 引用上限改为 6,并同步提示文案与测试断言。
|
||||||
|
</action>
|
||||||
|
<acceptance_criteria>
|
||||||
|
- 引用元素显示在 textarea 区域内;
|
||||||
|
- 代码中不再用 `Tag` 渲染引用;
|
||||||
|
- 第 7 个引用被阻止并提示“最多 6 个”。
|
||||||
|
</acceptance_criteria>
|
||||||
|
</task>
|
||||||
|
|
||||||
|
<task type="auto" tdd="true">
|
||||||
|
<name>Task 3: 对齐 artifact 引用上下文提交契约</name>
|
||||||
|
<action>
|
||||||
|
- 调整 `additional_kwargs.files` 中 artifact 引用结构,使其与后端“可作为上下文文件”的识别契约一致。
|
||||||
|
- 保持 upload 行为不回退,并补充单测覆盖 artifact/upload 两类上下文可用性差异。
|
||||||
|
</action>
|
||||||
|
<acceptance_criteria>
|
||||||
|
- artifact 引用在后续上下文中可用;
|
||||||
|
- upload 路径行为保持通过;
|
||||||
|
- hooks 单测覆盖并通过。
|
||||||
|
</acceptance_criteria>
|
||||||
|
</task>
|
||||||
|
|
||||||
|
</tasks>
|
||||||
|
|
||||||
|
<verification>
|
||||||
|
- `cd frontend && node --test src/core/threads/hooks.test.ts`
|
||||||
|
- `cd frontend && pnpm -s typecheck`
|
||||||
|
- `cd frontend && pnpm -s test:e2e --grep "DF-INPUT-007|DF-INPUT-008"`
|
||||||
|
</verification>
|
||||||
|
|
||||||
|
<output>
|
||||||
|
After completion, create `.planning/phases/06-/06-04-SUMMARY.md`
|
||||||
|
</output>
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
status: complete
|
status: diagnosed
|
||||||
phase: 06-
|
phase: 06-
|
||||||
source:
|
source:
|
||||||
- 06-01-SUMMARY.md
|
- 06-01-SUMMARY.md
|
||||||
|
|
@ -62,26 +62,55 @@ blocked: 0
|
||||||
reason: "User reported: 出现的候选列表,应该在紧贴在input的上方"
|
reason: "User reported: 出现的候选列表,应该在紧贴在input的上方"
|
||||||
severity: cosmetic
|
severity: cosmetic
|
||||||
test: 1
|
test: 1
|
||||||
artifacts: []
|
root_cause: "候选面板使用 `DropdownMenuContent` 默认定位,且未绑定输入框锚点/上边缘约束,导致面板位置与输入区视觉预期不一致。"
|
||||||
missing: []
|
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。"
|
- truth: "选择候选后,输入区显示可删除 chip;重复选择同一文件不会重复新增;可通过删除按钮或 Backspace 移除最后一个 chip。"
|
||||||
status: failed
|
status: failed
|
||||||
reason: "User reported: 我希望引用的图片出现在textarea中而不是在input上方,而且不要复用tag组件"
|
reason: "User reported: 我希望引用的图片出现在textarea中而不是在input上方,而且不要复用tag组件"
|
||||||
severity: major
|
severity: major
|
||||||
test: 2
|
test: 2
|
||||||
artifacts: []
|
root_cause: "当前引用展示放在输入区外层绝对定位容器,并复用了 `Tag` 组件;未实现 textarea 内联引用预览组件。"
|
||||||
missing: []
|
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 个时出现错误提示且不会新增。"
|
- truth: "单条消息最多只能添加 10 个引用;尝试添加第 11 个时出现错误提示且不会新增。"
|
||||||
status: failed
|
status: failed
|
||||||
reason: "User reported: 限制为6个。且点击后端列表的时候不要收起input"
|
reason: "User reported: 限制为6个。且点击后端列表的时候不要收起input"
|
||||||
severity: major
|
severity: major
|
||||||
test: 3
|
test: 3
|
||||||
artifacts: []
|
root_cause: "上限常量硬编码为 10;同时选择候选后调用 `setMentionOpen(false)` 并存在外部点击收起逻辑,导致输入态被打断。"
|
||||||
missing: []
|
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: "发送包含引用的消息后,消息成功进入对话流;引用对应的文件信息在后续上下文中可用。"
|
- truth: "发送包含引用的消息后,消息成功进入对话流;引用对应的文件信息在后续上下文中可用。"
|
||||||
status: failed
|
status: failed
|
||||||
reason: "User reported: 文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention(包含 ref_kind/ref_source),上传文件会被当作上下文传参;且在输入中的任何时候输入@都应出现候选列表,不应仅在输入框为空时出现。"
|
reason: "User reported: 文件信息在上下文中不可用。当前系统未被当作上下文的传参是 artifact mention(包含 ref_kind/ref_source),上传文件会被当作上下文传参;且在输入中的任何时候输入@都应出现候选列表,不应仅在输入框为空时出现。"
|
||||||
severity: major
|
severity: major
|
||||||
test: 5
|
test: 5
|
||||||
artifacts: []
|
root_cause: "artifact 引用仅以前端构造的 `additional_kwargs.files` 元数据提交,缺少后端可解析的上下文绑定信号;另外 `@` 触发依赖当前 token 解析,未覆盖“任意输入位置”策略。"
|
||||||
missing: []
|
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: ""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue