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

72 lines
6.1 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 交付 02:F01 与模式、确认按钮修复
日期:2026-10-21(Asia/Shanghai)。开发端接续验收退回与补充反馈,状态:**源码已实现、离线自测通过,真实 Windows 复测待验**。不关闭整个 B01。
- 基线:`ddd677bae3c43a5514eb40f7a1d9749fdf389115`。
- **受测代码 SHA:`1ed71b63b5af9a98b942ff47c66df5799d4d2c8a`**。
- 需求:[验收 01](B01-验收-01.md) 的 F01;[补充反馈 01](B01-补充反馈-01.md) 的 FB01/A06、FB02/A05;沿用 [B01 需求](B01-需求.md) 的 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. 验证结果
证据:[离线日志](evidence/B01-02/verification.txt)、[浏览器环境失败记录](evidence/B01-02/browser-environment.txt)。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。
```powershell
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 交接完成。本轮交付完成后推送窗口交回验收端。