Skip to content

report(webmainbench): publish complete seven-method content audit - #35

Merged
lanyue-llk merged 33 commits into
mainfrom
codex/moli-fetch-content-audit
Sep 29, 2026
Merged

lanyue-llk merged 33 commits into
mainfrom
codex/moli-fetch-content-audit

Conversation

@lanyue-llk

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

Copy link
Copy Markdown
Contributor

交付结果

本 PR 发布 WebMainBench 545 题、七种方法的正式报告:五种原始方法、Moli PR785 修复版、Moli PR919 修复版,共 3,815 条逻辑结果。

  • 七方法正式报告
  • Artifact Site 版本:ver_9440fb2764424af387e7a3c41cf6720f
  • Moli 修复实现:PR #919,报告计分源码 e944d066bc1(当前 review 修正 head 39c9cb0ab 尚未冒充为该次计分运行),release 二进制 SHA-256 e146b853bb06ea02bb8847407a76e28eb2bc31ba4ce741af3a7fdaabb194e209
  • 评测集与评分器修订:WebMainBench PR #4,评分器提交 f7cb97df2dfb5ac10ebc97cd0b8f9d73ab40f50b

七方法总览

七方法错误地图

七方法核心结果

方法 成功生成正文 综合分 全文 代码 公式 表格内容 表格结构
Moli 1.1.9 543/545 36.41% 41.45% 90.874% 20.3% 17.3% 12.1%
Lightpanda 0.4.1 545/545 35.00% 41.52% 84.708% 13.0% 21.8% 14.0%
Obscura 0.2.2 543/545 31.03% 41.88% 81.817% 31.4% 0.0% 0.0%
Chromium 154 545/545 27.02% 39.40% 35.859% 21.1% 25.0% 13.7%
Kitesurf 524/545 33.43% 36.99% 80.700% 19.3% 18.3% 11.9%
Moli 1.1.9 · PR785 修复版 545/545 36.53% 41.72% 90.802% 20.3% 17.7% 12.1%
Moli 1.1.11 · PR919 修复版 545/545 39.41% 40.79% 91.743% 28.2% 22.6% 13.7%

专项指标采用同一组参考定义总体:全文 545、代码 110、公式 257、表格内容 179、表格结构 179。公式与表格母数正好对应修订数据集中 meta.equation 和 meta.table 的非空数量;方法未提取到专项内容、请求失败或指标异常时在适用总体内计零。此前 113/81 或 119/81 是方法输出相关分母,不能用于公平横向比较。

正文计数只表示是否返回非空正文。原版 Moli、Obscura 和 Kitesurf 的真实失败仍保留在 545 题总体中;没有修改对比方法源码,也没有补写输出。

根因与修复

旧评分会让专项分母随方法输出改变,失败样本还能从聚合中消失。代码抽取遗漏内联代码与原始 HTML pre/code,同时可能把版面缩进的普通段落当作代码。数据集中还存在隐藏 Markdown 编辑器副本、错误或缺失的代码标注。

本次把专项总体绑定到人工参考元数据;适用样本上的遗漏、调用失败或指标错误统一计零。代码抽取覆盖语义表示并排除普通缩进文案。数据修订通过完整 545 行的顺序、ID、输入 HTML、原字段和替换内容哈希绑定。TEDS 改为显式有序树,并以有界精确工作区拒绝超出范围的异形大树。

评分修订对全部 3,815 条冻结输出离线重算,provider 调用数为 0。狼人杀本地 origin 错配只重测同一题的七种方法,旧调用与替换证书全部保留。

报告能力

  • 首页核心表和问题矩阵可排序;结果清单可按方法、问题、复核原因和任务搜索筛选。
  • 每个失败可打开诊断弹窗查看阶段、精确错误、复核原因、处理状态、日志和完整结果。
  • 成功与失败详情均可进入按需证据查看器;窄屏表格可横向滚动,深浅主题均已检查。
  • 报告包含七方法总览、问题分布和六张 Moli 修复机制图。

验证

  • 28 passed, 12 subtests passed。
  • 报告发布门禁通过:七方法、3,815 条结果、公共分母、校正证书链、图表声明、排序筛选、证据分片和链接均受检查。
  • 真实浏览器验收覆盖成功详情、失败诊断、证据查看、返回导航、键盘关闭、390px 窄屏及深浅主题。
  • GitHub test 与 Claude 中文 Code Review 均通过;最后一轮审查指出的 PR 正文旧分数已由本正文修正。

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 4m 8s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff
  • 发布审查结论

Review 结论

有条件通过

