Files
ycode/docs/协作/B01-交付-02.md
T

6.1 KiB
Raw Blame History

B01 交付 02:F01 与模式、确认按钮修复

日期:2026-10-21(Asia/Shanghai)。开发端接续验收退回与补充反馈,状态:源码已实现、离线自测通过,真实 Windows 复测待验。不关闭整个 B01。

  • 基线:ddd677bae3c43a5514eb40f7a1d9749fdf389115。
  • 受测代码 SHA:1ed71b63b5af9a98b942ff47c66df5799d4d2c8a。
  • 需求:验收 01 的 F01;补充反馈 01 的 FB01/A06、FB02/A05;沿用 B01 需求 的 AC1.3、AC3.1~3.3。
  • 范围:YC-001 的 F01 修复,以及 YC-003 的 A05/A06 部分交付。A01/A04 已有验收证据不推倒重做;YC-002、YC-004、A07/A08 未在本轮实施。没有恢复用户撤回的骨架补丁。

1. 实现

F01:原生 part 稳定身份

completed-fold.ts 统一生成展示身份,识别原生 plan.id、task.id、artifact.id,以及 tool、reasoning、image 的稳定 ID;React key 与 disclosure scope 共用同一身份。类型与 ID/位置域分开,消息级 store 不共享。

真实 applyAssistantEvent → MessageBubble 回归覆盖原验收的两个 text 被 done 校正合并、原生 plan/task、插入重排、相反展开选择、外层重复开关、同 ID 跨消息隔离。无 ID 旧历史保留位置 fallback;不承诺没有稳定 ID 时任意重排仍可识别同一项。未改 reducer 或历史源对象。

FB02/A05:ModeChip

恢复透明默认背景、pill 圆角、次级文字;模式图标与 X 共用同一 16px grid 槽,hover/focus-within 原位替换,无右上角额外 X。保留 32px 高、13px/500/20px 文字、8px padding、原生退出按钮、craft 隐藏和禁用语义。继续调用原宿主 clear 回调,不重写草稿或权限偏好。

图标仍为本地几何,源码保留待同版本 REA SVG/像素验收的标注。

FB01/A06:TaskPopconfirm

改用自带 CSS 的 ui/Button,明确 primary/secondary/danger,避免依赖 portal 外旧 .wb-button 类作用域。恢复 66px 最小宽度、19px 水平 padding、16px 浮层圆角、600 标题,保留 240px 右侧锚定、箭头、焦点、点击吞掉、忙态重复提交锁及失败重试。

按已确认要求保留原版归档说明,移除附加兼容解释。YCode 当前仍没有“系统设置-数据管理”归档入口,实际查看/恢复仍在侧栏“已归档”;本轮仅恢复指定文案,不声称已实现该设置页。

2. 验证结果

证据:离线日志、浏览器环境失败记录。Linux x64、Node 24.19.0、npm 11.9.0、jsdom 30.1.3;复用已安装依赖,未改 package/lock。

检查 结果与边界
npm run build 退出 0,含两个 tsconfig 类型检查与 main/preload/renderer 构建;中间发现的 TS narrowing 错误已修正后重跑
YCODE_TEST_DOM_MODULE=<jsdom模块路径> npm run test:alignment 退出 0;包含原生身份新回归、ModeChip 37 项、TaskPopconfirm 34 项(含运行中停止并删除、busy、失败重试)、原有问答/授权 DOM
test:conversation、test:workbuddy-import、test:artifacts 均退出 0
F01 基线负对照 以基线两个 CompletedFold 模块替换后准确复现 false→true,预期退出 1;新产品路径通过
test:fold-summary 本 Linux LF 检出退出 0;不等于 Windows CRLF 问题已修复,本轮未改摘要/manifest/行尾策略
check:tokens 退出 1,基线与最终均为相同 6 项既存失败,无新增失败、未刷新 baseline
两个新 UI fixture 的 --build-only 退出 0,仅证明夹具打包成功,不是计算样式/截图通过
独立复审 重跑原生身份、37 项模式、34 项确认 DOM;未发现生产代码阻塞性回归;补齐 fixture CSS、主题同步与安全默认参数

本轮无模型请求、无真实 SDK/CLI 执行、无原版访问。当前环境 Chromium 在页面加载前因 socket 权限失败,未取得新截图和真实计算样式;没有绕过限制。实际 Electron 全应用、Windows、窄窗、像素与辅助技术验收仍待执行,不能从 jsdom/构建结果推导通过。

3. 验收复跑

按协作流程在固定代码 SHA 的独立检出安装构建。完整应用测试必须使用新临时 YCODE_USER_DATA_DIR,不能启动默认正式数据目录。不要复用开发机 node_modules 或旧 out。

npm ci --legacy-peer-deps
npm run build
npm install --prefix .tmp/b01-dom --ignore-scripts --no-audit --no-fund jsdom@30.1.3
$env:YCODE_TEST_DOM_MODULE = Join-Path $PWD '.tmp/b01-dom/node_modules/jsdom'
npm run test:alignment
npm run test:conversation
npm run test:workbuddy-import
npm run test:artifacts
node scripts/test-mode-chip-native.mjs
node scripts/verify-task-menu.cjs
  • test-mode-chip-native.mjs 自建隔离 Electron 组件窗口/userData,覆盖浅深、hover/focus、原生 Tab/Enter/Space、禁用、窄窗,输出截图与 report。不是完整宿主草稿/焦点验收;不访问原版或模型。
  • verify-task-menu.cjs 保留真实隔离 main/preload/IPC/本地落库测试,新增 portal 两主题计算样式;通过 ycode:theme storage 通路同步应用主题,不仅改根节点。必须在可用 Electron 环境执行后再判断通过。
  • node scripts/test-task-popconfirm-browser.mjs --build-only 生成独立可移植 HTML;去掉该参数并设置 CHROMIUM_PATH 到本机 Chromium/Chrome 可执行文件可运行真实计算样式断言。浅深、主次危险、busy/error/retry 有断言;这个组件 fixture 不代替真实 IPC/落库。
  • 两个新浏览器脚本默认保留 sandbox;无浏览器时不把 build-only 当作验收完成。

重点复测 F01 原验收事件序列,A05 两模式默认/悬停/焦点/退出、权限及草稿保留,A06 取消/确认、运行中停止并删除、两主题样式、焦点和失败重试。保留旧失败记录,另写新验收记录。

交付记录可位于受测代码后的文档提交;只有远端推送与 SHA 核对成功后才算 Git 交接完成。本轮交付完成后推送窗口交回验收端。