chore: establish YCode replication baseline and TODO

This commit is contained in:
xiaohan.yuan committed 2026-10-17 02:43:49 +08:00
commit 6dc59f89ba
1118 files changed
+196002

No files matched your search

+92
View File
@@ -0,0 +1,92 @@
# 对话顶部栏恢复与验收(2026-10-16)
已新增独立 `SourceChatHeader.tsx`、SVG/词典引用、原CSS与adapter;未修改 ChatPane/App。主上下文负责生产接线。
## 来源与行为
原版版本5.8.2,Windows,1336×901,现有“开始新会话”会话。全部原版操作均由本地REA public CLI执行:点击已有会话、收起右栏、打开搜索、标题hover/edit/Escape、恢复首页。没有发送消息、输入原标题新值、保存设置或测试原上游。
| 状态 | REA Evidence | 保存位置 |
| --- | --- | --- |
| 会话/right open稳定 | `ev_ab07d4f968450f9756929b9b1d222b7ab577061b6a758543cbd02addb358ba5e` | `.tmp/rea-chat-header-static-20261016/` |
| 收起右栏、打开搜索 | `ev_36d8218d7eea31c60378195344a4b6cf30d68a8add12bbeb6dc5815c42b4c80d` | `.tmp/rea-chat-header-actions-20261016/` |
| 搜索稳定主图、标题hover/editor帧、Escape取消 | `ev_f500fa72e1dd63e3bfa44ca550866653b70f5031100075f3bae25b6baa36ce19` | `.tmp/rea-chat-header-title-20261016/` |
| right closed稳定主图、恢复首页帧 | `ev_38cca1ac66606ab07fb495035e3509f5c4d8ec3e5e2b74d0fdcfcfadb120da3b` | `.tmp/rea-chat-header-final-20261016/` |
REA视觉结果的主PNG/layout是probe前状态,`frame-*`才是动作后状态;恢复首页使用最后一个probe frame,不能将其主图当作首页。
原版稳定会话顶部栏不含设置齿轮。right open时只有搜索、分享(各32×32,gap4,共68×32);right closed时增加右栏按钮(共104×32)。主栏高64px,原token文件 `:root` 的56px被 `body[data-electron-desktop=true]` 的64px覆盖;恢复脚本保留了桌面token覆盖与height<=400px时的40px规则。
标题hover显示真实编辑SVG;输入自动选中;Enter/blur提交trim后的非空新值;Escape取消。原源码 `WorkBuddyTopBar` 还有受环境/会话条件控制的编辑器、协作项目、历史提问入口,不能全部默认显示。当前源会话没有编辑器或历史提问入口;本组件只在显式提供promptList时显示历史提问,不把本地workspace cwd当作协作项目breadcrumb。
搜索是**当前对话内容搜索**,不是会话列表搜索。原版展开300×32输入框,初始无counter;keyword非空显示一基计数,零命中0/0;Enter下一项、Shift+Enter上一项、Escape关闭。搜索结果实际扫描/滚动/高亮由主上下文接入真实消息宿主;组件只负责受控UI,不伪造命中。
## 文件与接口
- `src/renderer/src/components/SourceChatHeader.tsx`:默认导出组件,导出 `SourceChatHeaderProps`、`SourceChatHeaderSearch`、`SourceChatHeaderPromptList`。
- `SourceChatHeaderIcons.tsx`:8个原SVG纯定义,无原模块初始化。
- `source-chat-header-reference.ts`:13个原中文labels。
- `source-chat-header-recovered.css`:178条原规则,保留顺序与media父条件;独立desktop token闭包。原 `.cb-chat-search-hit` 规则保持可供消息宿主使用。
- `source-chat-header.css`:原版继承字体/13px/normal/antialiased与原生input字体的有限adapter。
- `scripts/rea/recover-chat-header-reference.mjs`:仅消费固定REA脚本/CSS,验证SHA后生成上述引用;manifest在 `.tmp/chat-header-reference/manifest.json`。
- `scripts/rea/probe-chat-header-*.json`:本次原版受控动作。
- `scripts/verify-chat-header-parity.cjs`、`scripts/compare-chat-header-pixels.py`:独立原生fixture和校准像素对比。
基础Props为 `title`, `rightVisible`, `onToggleRight()`;`onOpenSettings?`保留父接口兼容,但不生成原版不存在的齿轮。`workspaceName?`为归属元数据,不主动改成项目breadcrumb。
```ts
onTitleChange?: (nextTitle: string) => void | Promise<void>
onShare?: () => void | Promise<void>
shareLabel?: string
onActionError?: (error: unknown) => void
search?: {
open: boolean; keyword: string; hitCount: number; activeIndex: number // 0基
onOpen(): void; onClose(): void; onKeywordChange(keyword: string): void
onPrev(): void; onNext(): void
}
```
未配置真实search/share宿主时按钮禁用。若分享只支持本地导出,应传诚实的 `shareLabel`,不能冒充WorkBuddy云端分享。标题保存错误可reject并由onActionError交给宿主;组件退出编辑、重置草稿,不谎报保存成功。可选promptList含真实items/requestId与必需onJumpToMessage;没有数据不显示入口。
原搜索高亮来自 `src-CBaV_A3S.css`:普通background `#c5eee0`、foreground `#1f8c67`;current background `#4ecba0`、foreground `#fff`、glow `0 0 0 2px #4ecba04d`。这些都保留原 `--cb-search-*` 变量。CSS Highlights只能等价承接bg/fg;原mark的radius2、padding0 1px、glow与transition不能直接通过Highlight伪元素完整重现,应另记差异。
恢复来源:脚本REA `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb`,CSS REA `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94`。具体JS/CSS文件SHA、SVG绑定和offset均在生成manifest中固定。
## 原生几何与像素结果
原生fixture使用真正DOM pointer/keyboard事件;所有host回调由隔离fixture控制,不能把本测试当作生产搜索/rename/share业务已通过。
closed/open/search/edit状态几何与固定原版逐项一致:
- closed topbar `[284.28125,30,1051.703125,64]`;open `[284.28125,30,691.703125,64]`。
- 标题 `[308.28125,50,80,24]`,16px/600/24px/#000,声明字体一致。
- closed actions `[1215.984375,46,104,32]`;open `[891.984375,46,68,32]`。
- search `[947.984375,46,300,32]`,input194×32、nav/close24×24。
- 原标题editor `[308.28125,50,203,24]`。
根据既有原REA `ev_af6ce1805f575a49d9b37b7d391a07a77a90219a12eb2148cb25930a00da963c` 的渲染环境证据,增加唯一校准模式:普通窗口 `showInactive`、任何await前disableHardwareAcceleration、`use-angle=swiftshader`、`disable-gpu-compositing`、`Page.captureScreenshot(fromSurface:true,captureBeyondViewport:false)`。本机实际GPU复核为 `ANGLE_SWIFTSHADER`、`(gl=egl-angle,angle=swiftshader)`、`gpu_compositing=disabled_software`。
| 固定区域 | 比较像素 | 不同像素 | 最大通道差 |
| --- | ---: | ---: | ---: |
| 标题 | 1920 | **0** | **0** |
| 搜索按钮 | 1056 | **0** | **0** |
| 分享按钮 | 1056 | 21 | 15 |
| 右栏按钮 | 1056 | 27 | 5 |
| 整个稳定topbar声明区域 | 67264 | 48 | 15 |
| search(只mask原生caret列72px;空query无counter) | 9560 | **0** | **0** |
| editor已选中原标题 | 4896 | **0** | **0** |
校准后标题和editor字形已零差,不能再将这些区域差异笼统归因于字体环境。首次search差异来自pointer停在展开后的close按钮造成hover;匹配REA的neutral pointer状态后归零。剩余48像素集中在分享/右栏SVG曲线与transform边缘;原SVG路径/transform恢复自固定源码、颜色/控件几何一致,**边缘采样差异原因尚未确证**,没有调容差、替换原像素或宣称整栏零差。
原图/候选SHA、具体差异坐标与RGBA、diff图在 `.tmp/chat-header-native-swiftshader-20261016/{report.json,pixels.json,*-diff.png}`。普通offscreen图也保存在 `.tmp/chat-header-native-20261016/`,不与校准模式混算。
执行结果:
```powershell
node scripts/rea/recover-chat-header-reference.mjs
node_modules/.bin/electron.cmd scripts/verify-chat-header-parity.cjs --visible-swiftshader
& 'C:/Users/Administrator/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe' scripts/compare-chat-header-pixels.py
npx tsc --noEmit
```
均通过,原生console errors0。余项:48个SVG边缘像素、原自绘tooltip/快捷键提示(目前使用native title)、promptList原运行时、Mac/compact/dark、协作项目和条件性编辑器入口,以及生产集成后的全状态验收。