Skip to content

fix(layout): preserve inline fragments and published geometry - #756

Open
lanyue-llk wants to merge 1 commit into
mainfrom
codex/pr640-reopen-layout
Open

lanyue-llk wants to merge 1 commit into
mainfrom
codex/pr640-reopen-layout

Conversation

@lanyue-llk

@lanyue-llk lanyue-llk commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

行内元素包含块级或 flex 子元素时,布局构造和投影可能丢失分裂后的行内片段:页面看起来有内容,链接的几何却是零宽/零面积,真实指针点击失败。另一些动态页面存在滚动条反馈、根字号和实际布局输入变化处理不完整的问题。本 PR 修复几何生成及缓存失效,同时保留普通几何读取的已发布快照语义。

一图看懂

PR #756 · 保留行内片段,显式发布布局

图示说明问题、修复机制与行为边界;点击可查看原图。验收归属不等于当前提交通过结果,版本和测试证据见下文。

场景与修复后的行为

场景 问题 预期行为
inline 链接内含连续块级/flex 子元素 continuation 没有完整投影,链接几何丢失 保留各行内片段,几何与命中区域对应实际内容
相对定位、浮动、折行、行尾空格 位移基准、浮动可用区或折叠空格计入错误 使用所属流位置和包含块;只计算实际保留的空间
滚动条出现改变可用宽度 子树继续复用先前宽度下的布局 对受影响子树重新计算,保留不受影响的缓存
根字号、图片、样式或视口变化 布局输入未同步/缓存未正确失效 更新真实输入和未来布局缓存
已发布快照后新增/修改目标 普通读取隐式刷新会改变现有协议语义 默认/false 读取原快照;显式 publishLayout 才发布新布局

机制与设计边界

构造阶段记录连续块子元素对应的 inline continuation;投影使用已有流位置和包含块宽度生成片段,不另造自动高度或百分比偏移规则。根字号/根行高同步到 Stylo Device,使单节点样式解析与后续布局使用一致输入。普通 getter 不承担隐式发布职责,自动化调用通过 Page.getLayoutMetrics({publishLayout:true}) 请求更新;默认值及 false 保持只读。这一边界也应用于 main 新增的原生 Page 分派路径。

代码阅读路线与大段改动

  1. moli-layout 的 builder/world 和 projection:先看 continuation 如何建立、再看片段如何投影,重点核对相对包含块、自动高度及百分比偏移。Taffy 缓存处理负责滚动条反馈后的受影响子树,不能全局清空来掩盖失效遗漏。
  2. moli-renderer-v8 的样式/宿主环境/图片资源处理:核对实际输入变化与根字体 Device 同步;不是根据网站、选择器或 case 编号触发刷新。
  3. AutomationContext、Page layout metrics 与原生命令分派:核对默认读取、false、true 三条路径共享相同发布契约。
  4. 测试集中在 moli-layout/tests/phase5_output_contract.rs、renderer 的 DOM surface/inline layout、root font units 与 rendering update 场景。大段新增主要是布局边界矩阵;审阅时应核对场景维度与独立预期,而不是只看新增行数。

回归场景与独立预期

功能契约 覆盖与审查重点
行内片段/空 inline 块子元素、边框/padding/margin、换行后的闭合边、不同文档模式与 alignment;检查实际片段及高度,不只判断非零
Bidi 与 DOM Range 自然双向文本、atomic/float/out-of-flow 占位、强制换行恢复祖先方向;Range 偏移不能随控制符变化
字体与根单位 仓库 Ahem 字体提供固定输入;根字号变化及文档替换不能沿用旧 Device 数据
快照发布 已发布后 DOM/样式变化,默认/false 保留旧值,true 发布后读值与点击使用新几何
导航事件等待 按本次 navigate 的 loader 身份等待 committed frame 与 load,旧排队事件不能提前完成等待;保留子窗口与 opener 的实际断言

本轮修正两项依赖系统 monospace 指标的夹具,使用仓库固定字体;几何预期以独立 Chromium 实测为参照,保留具体数值断言。另一个导航夹具改为按 loader 关联事件。三项失败均先在相同 main 基线复现,没有删除、跳过或弱化功能断言。

Case 对应与验收版本