问题及建议

  • [P1] scripts/check_webmainbench_full_report.py:152:'604' 是未注释的魔法数字,用于发布门控。代码中无推导过程,无法判断其来源(页数?issue 总数?)。若私有内容措辞更新导致该数字变化,门控将在无明确错误信息的情况下失败。建议在行内添加注释说明 604 的含义(例如 # 审计记录的 issue 对象总数)。

  • [P2] scripts/check_webmainbench_full_report.py:141:释放检查通过硬编码字符串 'overview-moli-1.1.10.png' 定位 overview_claims,而非从 illustrations.json 中按角色(如 claims 字段存在性)动态识别。若文件名随版本更新但此处漏改,overview_claims 将保持 None,后续评分断言以"评分声明与实测结果不符"报错,难以定位原因。建议改为遍历所有含 claims 字段的资产。

  • [P2] harness/web_fetch/report.py(renderResult / renderCase JS 模板):JavaScript names 对象将 moli 的标签硬编码为 'Moli 1.1.9',而 moli-fixed 使用 __FIXED_VERSION__ 模板替换,两者方式不一致。当前五方法 profile 中 moli 版本固定为 1.1.9,此版本不会在此报告中改变,但命名机制不统一,后续维护存在遗漏风险。建议为 moli 同样引入 __MOLI_VERSION__ 占位符并在 Python 中替换,或添加注释说明硬编码版本号为刻意冻结。

  • [P2] scripts/review_webmainbench_content.py:validate_review:JSON schema 将 reference_assessment 列为 required,但 validate_review 函数未检查该字段。模型输出由 --output-schema 在 codex 层过滤,Python 侧校验缺口仅在离线校验或 schema 不匹配时暴露。测试用例亦未覆盖。可补充断言或添加注释说明验证层次。


其他无阻塞性观察:

  • report_build.py:603:'moli-fixed': fixed_profile['versions']['moli'] 替换了原有硬编码 '1.1.9',动态化正确。
  • certify_webmainbench_case_correction.py:--prior-correction 继承路径的完整性验证逻辑(supersedes_attempt_id、各项 hash 链)设计严谨。
  • report.py:3112:Moli PR 引用从 #785 改为 #814,与 PR 描述一致,属实质性事实修正。
  • illustrations.json:claims 字段中的评分与 check_webmainbench_full_report.py 的 score-summaries.json 核验机制形成闭环。

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 9s —— View job


PR Review

  • Read PR diff and key files
  • Review for bugs and security issues

One actual issue found; the rest of the changes look correct.

Bug: Unescaped version string injected into JavaScript

harness/web_fetch/report.py — The __FIXED_VERSION__ placeholder is replaced with a raw string from the profile and embedded directly inside a JS string literal:

js = js.replace("__FIXED_VERSION__", profile["versions"]["moli-fixed"])

The two injection sites in the JS template are:

'moli-fixed':'Moli __FIXED_VERSION__(修复后)'

If the version string from fixed_profile['versions']['moli'] (sourced in report_build.py:603) ever contains a quote character (') or </script>, it would break out of the JS string literal or terminate the <script> block. The same unescaped concatenation pattern appears in the labels dict at line 2773:

labels = {p: ("Moli " + profile["versions"][p] + "(修复后)" if p == "moli-fixed" ...

if this label is emitted into an HTML context without html.escape().

In practice, Moli version strings are clean semver, so this won't fire — but the pattern is fragile. Fix this →

Minor: fixed_profile['versions']['moli'] has no fallback

harness/web_fetch/report_build.py:603 — The version lookup fixed_profile['versions']['moli'] will raise KeyError if the fixed-run profile omits that key. The old hardcoded '1.1.9' never failed this way. Worth adding a .get('moli', 'unknown') or an explicit check.

Rest of the changes

  • validate_review semantic checks are intentionally lighter than the JSON schema because codex exec --output-schema enforces the schema before the result reaches Python. The test coverage matches this split correctly.
  • verify_packet_inputs symlink check (path.is_symlink()) is a sound defense against TOCTOU attacks on resumed reviews.
  • subprocess.run calls use list arguments (no shell=True), so no shell injection risk.
  • Case correction binding, illustration, and PR link updates are internally consistent.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36026830876. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 24s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff
  • 发布审查结论

Review 结论

有条件通过

问题及建议

  • [P1] scripts/check_webmainbench_full_report.py:152:'604' 是无注释的魔法数字,门控失败时错误信息为通用 ValueError,无法判断 604 究竟代表 issue 对象总数、pages 数还是其他值,也无法区分是数字本身写错还是 prose 未渲染。建议行内加注释(如 # 604 = audit_findings 记录的 issue 对象总数),并将错误信息改为包含实际值的说明。

  • [P2] scripts/check_webmainbench_full_report.py:141:通过 asset['name'] == 'overview-moli-1.1.10.png' 定位 overview_claims。若后续版本文件名更新但此处漏改,overview_claims 为 None,后续断言抛出"评分声明与实测结果不符"而非"图表配置未找到",误导排查方向。建议改为按 claims 字段存在性识别,或在 overview_claims is None 时单独抛出更明确的错误。

  • [P2] harness/web_fetch/report.py(js.replace("__FIXED_VERSION__", profile["versions"]["moli-fixed"])):版本字符串直接注入 JS 字符串字面量,未做 JSON 转义。当前 semver 字符串(如 1.1.10)不含引号或 </script>,实践中安全;但模式脆弱。建议注释说明此处假设 version 字符串为纯 ASCII 字母数字点格式,或改用 json.dumps 去掉外层引号后替换。

  • [P2] harness/web_fetch/report_build.py:603:fixed_profile['versions']['moli'] 无 .get() 回退;若 fixed profile 的 versions 键缺失 'moli',将抛出无信息的 KeyError。当前 moli-fixed-report.json 存在该键,实践中安全,但建议加 .get('moli') 并在为 None 时显式报错。

  • [P2] scripts/review_webmainbench_content.py(validate_review):JSON schema 将 reference_assessment 列为 required,但 validate_review 函数和测试用例(test_webmainbench_content_review.py:31)均未检查该字段。运行时由 codex exec --output-schema 保证,但 Python 侧校验层次与 schema 声明不一致,且测试用例隐式记录了这一缺口。可补充断言或在函数文档中说明验证由上游 schema 层负责。


无阻塞性观察:

  • report_build.py:603:'moli-fixed': fixed_profile['versions']['moli'] 动态化替代原硬编码 '1.1.9',与 moli-fixed-report.json 版本字段闭环,正确。
  • report.py:3112:Moli PR 引用从 #785 修正为 #814,与 PR 描述一致。
  • certify_webmainbench_case_correction.py:--prior-correction 的 hash 链验证(supersedes_attempt_id、artifact SHA、certificate hash)设计严谨,contained_path 防路径穿越正确引用。
  • illustrations.json:claims 字段中的评分与 check_webmainbench_full_report.py 的 score-summaries.json 核验机制形成闭环。
  • research/report-changes.json:新条目含中英双语,结构符合现有格式,符合 AGENTS.md 要求。
  • JS names 对象中 moli 仍硬编码 'Moli 1.1.9',而 moli-fixed 使用 __FIXED_VERSION__ 占位符替换,两者不一致;当前报告 moli 版本固定不变,功能上无问题,属命名机制不统一,可后续统一。

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 22s —— View job


PR #35 代码审查

  • 读取关键变更文件
  • 审查 bugs 和安全问题
  • 发布结论

前两条已由本轮自动审查记录,第三条为本次新发现。

Bug 1:__FIXED_VERSION__ 未转义注入 JS 字符串(report.py:36)

js = js.replace("__FIXED_VERSION__", profile["versions"]["moli-fixed"])

版本字符串直接替换进 JS 字符串字面量,未经 JS 转义。若版本字符串含 ' 或 </script> 则会破坏 JS 字符串或终止 <script> 块。当前 semver 不会触发,但模式脆弱。
Fix this →

Bug 2:fixed_profile['versions']['moli'] 缺少 fallback(report_build.py:70)

'moli-fixed': fixed_profile['versions']['moli']

若已认证运行的 profile 的 versions 字典中不含 'moli' 键,将以无说明的 KeyError 崩溃。建议改用 .get('moli') 并在缺失时显式报错。
Fix this →

Bug 3:overview_claims[key] 直接访问存在 KeyError 风险(check_webmainbench_full_report.py:204)

key: overview_claims[key] for key in
    ('machine_issues', 'request_failures', 'empty_outputs', 'error_pages')

前面的检查(第 200 行)只验证 scores_percent 字段是否存在且匹配;若 claims 字典含 scores_percent 但缺少 issue 计数字段,将以 KeyError: 'machine_issues' 崩溃,而非抛出意图明确的 ValueError。建议改为:

key: overview_claims.get(key) for key in (...)

并在检查中同时处理 None 值(可并入现有的 != {...} 比较逻辑)。
Fix this →


其余变更(contained_path 路径遍历防护、subprocess.run list 参数无 shell 注入风险、verify_packet_inputs symlink 检查、hash 链完整性验证)未见安全问题。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36027532288. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 1m 33s —— View job


PR #35 代码审查

  • 读取关键变更文件
  • 审查 PR diff 中的 bugs 和安全问题
  • 发布审查结论

前两轮审查识别的三个 bug,本轮实际修复情况如下:

已修复:

  • Bug 1(__FIXED_VERSION__ 注入):report.py 新增 js_string() 函数,使用 json.dumps 并转义 </>/&/
/
,JS 注入风险已消除,修复正确。

  • Bug 2(fixed_profile['versions']['moli'] 无 fallback):report_build.py 改用 .get('versions', {}).get('moli') 并加显式类型/空值校验,KeyError 风险已消除,修复正确。

仍存在:

  • Bug 3:overview_claims[key] KeyError(scripts/check_webmainbench_full_report.py:206)

    key: overview_claims[key] for key in
        ('machine_issues', 'request_failures', 'empty_outputs', 'error_pages')

    第 144 行的校验仅确认 overview_claims 非空且 scores_percent 匹配,并不保证上面四个 key 存在。若 illustrations.json 的 claims 对象含 scores_percent 但缺少 issue 计数字段,此处会以 KeyError 崩溃,而非抛出有意义的 ValueError。

    修复方式:将 overview_claims[key] 替换为 overview_claims.get(key) 即可令缺失 key 落入现有 ValueError 路径。Fix this →


review_webmainbench_content.py 和 certify_webmainbench_case_correction.py 中的 subprocess.run 均使用 list 参数(无 shell=True),contained_path 防路径穿越正确引用,verify_packet_inputs symlink 检查逻辑正确,无安全问题。

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 28s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff
  • 发布审查结论

Review 结论

有条件通过

问题及建议

  • [P2] scripts/check_webmainbench_full_report.py:206:{key: overview_claims[key] for key in ('machine_issues', 'request_failures', 'empty_outputs', 'error_pages')} 直接访问字典键。前面的 if (not overview_claims or ...) 仅验证 scores_percent 存在,若 claims 字典含 scores_percent 但缺少任意 issue 计数键,将以 KeyError 而非意图明确的 ValueError 崩溃,掩盖真实配置错误。此问题由先前审查标记(Bug 3),本次 PR 未修复。建议改用 overview_claims.get(key) 并在比较中处理 None 值,或在 scores_percent 通过后额外断言四个计数键均存在。当前 illustrations.json 含全部键,实践中不触发。

先前审查 P1/P2 已全部修复,无阻塞性问题:

  • report.py:JS 注入已用 js_string() 辅助函数修复(json.dumps + 转义 <, >, &, LS, PS),模板占位符改为 __MOLI_LABEL_JSON__ / __MOLI_FIXED_LABEL_JSON__,同时 moli 标签也走相同转义路径,不一致问题消除;test_webmainbench_full_report.py 添加了含 '</script><script>bad() 的版本字符串注入测试,验证充分。
  • report_build.py:594-596:fixed_profile.get('versions', {}).get('moli') + 显式类型检查,替代原来的硬编码 '1.1.9' 和裸 KeyError 路径,正确。
  • check_webmainbench_full_report.py:141:overview_claims 改为按 asset.get('role') == 'overview' 识别,不再依赖文件名硬编码。
  • check_webmainbench_full_report.py:151-152:604 已加注释 # The bound pre-fix audit contains 604 concrete observations across all 545 pages.,含义明确。
  • review_webmainbench_content.py:validate_review:not row.get('reference_assessment') 已加入校验条件,test_review_requires_reference_assessment 测试覆盖完整。
  • certify_webmainbench_case_correction.py:--prior-correction 的 hash 链(preflight == postflight、results_sha256、physical_sha256、supersedes_attempt_id、各方法元数据一致性、contained_path 防路径穿越)设计严谨。
  • research/report-changes.json:新条目含中英双语,结构与现有格式一致,符合 AGENTS.md 要求。
  • moli-fixed-report.json:source_commit 绑定 39169d705,与 PR 描述一致;binary_sha256 更新,版本升至 1.1.10。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36027995187. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff
  • 发布审查结论

View job run

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

PR #35 代码审查

  • 读取关键变更文件
  • 审查当前 diff 中的 bugs 和安全问题
  • 发布审查结论

View job run

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 1m 12s —— View job


PR #35 代码审查

  • 读取关键变更文件
  • 审查 PR diff 中的 bugs 和安全问题
  • 发布审查结论

所有先前标记的 bug 均已修复,无新问题。

Bug 1(JS 注入):已修复。js_string() 使用 json.dumps + </>/& 转义,模板占位符改为 __MOLI_LABEL_JSON__ / __MOLI_FIXED_LABEL_JSON__;test_webmainbench_full_report.py 新增注入字符串测试验证转义正确。

Bug 2(fixed_profile['versions']['moli'] KeyError):已修复。report_build.py:594 改为 .get('versions', {}).get('moli') 并加显式 ValueError 校验。

Bug 3(overview_claims[key] KeyError):已修复。check_webmainbench_full_report.py:206 改为 overview_claims.get(key),缺失键将产生 None 落入现有 ValueError 路径。

无阻塞性问题,可合并。

@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 39s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件
  • 发布审查结论

Review 结论

通过

问题及建议

未发现需要阻塞合并的问题。残余风险:

  • [P2] harness/web_fetch/report.py:2770:labels dict 将 profile["versions"][p](含 moli-fixed)直接拼入 HTML 字符串,未经 html.escape()。当前所有版本字符串均为纯 semver(如 1.1.10),实践中不触发;若版本字符串含 </> 则存在 HTML 注入路径。JS 注入已通过 js_string() 修复,HTML 侧未做对称处理,可后续统一。

本轮已独立验证以下各点:

  • Bug 3 已修复(最新提交 643a4ed):check_webmainbench_full_report.py:206 已改用 overview_claims.get(key);且由于第 144 行 not overview_claims 先于第 202 行执行,overview_claims 为 None 时不会到达第 206 行,双重保障。
  • Bug 1 已修复:js_string() 使用 json.dumps + 转义 </>/&/LS/PS;moli 和 moli-fixed 均走相同路径(__MOLI_LABEL_JSON__ / __MOLI_FIXED_LABEL_JSON__),标签命名不一致已消除;注入测试覆盖含 '</script><script>bad() 的版本字符串。
  • Bug 2 已修复:report_build.py:591–593 改用 .get('versions', {}).get('moli') + 显式类型/空值校验,错误信息明确。
  • check_webmainbench_full_report.py:141:overview_claims 改为按 asset.get('role') == 'overview' 识别,不依赖文件名硬编码。
  • check_webmainbench_full_report.py:151–152:604 已加注释说明含义(# The bound pre-fix audit contains 604 concrete observations across all 545 pages.)。
  • review_webmainbench_content.py:validate_review:not row.get('reference_assessment') 已加入校验,test_review_requires_reference_assessment 测试覆盖。
  • illustrations.json:overview.png 替换为 overview-moli-1.1.10.png(含 role: "overview" 和完整 claims 字段),与 check_webmainbench_full_report.py 门控形成闭环。
  • moli-fixed-report.json:版本升至 1.1.10,source_commit 绑定 39169d705,与 PR 描述一致。
  • research/report-changes.json:新条目含中英双语,结构与现有格式一致,符合 AGENTS.md 要求。
  • certify_webmainbench_case_correction.py:--prior-correction 的 hash 链验证(preflight == postflight、results_sha256、physical_sha256、supersedes_attempt_id、各方法元数据一致性、contained_path 防路径穿越)设计严谨。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36028476522. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 3m 11s —— View job


PR #35 代码审查

  • 读取关键变更文件
  • 审查 PR diff 中的 bugs 和安全问题
  • 发布审查结论

结论:通过

所有先前标记的 bug 均已确认修复,无新问题。

Bug 1(__FIXED_VERSION__ JS 注入):已修复。模板占位符改为 __PROVIDER_LABELS_JSON__,通过 js_string()(json.dumps + </>/&/LS/PS 转义)将完整的 provider 标签字典注入 JS,renderResult 和 renderCase 两处均统一处理。

Bug 2(fixed_profile['versions']['moli'] KeyError):已修复。report_build.py 改用 variant_profile.get('versions', {}).get('moli') 并加显式类型/空值校验。

Bug 3(overview_claims[key] KeyError):已修复(643a4ed)。check_webmainbench_full_report.py:215 改为 overview_claims.get(key),缺失键返回 None 后落入现有 ValueError 路径。

本次新增代码无安全问题:

  • assemble_webmainbench_seven_methods.py:subprocess 未出现,无 shell 注入风险;contained_path 防路径穿越已引用;copy_alias_artifacts 在复制前验证 SHA256。
  • compose_webmainbench_seven_method_correction.py:alias_row 使用 str.replace(..., 1) 精确替换,copy_artifact 在复制前验证 SHA256;contained_path 防路径穿越已引用。
  • review_webmainbench_content.py:subprocess.run 使用 list 参数,无 shell=True;verify_packet_inputs 先检查 path.is_symlink() 再验证 SHA,TOCTOU 防护正确。
  • certify_webmainbench_case_correction.py:--prior-correction 的 hash 链继承验证(artifact SHA、supersedes_attempt_id、provider metadata 一致性)设计严谨。

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 9m 54s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件
  • 发布审查结论

Review 结论

通过

问题及建议

未发现需要阻塞合并的问题。残余观察:

  • [P2] scripts/compose_webmainbench_seven_method_correction.py:无专项单元测试。合并两份六方法纠正证书为七方法矩阵的核心逻辑(共享方法一致性校验、别名合并、复合证书生成)仅通过末尾 validate() 调用(第 118 行)在公开边界上做端到端验证。风险低,但测试覆盖不对称——同等复杂的 assemble_webmainbench_seven_methods.py 有专项测试,compose 没有。

  • [P2] PR 描述称"TEDS 独立复核 3270/3270",但 check_webmainbench_full_report.py:75 将 seven_binding.results_sha256 与 teds_receipt.input_results_sha256 绑定,而 seven_binding 的 logical_results 为 3815(7×545)。若 TEDS 确实作用于七方法矩阵,则 PR 描述中的 3270 是过时数字;若 TEDS 仅作用于六方法再拼接第七列,当前哈希绑定无法通过门控检查。描述与实际覆盖之间存在可见差异,建议在下次更新时核对并修正描述数字。不阻塞合并。


本轮独立核验的修复项(全部已确认):

  • report.py:2857:js_string() 使用 json.dumps + </>/&/LS/PS 转义;__MOLI_LABEL_JSON__/__MOLI_FIXED_LABEL_JSON__ 两路均走相同路径;test_webmainbench_full_report.py:70 注入含 '</script><script>bad() 的版本字符串,断言转义正确。Bug 1 已修复。
  • report_build.py:607:.get('versions', {}).get('moli') + 显式类型/空值校验,替代原裸 KeyError 路径。Bug 2 已修复。
  • check_webmainbench_full_report.py:215:overview_claims.get(key) 代替直接访问,缺失键落入现有 ValueError 路径。Bug 3 已修复。
  • check_webmainbench_full_report.py:150:overview_claims 改为 asset.get('role') == 'overview' 识别,不再依赖文件名硬编码。
  • check_webmainbench_full_report.py:160:604 加注释,含义明确。
  • review_webmainbench_content.py:113:not row.get('reference_assessment') 加入 validate_review;test_review_requires_reference_assessment 覆盖完整。
  • report.py:2774:labels[provider] 在 HTML 上下文中均经 esc() 或 anchor()(内部使用 esc())处理;table() 的表头也用 esc(x)。HTML 注入风险已消除,无需额外处理。
  • illustrations.json:seven-method-overview.png 含 role: "overview" 及七方法完整 scores_percent 和机器问题数,与 check_webmainbench_full_report.py 门控形成闭环。
  • moli-variants.json:顺序 ["prior_repair", "content_repair"] 与 assemble_webmainbench_seven_methods.py:76 的顺序断言一致。
  • moli-content-fixed-report.json:source_commit 绑定 39169d705,版本 1.1.10,与 PR 描述一致。
  • research/report-changes.json:新增两条均含 i18n.en 双语,结构与现有格式一致,符合 AGENTS.md 要求。

@lanyue-llk lanyue-llk changed the title report(webmainbench): add complete six-method content audit report(webmainbench): publish complete seven-method content audit Sep 25, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36151484231. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 4m 8s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件
  • 发布审查结论

Review 结论

有条件通过

问题及建议

  • [P1] AGENTS.md:24:PR 将 moli-fixed-report.json 重命名为 moli-pr785-fixed-report.json、引入 moli-variants.json 注册表、并将绑定文件从 six-method-binding.json 替换为 seven-method-binding.json,但 AGENTS.md 未随之更新。该行仍写"the repaired Moli sixth version has its own pre-call profile and certificate at evaluation/webmainbench-full/moli-fixed-report.json; the report joins both complete 545-page cohorts by a hash-bound six-method receipt",文件路径和绑定名称均已不存在。后续 agent 遵循 AGENTS.md 操作时会遭遇文件不存在错误,且不会发现 moli-variants.json 注册表和 variant_profile_sha256 dict。建议在本 PR 或独立 PR 中将 AGENTS.md:24 更新为两个变体 profile 各自路径、注册表文件、seven-method-binding.json 和 variant_profile_sha256。

  • [P2] scripts/assemble_webmainbench_seven_methods.py(copy_alias_artifacts):函数对 old_variant_rows + old_variant_calls 统一取 row["output_sha256"],其中 old_variant_calls 来自 physical-attempts.jsonl。physical call 行的 output_sha256 字段存在性未在任何测试中验证;若缺失将以 KeyError 崩溃且无明确错误信息。compose_webmainbench_seven_method_correction.py 同理(copy_artifact 对 physical_artifact_path 行也使用 row["output_sha256"])。建议在 copy_alias_artifacts 中对 physical_artifact_path 路径使用单独的哈希字段(如 physical_output_sha256),或在函数头部断言 physical 行均含 output_sha256,以便在数据缺失时给出可读错误。

  • [P2] scripts/compose_webmainbench_seven_method_correction.py:无独立单元测试(前两轮审查已标记,本次 PR 未修复)。核心逻辑(共享方法一致性校验、别名合并、复合证书生成)仅通过末尾 validate() 端到端验证。同等复杂的 assemble_webmainbench_seven_methods.py 有 test_webmainbench_seven_methods.py 专项测试,两者覆盖不对称。


本轮独立核验:

  • Bug 1 已修复:js_string() 使用 json.dumps + </>/&/LS/PS 转义;模板统一改为 __PROVIDER_LABELS_JSON__,moli 和 moli-fixed 走相同路径;注入测试覆盖 '</script><script>bad()。
  • Bug 2 已修复:report_build.py:607,.get('versions', {}).get('moli') + 显式类型/空值校验。
  • Bug 3 已修复:check_webmainbench_full_report.py:215,overview_claims.get(key) 代替直接访问。
  • check_webmainbench_full_report.py:150:overview_claims 改为 asset.get('role') == 'overview' 识别,不依赖文件名硬编码。
  • check_webmainbench_full_report.py:160:604 已加注释说明含义。
  • report_build.py:variant_labels 字典替代原硬编码 'moli-fixed' 标签;providers 和 variant_ids 均从 moli-variants.json 注册表动态生成,正确。
  • seven-method-binding.json 绑定:results_sha256 == teds_receipt.input_results_sha256,teds_receipt.output_results_sha256 == digest(results.jsonl),双向锁定正确。
  • illustrations.json 中 scores_percent 声明与 PR 描述表格中的七方法分数一致(moli: 34.01%,PR785 修复版: 34.08%,内容修复版: 32.97%)。
  • 前次审查提及"TEDS 复核 3270/3270"差异——PR 描述实际写的是"3,815/3,815",与代码 logical_results = 3815 一致,该关注点不成立。
  • research/report-changes.json:新增两条均含 i18n.en 双语,结构与现有格式一致,符合 AGENTS.md 要求。
  • moli-variants.json 中 variants 顺序(prior_repair → content_repair)与 assemble_webmainbench_seven_methods.py:76 的顺序断言一致。

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 42s —— View job


PR #35 代码审查

  • 读取 PR diff
  • 审查 bugs 和安全问题
  • 发布结论

结论:通过

所有先前标记的 bug 均已确认修复,最新提交无新问题。

Bug 1(__FIXED_VERSION__ JS 注入):已修复。模板改为 __PROVIDER_LABELS_JSON__,通过 js_string()(json.dumps + </>/&/LS/PS 转义)将完整 provider 标签字典注入 JS,renderResult 和 renderCase 两处统一处理。

Bug 2(fixed_profile['versions']['moli'] KeyError):已修复。report_build.py 改用 .get('versions', {}).get('moli') 并加显式类型/空值校验,错误信息明确。

Bug 3(overview_claims[key] KeyError):已修复。check_webmainbench_full_report.py:215 改为 overview_claims.get(key),缺失键落入现有 ValueError 路径。

最新提交(9330163):仅更新 publication-target.json 中的 expected_remote_version 字段,属纯数据绑定,无代码变更。

新增代码无安全问题:

  • assemble_webmainbench_seven_methods.py:contained_path 防路径穿越、copy_alias_artifacts 复制前验证 SHA256、无 shell=True。
  • compose_webmainbench_seven_method_correction.py:contained_path 防路径穿越、copy_artifact 复制前验证 SHA256、alias_row 使用 str.replace(..., 1) 精确替换。
  • certify_webmainbench_case_correction.py:--prior-correction hash 链继承验证严谨,contained_path 正确引用。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36152903612. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 1m 22s —— View job


PR #35 代码审查

  • 读取 PR diff
  • 审查 bugs 和安全问题
  • 发布结论

结论:通过

最新提交(21e0d7d)修复了所有先前标记的问题,无新问题。

本轮新提交 (21e0d7d) 修复项:

  • AGENTS.md P1(先前审查标记):已更新为正确引用 moli-variants.json、moli-pr785-fixed-report.json、moli-content-fixed-report.json、seven-method-binding.json 和 variant_profile_sha256,旧文件名 moli-fixed-report.json / 六方法绑定引用已消除。

  • copy_alias_artifacts output_sha256 KeyError:assemble_webmainbench_seven_methods.py 改用 row.get("output_sha256") + 显式类型/空值校验,缺失时抛出含 attempt_id 的 ValueError,不再裸 KeyError。

  • copy_artifact output_sha256 KeyError:compose_webmainbench_seven_method_correction.py 同样修复。

  • 测试覆盖:test_webmainbench_seven_methods.py 新增 test_alias_copy_requires_a_bound_output_hash,直接验证缺 output_sha256 时抛出 ValueError。

先前全部 bug 确认仍保持修复:

  • Bug 1(JS 注入):js_string() + __PROVIDER_LABELS_JSON__ 占位符,已修复。
  • Bug 2(fixed_profile['versions']['moli'] KeyError):.get('versions', {}).get('moli') + 显式校验,已修复。
  • Bug 3(overview_claims[key] KeyError):overview_claims.get(key) 代替直接访问,已修复。

无阻塞性问题,可合并。

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 3m 43s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff
  • 发布审查结论

Review 结论

通过

历次 P1/P2 问题全部已修复,独立验证如下:

  • Bug 1(JS 注入):js_string() 使用 json.dumps + </>/&/LS/PS 转义,模板统一为 __PROVIDER_LABELS_JSON__,moli 和 moli-fixed 走相同路径;test_webmainbench_full_report.py 添加含 '</script><script>bad() 的版本字符串注入测试,覆盖充分。
  • Bug 2(fixed_profile['versions']['moli'] KeyError):report_build.py:607 改用 .get('versions', {}).get('moli') + 显式类型/空值校验。
  • Bug 3(overview_claims[key] KeyError):check_webmainbench_full_report.py:215 改为 overview_claims.get(key)。
  • AGENTS.md 更新:第 24 行已更新为两个变体 profile 路径、moli-variants.json 注册表、seven-method-binding.json 和 variant_profile_sha256,与代码一致。
  • 604 注释:已加 # The bound pre-fix audit contains 604 concrete observations across all 545 pages.。
  • overview_claims 识别:改为按 asset.get('role') == 'overview' 识别,不再依赖文件名硬编码。
  • validate_review reference_assessment:not row.get('reference_assessment') 已加入校验,测试覆盖完整。

TEDS 证据链在发布门控中完整:seven_binding.results_sha256 == teds_receipt.input_results_sha256(第 75 行)→ teds['output_results_sha256'] == receipt['preflight']['parent_results_sha256'](第 120 行,经案例纠正路径)→ receipt['current_results_sha256'] == digest(results.jsonl)(第 109 行)。三段闭合。

问题及建议

  • [P2] scripts/compose_webmainbench_seven_method_correction.py:无专项单元测试。核心逻辑(共享方法一致性校验、别名合并、复合证书生成)仅通过末尾 validate() 端到端验证。assemble_webmainbench_seven_methods.py 有 test_webmainbench_seven_methods.py 专项测试,两者覆盖不对称。此问题经两轮历史审查标记,本次 PR 仍未修复。

  • [P2] scripts/assemble_webmainbench_seven_methods.py:138:

    content_batch = next(
        copy.deepcopy(batch) for batch in json.loads((content / "execution.json").read_text())["batches"]
        if batch.get("provider") == historical
    )

    若 content 证据目录的 execution.json 中无 provider == "moli-fixed" 的 batch,将抛出无上下文的 StopIteration。当前认证运行保证该 batch 存在,实践中不触发。建议改用 next(..., None) 并加显式 ValueError,或列表推导后断言长度为 1。

@lanyue-llk

Copy link
Copy Markdown
Contributor Author

本轮 review 处理

逐项核对后的结论:

  • 采纳:AGENTS.md 的六方法契约已过时。 21e0d7de 已改为七方法契约,明确两个 Moli 变体 profile、moli-variants.json、seven-method-binding.json 和 variant_profile_sha256。
  • 采纳:物理调用缺少 output_sha256 时错误不可读。 assembler 和 correction composer 现在都先做显式字段校验,再校验文件摘要;缺失时抛出带 attempt id 的 ValueError。边界回归测试已补充。
  • 不采纳:为 compose_webmainbench_seven_method_correction.py 再建一套针对内部组合步骤的专项白盒测试。 该脚本的受支持边界是生成完整七方法包后调用公共 validate();当前真实 3,815 条结果已经通过该边界、报告构建和 release gate。复制一套针对私有步骤的断言会重复实现约束并增加重构耦合。本轮新增的是缺失哈希这一真实失败模式的公共边界测试。
  • 无需处理:TEDS 3270/3270。 这是早一轮 review 对 PR 描述的误读;当前描述和绑定均为 3,815/3,815,后续 review 已自行纠正。

验证:uv run --frozen python -m pytest -q tests/test_webmainbench_seven_methods.py tests/test_webmainbench_full_report.py,4 passed。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36249934504. Please check Claude's inline feedback and summary comment for details.

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 1m 14s —— View job


PR #35 代码审查

  • 读取 PR diff
  • 审查 bugs 和安全问题
  • 发布结论

结论:通过

所有先前标记的 bug 均已确认修复,最新提交无新问题。

最新提交(764bf17)修复项:

assemble_webmainbench_seven_methods.py:138(先前审查标记 P2):原 next(copy.deepcopy(batch) for batch in ... if batch.get("provider") == historical) 在无匹配 batch 时抛出无上下文的 StopIteration。现已提取为 require_provider_batch(),在 0 个或多于 1 个 batch 时抛出含 provider 名称和实际数量的 ValueError;test_webmainbench_seven_methods.py 新增 test_execution_requires_exactly_one_batch_for_each_variant 覆盖 0 和 2 两个失败路径,正确。

历次全部 bug 确认仍保持修复:

  • Bug 1(__FIXED_VERSION__ JS 注入):js_string() + __PROVIDER_LABELS_JSON__ 占位符,已修复。
  • Bug 2(fixed_profile['versions']['moli'] KeyError):.get('versions', {}).get('moli') + 显式类型/空值校验,已修复。
  • Bug 3(overview_claims[key] KeyError):overview_claims.get(key) 代替直接访问,已修复。
  • AGENTS.md 已更新为七方法契约(moli-variants.json、seven-method-binding.json 等),已修复。
  • copy_alias_artifacts / copy_artifact output_sha256 缺失时显式报错,已修复。

无阻塞性问题,可合并。

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 3m 52s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件
  • 发布审查结论

Review 结论

通过

问题及建议

未发现需要阻塞合并的问题。残余风险:

  • [P2] scripts/compose_webmainbench_seven_method_correction.py:无专项单元测试。核心合并逻辑(共享方法一致性校验、别名合并、复合证书生成)仅通过末尾 validate() 端到端验证,且依赖真实 3,815 条结果的 release gate。同等复杂的 assemble_webmainbench_seven_methods.py 有 test_webmainbench_seven_methods.py 对应测试,覆盖不对称。作者于 2026-09-26 说明已知此问题并明确不采纳,可后续优化。

本轮独立核验(历次标记问题全部确认已修复):

  • Bug 1(JS 注入):report.py:2857 js_string() 使用 json.dumps + </>/&/LS/PS 转义;模板改为 __PROVIDER_LABELS_JSON__,moli 和 moli-fixed 两路均走相同路径;HTML 侧 esc() = html.escape(),所有 labels[provider] 在 HTML 输出前均经过 esc() 或 anchor()(内含 esc())处理,无注入路径。
  • Bug 2(fixed_profile['versions']['moli'] KeyError):report_build.py:607,改为 .get('versions', {}).get('moli');行 608-609 对 isinstance 和 strip() 做显式校验,类型/空值错误有明确提示。
  • Bug 3(overview_claims[key] KeyError):check_webmainbench_full_report.py:215,改为 overview_claims.get(key),缺失键返回 None 落入 != {...} 的 ValueError 路径。
  • AGENTS.md 更新:第 24 行已正确描述 moli-variants.json、moli-pr785-fixed-report.json、moli-content-fixed-report.json、seven-method-binding.json、variant_profile_sha256,旧 moli-fixed-report.json 和六方法绑定引用已消除。
  • 604 注释:check_webmainbench_full_report.py:160 已加 # The bound pre-fix audit contains 604 concrete observations across all 545 pages.。
  • overview_claims 识别:check_webmainbench_full_report.py:150,改为 asset.get('role') == 'overview',不依赖文件名硬编码;illustrations.json 的 seven-method-overview.png 含 "role": "overview" 和完整 claims,闭环正确。
  • validate_review reference_assessment:review_webmainbench_content.py:113,not row.get('reference_assessment') 已加入校验条件,test_webmainbench_content_review.py 含对应测试。
  • copy_alias_artifacts KeyError:assemble_webmainbench_seven_methods.py:46-50,改用 row.get("output_sha256") + 显式类型/空值校验,缺失时抛出含 attempt_id 的 ValueError;test_webmainbench_seven_methods.py:48-56 有边界回归测试。
  • require_provider_batch StopIteration:assemble_webmainbench_seven_methods.py:76-83,已改为列表推导 + len != 1 显式抛出,错误含 found N;测试在第 59-67 行验证 0 和 2 的情况。
  • publication-target.json 哈希核对:SHA-256(moli-pr785-fixed-report.json)= db8e7fa4… 和 SHA-256(moli-content-fixed-report.json)= afc224dc…,与 variant_profile_sha256 中的值逐字节一致。
  • research/report-changes.json:两条新增记录均含 i18n.en 双语,comparison_kinds 均包含 webmainbench_frozen_html_to_markdown,时间顺序(2026-09-25 在 2026-09-24 之前)符合最新优先排列。
  • compose_webmainbench_seven_method_correction.py:copy_artifact:与 copy_alias_artifacts 同样,已在 row.get("output_sha256") 处加显式校验。

@lanyue-llk

Copy link
Copy Markdown
Contributor Author

最新 review 处理

  • 采纳:缺失 content repair execution batch 时裸 StopIteration。 764bf176 将证据边界改为每个变体必须恰好存在一个 batch;缺失和重复都返回带 provider 与实际数量的 ValueError。测试覆盖 0、1、2 三种场景。
  • 仍不采纳:为 correction composer 的内部步骤复制专项白盒套件。 发布边界已有真实 3,815 条矩阵、公共 validate()、报告构建和 release gate;仓库契约也要求保留受支持边界测试,避免用私有 helper 结构断言替代。已有真实失败模式继续在边界测试中补充。

验证:uv run --frozen python -m pytest -q tests/test_webmainbench_seven_methods.py tests/test_webmainbench_full_report.py,5 passed。

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated Claude review completed. Review run: https://github.com/lexmount/browser-eval/actions/runs/36375190291. Please check Claude's inline feedback and summary comment for details.

@lanyue-llk

Copy link
Copy Markdown
Contributor Author

Moli 实现已从当前 main 重新移植到 #919。报告没有把 #919 冒充成新的 545 页测量:019fbcdf 将 #814 明确标为提交 39169d705 的实测来源,将 #919 标为最新 main 实现,并声明未重新测量、不替换冻结分数。对应读者场景测试验证两个链接、测量提交和不替换语义;七方法相关测试 5/5 通过。

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 3s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 2s —— View job


I'll analyze this and get back to you.

@lanyue-llk

Copy link
Copy Markdown
Contributor Author

当前 HEAD 4eee1097 的正式 test job 已通过。两个 Claude review check 均在模型执行阶段返回 subtype success + is_error:true,没有产生代码行问题;中文 job 已重跑一次,仍以同一基础设施错误结束。英文旧 run 的 workflow 记录已由 GitHub 返回 404,无法原地重跑。未通过修改门禁或忽略失败来掩盖该状态。报告发布门禁、本地 17 项测试/12 个子测试和浏览器端到端验收均已通过;PR 正文已更新为最终证据、分数、提交与 Artifact Site 版本。

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 3s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 3s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 3s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 3s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 4s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 1s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 3s —— View job


I'll analyze this and get back to you.

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 7m 32s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件(最新 6 个提交,基于 c851a09 之后的变更)
  • 发布审查结论

Review 结论

通过

问题及建议

  • [P2] harness/web_fetch/report.py:3081:';Moli 1.1.11' 仍为硬编码字符串字面量,而同一单元格的方法标签 labels['moli-content-fixed'] 来自 moli-variants.json 动态读取("Moli 1.1.11 · PR919 修复版")。两条维护路径不一致:版本升级时若 moli-variants.json 更新但此处漏改,版本号将在同一行显示矛盾。已多轮标记,当前版本数字正确,不阻塞。

  • [P2] scripts/replace_webmainbench_variant.py:新增脚本,主 replace() 函数(注册表校验、cohort 验证、绑定更新、artifact 复制共约 80 行逻辑)无独立单元测试,只有 raw_row() 工具函数被测试(test_replacement_raw_row_discards_every_prior_score_snapshot)。路径安全性方面,逻辑 artifact 和物理 artifact 的源和目标均经过 contained_path 保护,无路径穿越风险;relative = row["artifact_path"].replace("artifacts/moli/", ...) 若前缀不匹配则路径不变,contained_path 仍会拒绝穿越。实践中 verify_shard/verify_score 验证了输入完整性,风险低。可参考 assemble_webmainbench_seven_methods.py 的测试模式补充边界回归测试。

  • [P2] PR body 分数表与当前代码不符:PR body 表格仍显示 PR919 综合分 55.25%、公式 64.08%、表格内容 50.09%,而当前 illustrations.json:claims.scores_percent.moli-content-fixed = "39.41"(2026-09-29 最新评分修正后的值);research/report-changes.json 最新条目也明确记录 39.41%。分母也不同:PR body 写"公式 113、表格 81",但当前 check_webmainbench_full_report.py:expected_denominators 强制 formula_edit: 257, table_edit: 179。PR body 的 Artifact Site 版本 ver_7a6ae... 与 publication-target.json 一致,说明版本编号已更新,但分数表未随 2026-09-29 最新提交同步。建议合并前或合并后更新 PR body 以反映最终已发布状态。

  • [P2] scripts/compose_webmainbench_seven_method_correction.py:无专项单元测试(已多轮标记,作者于 2026-09-26 明确拒绝采纳,理由记录在案)。本轮新增的"仅新变体修正"模式(new_by 只含 {NEW} 时跳过 base calls 比较)逻辑新增但同样无针对该模式的测试,可后续补充。


本轮新增变更核验(c851a09 之后):

  • 分母从 119/81 改为 257/179 — check_webmainbench_full_report.py、webmainbench_diagnostics.py、report.py:quality_issue_specs、scoring-correction-binding.json:scorer_commit = f7cb97d 均一致;research/report-changes.json 最新条目(2026-09-29)完整说明根因与效果;test_aggregate_keeps_applicable_metric_errors_in_the_denominator 覆盖 reference_error 计零的语义 ✓。

  • replace_webmainbench_variant.py — 注册表验证绑定 profile_path 与 moli-variants.json 中注册项一致;cohort.profile_sha256 == digest(profile_path) + verify_shard/verify_score 双验证;artifact 复制前 digest(source_artifact) != row["output_sha256"] 校验完整性;contained_path 双端保护 ✓。execution.json 和 seven-method-binding.json 在内存中更新后写回 output/(已经过 output.exists() 前置守护),无写入风险 ✓。

  • public_webmainbench_scoring_projection + report_build.py 修改 case-correction.json:current_results_sha256 — 投影后 results.jsonl 与更新后的 current_results_sha256 在 staging 中一致;check() 验证的"原始证书"只含 5 个字段(不含 current_results_sha256),git binding hash 不受影响;score-summaries.json 不经投影,原绑定哈希保持 ✓。

  • certify_webmainbench_case_correction.py 新增 --provider / --runner-provider — 只允许单 provider 时禁止同时传 --prior-correction;--provider 不在矩阵中时显式报错;plan['providers'] 列表与 check_webmainbench_full_report.py 的 receipt['preflight']['providers'] 逻辑一致;test_correction_accepts_an_explicit_provider_subset 覆盖子集场景 ✓。

  • score_webmainbench_results.py:aggregate() 改为计零分母 — 旧逻辑只对 success=True 行计入,新逻辑跳过 reference_not_applicable 但对 applicable 失败计零,与 257/179 分母一致 ✓。

  • check_webmainbench_full_report.py 门控更新:td[data-metric^="all-call-latency-"] 精确选择器取代旧的全局 td[data-metric-direction="min"](新的质量风险矩阵也产生 data-metric-direction="min" 单元格,旧选择器会误计)✓;新质量矩阵行数/列数/上限校验 ✓;#metric 筛选器存在性检查 ✓;case correction provider 检查从固定 7 改为 receipt['preflight']['providers'] 长度 ✓;cause_order 改为只含有实际复核记录的根因,与门控对称 ✓。

  • 历次所有 P0/P1/P2 确认仍保持修复: Bug 1(JS 注入)、Bug 2(KeyError)、Bug 3(overview_claims.get())、AGENTS.md 实例数据抽象、copy_contained_artifact 双端路径保护、require_provider_batch StopIteration、correct_webmainbench_references.py/correct_webmainbench_scoring.py 写路径保护,均无变化。

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 5m 37s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 检查最新提交内容(728fb0d–74d7b96,共 6 个提交)
  • 审查 PR diff 及关键文件
  • 发布审查结论

Review 结论

通过

本轮审查覆盖 4eee109..HEAD 的 6 个提交(730 行增删)。历次 P0/P1/P2 问题已全部修复或维持上轮验证通过的状态。

问题及建议

未发现需要阻塞合并的问题。残余风险:

  • [P2] harness/web_fetch/report.py(728fb0d):quality_issue_matrix() 中对 provider、key 注入 HTML 属性值未显式调用 esc():

    '<a class="' + winner + '" href="analysis/index.html?provider=' + provider +
    '&metric=' + key + '&kind=all">' + str(value) + '</a>'

    key 来自 quality_issue_specs 字面量(纯 ASCII 字母),provider 来自 profile 中的注册标识符(moli、lightpanda 等),实践中不含 HTML 特殊字符。但同文件其余所有属性注入均通过 esc(),此处不一致。建议补充 esc(provider) 和 esc(key) 保持惯例。

  • [P2] evaluation/webmainbench-full/publication-target.json:9:PR body 描述中版本 ver_7a6ae...、综合分 55.25%、分母"公式 113/表格 81"均为历史中间状态;当前代码绑定为 ver_3e6d...,illustrations.json:claims.scores_percent.moli-content-fixed = "39.41",分母已改为 257/179。PR body 与最终已发布状态不符,建议合并前或合并后更新 body。不影响代码正确性。

  • [P2] scripts/replace_webmainbench_variant.py:主 replace() 函数无独立单元测试(上轮标记,本轮 test_replacement_raw_row_discards_every_prior_score_snapshot 仅覆盖辅助函数 raw_row())。replace() 的核心路径(注册表验证、cohort 绑定、artifact 复制、matrix 完整性)未受测试直接覆盖。contained_path 双端路径保护正确,实际 release gate 有哈希闭环,风险可控。

  • [P2] scripts/compose_webmainbench_seven_method_correction.py:无专项单元测试(作者于 2026-09-26 明确拒绝采纳,已记录在案)。


本轮独立核验:

  • 历次 P0/P1/P2 确认仍保持修复:

    • Bug 1(JS 注入):js_string() + __PROVIDER_LABELS_JSON__ 占位符,未变动 ✓
    • Bug 2(fixed_profile['versions']['moli'] KeyError):.get('versions', {}).get('moli') + 显式校验,未变动 ✓
    • Bug 3(overview_claims[key] KeyError):overview_claims.get(key),未变动 ✓
    • 上轮 P2(';Moli 1.1.11' 硬编码):728fb0d 新增 content_fixed_version = profile['versions']['moli-content-fixed'],改为 esc(content_fixed_version),已修复 ✓
  • 56dfdab 分母修正(113→257, 81→179):aggregate() 现对适用的失败度量计零分(不排除于分母);expected_denominators 在 check_webmainbench_full_report.py:224、webmainbench_diagnostics.py:170、report.py:quality_issue_specs 三处同步更新;test_aggregate_keeps_applicable_metric_errors_in_the_denominator 覆盖 success=False 且 availability=reference_error 计 0 分入分母的正确语义 ✓

  • 728fb0d 质量风险矩阵:quality_issue_flags() 正确计算每条结果的低质量指标集合;quality_issue_matrix() 在首页和解读页均渲染;门控验证 7 行 × 6 列数量、每列值在 [0, 总体上限] 内;data-quality 属性注入和 #metric 筛选器已加入 check_webmainbench_full_report.py:280;测试验证首页/解读页各有 table#quality-issue-matrix、#metric 存在、data-quality~="delivery" 可筛选 ✓

  • d3e5e9a --provider 子集修正:certify_webmainbench_case_correction.py 新增 --provider 参数,正确约束"不可与 --prior-correction 并用";plan['providers'] 动态化;check_webmainbench_full_report.py:173 改为 len(receipt['preflight']['providers']) 而非固定 7;test_correction_accepts_an_explicit_provider_subset 覆盖子集验证正确 ✓

  • d7c52c7 评分器绑定传递:score_webmainbench_results.py 新增 --expected-dataset-sha256 和 --expected-scorer-commit 参数,允许使用修正后的数据集 SHA 和评分器提交;load_records 和 official_calculator 参数化,向后兼容默认值;test_corrected_full_dataset_requires_its_declared_hash 覆盖正常路径和错误哈希两种场景 ✓

  • 67d4e24/74d7b96 绑定更新:moli-content-fixed-report.json → 源码 e944d066b、二进制 e146b853…、评分器 f7cb97d;publication-target.json:variant_profile_sha256.moli-content-fixed = "e3a4b3ab…"(与更新后文件 SHA-256 一致);scoring-correction-binding.json:scorer_commit = f7cb97d;illustrations.json 分数更新为 39.41%,新增 6 幅 Moli 修复图;research/report-changes.json 新增中英双语条目说明新分子/分母和根因 ✓

  • replace_webmainbench_variant.py 路径安全:逻辑 artifact 和物理 artifact 复制均通过 contained_path(shard, ...) 和 contained_path(output, ...) 双端保护;provider 在 moli-variants.json 注册表中严格验证,防止任意路径前缀注入 ✓

  • compose_webmainbench_seven_method_correction.py "仅新变体" 路径:set(new_by) == {NEW} 条件下跳过共享方法比较,new_source_provider = NEW,直接复制行而非别名化,逻辑正确 ✓

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 3m 38s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件(最新提交 ff02380)
  • 发布审查结论

Review 结论

通过

问题及建议

未发现需要阻塞合并的问题。

本轮最新提交 ff02380(feat: add visual error analysis slides)独立核验:

  • 先前 P2(quality_issue_matrix() 中 provider/key 未经 esc() 注入 HTML 属性)已修复:report.py:3198–3199 改为 esc(provider) 和 esc(key),与文件其余惯例一致。

  • 先前 P2(compose_webmainbench_seven_method_correction.py 无单元测试)已修复:test_webmainbench_seven_methods.py 新增 test_variant_only_case_correction_composes_with_shared_and_prior_methods,调用 compose() 公共边界,验证全部 7 个 provider 均在输出行/物理调用中、行数/证书 preflight.providers 正确,属合约级测试。

  • 先前 P2(replace_webmainbench_variant.py 主函数无测试)已修复:test_complete_variant_replacement_preserves_other_methods_and_rebinds_evidence 调用完整 replace() 路径,验证旧方法行保留、新变体行替换、物理调用数和 seven-method-binding.json SHA 重绑定正确。

  • 新增 method_error_profiles / moli_fix_profiles 内容校验:report.py:2935–2949 对两者做完整结构校验(key 集合、image 顺序、字段名),校验失败抛 ValueError;内容值均通过 esc() 注入 HTML,无注入风险。

  • 发布门控扩展:check_webmainbench_full_report.py:212–216 验证解读页含 7 行 table#method-error-profiles 和 6 个 [data-moli-fix-slide],每个 slide 含 4 个 .slide-facts > div,形成闭环。illustrations.json 新增 seven-method-error-taxonomy.png(role: "error-taxonomy")并通过现有 SHA 核验 + img 存在性检查在 release gate 中约束。

  • 测试覆盖:test_webmainbench_full_report.py:107–121 补充 method_error_profiles 和 moli_fix_profiles 测试内容;assert guide.select_one('img[src="assets/seven-method-error-taxonomy.png"]') is None 正确验证文件缺失时图片不渲染的条件路径;gate 行数断言已更新。

  • 历次全部 P0/P1/P2 确认仍保持修复:JS 注入(js_string())、fixed_profile['versions']['moli'] KeyError、overview_claims.get(key)、AGENTS.md 实例数据抽象、copy_contained_artifact 双端路径保护、require_provider_batch StopIteration、correct_webmainbench_scoring.py / correct_webmainbench_references.py 写路径保护,均无变化。

@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 49s —— View job


PR #35 代码审查

  • 读取 AGENTS.md 和相关 SKILL.md
  • 审查 PR diff 及关键文件(最新提交 a523ea9、ff02380)
  • 发布审查结论

Review 结论

通过

问题及建议

未发现需要阻塞合并的问题。残余风险:

  • [P2] PR body:Artifact Site 版本 仍显示 ver_3e6d7415b6464ba2bc80e8f6491e4c45,而当前 publication-target.json:expected_remote_version = "ver_9440fb2764424af387e7a3c41cf6720f"。分数表(39.41%)和分母(257/179)与 illustrations.json 和 check_webmainbench_full_report.py:expected_denominators 一致,不影响代码正确性。建议合并后更新 PR body 版本号。

最新两个提交独立核验:

  • a523ea9(chore: bind published visual report):仅更新 publication-target.json:expected_remote_version,纯数据绑定,无代码变更。variant_profile_sha256 未变:

    • moli-content-fixed-report.json SHA-256 = e3a4b3ab… = publication-target.json ✓
    • moli-pr785-fixed-report.json SHA-256 = db8e7fa4… = publication-target.json ✓
  • ff02380(feat: add visual error analysis slides):上轮 P2 全部修复,已于 2026-09-29T08:45:11Z 独立核验通过:

    • quality_issue_matrix() 中 provider/key 已加 esc(),HTML 注入路径消除 ✓
    • compose_webmainbench_seven_method_correction.py 新增 test_variant_only_case_correction_composes_with_shared_and_prior_methods,覆盖完整七方法 compose 公共边界 ✓
    • replace_webmainbench_variant.py 新增 test_complete_variant_replacement_preserves_other_methods_and_rebinds_evidence,覆盖完整 replace() 路径 ✓
    • check_webmainbench_full_report.py 新增 guide.select('table#method-error-profiles') 和 [data-moli-fix-slide] 门控 ✓
    • illustrations.json 新增 seven-method-error-taxonomy.png(role: "error-taxonomy"),与 release gate 形成闭环 ✓

历次全部 P0/P1/P2 确认仍保持修复: JS 注入(js_string())、fixed_profile['versions']['moli'] KeyError、overview_claims.get(key)、AGENTS.md 实例数据抽象、copy_contained_artifact 双端路径保护、require_provider_batch StopIteration、correct_webmainbench_scoring.py/correct_webmainbench_references.py 写路径保护,均无变化。

@lanyue-llk
lanyue-llk merged commit 9346d75 into main Sep 29, 2026
2 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