Files
ycode/docs/协作/B05-交付-01.md
T

54 lines
4.6 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.
# B05 / YC-009:TodoWrite 交付记录 01
日期:2026-10-21。状态:开发实现与离线验证完成,待验收;不预填验收通过。
- 需求来源:`9069c604e03505b91b5b9731d11d47727b168635`,`B05-需求.md`。
- 开发基线:`8d10743fb2643b8e0aaf4495b38eb84f71b1e7f7`。
- 完整代码提交:`d423d59b08395360cd7263709d4560ab436d7c0c`。
- 本批不发布安装包,不调整模型桥、权限策略、项目数据库或其他计划卡设计。
## 实现与关键决定
1. 新增 `TodoWriteView.tsx`:只读规范化 args / `_rawInput`,兼容既有 todos / steps 及历史工具别名;保留 task ID、content、activeForm 和状态。完成数和总数按规范化列表计算。
2. 使用现代 `cr-tool-plan-task*` 结构与专用头部,去掉重复标题。merge 显示“进度 completed/total”;空与错误仅显示相应头部,运行中空列表附接收中状态。
3. 复用既有 `selectPlanTasks` 纯窗口算法,默认最多五项。优先第一个进行中任务,否则最后一个已完成任务,再否则从首项开始;不新增分页或更多按钮。
4. 完成项删除线并弱化,进行中使用 activeForm 和加粗,状态使用 SVG / 圆点,不再使用 OK / > / - / x 占位。样式按照需求提供的 REA 静态契约实现。
5. `SourceToolExpandable` 增加仅 Todo 使用的 retained expand-signal 开关和独立 disclosure key。真实 isLastContent 边沿控制展开;同值重挂载保留手动选择;session / tool / part 身份隔离。其他工具默认行为不变。
6. 不向普通列表追加 SDK 原始成功文本;不改写持久化结果、不合并历史工具快照。
7. 增加专用可选 `onTodoTaskClick`,字段为 toolCallId / toolName / taskId,支持点击、Enter、Space。当前没有证实的应用宿主目标,因此默认不传回调、不显示按钮角色或动作箭头,不复用计划预览冒充待办操作。
## 变更文件
- `src/renderer/src/workbuddy/conversation/TodoWriteView.tsx`(新增)
- `src/renderer/src/workbuddy/conversation/todo-write.css`(新增)
- `src/renderer/src/workbuddy/conversation/ToolCallRenderer.tsx`
- `src/renderer/src/workbuddy/conversation/SourceToolHeader.tsx`
- `src/renderer/src/workbuddy/conversation/source-labels.ts`
- `scripts/todo-write-regression.tsx`(新增)
- `scripts/todo-write-dom-regression.tsx`(新增)
- `scripts/conversation-renderer-regression.tsx`
- `scripts/run-alignment-regression.mjs`
## 验证
以下命令在 Linux 开发环境执行,没有启动真实 Claude SDK、外部模型服务或用户电脑,没有加载用户发布会话。
| 命令 | 结果 | 证据 |
|---|---|---|
| `npm run build` | exit 0,类型检查与生产构建通过 | `evidence/b05-01/build.log` |
| `npm run test:conversation` | exit 0 | `evidence/b05-01/conversation.log` |
| `npm run test:alignment` | exit 0,12 个离线套件;此单独运行明确跳过 DOM | `evidence/b05-01/alignment.log` |
| `YCODE_TEST_DOM_MODULE=/tmp/ycode-b01-dom/node_modules/jsdom npm run test:alignment:dom` | exit 0,12 个离线套件与 10 个 DOM 套件 | `evidence/b05-01/alignment-dom.log` |
新增聚焦测试已接入上述 alignment 入口,共 29 项投影/SSR 检查与 42 项 DOM 断言:投影/SSR 覆盖窗口夹具、状态、标题、空/失败、别名、原始输入与非突变;DOM 覆盖真实 TodoWriteView 和 CompletedFold 组合、位置边沿、手动选择、相同信号重挂载、会话/工具隔离、合法历史快照和可选回调键盘事件。使用合成数据,不修改真实会话。
测试依赖按项目既有外置 jsdom 约定提供;上述绝对路径是本次环境路径,其他环境需替换为其已安装的 jsdom 模块路径。严格 DOM 入口缺少依赖会失败,不将跳过当通过。
## 剩余风险与验收边界
- AC9.8:组件可选回调已验证,但实际应用宿主任务点击目标未实现,不能宣称完整业务交互通过。默认非交互是刻意避免伪导航。
- AC9.9:真实 Electron 浅色、深色、窄屏、长文本及七项任务截图未完成;DOM 不测真实像素、文本溢出和动画过程。当前浏览器执行环境受限,不绕过安全限制;由具备环境的验收端补测。
- 复用了现有 recovered CheckIcon / LoaderIcon / FailedIcon。没有独立确认名为 TaskCheckIcon 的精确原版资产;不能声称图标逐像素一致。
- 新 CSS 来自需求中已留存的 REA 静态数值,不代表当前原版 CSS 激活分支与实时动效已复核。仍需补原版 REA 运行证据。
- 交付没有修改验收记录;验收端应固定完整代码 SHA 后记录实际结果。