布局负责 27 题:29,66,108,156,163,196,314,349,374,389,399,404,415,418,441,448,506,547,576,585,590,620,640,645,658,666,714。

按原 11 类:第 1 类零面积 18 题;第 2 类零宽栏目链接中 66,404,620,640,645;第 3 类可见索引 314,349;第 4 类建议框 576;第 5 类向导 547。595 不计入这 27 题,由 #758 认领,但须同时具备本 PR 的链接几何修复。

版本 实际证据
当前 d1c5f5cd341bcf7dc76173c03af7020efe98c339,base b21b4f05615c1b9aa71ea2074084646895d82be7 真正 rebase,单提交、无 merge commit;本地 fmt、全 workspace/all-targets/all-features clippy 通过;nextest 19,728 通过,0 失败,16 既有跳过
当前提交 CI 运行 37748010055:当前提交全部 19 项检查成功,完整状态见 Checks
前一提交 3bd7cb9b77a206b90c7d5c443f7a49bc2a4a9d81 官方只读 badcase 29,66,108,163,196,314,349 各评分 1.0;不是当前 HEAD 的任务复跑
历史布局完整验收 27 题各自来源见下方报告与逐项总表;早期总表为 v3 的 26 题加 v4 的 547,须区分后来完整轮及不同源码版本
595 的历史组合验收 #756 + #758,官方默认 30 秒,16/16 动作,评分 1.0;订阅响应 200、Referer 正确,结束恢复未订阅状态

当前直接 base 是 main。#758 也独立以 main 为 base;595 是行为层面的组合验收,不是要求恢复旧的分支堆叠。来源:原布局 PR #735。

Reviewer 复现:最小场景与真实 badcase

先在本 PR 的 Moli checkout 跑最小回归场景,不需要 WebArena:

cargo nextest run --no-fail-fast -p moli-layout -p moli-protocol \
  -E 'test(split_inline_) | test(explicit_layout_metrics_publication_exposes_new_click_target) | test(get_layout_metrics_initializes_layout_and_reuses_content_until_capture) | test(local_scrollbar_feedback_invalidates_only_the_changed_subtree_and_ancestor_path)'

预期:inline 内含块元素时保留全部片段;发布后新增元素,普通读取及 false 保留旧快照,true 发布后可命中新目标;滚动条反馈不清空无关缓存。

完整复现指南与环境准备 · 下载复现包。包内有按 case 选题的脚本、固定动作和 DOM 采集合同,不含历史答案。代码复用 browser-eval 的执行、HAR 采集与评分器,不是重新实现评分。

首次使用:解压到 Moli 仓库外,将 REPRO_DIR 设为解压目录的绝对路径。独立克隆 browser-eval 后,固定版本并安装锁定依赖:

git clone --no-checkout https://github.com/lexmount/browser-eval.git browser-eval-review
cd browser-eval-review
git checkout --detach 345ea09370a633e871670fde2de4ec25b53a4d05
uv sync --frozen --extra browser-use-eval
export REPRO_DIR=/absolute/path/to/pr-review-repro
export MOLI_BINARY=/absolute/path/to/reviewed/moli
cp "$REPRO_DIR/site-map.example.json" "$REPRO_DIR/site-map.json"

将 site-map.json 的主机和端口换成自己使用的 WebArena 测试站点。需要 Reddit、GitLab、Shopping、Shopping Admin;不用 Map/Wikipedia。镜像、初始化、测试账号和地址要求见指南。下文命令都在这个 browser-eval 目录执行。脚本自行启动待审二进制,使用新 profile 和可用端口,结束后只停止它启动的进程。

优先跑不修改网站数据的 7 题;也可以用 --cases 29,66 只跑指定题目:

uv run --frozen --extra browser-use-eval python "$REPRO_DIR/replay.py" \
  --browser-eval "$PWD" --binary "$MOLI_BINARY" \
  --site-map "$REPRO_DIR/site-map.json" --cases layout-readonly \
  --output "$REPRO_DIR/results/layout-readonly-pr756"
