Skip to content

fix(input): preserve activation and navigation lifecycle semantics - #736

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

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

Conversation

@lanyue-llk

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

Copy link
Copy Markdown
Contributor

Enter 已送达输入框却没有触发表单默认提交,或者按键/点击触发导航后,收尾事件被错误地当作失败。WebDriver 还需要与原生输入共享焦点、命中和默认激活语义。

Reviewer 图解入口

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

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

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

修复机制

将协议转换留在适配边界,核心输入层负责焦点和默认激活;输入阶段使用事件类型表达。点击预检验证遮挡与 frame 祖先关系,导航切换后的收尾按所属生命周期处理,不吞掉无关错误。 ClassicClickPreparation 在协议边界将动态值转换为 Dom / Pointer { point, viewport },使指针路径所需数据随状态一起携带;这符合 Rust API Guidelines 的类型表达语义原则。

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

对应验收

本分区负责 4 题:274、386、465、731。

回归覆盖:Enter/换行、焦点、取消默认动作、遮挡、跨 frame、默认 Mock 与真实布局、导航前后输入失败边界。

旧输入 HEAD 1fb7c73f7af5e2fb1db25d6e2af353693c29806f 在插入/隐藏遮挡层后的两项点击测试失败。保持输入测试不变、改为依赖布局后,a25a2c7b6d0c00e4812a1b3f95f9ad786530d034 的全工作区 CI 为 18,482 通过、0 失败、13 跳过,包含这两项未忽略测试。精确版本 CI 红绿证据。该结果验证通用快照失效依赖,不采用 iframe 特例。

当前版本 标识与验证范围
HEAD 9818501903e164ff0fb871885baf0a7dba4fdf9e
直接基线 62c07ae866e8ce5dbc0c78c23ee2dc493d7fa393
main 基线 a54ba82a7ac6462429d2f60cd0dbd0d67c589e84
当前 HEAD 真实任务 4/4 完整单轮通过,零重试;提交 9818501903e164ff0fb871885baf0a7dba4fdf9e,二进制 SHA-256 b42ba5bb7a32ea02b01d95599c8d22e63d6b2410b1947c3b48981022cf213a2b;逐题审计与历史对照
当前版本门禁 以该 HEAD 的 Format、Clippy、Nextest 结果为准;历史结果不替代当前门禁
已测归档版本真实任务 4/4 通过(274、386、465、731);原冻结动作与评分,每题执行一次,17 项输入及全部产物哈希审计通过

范围与依赖

以布局 PR #735 为直接基线,并间接依赖工程 PR https://github.com/lexmount/moli/pull/734;diff 展示本分区修改。点击预检需要布局快照及时反映 DOM 与样式变化。

本 PR 替代 727,基于更新后的 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 与提交账号核验。

归档版本四题验收说明、逐题结果和哈希。首次启动在任何任务执行前超时,失败记录保留;随后恢复启动并完成四题,没有任务重试。

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 b0f237b09557 → HEAD fa1c36ef558c; 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 49.72 s 57.62 s +7.90 s (+15.88%)
Estimated CPU 51.86 s 53.88 s +2.02 s (+3.90%)
Peak PSS 273.16 MiB 257.73 MiB -15.43 MiB (-5.65%)
Peak RSS 275.41 MiB 260.53 MiB -14.88 MiB (-5.40%)
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.537, 3.038, 4.04, 5.041, 5.541, 7.042, 8.544, 9.546, 11.048, 12.55, 14.051, 15.553, 16.554, 18.057, 19.559, 21.06, 22.061, 23.563, 24.063, 25.063, 26.566, 28.067, 29.069, 30.57, 32.073, 33.574, 34.576, 36.078, 37.579, 39.081, 40.583, 41.585, 43.086, 44.588, 46.09, 47.092, 48.594]
    y-axis "CPU percent" 0 --> 500
    line [137.86, 129.79, 147.79, 111.73, 157.94, 169.93, 169.77, 109.69, 197.76, 145.61, 102.02, 137.83, 31.92, 97.94, 115.82, 53.99, 73.9, 161.69, 99.87, 107.99, 139.75, 115.8, 127.87, 47.86, 127.78, 103.77, 63.94, 91.86, 7.99, 141.93, 117.89, 12, 2, 119.79, 137.91, 97.92, 99.9, 107.87]
