Skip to content

fix(layout): refresh geometry and preserve inline fragments - #735

Merged
lanyue-llk merged 1 commit into
mainfrom
codex/pr640-layout-final
Sep 22, 2026
Merged

lanyue-llk merged 1 commit into
mainfrom
codex/pr640-layout-final

Conversation

@lanyue-llk

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

Copy link
Copy Markdown
Contributor

页面中的元素已经存在,却返回零面积或旧位置,导致可见元素选择和点击无法继续。该修改修复 inline 片段几何与按需布局失效,让几何消费者读取与当前 DOM、样式和布局环境一致的冻结快照。

Reviewer 图解入口

artifact-site:七个 PR 的职责、依赖、原 11 类与 35 题证据。建议审查顺序:734 → 735 → 736 → 737 → 738 → 739 → 740;实际依赖以指南中的有向图为准。

图解与验收证据见站点报告;精确 HEAD 与完整成功、失败记录见下文。

当前 HEAD 62c07ae866e8ce5dbc0c78c23ee2dc493d7fa393 已基于 main@a54ba82a7ac6462429d2f60cd0dbd0d67c589e84 或其直接父 PR 重放;b0f237b09557 的真实任务/专项证据和新提交的补丁等价边界分别核对。当前 HEAD 的对应真实任务已在独立新环境完整单轮 27/27 通过、零重试;归档旧轮结果与本轮严格区分。动作、评分、合同、二进制和产物哈希审计见 artifact-site 报告。

修复机制

保留 native DOM + Stylo 作为状态来源;输入变化在所属模块标记几何失效,几何请求按需重算并发布冻结结果。片段生成保留空白、block-in-inline 和相对定位的正确包含块语义。默认 Mock 模式不升级为持续布局。

机制示意与验收证据见 artifact-site 审查报告;图片仅用于解释机制,不代表本 PR 的验收结果。

对应验收

本分区负责 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。

回归覆盖:几何数值、inline 边界、样式收养/撤销、资源变化、多次读取缓存行为及默认 Mock 策略。五个原有测试由“等待绘制才能读取新几何”更新为“首次精确读取刷新、后续干净读取复用”,保留尺寸、文本和复用断言。

历史版本 48d78ac639a3d5e1738342a6876225f9988cefe3 执行原分配的 28 题,结果 27 通过、1 失败(595),零重试。逐题结果与哈希。595 的布局交互已完成、订阅响应为 200,但网络评分缺少 Referer;其最终验收移至依赖布局的网络 PR。595 依赖证据。原 28 题结果保留原样,不能改写为该版本全部通过。

当前版本 标识与验证范围
HEAD 62c07ae866e8ce5dbc0c78c23ee2dc493d7fa393
直接基线 746e376f0179988d0aa6250cb055aee2baaebb4f
main 基线 a54ba82a7ac6462429d2f60cd0dbd0d67c589e84
当前 HEAD 真实任务 27/27 完整单轮通过,零重试;提交 62c07ae866e8ce5dbc0c78c23ee2dc493d7fa393,二进制 SHA-256 bbf800292bf8a5acadf82123588dc9054f57efab034310bef0a0628970f14331;逐题审计与历史对照
当前版本门禁 以该 HEAD 的 Format、Clippy、Nextest 结果为准;历史结果不替代当前门禁
已测归档版本真实任务 原冻结执行合同 26/27,714 失败;最终声明合同 27 题逐题通过(v3 轮 26 题+v4 单独 547),均为同一受测二进制,零重试

范围与依赖

以工程 PR #734 为直接基线;diff 展示本分区修改。

本 PR 替代 726,基于更新后的 main;旧 PR 保留讨论与 review 历史。原始 #640 也保留作为拆分来源。

整组功能范围为历史 1.1.9 的 34 个失败任务加 1.1.8 已失败的 386,共 35 题:布局 27、输入 4、网络 3、文本 1。历史 67 是传输超时,保留证据但不归因本组功能修复。逐 case 历史及当前归属;历史 11 类分组。历史 main@de109 的 90 题基线 为 55/90,其运行顺序与后续子集不同,结果差异本身不作为独立因果证明。

7 个 PR 的依赖及逐题验收索引、PR 与提交账号核验。

最终布局 27 题原始审计。714 的 14 个动作均执行,投票落库,但在页面脚本初始化前走原生表单提交,未满足冻结评分所要求的 AJAX 路径。失败分层证据。相同延迟脚本场景中,Chromium、旧布局和当前布局均复现;等待该文档 DOMContentLoaded 后均走 AJAX,未观察到过早 DCL。独立对照。原失败不会被改分或覆盖,Moli 不加入任务专属等待。