Case 任务与关键动作 预期
29 Reddit DIY:进入栏目、按最新排序、读帖子与评论 可见链接可命中,采集结果通过官方评分
66 Reddit Books:进入栏目,读热门帖子中的单本推荐 栏目链接几何有效,结果与任务要求一致
108 管理后台:打开报表,查询 2023 年 1–5 月已完成订单数 报表入口可点击,月份与计数来自实际表格
163 商品页:打开 reviews,进入评论分页 可见分页链接可点击,读取低星评论标题
196 管理后台:分别读最近取消/完成订单金额 订单入口可点击,金额差按本次页面数据计算
314 GitLab primer/design:打开贡献者页面 仓库链接可命中,采集前三位贡献者
349 GitLab gimmiethat.space:打开成员页 可见仓库链接可命中,采集其他成员

每题动作完成且官方评分为 1.0 才算通过。完整 27 题用 --cases layout --allow-fixture-writes,它包含发帖、下单、资料修改和创建 MR,必须用自己独占、已重置的测试站点;每个二进制从同样初始数据开始。其余 20 题的具体任务、原 11 类对应关系和动作在指南及 cases.json 中。

此回放是功能复现:读取题使用固定版本的 DOM 采集合同,部分比早期 90 题轨迹多了采集步骤,不能把新结果改标成原 1.1.9 统计。脚本不自动重试失败题,不从历史答案填结果。595 仍是与 #758 的组合场景。

保存和判断结果

每轮使用新结果目录。inputs.json 记录二进制、输入哈希及回放/评分器版本;每题保存 result.json、trace.json、network.har、实际响应与评分。动作失败时评分文件可能尚未生成,先看 failure_stage 和 trace;网络问题对照 HAR 的方法、URL、Referer、重定向与状态码。默认每动作 30 秒、每题 300 秒,每题只执行一次。

比较历史失败时用 1.1.9 官方二进制和待审 PR,并保持相同站点初始数据。当前 main 已包含其他修复,不应预设所有历史题仍会在 main 上失败。

Reviewer 重点

  • continuation 的片段是否覆盖真实内容,同时保持空白折叠、Bidi、相对定位及自动高度规则?
  • 缓存失效是否由真实输入驱动,且不会改变普通几何读取的冻结快照契约?
  • 测试是否同时约束“不应刷新”和“显式刷新后应更新”,并以独立字体/浏览器预期验证几何?

整组验收与证据入口

这组修复来自 #640,对应 1.1.9 的 34 个失败 case,加上 1.1.8 已失败的 386,共 35 个唯一 case。按最终职责分配为:#756 布局 27、#757 输入 4、#758 网络 3、#761 文本 1;#755、#759、#760 以各自独立功能契约验收,不重复认领这 35 个 case。

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Sequential Navigation Soak A/B

✅ HEAD completed the 200-navigation resilience and memory observation.

One browser process, one target, and one CDP session navigate CSDN → SegmentFault → Huaban → example.com repeatedly. This run issued 200 Page.navigate commands per binary.

Common ancestor b21b4f0561 → HEAD d1c5f5cd34; benchmark order: head-first; workflow: success.

Session resilience

Metric Base HEAD
Attempted / planned 200 / 200 200 / 200
Direct observable pass 199 / 200 199 / 200
Failures / recovered 1 / 1 1 / 1
Recovery failures 0 0
Lifecycle order violations 0 0
Network order violations 0 0
Wall time 290.7 s 305.7 s

A public-page failure is reported separately from an unrecoverable session. The soak requires all navigation attempts, zero failed recovery, zero lifecycle/network ordering violations, and complete resource evidence.

Process-tree memory

Metric Base HEAD Δ
Boundary samples 200 200 0
Boundary RSS samples 200 200 0
Boundary PSS samples 200 200 0
Periodic peak RSS 216.2 MiB 219.1 MiB +2.9 MiB
Periodic peak PSS 212.6 MiB 215.9 MiB +3.3 MiB
RSS · first 10 avg 170.0 MiB 169.2 MiB -0.8 MiB
RSS · last 10 avg 173.1 MiB 181.8 MiB +8.7 MiB
RSS · last − first window +3.1 MiB +12.6 MiB +9.5 MiB
RSS · warm slope / 100 nav +1.8 MiB +7.2 MiB +5.4 MiB
PSS · first 10 avg 167.2 MiB 166.1 MiB -1.1 MiB
PSS · last 10 avg 169.7 MiB 178.9 MiB +9.3 MiB
PSS · last − first window +2.5 MiB +12.8 MiB +10.3 MiB
PSS · warm slope / 100 nav +1.3 MiB +7.6 MiB +6.3 MiB
Peak file descriptors 64 61 -3
Peak threads 31 31 0