Loading
xychart-beta
    title "Base memory: RSS then PSS"
    x-axis "Elapsed seconds" [0.035, 1.537, 2.537, 3.038, 4.04, 5.041, 5.541, 7.042, 8.544, 9.546, 11.048, 12.55, 14.051, 15.553, 16.554, 18.057, 19.559, 21.06, 22.061, 23.563, 24.063, 25.063, 26.566, 28.067, 29.069, 30.57, 32.073, 33.574, 34.576, 36.078, 37.579, 39.081, 40.583, 41.585, 43.086, 44.588, 46.09, 47.092, 48.594, 49.722]
    y-axis "Memory MiB" 0 --> 500
    line [12.43, 108.66, 113.8, 124.28, 134.39, 154.72, 136.21, 151.73, 169.6, 196.8, 171.33, 188.61, 169.23, 164.52, 148.2, 145.45, 141.38, 150.27, 158.14, 231.34, 275.41, 195.25, 235.5, 159.21, 149.11, 164.8, 150.33, 145, 144.68, 151.81, 190.46, 184.71, 184.4, 154, 166.98, 157.77, 156.61, 156.43, 168.7, 0]
    line [9.68, 105.43, 110.9, 121.27, 131.25, 151.7, 133.22, 148.7, 166.57, 193.75, 168.42, 184.44, 166.18, 161.47, 145.18, 142.4, 138.33, 147.22, 155.38, 228.31, 273.16, 192.29, 230.84, 156.02, 145.87, 161.74, 147.28, 141.81, 141.51, 148.66, 187, 181.55, 181.23, 150.83, 163.75, 154.63, 153.44, 153.26, 165.53, 0]
Loading

HEAD

xychart-beta
    title "HEAD CPU"
    x-axis "Elapsed seconds" [1.538, 3.04, 4.543, 5.045, 6.546, 8.048, 9.55, 11.551, 13.053, 14.556, 16.057, 17.558, 19.56, 21.063, 22.566, 23.067, 24.069, 26.071, 27.571, 29.073, 30.576, 32.078, 34.08, 35.582, 37.084, 38.586, 40.587, 42.088, 43.589, 45.092, 46.594, 48.598, 50.099, 51.601, 53.104, 55.105, 56.607, 57.107]
    y-axis "CPU percent" 0 --> 500
    line [135.82, 131.83, 103.76, 143.64, 129.94, 165.88, 153.59, 103.95, 117.96, 131.77, 2, 12, 2, 87.91, 69.92, 0, 16, 0, 79.92, 113.98, 107.92, 151.74, 125.89, 121.87, 113.85, 25.99, 79.95, 7.99, 119.93, 137.7, 89.89, 13.96, 101.86, 123.8, 41.89, 99.91, 115.89, 205.83]
Loading
xychart-beta
    title "HEAD memory: RSS then PSS"
    x-axis "Elapsed seconds" [0.037, 1.538, 3.04, 4.543, 5.045, 6.546, 8.048, 9.55, 11.551, 13.053, 14.556, 16.057, 17.558, 19.56, 21.063, 22.566, 23.067, 24.069, 26.071, 27.571, 29.073, 30.576, 32.078, 34.08, 35.582, 37.084, 38.586, 40.587, 42.088, 43.589, 45.092, 46.594, 48.598, 50.099, 51.601, 53.104, 55.105, 56.607, 57.107, 57.618]
    y-axis "Memory MiB" 0 --> 500
    line [12.29, 108.61, 128.52, 142.86, 157.85, 171.68, 167.34, 185.89, 179.04, 174.27, 175.88, 160.49, 141.67, 142.69, 144.18, 142.78, 144.45, 135.46, 133.11, 147.34, 158.32, 260.53, 199.95, 170.9, 167.96, 170.34, 149.7, 144.49, 149.08, 179.36, 233, 181.24, 154.48, 180.54, 174.04, 155.58, 158.23, 179.58, 183.29, 0]
    line [8.7, 104.65, 124.62, 139.3, 154.31, 168.33, 164.28, 181.5, 176.5, 170.92, 172.89, 157.47, 138.84, 139.86, 141.4, 139.95, 141.61, 132.63, 130.28, 144.51, 155.49, 257.73, 197.24, 168.05, 164.64, 167.54, 146.86, 141.66, 146.26, 176.45, 230.17, 178.79, 151.64, 177.69, 171.45, 152.56, 155.22, 174.8, 179.6, 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.99 s 19.98 s -0.01 s (-0.04%)
Estimated CPU 0.41 s 0.38 s -0.03 s (-7.51%)
Peak PSS 57.38 MiB 57.15 MiB -0.23 MiB (-0.40%)
Peak RSS 61.38 MiB 61.44 MiB +0.06 MiB (+0.10%)
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

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: 146.60 s · failed groups: 0

Slowest group Scenarios Duration Status
target-lifecycle 24 16.43 s ✅
multi-page 45 11.45 s ✅
chromium-cdp 56 10.81 s ✅
dom-input 27 9.71 s ✅
layout-screenshot 5 7.57 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-layout-final branch from b0f237b to 62c07ae Compare September 22, 2026 09:52
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-input-final branch from fa1c36e to 9818501 Compare September 22, 2026 09:53
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-layout-final branch from 62c07ae to 058c3b5 Compare September 22, 2026 11:42
@lanyue-llk
lanyue-llk force-pushed the codex/pr640-input-final branch from 9818501 to edd5bf9 Compare September 22, 2026 11:44
@lanyue-llk
lanyue-llk changed the base branch from codex/pr640-layout-final to main September 22, 2026 11:44
@lanyue-llk
lanyue-llk merged commit 50a4242 into main Sep 22, 2026
4 of 9 checks passed
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