全局导航等待实验已放弃:完整 27 题只通过 20 题,其中新增 5 秒等待预算引入额外超时。实验完整记录。最终方案使用原测试框架已有的只读就绪前提,保留动作、评分与二进制;布局 v3 完整轮 26/27,547 在全新环境中单独以 v4 合同 1/1 通过。原失败记录均保留,不将其表述成 v4 单轮 27/27。

布局 27 题逐项来源与 547 失败根因。

35 题最终逐项来源总表;布局是 v3 的 26 题加 v4 单独 547,不是单轮 27/27。

@github-actions

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 2e9c28529fb4 → HEAD b0f237b09557; benchmark order: base-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: 36; HTTP error + rows: 2; empty: 7; HTTP error + empty: 1; snapshot error + empty: 2 extracted: 37; HTTP error + rows: 1; empty: 8; HTTP error + empty: 1; snapshot error + empty: 1 —
Observed duration 60.13 s 57.69 s -2.44 s (-4.05%)
Estimated CPU 54.97 s 53.83 s -1.13 s (-2.06%)
Peak PSS 261.62 MiB 261.11 MiB -0.51 MiB (-0.20%)
Peak RSS 264.72 MiB 264.36 MiB -0.36 MiB (-0.14%)
Peak threads 26 27 +1 (+3.85%)
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, 3.039, 3.539, 4.54, 5.04, 6.54, 8.542, 10.044, 12.047, 13.549, 15.051, 17.051, 18.551, 20.052, 21.552, 22.052, 23.553, 25.054, 27.058, 28.562, 30.565, 32.067, 33.568, 35.572, 37.072, 38.575, 40.576, 42.078, 43.582, 45.584, 47.086, 48.588, 50.591, 52.093, 54.096, 55.598, 57.099, 59.102]
    y-axis "CPU percent" 0 --> 200
    line [95.93, 135.71, 131.86, 103.97, 108, 132.05, 141.87, 189.81, 87.96, 111.92, 115.66, 6, 91.97, 86, 0, 14, 139.72, 123.96, 107.87, 147.73, 135.89, 133.89, 119.82, 41.89, 91.98, 5.98, 150.06, 79.83, 19.95, 21.95, 45.99, 79.89, 2, 95.75, 131.87, 25.93, 99.9, 181.73]
Loading
xychart-beta
    title "Base memory: RSS then PSS"
    x-axis "Elapsed seconds" [0.035, 1.537, 3.039, 3.539, 4.54, 5.04, 6.54, 8.542, 10.044, 12.047, 13.549, 15.051, 17.051, 18.551, 20.052, 21.552, 22.052, 23.553, 25.054, 27.058, 28.562, 30.565, 32.067, 33.568, 35.572, 37.072, 38.575, 40.576, 42.078, 43.582, 45.584, 47.086, 48.588, 50.591, 52.093, 54.096, 55.598, 57.099, 59.102, 60.13]
    y-axis "Memory MiB" 0 --> 500
    line [12.09, 90.61, 116.43, 133.94, 133.16, 158.04, 173.89, 156.98, 169.59, 149.64, 161.05, 169.36, 143.5, 150.43, 143.98, 133.98, 132.35, 168.51, 163.48, 264.72, 204.61, 168.65, 167.57, 167.16, 140.15, 140.41, 144.66, 206.56, 241.31, 234.96, 241.38, 245.57, 176.83, 144.79, 166.38, 155.98, 158.18, 159.2, 177.65, 0]
    line [9.44, 87.68, 112.94, 131.17, 130.66, 155.46, 171.14, 154.44, 167.19, 146.83, 158.27, 165.99, 140.55, 147.62, 141.16, 131.15, 129.52, 165.82, 159.76, 261.62, 202.04, 164.68, 164.41, 164.05, 137.02, 137.31, 141.55, 203.8, 238.3, 231.94, 238.36, 242.51, 173.18, 141.93, 163.57, 153.18, 155.38, 156.39, 174.81, 0]
Loading

HEAD