HEAD memory by 50-navigation quarter

HEAD range Avg RSS Final RSS Peak RSS Avg PSS Final PSS Peak FD
1–50 168.8 MiB 156.3 MiB 201.6 MiB 165.7 MiB 153.2 MiB 54
51–100 171.6 MiB 165.4 MiB 195.9 MiB 168.4 MiB 162.2 MiB 53
101–150 176.0 MiB 166.5 MiB 199.8 MiB 172.8 MiB 163.8 MiB 54
151–200 178.3 MiB 173.9 MiB 204.6 MiB 175.8 MiB 171.0 MiB 58

Raw reports and per-navigation boundary samples: workflow run and full sequential-navigation-soak-results artifact.

Public-site timing and memory are observational. Use the A/B deltas and trend shape as evidence, not as a deterministic performance threshold.

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Spider Bench A/B

✅ All benchmark browser service runs completed; results are informational.

Public HEAD: 184 / 240 rows; 38 / 48 sites produced rows; 10 unexpected empty sites.

✅ Deterministic fixture contract is clean.

Common ancestor b21b4f05615c → HEAD d1c5f5cd341b; benchmark order: head-first; workflow: success.

Public 48-site run · informational

Metric Base HEAD Δ
Run status success success —
Extracted rows / contract 184 / 240 184 / 240 0 (0.00%)
Contract fill 76.67% 76.67% 0.00 pp (0.00%)
Sites with rows 38 / 48 38 / 48 0 (0.00%)
Sites meeting row contract 36 / 48 36 / 48 0 (0.00%)
Unexpected empty sites 10 10 0 (0.00%)
Partial-row sites 2 2 0 (0.00%)
Site outcomes extracted: 37; HTTP error + rows: 1; empty: 7; HTTP error + empty: 1; snapshot error + empty: 2 extracted: 36; HTTP error + rows: 2; empty: 7; HTTP error + empty: 1; snapshot error + empty: 2 —
Observed duration 45.09 s 48.01 s +2.91 s (+6.46%)
Estimated CPU 46.53 s 44.07 s -2.45 s (-5.27%)
Peak PSS 277.74 MiB 283.26 MiB +5.52 MiB (+1.99%)
Peak RSS 281.67 MiB 286.99 MiB +5.32 MiB (+1.89%)
Peak threads 27 27 0 (0.00%)
Mismatched sites 0 0 0
Timeout with items 0 0 0
Category rows Base HEAD Δ
news 35 / 40 35 / 40 0
stocks 20 / 40 20 / 40 0
tech 35 / 40 35 / 40 0
sports 27 / 40 27 / 40 0
games 37 / 40 37 / 40 0
life 30 / 40 30 / 40 0

Public-site content, timing, and memory are noisy. This single A/B run reports evidence only; site outcome counts explain missing rows without treating them as a deterministic regression.

CPU and memory timelines

These are bounded 40-point views of the same complete process-tree samples used by the HTML report. CPU uses 100% per occupied logical core; memory lines are RSS first and PSS second when complete PSS samples are available.

Base

xychart-beta
    title "Base CPU"
    x-axis "Elapsed seconds" [1.537, 2.539, 4.041, 5.041, 6.542, 7.543, 9.045, 10.046, 11.547, 12.548, 14.05, 15.051, 16.552, 17.053, 17.553, 19.054, 20.055, 21.557, 23.057, 24.058, 24.558, 25.56, 26.562, 28.064, 29.066, 30.567, 31.568, 33.069, 34.071, 35.574, 36.575, 38.078, 39.08, 40.581, 41.581, 43.082, 44.083, 44.584]
    y-axis "CPU percent" 0 --> 500
    line [31.96, 101.8, 142.01, 126.04, 141.58, 178.03, 173.74, 149.87, 135.98, 51.97, 117.88, 105.73, 80.05, 0, 17.98, 65.92, 11.99, 61.93, 138.09, 99.91, 109.93, 131.72, 145.72, 133.96, 91.91, 130.09, 137.76, 104.08, 101.8, 69.81, 139.99, 49.9, 9.99, 138, 161.84, 119.98, 133.75, 193.7]
