Files
ycode/docs/协作/B01-需求.md
T

140 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# B01:对话与输入交互复测问题修复
发布日期:2026-10-21(Asia/Shanghai)。
状态:**待开发,尚未接单或交付**。需求由当前验收与规划端发布,开发端在另一台电脑执行。依据用户已经确认的十项对齐方案与修复要求定义本批范围;开发端阅读后在交付记录登记接单,不需要再次让用户确认已有需求。
## 1. 交接与基线
- 唯一仓库:`gitea`,`https://gitea.iiiii.run/admin/ycode.git`;主线 `master`。
- 开发起点:`21ca0e0fc379e7a71639b5160c1b7cd168b9d6fa`,已经包含原实现、复测报告和协作流程。开发开始时先 fetch;若远端又有代码变化,审阅差异并在接单记录更新基线,不能直接把旧报告套到新代码上。
- 原始受测产品提交:`37ddb2ce24c23d1fab7d0609a62901cc666d4975`。其后的 `5b3dd42`、`21ca0e0` 仅为协作文档提交,不包含本批修复。
- 本批接单与交付文件:`docs/协作/B01-交付-01.md`,由开发端创建;验收文件:`docs/协作/B01-验收-01.md`,由验收端在真实验收后创建。不得预填通过记录。
- 本文件推送成功后,**本批推送窗口转交开发端**。验收端默认只读 fetch/检查;新增规划先本地整理,交还窗口后再推送。开发端提交交付记录并通知用户后,窗口交回验收端。
必须先读:
1. [开发与验收协作流程](开发与验收协作流程.md)。
2. [完整对齐方案](../WorkBuddy对话与输入交互统一对齐方案-2026-10-21.md)。
3. [Windows复测与后续开发](../对话输入对齐复测与后续开发-2026-10-21.md),尤其 A01~A09 的复现与证据边界。
4. 根目录 `AGENTS.md` 与 `docs/接手状态-2026-10-15.md`。
## 2. 本批范围与实施顺序
目标是在现有实现上修复已复现缺陷、补齐已确认的视觉差异,并为会话授权建立真实 SDK 验证。保持十项原方案目标;不重新实现已经通过的模型选择、会话 factory 与权限传递。
开发主对话负责拆分、集成、审查、最终验证。可以使用子 agent,但必须分配明确文件边界;共享类型、`ChatPane.tsx`、共享 CSS 与跨模块接口由主对话协调,避免并发覆盖。每个子任务报告修改文件、关键决定、验证结果及剩余风险。
建议按以下任务执行;编号固定,原 A 编号同时保留。后续修复轮次不重新编号,也不删除旧失败记录。
### YC-001 / P1:问答分发、折叠状态与回答卡
对应 **A01、A03、A04**。问答链路优先;折叠和样式问题的原始严重度仍为 P2。
主要边界:`ToolCallRenderer.tsx`、问答投影与问答组件、`CompletedFold.tsx`、相关工具/思考展开组件及问答 CSS;共享展开状态如需调整,由开发主对话统一设计。不得以全局一个展开布尔值替代消息/part 局部状态。
验收标准:
- **AC1.1**:真实工具名 `AskUserQuestion`、现有小写别名与历史导入都进入专用问答展示;普通工具不误分发;历史源对象不被改写。
- **AC1.2**:从原生名称提问、回答、完成到展开过程,问题与回答只展示一次,不泄漏原始 SDK 答案;关联去重和无定位旧历史有回归。
- **AC1.3**:分别打开内层问答、工具、思考和局部摘要后,外层完成块收起再展开,内层选择保持;后续 part/事件追加后仍稳定。测试真实嵌套组件,而非只测两个独立 disclosure。
- **AC1.4**:标题在灰卡外,仅问题与答案在内容灰卡内;正文保持 14px、400、1.75 行高,内容壳按已有证据采用 16px 圆角、`12px 16px` 内边距。清除旧 `?`、`+/-`、分隔线等与原版不符结构。
- **AC1.5**:完成折叠顺序、正文位置、局部默认展开语义不回归;隐藏内容不抢焦点或重复出现在辅助技术中。
至少验证:`test:conversation`、`test:alignment`、问答与嵌套折叠 DOM 回归,以及真实 Electron 下原生工具名完整轨迹截图。SSR/jsdom 不承担真实布局通过结论。
### YC-002 / P2:运行进度状态闭环
对应 **A02**。主要边界:Claude 内核事件处理、共享进度类型/reducer、`StreamingFooter` 及相关事件回归。
验收标准:
- **AC2.1**:最后一个工具返回后退役该工具状态;仍有并行工具时不能误退役其他工具,也不能继续显示已经完成的工具。
- **AC2.2**:正文开始输出后不再显示“思考中”;工具完成后的模型等待、正文、收尾均由实际事件驱动,不使用计时伪造阶段。
- **AC2.3**:消费已安装 SDK 的真实 `system/api_retry` 结构,保留可用的重试次数、延迟与原因;收到恢复事件后退出重试。不把限流、未知错误统称为网络故障。
- **AC2.4**:等待用户/权限的优先级、终态清理、取消与乱序防护保持;晚到 progress 不能把已结束回合恢复为运行。
- **AC2.5**:回归覆盖“工具结果 → 模型等待 → 正文 → 重试 → 恢复 → 终态”,穿插并行工具、审批、取消与乱序。原版文案依据现有 REA 证据;未知词典或 reasoning-only 边界单独记录,不自行宣称完整恢复。
至少验证:直接事件驱动的内核+共享 reducer 测试、`test:chat`、`test:alignment`、`test:conversation`、`test:assistant-footer`;真实窗口记录各阶段及等待态。
### YC-003 / P2:模式、确认浮层、加载与授权卡视觉
对应 **A05、A06、A07、A08**。主要边界:ModeChip、TaskPopconfirm、SessionLoading、PermissionConfirm、相关局部 CSS;输入区占位与共享 Popover 变更由开发主对话集成。
验收标准:
- **AC3.1 / A05**:模式默认透明背景、pill 圆角和次级文字;hover/focus 在原图标槽位切换为关闭图标,无额外右上角 X。保持 craft 隐藏、plan/ask 有效、权限禁用及模式清除后草稿和权限偏好保留。
- **AC3.2 / A06**:240px 右侧锚定浮层、箭头与焦点行为保持;主/次/危险按钮样式在 portal 中实际生效。按既定证据恢复 66px 最小宽度、19px 水平 padding、16px 浮层圆角及 600 标题字重,使用用户选择的原版归档说明。
- **AC3.3 / A06**:更新原来接受错误样式的测试目标,验证计算样式中的背景、边框、圆角、字号及最小宽度;不能只断言 class 存在。忙状态、失败、取消、归档和删除落库行为不回归。
- **AC3.4 / A07**:骨架名称占位 80×12px,正文宽度 90%/70%/45%;恢复有证据的布局及动效。验证无缓存、缓存、延迟 IPC、快速切换、失败重试、不闪首页与标题/输入区保留。没有原始尺寸证据的项明确保留为未验证,不猜值后称 1:1。
- **AC3.5 / A07**:测真实消息挂载、滚动与长任务,至少记录固定消息数量、内容规模、硬件/窗口条件、首批可见耗时和最长主线程任务。不能用 Node 解析耗时替代浏览器性能;发现阻塞后按实测热点修复,保持消息完整可达、搜索、滚动锚点及局部展开语义。
- **AC3.6 / A08**:拦截规则详情为右上锚定浮层,入口 14px/22px;显示真实可用规则/原因,无数据不编造。恢复稳定默认选中背景和箭头,同时保持默认拒绝等安全选择语义,不因展示选中自动授权。
- **AC3.7 / A08**:按参考同状态核对授权卡与输入区替换/占位关系,不保留无依据的重复完整输入框;数字键、焦点、忙状态、错误和重试行为保持。
- **AC3.8**:对修复表面验证浅色、深色和窄窗;分别记录计算样式、截图与功能结果。原版对照没有同版本、同状态证据时,视觉结论为“修复后待原版对照”,不得记为逐像素通过。
至少验证:`node scripts/verify-task-menu.cjs`、相关模式/问答/授权 DOM 回归、真实 Electron 的加载/模式/授权/确认浮层截图与计算样式,以及真实历史性能记录。
### YC-004 / P1 验收缺口:真实 SDK 会话授权
对应 **A09**。这是验收缺口,尚不能据此声称当前 SDK 路径必然故障。已有 session+workspace 隔离、规则映射与重放不得无理由重做。
主要边界:内核 permission callback、`session-grants.ts`、broker 与真实 SDK 集成脚本。真实服务使用本地可控 loopback 模型,临时 userData 和专用 workspace;不请求用户供应商、不写真实工作区。
验收标准:
- **AC4.1**:真实本地 SDK/CLI 中,“允许一次”后相同操作再次触发审批;“本次会话内始终允许”后,明确相同授权范围内的第二次工具执行不再审批,且工具实际完成。
- **AC4.2**:不匹配操作、另一会话、另一工作区继续按策略审批,不能用全工具白名单或模糊字符串扩大授权范围。
- **AC4.3**:跨回合、切走返回和内核重建后验证 grant 重放;计划/仅问答限制、显式询问和拒绝不被绕过。
- **AC4.4**:验证更新失败、取消、重复提交和并发响应,记录请求、响应、真实 permission callback 及第二次工具结果。mock 接口成功或 `updatedPermissions` 对象正确不足以通过。
- **AC4.5**:客户端重启后的 grant 生命周期若缺少原版证据,明确未验证;不得擅自做成用户级/项目级永久授权。持久权限偏好与 session grant 不混为一谈。
至少验证:新增或扩展真实 SDK/CLI loopback 矩阵、`test:alignment` 中已有 policy/grant mock 回归,以及授权卡到宿主响应的集成路径。报告分开列出真实场景、mock 场景和未覆盖场景。
## 3. 共通交付要求
1. 不新增虚构模型、费用、进度或规则。已有用户模型、权限偏好与历史快照不因本批修复被重写。
2. 原版取证仅通过 REA。引用原版证据时写版本、Evidence ID、观察范围与限制;没有证据的项可以交付为明确阻塞,但本批不得因此全量关闭。
3. 以独立 userData/workspace 测试。避免默认启动迁移清理真实数据,不复用用户配置,不提交令牌、密码或敏感日志。
4. 本批不包含发布、安装器执行、自动部署或替换用户安装版。既存六项 token 门禁问题不是放宽 baseline 的理由;记录相对本批基线的变化,至少保证不新增漂移。若修复触及原有违规代码,应按 token 规范处理对应范围。
5. Windows CRLF 导致 recovered fold-summary 哈希不匹配时,保留摘要断言与原提取内容,使用确定性的检出行尾方案并重测。不得直接改 manifest 哈希掩盖差异;不绕 REA 重新读取原版。
6. 相关回归与完整 `npm run build` 必须执行。某条命令原先就失败,提供对同基线的复现与失败集合;不能将“原来就失败”写成通过。
7. 日志/截图需以双方能取得的方式交付:小型脱敏证据可提交在 `docs/协作/证据/B01/`,大型文件提供共享附件及校验值。仅给开发机绝对路径或 `.tmp` 路径不算完成交接;复现脚本保存在 Git,截图对应受测 SHA/场景。
8. 实测发现范围外缺陷,在交付记录列为下一批建议;不暗中扩大需求。若阻断本批验收,说明依赖并由主对话协调。
## 4. 开发端如何接单、交付
在已有工作区确认无未处理修改后,显式同步 `gitea/master`,阅读上述入口;若工作区有别的未提交开发,先隔离保存,不能覆盖。
创建 `docs/协作/B01-交付-01.md`,先登记接单基线和拆分。完成后提交代码,取得完整代码 SHA,再提交交付记录。交付记录自身可位于后续文档提交。
交付记录至少包含:
```text
批次:B01
状态:开发中/待验收/阻塞
接单时间、开发负责人、基线完整 SHA:
需求记录:docs/协作/B01-需求.md
受测代码完整 SHA(代码提交后填写):
YC-001 / AC1.1~AC1.5:实现情况、验证结果、证据、剩余问题
YC-002 / AC2.1~AC2.5:实现情况、验证结果、证据、剩余问题
YC-003 / AC3.1~AC3.8:实现情况、验证结果、证据、剩余问题
YC-004 / AC4.1~AC4.5:实现情况、真实SDK矩阵、mock边界、剩余问题
修改文件与关键决定:
环境、依赖安装、构建与逐项测试命令/退出码:
真实窗口启动目录、命令、端口与版本确认:
复现脚本及双方可取得的脱敏证据位置:
既存失败与本批新增失败的区别:
未验证项、阻塞原因、责任方和解除条件:
回传后推送窗口:交回验收与规划端
```
开发主对话检查 diff、自测和原需求一致后推送 `gitea/master`。向用户回传“B01 已交付,受测代码完整 SHA、交付记录路径、交接提交完整 SHA”,由用户带回当前验收对话;不要以子 agent 完成消息替代正式交付。
## 5. 验收端如何关闭本批
收到交付后,fetch 并读取交付记录,在完整代码 SHA 的隔离检出独立构建及逐项验证。使用 `docs/协作/B01-验收-01.md` 记录每条 AC 的“通过/失败/未验证”及证据;不只记四个任务总状态。
失败回传最短复现、预期/实际与受测 SHA,下一轮交付/验收文件递增编号。真实 SDK、原版证据或运行环境缺失则标记阻塞,不作为通过。全部约定 AC 有可复核证据后才关闭 B01;范围调整必须明确记录被移出项与新批次编号,不能靠删除失败断言关闭。