xychart-beta
    title "HEAD CPU"
    x-axis "Elapsed seconds" [1.546, 3.046, 5.05, 6.552, 8.054, 9.558, 11.562, 13.064, 14.568, 16.07, 17.572, 19.574, 21.075, 22.582, 24.083, 26.088, 26.588, 27.59, 29.092, 30.594, 32.097, 34.098, 35.6, 37.101, 38.604, 40.606, 42.107, 43.609, 45.11, 46.612, 48.614, 50.115, 51.618, 53.12, 55.121, 55.622, 56.623, 57.124]
    y-axis "CPU percent" 0 --> 200
    line [127.89, 119.81, 97.78, 135.74, 133.96, 91.77, 109.93, 55.89, 119.56, 113.73, 109.67, 105.99, 47.98, 128.67, 131.88, 101.2, 111.85, 105.77, 157.84, 123.88, 103.84, 31.97, 101.96, 31.98, 109.88, 123.88, 2, 25.97, 67.97, 45.94, 61.99, 143.92, 169.88, 101.74, 135.9, 185.82, 79.97, 0]
Loading
xychart-beta
    title "HEAD memory: RSS then PSS"
    x-axis "Elapsed seconds" [0.042, 1.546, 3.046, 5.05, 6.552, 8.054, 9.558, 11.562, 13.064, 14.568, 16.07, 17.572, 19.574, 21.075, 22.582, 24.083, 26.088, 26.588, 27.59, 29.092, 30.594, 32.097, 34.098, 35.6, 37.101, 38.604, 40.606, 42.107, 43.609, 45.11, 46.612, 48.614, 50.115, 51.618, 53.12, 55.121, 55.622, 56.623, 57.124, 57.692]
    y-axis "Memory MiB" 0 --> 500
    line [12.4, 104.06, 125.15, 154, 152.06, 157.88, 159.76, 165.31, 160.69, 168.37, 162.11, 145.13, 142.25, 140.08, 174.19, 151.05, 263.88, 264.36, 199.03, 162.89, 170.38, 174.77, 138.73, 148.28, 143.71, 172.36, 241.21, 239.08, 244.54, 190.12, 160.63, 152.54, 165.76, 155.32, 147.69, 162.7, 185.79, 169.02, 169, 0]
    line [9.5, 100.89, 121.98, 150.8, 148.82, 154.6, 156.53, 162.03, 157.47, 165.1, 158.62, 141.85, 138.9, 136.66, 171.15, 147.76, 260.84, 261.11, 195.96, 160.05, 167.36, 171.93, 135.75, 145.21, 140.68, 169.39, 238.29, 236.16, 241.64, 186.15, 157.73, 149.03, 162.99, 152.59, 144.9, 160.52, 183.14, 166.05, 166.02, 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.88 s 19.88 s +0.00 s (+0.01%)
Estimated CPU 0.44 s 0.45 s +0.01 s (+2.27%)
Peak PSS 57.89 MiB 58.37 MiB +0.48 MiB (+0.83%)
Peak RSS 60.78 MiB 61.34 MiB +0.56 MiB (+0.92%)
Peak threads 19 18 -1 (-5.26%)
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

Copy link
Copy Markdown

Sequential Navigation Soak A/B

⚠️ Benchmark infrastructure failed before a comparison could be produced.

Workflow: timed_out. Inspect the workflow run for the failing build, harness, or artifact step.

No navigation resilience or memory conclusion is available for this run.

@github-actions

Copy link
Copy Markdown

CI Regression Report

Source CI run · source state at render: timed_out · artifacts: 1/5

Check Status Signal
Release regression ⚪ artifact unavailable or invalid
Frontend differential ⚪ artifact unavailable or invalid
Agent episodes ⚪ artifact unavailable or invalid
Runtime/CDP contracts ⚪ artifact unavailable or invalid
CDP smoke ✅ 48/48 groups passed; 535 scenarios
Release regression — ⚪ artifact unavailable or invalid

Artifact unavailable or invalid. See the source CI run for infrastructure details.

Frontend differential — ⚪ artifact unavailable or invalid

Artifact unavailable or invalid. See the source CI run for infrastructure details.

Agent episodes · Moli vs Chromium — ⚪ artifact unavailable or invalid

Artifact unavailable or invalid. See the source CI run for infrastructure details.

Runtime and CDP session contracts — ⚪ artifact unavailable or invalid

Artifact unavailable or invalid. See the source CI run for infrastructure details.

CDP smoke — ✅ 48/48 groups passed; 535 scenarios

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

Slowest group Scenarios Duration Status
target-lifecycle 24 16.52 s ✅
multi-page 45 11.55 s ✅
chromium-cdp 56 11.01 s ✅
dom-input 27 10.53 s ✅
layout-screenshot 5 7.79 s ✅

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-reliability-final branch from 2e9c285 to 746e376 Compare September 22, 2026 09:49
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-layout-final branch from b0f237b to 62c07ae Compare September 22, 2026 09:52
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