Loading
xychart-beta
    title "Base memory: RSS then PSS"
    x-axis "Elapsed seconds" [0.036, 1.537, 2.539, 4.041, 5.041, 6.542, 7.543, 9.045, 10.046, 11.547, 12.548, 14.05, 15.051, 16.552, 17.053, 17.553, 19.054, 20.055, 21.557, 23.057, 24.058, 24.558, 25.56, 26.562, 28.064, 29.066, 30.567, 31.568, 33.069, 34.071, 35.574, 36.575, 38.078, 39.08, 40.581, 41.581, 43.082, 44.083, 44.584, 45.095]
    y-axis "Memory MiB" 0 --> 500
    line [12.23, 86.56, 125.54, 130.53, 158.44, 168.34, 171.73, 190.29, 189.21, 167.16, 169.35, 167.11, 163.02, 150.65, 150.66, 150.73, 151.22, 150.65, 158.96, 163.7, 269.46, 281.67, 205.5, 211.71, 190.82, 162.03, 196.77, 169.05, 162.14, 162.07, 158.02, 211.84, 183.52, 167.57, 183.07, 168.38, 166.54, 190.41, 208.73, 0]
    line [9.05, 83.08, 122.05, 127.09, 155.38, 164.84, 168.23, 186.75, 185.85, 163.6, 165.84, 163.58, 159.51, 147.14, 147.15, 147.22, 147.71, 147.14, 155.39, 160.29, 266, 277.74, 202.14, 208.22, 187.32, 158.52, 193.6, 165.56, 158.64, 158.53, 154.51, 208.42, 180.01, 164.06, 179.59, 164.88, 163.03, 186.78, 205.22, 0]
Loading

HEAD

xychart-beta
    title "HEAD CPU"
    x-axis "Elapsed seconds" [1.035, 1.535, 2.537, 4.037, 5.54, 6.542, 8.044, 9.545, 10.546, 12.048, 13.549, 14.551, 16.053, 17.556, 18.557, 20.06, 21.562, 22.563, 24.065, 25.567, 26.568, 27.57, 28.07, 29.572, 30.574, 32.076, 33.576, 34.578, 36.079, 37.58, 38.581, 40.084, 41.585, 42.586, 44.089, 45.59, 46.591, 47.593]
    y-axis "CPU percent" 0 --> 500
    line [4, 17.99, 123.86, 143.87, 157.64, 145.76, 173.83, 179.85, 139.91, 131.91, 141.88, 37.91, 85.93, 7.98, 0, 29.92, 0, 5.99, 61.97, 119.79, 143.75, 103.79, 110.02, 125.78, 109.75, 125.88, 159.95, 93.89, 117.91, 67.92, 135.97, 101.81, 9.99, 99.97, 141.77, 87.91, 109.83, 197.68]
Loading
xychart-beta
    title "HEAD memory: RSS then PSS"
    x-axis "Elapsed seconds" [0.035, 1.035, 1.535, 2.537, 4.037, 5.54, 6.542, 8.044, 9.545, 10.546, 12.048, 13.549, 14.551, 16.053, 17.556, 18.557, 20.06, 21.562, 22.563, 24.065, 25.567, 26.568, 27.57, 28.07, 29.572, 30.574, 32.076, 33.576, 34.578, 36.079, 37.58, 38.581, 40.084, 41.585, 42.586, 44.089, 45.59, 46.591, 47.593, 48.009]
    y-axis "Memory MiB" 0 --> 500
    line [12.2, 65.47, 76.62, 121.57, 161.88, 154.01, 176.58, 179.2, 195.95, 179.61, 189.14, 195.54, 166.66, 154.73, 153.11, 149.07, 148.99, 147.25, 146.6, 169.02, 164.57, 169.44, 286.99, 246.82, 207.79, 183.39, 188.98, 166.16, 155, 165.67, 161.54, 209.49, 183.54, 161.59, 178.3, 171.48, 160.96, 182.49, 215.3, 0]
    line [9.06, 62.41, 73.18, 118.33, 158.35, 150.47, 173.09, 175.76, 192.32, 176.14, 185.59, 191.95, 163.06, 150.22, 149.51, 145.47, 145.39, 143.65, 143, 165.38, 159.58, 165.96, 283.26, 242.75, 204.18, 179.79, 185.84, 162.57, 151.42, 162.08, 157.71, 205.91, 179.93, 157.98, 174.79, 167.89, 157.37, 178.89, 211.7, 0]
