4.6 KiB
4.6 KiB
B05 / YC-009:TodoWrite 交付记录 01
日期:2026-10-21。状态:开发实现与离线验证完成,待验收;不预填验收通过。
- 需求来源:
9069c604e03505b91b5b9731d11d47727b168635,B05-需求.md。 - 开发基线:
8d10743fb2643b8e0aaf4495b38eb84f71b1e7f7。 - 完整代码提交:
d423d59b08395360cd7263709d4560ab436d7c0c。 - 本批不发布安装包,不调整模型桥、权限策略、项目数据库或其他计划卡设计。
实现与关键决定
- 新增
TodoWriteView.tsx:只读规范化 args /_rawInput,兼容既有 todos / steps 及历史工具别名;保留 task ID、content、activeForm 和状态。完成数和总数按规范化列表计算。 - 使用现代
cr-tool-plan-task*结构与专用头部,去掉重复标题。merge 显示“进度 completed/total”;空与错误仅显示相应头部,运行中空列表附接收中状态。 - 复用既有
selectPlanTasks纯窗口算法,默认最多五项。优先第一个进行中任务,否则最后一个已完成任务,再否则从首项开始;不新增分页或更多按钮。 - 完成项删除线并弱化,进行中使用 activeForm 和加粗,状态使用 SVG / 圆点,不再使用 OK / > / - / x 占位。样式按照需求提供的 REA 静态契约实现。
SourceToolExpandable增加仅 Todo 使用的 retained expand-signal 开关和独立 disclosure key。真实 isLastContent 边沿控制展开;同值重挂载保留手动选择;session / tool / part 身份隔离。其他工具默认行为不变。- 不向普通列表追加 SDK 原始成功文本;不改写持久化结果、不合并历史工具快照。
- 增加专用可选
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.tsxsrc/renderer/src/workbuddy/conversation/SourceToolHeader.tsxsrc/renderer/src/workbuddy/conversation/source-labels.tsscripts/todo-write-regression.tsx(新增)scripts/todo-write-dom-regression.tsx(新增)scripts/conversation-renderer-regression.tsxscripts/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 后记录实际结果。