4.7 KiB
表格字形与滚动层诊断(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 通过。
命令与产物
$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 开关的建议。后续采集范围和生产架构由主上下文决定。