Loading

Deterministic fixture · required contract

The fixture exercises 15 routes: 8 are expected to emit rows and 7 intentionally exercise empty, loading, or timeout behavior.

Metric Base HEAD Δ
Run status success success —
Extracted rows / contract 40 / 40 40 / 40 0 (0.00%)
Contract fill 100.00% 100.00% 0.00 pp (0.00%)
Sites with rows 8 / 15 8 / 15 0 (0.00%)
Sites meeting row contract 15 / 15 15 / 15 0 (0.00%)
Unexpected empty sites 0 0 0
Partial-row sites 0 0 0
Site outcomes extracted: 7; HTTP error + rows: 1; empty: 3; timeout + empty: 4 extracted: 7; HTTP error + rows: 1; empty: 3; timeout + empty: 4 —
Observed duration 19.85 s 19.85 s +0.00 s (+0.01%)
Estimated CPU 0.39 s 0.39 s 0.00 s (0.00%)
Peak PSS 65.55 MiB 65.25 MiB -0.30 MiB (-0.46%)
Peak RSS 68.66 MiB 68.57 MiB -0.09 MiB (-0.13%)
Peak threads 18 18 0 (0.00%)
Mismatched sites 0 0 0
Timeout with items 0 0 0

Full HTML, JSON, CSV, logs, and page snapshots: workflow run and full spider-bench-results artifact.

The public-web A/B is informational. The exact HEAD fixture contract runs as a separate required CI check; timing and public-site content deltas remain non-blocking.

@github-actions

github-actions Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

CI Regression Report

Source CI run · source state at render: in_progress · artifacts: 6/6

Check Status Signal
Release regression ✅ HEAD/base failures 0/0; raw binary +0.014622%
Frontend differential ✅ 1,020/1,020 cases matched; 0 issues
Agent episodes ✅ 8/8 Moli episodes passed; 0 failures
Runtime/CDP contracts ✅ 26 contract cases; 0 failures
CDP smoke ✅ 52/52 groups passed; 616 scenarios
WebMainBench ✅ 545/545 completed; 0 unexpected failures
Release regression — ✅ HEAD/base failures 0/0; raw binary +0.014622%

Package and image size

Metric Base HEAD Delta Delta %
Raw binary 148.23 MiB 148.26 MiB +22.20 KiB +0.014622%
Stripped binary 101.98 MiB 102.00 MiB +20.00 KiB +0.019152%
gzip binary 50.84 MiB 50.86 MiB +11.64 KiB +0.022354%
Rootfs 155.14 MiB 155.16 MiB +20.00 KiB +0.012590%
gzip rootfs 59.70 MiB 59.71 MiB +9.90 KiB +0.016192%

Startup latency and PSS

Case Base p50 HEAD p50 Delta Base PSS HEAD PSS Delta
Serve ready 27.22 ms 27.42 ms +0.19 ms 4.19 MiB 3.42 MiB −792.00 KiB
CDP first page 49.62 ms 50.18 ms +0.56 ms 4.32 MiB 4.03 MiB −298.50 KiB
CDP warm page 10.93 ms 11.62 ms +0.69 ms 49.76 MiB 49.15 MiB −633.50 KiB
CLI about:blank 14.77 ms 14.63 ms −0.14 ms 4.12 MiB 3.43 MiB −702.50 KiB
CLI local JS 18.47 ms 16.67 ms −1.80 ms 3.57 MiB 5.07 MiB +1.51 MiB

Concurrency matrix

