Files
ycode/docs/table-layer-pixel-diagnosis-2026-10-16.md
T

66 lines
4.7 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.
# 表格字形与滚动层诊断(2026-10-16)
归档的滚动层、大位移和裁剪结构已在 YCode 自有 fixture 中复现,但没有消除 3330 个差异像素。当前未证实这些 wrapper 缺失是生产字形差异的原因,也未证实原版使用 `disable-lcd-text`。
本轮只改 `scripts/table-ui-regression.cjs` 和本文;输出位于 `.tmp/table-ui-regression`。没有修改生产 UI、GPU 开关或用户配置,没有新增原版窗口操作。
## 原版依据
WorkBuddy 5.8.2 的归档 `.tmp/rea-assessment-initial/layout.json`、`workbuddy.png`,Evidence:`ev_d6e6920ff4e47f73a182fac5312c5f02393366a035445d18c8a6733a8c8a11ed`。本轮读取的是 REA 保存的布局、样式和文本,没有通过其他渠道查看原版。
祖先规则来自固定 REA `src-CyXHA0IC.css`,SHA-256:`a5e26b537bb50323aefbf25abddad52e288dd3868598be8d255d70886fe77cfe`,CSS Evidence:`ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94`。fixture 读取前校验该 SHA。
## 已验证的几何与环境
完整 `source-scroll-flow` 场景对以下七个祖先逐项断言 bounds 与归档完全一致:
| 节点 | x / y / width / height |
| --- | --- |
| 772:viewport | 284.28125 / 94 / 526.703125 / 639 |
| 773:scroll | 284.28125 / 94 / 526.703125 / 639 |
| 774:content | 284.28125 / -15153 / 516.703125 / 15886.828125 |
| 775:document | 324.28125 / -15153 / 436.703125 / 15886.828125 |
| 776:spacer | 324.28125 / -15153 / 436.703125 / 15886.828125 |
| 777:flow | 324.28125 / -3933 / 436.703125 / 4666.828125 |
| 1545:末尾 item | 324.28125 / 256.328125 / 436.703125 / 477.5 |
scrollTop 为 `15247`,flow 的 computed transform 为 `matrix(1, 0, 0, 1, 0, 11220)`。完整场景保留 `container-type: inline-size`、原 scrollbar / overflow 规则和两层无名 flow 包裹。前置内容用等高空区表达,目标 markdown 使用 REA 中可见的前段和表格内容。
表格 inner/table/th/td/code 的 bounds 和 70 项选定 computed style 均匹配;行高为 `42.75 / 44.25 / 43.75`。引用按钮的原生 hover/click、表内路径解析与点击、横向滚轮边界检查继续通过。
fixture 使用 SwiftShader、禁用 GPU compositing;`app.getGPUFeatureStatus()` 与归档的每项 `feature_status` 一致。GPU metadata 不包含原版完整启动实参或原始 compositor 图层树,不能证明所有文本绘制条件一致。
## 严格像素结果
ROI 固定为 `x=324, y=385, width=438, height=134`,共 58,692 像素,RGB 容差为零。
| 场景 | 差异像素 | 最大通道差 | 结论 |
| --- | ---: | ---: | --- |
| baseline:大 translate、无 scroll | 3330 | 109 | 未通过完整像素 |
| source-scroll-flow:完整归档链路 | 3330 | 109 | 未通过完整像素 |
| source-scroll-no-container:去掉 container-type | 3330 | 109 | 未通过完整像素 |
| source-clip-flow:手工相同位移及 overflow hidden | 3330 | 109 | 未通过完整像素 |
| baseline + 禁用 LCD 的负对照 | 1 | 2 | 不是原版配置证据 |
| source-scroll-flow + 禁用 LCD 的负对照 | 327 | 1 | 不是原版配置证据 |
前四个场景的 ROI PNG SHA 完全相同:`b2f6ea6b7d07fabea3fa3d920eea325e73e382f86e641f8cdf2eaf3a224f0398`。因此,已复现的滚动、大位移、裁剪和 container-type 组合没有改变该区域的实际绘制。
常规场景的 3330 个差异中,3329 位于归档文字 bounds 外扩 1px 的范围内;另一个位于 inline-code 圆角,坐标 `(508,460)`,原版 RGB `(244,244,244)`,fixture `(242,242,242)`。禁用 LCD 的负对照说明文本栅格模式能解释主要差异,但完整滚动链路下仍有 327 个通道差 1 的像素。不得将负对照写成原版 GPU 配置已恢复或完整 1:1 通过。
## 命令与产物
```powershell
$env:YCODE_TABLE_LAYER_CASE='source-scroll-flow'
node scripts/table-ui-regression.cjs
$env:YCODE_TABLE_LAYER_CASE='source-scroll-no-container'
node scripts/table-ui-regression.cjs
$env:YCODE_TABLE_LAYER_CASE='source-clip-flow'
node scripts/table-ui-regression.cjs
```
负对照额外设置 `YCODE_TABLE_DISABLE_LCD_EXPERIMENT=1`。该变量只影响启动的隔离 fixture。脚本退出成功代表几何、样式及交互断言通过;像素结论必须读取报告的 `fullPixelParity`,当前各场景均为 `false`。
主要产物:`report-source-scroll-flow.json`、`report-source-scroll-no-container.json`、`report-source-clip-flow.json`、`report-source-scroll-flow-lcd-disabled-experiment.json` 和对应 `candidate-roi*.png`。
当前缺少原版 compositor 图层 / 绘制状态及完整文本栅格配置证据。现有结果支持继续保留源码级表格修复;没有形成因字形问题修改生产 wrapper 或全局 GPU 开关的建议。后续采集范围和生产架构由主上下文决定。