Concurrency Base p50 HEAD p50 Delta Base PSS HEAD PSS Delta HEAD failures Unstable B/H
1 15.36 ms 16.33 ms +0.97 ms 693.00 KiB 662.00 KiB −31.00 KiB 0 0/0
5 20.09 ms 23.72 ms +3.63 ms 27.15 MiB 5.02 MiB −22.12 MiB 0 0/0
10 20.96 ms 20.81 ms −0.16 ms 39.31 MiB 13.41 MiB −25.90 MiB 0 0/0
25 21.27 ms 20.59 ms −0.68 ms 22.60 MiB 27.15 MiB +4.55 MiB 0 0/0
100 20.24 ms 19.50 ms −0.73 ms 29.42 MiB 22.67 MiB −6.75 MiB 0 0/0
Frontend differential — ✅ 1,020/1,020 cases matched; 0 issues
Match DOM mismatch Diagnostic mismatch Moli error Reference error Infrastructure error Mismatched frames Duration
1,020 0 0 0 0 0 0 6m 30.40s
Agent episodes · Moli vs Chromium — ✅ 8/8 Moli episodes passed; 0 failures
Fast contract Episodes Passed Assertions Ready p50 Episode p50
Moli 8 8 47/47 3.62 ms 24.38 ms
Chromium 8 8 47/47 232.18 ms 85.82 ms
Operation p50 Chromium Moli Delta Delta %
navigate 40.39 ms 5.61 ms −34.78 ms −86.10%
observe 0.70 ms 0.86 ms +0.16 ms +22.59%
fill 3.21 ms 3.43 ms +0.22 ms +6.99%
click 4.29 ms 4.05 ms −0.24 ms −5.49%
Idle-resource episode Peak RSS Peak PSS Average CPU Peak CPU Peak processes Sampler
Moli 65.17 MiB 63.35 MiB 0.69% 9.99% 1 ✅
Chromium 1289.66 MiB 410.29 MiB 1.80% 88.43% 13 ⚠️ PSS partial
Runtime and CDP session contracts — ✅ 26 contract cases; 0 failures
Suite Cases Failures Median case p50 Median case p95 Median peak PSS p50
Synthetic fetch 13 0 17.90 ms 18.59 ms 628.00 KiB
Long-lived CDP session 13 0 17.97 ms 18.29 ms —
CDP smoke — ✅ 52/52 groups passed; 616 scenarios

Workers: 4 · cumulative group time: 199.41 s · failed groups: 0

Slowest group Scenarios Duration Status
scrollbar-visibility 22 28.07 s ✅
target-lifecycle 24 18.39 s ✅
dom-input 27 14.81 s ✅
multi-page 45 11.95 s ✅
chromium-cdp 56 11.48 s ✅
WebMainBench · 545 pages — ✅ 545/545 completed; 0 unexpected failures
Completed Successful Expected DNS failure Unexpected failures Panics Crashes Timeouts Empty output
545/545 544 1 0 0 0 0 0

Frozen HTML · Linux · --wait done · 45 seconds per page · no retries. Content quality is evaluated separately.

Diagnostics: webmainbench-results — every page's Markdown, stderr, and exit status. Source run and artifacts

All artifact fields are parsed by the trusted default-branch renderer; missing or invalid inputs remain visible as unavailable.

@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-engineering branch from 19f651f to 7649f13 Compare September 24, 2026 04:21
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-layout branch from ef06d30 to d979e94 Compare September 24, 2026 04:22
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-engineering branch from 7649f13 to 6185ba5 Compare September 24, 2026 05:10
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-layout branch from d979e94 to f4461d1 Compare September 24, 2026 05:12
@ldm0
ldm0 force-pushed the codex/pr640-reopen-engineering branch from 008b31d to 2009cd7 Compare September 28, 2026 20:51
@lanyue-llk

Copy link
Copy Markdown
Contributor Author

已由 #953 替代:独立补丁已真实 rebase 到最新 main。旧 PR 和分支保留供溯源;后续审阅与 CI 请看 #953。

@lanyue-llk lanyue-llk closed this Sep 29, 2026
@lanyue-llk lanyue-llk reopened this Sep 29, 2026
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-layout branch from f4461d1 to eeb8a55 Compare September 29, 2026 14:06
@lanyue-llk lanyue-llk changed the title fix(layout): refresh geometry and preserve inline fragments fix(layout): preserve inline fragments and published geometry Sep 29, 2026
@lanyue-llk
lanyue-llk changed the base branch from codex/pr640-reopen-engineering to main September 29, 2026 14:07
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-layout branch from eeb8a55 to 3bd7cb9 Compare September 29, 2026 14:54
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-reopen-layout branch from 3bd7cb9 to d1c5f5c Compare October 8, 2026 08:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant