Repository navigation
Conversation
结果审计:当前报告不能作为正式排名发布我下载并展开了 Artifact Site v2 的完整报告包,核对了 430 个案例、4,300 条结果、任务契约、复核记录和触发异常的原始输出。当前包可以保留为本地诊断快照,但不应按现状发布总榜或合并为正式报告。下面的问题会实质改变判分或排名。 1. 题目与验收契约互相冲突,影响 16 题、160 个结果有 16 个动态任务明文要求排除导航或页脚,
需要修正共享契约生成/校验逻辑,加入“排除区域不能提供正向命中”的成对回归用例,并重新判定这 160 条结果。只改报告文字不够。 2. 已确认一条当前误判通过
题目明确规定按钮控件文字不能代替普通网页文字;输出开头是 按现有任务定义修正这一条后,Firecrawl 至少应从 359/430 降为 358/430;总通过数至少减少 1。 3. 已知 DNS 污染仍计入总榜,比较不公平
这不是产品能力差异。应把该题从全部 10 种方法中统一隔离,不能只保留三条失败;修复后重算所有分榜和总榜。 4. 来源没有在调用前后复核,却隐藏了本地非认证状态
这种展示会让读者把诊断快照当成正式排名。若不做调用前后来源冻结和认证执行,首页及每个结果页必须持续显示“本地、未认证、不可用于排名”,并移除名次表达。 5. “通过”没有约束输出纯度,异常输出被算作正常交付在有正文参考的任务里,共有 182 条通过结果(55 个案例)的词精确率低于 30%。这不等于 182 条都应直接改成失败,但足以证明当前二元通过率不能代表“干净正文”。极端例子就是上面的 PrimeVue:召回率 1.0,精确率 0.0009。 另外两条 Firecrawl 结果在第 3 轮被从失败改为通过:
两份输出都包含完整 hCaptcha 挑战组件文字,指标里也保留了 6. 变更记录与最终总数对不上公开核验记录写的是:
按此最终应为 1962,首页各方法通过数相加却是 1967。 需要由一个结构化来源生成变更记录、审计摘要和首页数字,并让 release check 校验每轮增减与最终值守恒。现在无法从公开记录重建 1967 是怎么来的。 7. “全量独立核验、未决 0”的证据链不够完整初始复核有 148 条 “未决 0”可以表示系统给每条记录都填了最终值,但不能代替可复查的逐案裁定。所有覆盖人工复核结论的记录都应保存具体规则、证据片段和裁定理由;release check 应拒绝通用模板。 合并前最低要求
基于以上问题,我建议本 PR 保持阻塞状态;它也不应替代当前正式报告链路。 |
lanyue-llk
left a comment
There was a problem hiding this comment.
审查结论
Request changes。这个 PR 目前不应合并。
PR 实际解决什么问题
PR 的目标是保留并重建一份历史快照:430 个任务、10 种方法,复用已有调用,不发起新的正式评测。但实现范围远超“维护旧报告”。它改了共享评分器、任务通过谓词、回归用例库、本地复核门禁、运行器、报告渲染和国际化。这些修改会影响以后所有 Web Fetch cohort,不只影响这份历史报告。
当前正式重跑已经由 #42 负责。#51 保存的是过期、未认证的十方法本地快照。里面可复用的修复可以拆出来,但不能用维护旧报告的名义一起进入共享链路。
阻塞问题
[P0] 未认证报告可以隐藏身份,同时继续展示排名
scripts/build_report.py:31-32 新增了 --hide-local-status-banners。harness/web_fetch/report.py:1840-1843 在调用完整时清空可靠性警告和本地审核提示,即使 manifest 仍是 certified: false,publication_state 仍是 local_audit_only_not_for_release。report_check.py 会检查证据,却不要求页面保留未认证标记。
当前报告正是这样生成的:presentation.show_local_status_banners 为 false,首页却仍显示总榜和第 1—10 名。读者很容易把诊断快照当成正式结果。
本地、未认证证据不能关闭这个标记。若横幅太占位置,可以改成每个页面都有的紧凑标记;release check 还应拒绝这类报告使用排名措辞,并增加“缺少标记必须失败”的反例测试。
[P0] PR 改了全局验收规则,却把它记成“没有规则修订”
harness/web_fetch/metrics.py:26-28、325-340、569-571 把 forbidden_hits、blocked_page 和 stable_blocked_page 降成纯诊断项。只要命中足够多的正向锚点,包含挑战页或拒绝访问内容的结果也可能通过。这是共享评分策略变更,不是展示修复,也不是单纯的解析器修正。
与此同时,harness/web_fetch/local_audit.py:417-427 强制这些复评分结果填写 scoring.rule_revision is False。报告因此把新规则伪装成没有规则变化的离线修正。报告里的两条 Firecrawl 输出包含 hCaptcha 文字,也通过这条路径由失败改成通过。
回归用例本身也可被改写:harness/web_fetch/scoring_regressions.py:33-40 允许 control_revisions.overrides 替换旧 ID 的输入和期望结果。本 PR 改写了 15 条控制用例。例如 html-doctype-visible-challenge-still-blocks 这个名字还说“应该阻断”,期望值却被改成了 True。测试会通过,但旧用例已经不再保护原来的行为。
不要靠放宽全局谓词来挽救这份报告。如果产品合同确实要变,应走真实的 scoring-rule revision:提升合同版本,保留旧控制用例,用新 ID 增加成对反例,并对全部受影响结果重新评分、重新复核。
[P1] “全量独立复核、未决 0”没有被门禁真正约束
harness/web_fetch/local_audit.py:545-582 只检查当前评分、agent_verdict 的取值范围,以及 final_verdict 是否等于评分器结果。它不检查 effective_agent_verdict、分歧与裁定证据,也不要求逐案理由。
我构造了一条记录:机器和当前结论为 pass,人工及 effective 结论为 fail,最终结论改回 pass,裁定理由为空,未决数为 0。_require_local_review 接受了它。报告中有 69 条覆盖人工结论的记录只保留同一句模板,已确认误判的 YouTube 案例也在其中。
人工/effective 结论与最终结论不同时,必须保存并校验具体规则、证据和逐案裁定;同时校验状态流转和分歧总数。应增加“空裁定不能通过”的反例测试。
[P1] 回溯页面身份可以用归一化后的空字符串通过
harness/web_fetch/local_audit.py:491-497 检查的是原始样本文本长度和原始值去重,之后才用归一化结果做子串匹配。两个分别由 20 个和 21 个空格组成的不同字符串都会归一化成 "",而空字符串存在于任何正文中。
我用这两个样本和完全无关的保存输出、浏览器捕获做了实测,score_reviewed_page_identity 返回了 page_identity_status: verified,basis 为 retrospective_content_correspondence。
样本应先统一归一化,再检查非空、最小有效长度和归一化后的唯一性。更稳妥的做法是程序提取双方共有的确定性片段,不接受复核者任意填写字符串。空白、标记差异和纯标点样本都要有反例测试。
[P1] 哈希绑定的历史文章仍会把活动 HTML 注入报告
harness/web_fetch/report_reading.py:26-48 从外部 HTML 中抽取 <style> 和 <main>,随后原样塞进报告。哈希只能证明使用的是哪份字节,不能证明这些字节安全。我放入 <script> 和 onerror 属性后,二者都原样出现在渲染结果中。
同一外部包还可以提供翻译。harness/web_fetch/report_i18n.py:4100-4101 把它并入全局翻译表,因此历史文章数据可以覆盖报告其他页面的界面文字。
这里应使用结构化 Markdown,或对 HTML 做严格的标签、属性、URL 白名单清洗。文章翻译只能作用于文章路由。测试至少覆盖 script、事件属性、iframe/form、危险 URL 和覆盖全局翻译键。
[P1] 评分器登记了锚点来源位置,却完全不按位置匹配
harness/web_fetch/stable_tasks.py:780-803 接受 source_location,但 evaluate_stable_task 在 1032-1035 始终对整份可见文本匹配锚点,没有使用位置约束。
这正是报告中 16 个冲突任务的代码根因:题目要求排除导航或页脚,验收锚点却来自 nav/footer;受影响的 160 条结果中有 49 条利用被排除区域的文字通过。
不要从自然语言题目里猜区域。应在共享合同里加入机器可读的允许/排除区域,或明确的 match_location;校验器要拒绝来自排除区域的正向锚点,评分器只能在所属区域匹配。还要加入一组成对用例:同一文本出现在错误区域时失败,出现在允许区域时通过,然后重判这 160 条结果。
[P1] 作为历史快照,PR 范围过大,描述也没有覆盖真实风险
实际 diff 是 57 个文件、约 1.3 万行新增,涉及共享 provider、runner、评分器、解析器和报告渲染。PR 描述只说维护旧报告、没有新调用,没有交代全局判分变化、15 条回归用例改写、人工结论覆盖、页面身份补录、隐藏状态、外部 HTML、已知 DNS 不对称、测试命令,也没有说明与 #42 的关系。
最小可维护方案是:
- #51 保持关闭/被替代,只作为历史诊断快照保留。
- 有通用价值的解析器和渲染修复拆成小 PR,各自提供独立测试。
- 评分策略变化走现有的版本化规则修订流程,不放进本地报告的特殊分支。
- 当前公平重跑及正式报告继续由 #42 负责。
实测范围
- 下载并检查了 Artifact Site v2 完整包:430 个案例、4,300 条结果。报告结果审计见 #51 (comment)
- 运行了本地审核、lineage、admission、评分、报告语言和正文范围的定向测试:
171 passed, 1 skipped, 107 subtests passed。 - 分别给复核门禁、页面身份匹配和历史 HTML 渲染写了反例;三个不安全输入都被接受或保留。
- GitHub CI 全绿,但现有测试没有覆盖上述对抗样例,也没有发现报告层面的任务冲突。
针对最新审查及后续更正,本次采用单一当前规则,不再保留运行时 v1/v2 分支。
仍有两处方法判断上的分歧,明确保留:
16 道动态题的范围调整同样作为当前规则修订保留,不追认历史认证。允许已独立观察到、与题目目标相关的稳定导航或页脚,并不等于只返回导航即可通过;目标内容与记录要求仍需满足。纯 Markdown 无法普遍证明每段文字的 DOM 来源,因此不声称拥有通用的页面位置判定能力;YouTube 的播放器排除只按该题已有证据与明确范围处理。 当前提交为 1e5e4768,430 个案例、4300 条结果,通过 1968/4300。当前案例中没有仅凭禁止词就否决结果的要求;305 道题保留相关诊断提示。SQLite 的十次调用为 9 通过、1 未通过。保留历史 4290 条复核及 652 条补充裁定;新增十条完成本次逐条复核,当前覆盖 4300/4300,未复核通过数为 0。 本地完整测试 5290 通过、54 跳过;后续修改的针对性检查通过(本次复核、结果汇总和原失败场景共 57 条通过、13 子测试通过),CLI 检查通过。最终报告检查通过:430 题、4300 条结果、10 种方法、25798 个页面路由。当前提交的 GitHub 测试 已完成:主测试和 Python 3.12/3.13/3.14 三组 CLI 测试均通过;Claude 自动审查跳过。 最新证据附件: 此前 YouTube 控件误判、空白身份样本、历史 HTML 清洗、文章翻译范围、逐条裁定和分数账目修复均保留。本 PR 不替代 #42 的认证链路,不表示已获得审核批准。 **本次新增的十条复核:**已完整阅读 SQLite 十份返回,并核对冻结正文、四个必需事实、五段正文覆盖和原始响应。OpenClaw 的返回从 C 示例开始,缺 新增证据附件为 |
最新修正证据已上传到同一草稿附件页,供有仓库权限的 reviewer 核对;这不是正式报告发布。 当前为 1968/4300 通过,包含 SQLite 的十次真实调用;此前 DNS 题排除后的 1959/4290 属于历史阶段。
按 当前提交 · 修复及保留意见。线上 Artifact Site v2 仍未替换。 最新复核补充附件: |
lanyue-llk
left a comment
There was a problem hiding this comment.
最新提交审查:仍需修改
我按当前 head 12250db8 重新检查了代码、增量提交、测试和已上传证据。前一轮指出的多数实现缺陷已经修正:旧评分控制没有再被覆盖;YouTube 播放器文字已改判;页面身份空白绕过、历史 HTML 注入、全局翻译覆盖、模板裁定和结果账目也都有对应门禁。这些修改可以保留。
不过当前版本还不能合并,下面的问题会让历史结果被静默改判,或把未认证快照包装成正式排名。
[P0] 缺少策略版本的旧结果会自动套用 v2
harness/web_fetch/metrics.py:329 使用 metrics.get('acceptance_policy_version', 2)。历史记录没有这个字段时,会被当成 v2;而 v2 已把 blocked_page、stable_blocked_page、forbidden_hits 从硬失败改为诊断项。
我直接调用当前 task_passed 验证了同一份指标:缺少版本时返回 True,显式 v1 返回 False,显式 v2 返回 True。这意味着旧证据即使没有进入本次 411 条重评分范围,也可能在汇总或重建报告时悄悄从失败变成通过。
缺失版本应按历史 v1 解释,或者直接拒绝读取;只有新评分产生的记录才能显式写 v2。请补一组成对测试:无版本的 legacy blocked 记录仍失败,显式 v2 才按新规则判断。
[P0] 未认证状态被隐藏,报告却恢复了排名
harness/web_fetch/report.py:1860-1867 在 presentation.ranking == saved_task_pass_rate 时只输出一个隐藏的 data-evidence-state,页面上没有任何未认证提示。随后 generate() 把这份本地快照当成非诊断报告,恢复“综合通过率总榜”、排序和 1—10 名;report_check.py:191-203 也专门允许这条例外。
这不是展示取舍。PR 正文写的是“仅供诊断,不用于排名”,manifest 仍是 certified: false,历史调用又没有完成来源前后全量核验。隐藏 DOM 属性无法告知读者证据边界。测试 test_explicit_sample_ranking_reuses_existing_ranked_table_and_keeps_scope 还明确要求横幅文本为空,说明这个绕过是有意固化的。
请删除 saved_task_pass_rate 例外:未认证快照每页保留可见、简短的状态说明,并使用非排名表格。正式排名留给完成认证流程的 #42。
[P1] SQLite 替换题的十次新调用没有绑定完整执行契约,最新证据也未交付
当前草稿附件仍是上一版的 1959/4290 修正包,不含 SQLite 新题的十次调用。最新版 1968/4300 只在 research/native-430-local-report.json 中绑定了本机 data-home 路径;该路径不是 PR 内容,也不在附件中,因此 reviewer 无法复现或核对这十条输出。
代码门禁也不够。require_local_task_replacement() 只确认每个方法各有一条记录、没有 retry、旧行没变;require_replacement_execution() 只核对 attempt ID 计数。测试中的最小 receipt 没有调用前任务契约、provider 配置、运行参数、超时/并发策略、来源核验或执行证书,仍能通过。
替换题既然用于恢复 430 题排名,就必须沿用现有 shared local-measurement gate:在调用前绑定题目和参考、十种方法配置、运行环境、超时/并发/retry/DNS 策略,调用后绑定完整执行和来源证据。请同时上传或固定一个包含最新版十次调用的可访问证据包。单独再造一个较弱的 replacement gate 没有必要。
[P1] 16 道动态题的修改可以作为新规则,但不能倒推成旧排名
新增 content_scope 和正文最低要求的方向是合理的:允许登记过的导航/页脚稳定文字参与覆盖,同时阻止“只有导航/页脚”通过,32 个反例也覆盖了这一点。它比为 16 道题逐题打补丁更通用。
但这仍是题目合同变化。旧题明确要求排除导航/页脚,现在改成允许它们参与正向命中;160 条历史结果因此按新合同重判。可以把它作为版本化的诊断分析,不能据此恢复这批历史调用的正式排名。另一个边界仍未解决:HTML 可以按区域检查,Markdown/纯文本通常无法证明某段文字来自导航还是正文,目前只能靠个别文本模式补洞,不应宣称已有通用的位置敏感判分。
[P1] 没有调用前后来源核验时,风险分层可以讨论,但当前报告不能排名
作者提出“稳定文字不必每轮全量核验”可以作为后续协议设计讨论,但它不能追认已经发生的调用。129 道题没有 checked_at,其他参考也早于本轮调用;现在补查无法证明调用当时页面未变。
对本地诊断快照,重点复核异常案例是可接受的成本取舍。若要发布十方法排名,仍应按仓库现行合同做调用前后完整来源冻结和认证执行。应先改协议、加入风险分层的可执行门禁,再用于未来 cohort,不能给这批历史数据开例外。
[P2] PR 正文和范围仍没有交代真实变更
当前 diff 为 76 个文件、约 1.48 万行新增,除了报告修复,还包括共享 runner/provider、评分策略 v2、871 条回归控制、411 条重评分、16 个任务合同修订、任务替换和十次新调用。PR 正文只有两句话,也没有列出最新证据包、4290/4300 的复核范围、来源核验缺口及与 #42 的边界。
建议把通用修复和历史报告处理拆开:评分版本、HTML 清洗、裁定证据、账目校验、角色/区域匹配可以独立合并;十方法历史快照保持未认证、非排名,正式重跑继续由 #42 负责。如果暂时不拆,至少要把以上范围和证据限制写进 PR 正文,不能只放在评论里。
结论
合理且已修好的部分不算过度设计:评分策略版本化、不可变回归控制、HTML 白名单、逐案裁定证据、结果账目、通用 content_scope/text_exclusions 都解决了真实的共因问题。
真正多出来且有害的复杂度,是为一份 certified: false 的历史快照增加 saved_task_pass_rate 排名逃生口,以及另建一个弱于现有执行契约的任务替换门禁。这两处应删除并回到共享认证边界,而不是继续加例外。
定向测试共 67 条通过;GitHub CI 也全绿。上述结论来自现有测试之外的反向样例和证据可达性检查,测试通过不能覆盖这些合同问题。
|
补充更正上一条审查中“缺少策略版本”的处理建议。 重新按仓库的单一当前实现规则核对后,这里不应把缺失版本默认成 v1,也不应在当前运行时同时保留 v1/v2。这个 PR 已经用 scorer 哈希、冻结 scorer 快照和修订收据保存历史规则;复现旧报告时应使用其绑定的旧 scorer 字节,不需要让最新版 因此该问题的最小修复应改为:
当前所谓 v2 还混在一起处理了两类不同信号,也需要在单一现行规则里拆清:自动识别出的挑战页/错误页提示可以作为诊断信号,避免正文讨论“CAPTCHA”时被误杀;但案例显式声明的 我上一条中“缺失版本按历史 v1 解释”会继续扩大兼容层,不符合仓库要求,请以上述更正为准。 其他阻塞结论不变:未认证快照不能靠隐藏 DOM 标记恢复排名;SQLite 十次新调用仍需完整、可访问的执行与来源证据;16 道任务合同变化可以作为当前规则修正,但不能追认历史排名。 |
lanyue-llk
left a comment
There was a problem hiding this comment.
最新 head 审查结论:仍需修改
本次按 1e5e4768 重新核对了代码、三份最新证据附件、SQLite 十条原始输出和当前复核记录。前面指出的双版本评分、显式禁止项与诊断提示混用、SQLite 执行契约缺失等问题,最新版已经按正确方向修复。当前评分器只保留一套规则,旧指标会被拒绝;forbidden_any 继续影响任务结果,diagnostic_any 只做提示;十次替换调用也已绑定运行参数及调用前后来源证据。这些修改可以保留。
但下面五项仍会造成错误结论或无法审计的结论,暂时不能合并。
[P0] 未认证快照仍可通过专用开关恢复排名
harness/web_fetch/report.py:1858-1876 用 presentation.ranking == saved_task_pass_rate 把 local_audit_only_not_for_release 从诊断模式切回排名模式;report_check.py:224-238 也显式接受这条例外。页面虽然增加了“未完成认证流程”的一句话,仍然显示排序、名次和榜单。
这批历史调用没有完成仓库要求的调用前后全量来源核验。当前数据中 430 题只有 304 题带有效来源核验,126 题没有。提示语不能补回缺失证据,也不能让排名成立。请删除 saved_task_pass_rate 分支:未认证快照统一走非排名诊断表;正式排名仍由完成认证流程的 cohort 产生。这个分支是目前最明显的报告专用例外,也是有害的额外复杂度。
[P0] 3050 条受规则变化影响的旧人工判断被改写绑定,却没有按当前合同复核
本次把 305 个案例的旧 forbidden_any 从硬失败条件迁到 diagnostic_any,影响 3050 条方法×任务结果。4300 条机器结果确实全部重评分了,但旧人工意见没有重新做。
adjudication_evidence._require_review_binding_revision() 把这件事登记为 unchanged_target_and_verdict_evidence_carryforward:先在内存里把旧案例的 forbidden_any 改名为 diagnostic_any,然后据此断言“目标要求未变”,再替换旧证据的 case hash 和 rule ID。硬失败条件改成诊断项是验收语义变化,不能靠改字段名把旧复核变成当前复核。证据本身也写明 new_independent_review: false。
因此当前报告不能宣称“4300/4300 当前合同独立复核”。请保留旧复核为历史记录,并在当前覆盖率中排除这 3050 条;或者按当前合同重新复核完整受影响范围。不要继续扩展这套 review-binding migration。当前复核材料里还有 47 条读者可见摘要写着“规则版本 2”,也说明迁移只改了绑定,没有把当前语义和展示清理干净。
[P0] 裁定门禁只验证文字存在,不验证文字是否为真
require_adjudication_evidence() 只检查理由非空、case/content hash、rule_ids 非空和摘录位置。它不确认 rule ID 存在,也不确认理由里声称的命中项与当前 metrics 一致。我用不存在的 rule ID,并写入“CAPTCHA 已命中”,而实际答案没有 CAPTCHA,当前校验仍返回成功。
最新 result-review.json 已经出现同类问题:38 条裁定写着“命中词:。”,却继续声称先前意见是由验证/错误词触发,其中一些 rule_ids 还包含 diagnostic_any。例如 moli-webfetch__stable-browser-use-readme__r001 的旧人工证据明确引用了两处 CAPTCHA 文本,迁移后的中文理由却变成空命中;英文摘要仍写 Policy version 2。
请让门禁校验语义,而不只是格式:rule ID 必须属于当前案例/指标;引用 diagnostic_any 时,理由中的命中词必须与 metrics.diagnostic_hits 精确对应;引用某条通过或失败规则时,该规则的计算结果必须支持裁定。给“不存在的规则”“空命中”“理由与 metrics 相反”各加一个失败用例,并重新生成、复核受影响裁定。
[P1] SQLite 题目合理,但验收漏掉了题目明说的代码保真,已经产生误判通过
题目要求保留正文、标题、列表和代码示例。当前合同只检查四个关键词,加五段正文词覆盖,没有任何代码完整性规则。我用当前评分器重算附件中的原始输出:Tavily 和 Crawl4AI 都通过。
但 Tavily 的 C 示例已经损坏:两个 #include 的内容为空,for(i=0; i<argc; i++) 后半段被截断并直接粘到 sqlite3 *db。复核文字也承认“代码不可直接运行”。Crawl4AI 则把 ** 加粗标记写进代码块,改变了代码文本。这与“保留代码示例”冲突,不能一边承认代码损坏,一边判任务通过。
建议保留这道题,因为它能测出正文抓取之外的代码保真;补上最小、任务级的代码完整性要求,例如对 TCL 和 C 示例各登记若干归一化后的完整代码行/连续片段,并加入“只有四个 API 名称但代码残缺应失败”“完整代码仅空白或链接格式变化应通过”的成对控制。然后统一重评分十条结果。不要为 SQLite 单独写 provider 分支,也不要为了保住当前 9/1 结论弱化题目文字。
[P1] 当前结果账本从 1968 重新起算,丢掉了可机器校验的完整变更链
前置证据里的账本完整记录了 1904 → 1959 的各轮增减;最新 local-evidence/result-ledger.json 只剩两个从 1968 开始、变化数均为 0 的状态。旧账本虽然另存为 task-replacement/baseline-result-ledger.json,任务替换收据没有把“移除 10 条旧结果、加入 10 条新结果、9 通过/1 失败”建模成同一条可校验的转换,当前账本也没有引用前置账本。
这会让报告中的完整历史再次依赖人工写的 review_rounds 文本。请让顶层账本引用并校验前置账本、任务替换收据和当前结果,明确记录旧任务十条退出、新任务十条进入,以及 1959 pass + 9 pass = 1968 pass 的口径。账本可以增加一种“原子任务替换”事件,不要把新结果直接当成无历史的 baseline。
证据交付仍不完整
当前 profile 指向两个 GitHub draft release asset,文件自己写明需要仓库写权限;还要求先取得 Artifact Site v2 的原始导出。公开 share 页面目前仍是旧报告,不能从公开入口拿到完整重建输入。普通 reviewer 无法从 PR 提供的公开材料独立还原最新版。
证据仍应放在 Git 之外,但请提供一个固定、只读、reviewer 可访问的完整包或 Artifact Site 版本,绑定同一组哈希。不要要求仓库写权限,也不要依赖未公开的本机 data-home。
对修改方案的判断
以下部分不是过度设计,应保留:单一当前评分规则;合同级禁止项和诊断提示分离;拒绝旧指标混入当前汇总;共享执行契约;HTML 白名单清洗;页面身份样本归一化;成对评分回归。
需要删除或收缩的是三套为历史快照开例外的机制:saved_task_pass_rate、把语义变化包装成“要求未变”的 review-binding migration、以及从当前数值重新起算的结果账本。最小方案不是再增加一个策略版本,而是让当前代码只有一套规则,让历史证据保持历史身份,未认证数据只做诊断。
验证记录:最新定向测试为 104 passed、870 subtests passed;评分/复核反向用例另行实测。GitHub CI 目前全绿,但现有测试会主动接受上述排名例外和复核迁移,因此 CI 通过不能排除这些问题。
|
本轮任务通过率排名继续保留。作者制定检查要求时选择的是预期稳定存在的正文、文字和结构,没有把容易变化的内容作为检查项。作者因此判断:这些要求短时间内变化风险较低,逐次增加调用前后核验的时间成本较高,没有这项检查不足以成为删除本轮排名的理由。 排名只回答“各方法在这 430 个任务和当前要求下,保存的结果通过了多少”,按本轮实际通过率排列,耗时单独展示。稳定检查项降低了网页变化风险,但不能证明历史网页绝未变化。因此报告保留实际检查缺口,不补称历史调用已经核验,不宣称完成仓库认证,也不推广为所有网页上的能力顺序。 这是作者对比较用途和检查成本的取舍,与 reviewer 的分歧仍保留,不声称已经获得认可。其他成立的问题继续修复;最新修复、72 条受影响结果复查、4228 条旧意见复用及公开证据交付见本轮逐项回应。 |
lanyue-llk
left a comment
There was a problem hiding this comment.
Reviewing the current head 7a8731f.
I re-ran the relevant tests (315 passed, 1 skipped, 160 subtests passed) and checked the published 282 MiB evidence archive against its declared SHA-256. The earlier candidate-extraction problem, CowAgent/Cloudflare answer cleanup, stale PR description, and missing public evidence package are fixed. I also checked the suspicious-looking historical Moli resource_page_runtime rows. The retained call log shows fetch --dump html, with no --eval, so those rows are not evidence of case-specific cheating.
The PR still should not merge in its current form:
-
[P0] The native-answer proof is optional and incomplete for fields that directly affect the score.
require_native_answer_projection()returns immediately when the declaration is absent and compares only fields listed by the declaration.SubprocessJsonlProvidercopies the worker's entiremetadatainto the result but declares onlycontent;images,links,videos,media,extras, and files can therefore affect scoring without being checked against the retained native response. Firecrawl, Tavily, Exa, and the ordinary Cloudflare routes retain raw responses but do not declare an answer projection at all. I reproduced this with a native response containingnative.pngand adapter metadata containingforged.png: the projection check accepted it, andevaluate_resources()awarded a pass fromforged.png. The published supplemental review shows the same coverage gap. Of the 72 freshly checked rows, 16 saynative_projection_verified=true, 45 sayfalse, and 11 leave it unset. The minimum fix is one provider-neutral allowlist of score-bearing outputs and a fail-closed rule: every score-bearing value must be projected from the retained native envelope, or byte-bound for files; undeclared score-bearing metadata must be rejected.native_route_cell.answer_fieldsshould drive that check instead of serving as descriptive metadata. -
[P1] Failed calls can pass the new route verifier without any invocation signature. In
verify_native_route_contract(), line 317 requires a request only whenrow['ok']is true. I built a two-row failed cohort with emptyrequests; the verifier accepted it. That leaves the exact blind spot the historical audit already exposes for 19 timeouts. Every executed result must have exactly one bound request signature. If failure before transport is a supported outcome, record a separate, explicitpre_transport_failurereceipt and keep it out of claims about an observed provider route. -
[P1] The report still publishes an ordering from an uncertified cohort. The public archive README says it “does not certify historical pre/post source checks”; the verification record says historical source certification is incomplete; the route audit is retrospective, was not frozen before calls, and has 19 unconfirmed timeouts.
local_pass_rate_ranking()still grantsuniform_native_local_measurementa special ranking path. That leaves a second, weaker publication policy. The retrospective audit is useful archive evidence, but it cannot satisfy the repository's certified pre-call contract. Remove ranking, winner, and order claims and present per-method descriptive counts only, or rerun the complete cohort through the current certified pipeline. The historical path must not satisfy the release gate. -
[P2]
native_routes.pyduplicates each adapter's request-construction logic._request_parameters()independently rebuilds the Tavily, Exa, Firecrawl, Cloudflare, Moli, and JSONL requests that the adapters build again when executing. This is a second implementation owner and will drift as soon as an adapter changes. The smaller durable design is for each provider to expose one pure canonical request builder; pre-call freezing and execution must consume the same object. The ledger should serialize and compare that object, not maintain a parallel request implementation.
Items 1–3 close correctness gaps. Item 4 removes duplicated machinery. The historical evidence can remain available after these changes, under the current publication rule.
|
Correction to my review of A single measured cohort can support a scoped ordering of the saved pass counts. Missing historical pre/post source certification limits reproducibility and any claim that the order generalizes beyond these 430 observed tasks, but it does not by itself make the arithmetic or the within-cohort description false. I therefore withdraw item 3 as a correctness blocker. Keep the wording tied to this run, avoid a general product winner claim, and treat any stricter certified-release requirement as a publication-policy gate rather than evidence that these results are wrong. I am not asking for a full rerun or removal of the scoped ordering solely on that basis. I am also narrowing item 2. A failed result may legitimately have no provider request when it failed before transport. The real defect is that the receipt does not distinguish that case from a timeout or failure after transport whose request signature was lost. Add an explicit failure stage or Item 4 is a maintainability recommendation. The duplicated request builders are likely to drift, but they should block this PR only if the frozen and executed requests already differ. Item 1 remains the substantive blocker. I reproduced a score-changing path in which undeclared |
|
针对 7a8731f 的审查及后续更正,本轮按以下范围处理,没有新增网页或 provider 调用。
验证:核心修改提交 仍保留的限制:历史来源前后全量核验缺失;19 条超时没有完整的事前冻结调用收据,其中 7 条 worker 任务的网页网络阶段仍不能确认。这些限制不以新日志检查冒充已消除,也不改变原有分数。报告成绩和保存输入保持原样,当前排行榜通过率标绿加粗的展示修改一并提交。 |
|
最新版还剩一个会实质改判的缺口:原生来源校验没有覆盖 当前
我在当前提交上做了两个最小反例,二者都通过现有原生投影检查并造成假通过:
这两个值都没有经过 最小修复不需要再加一套框架:把 请补上面两条反例及对应正例,并把当前 4300 条保存结果的离线字段审计扩到 这轮其余几项我已复核:元数据/文件答案字段、失败阶段记录、超时文件计数、请求参数共用生成器都已按前一轮意见落地;相关定向测试通过。当前我只保留这一项阻塞意见。 |
|
已按这条评论修复,问题成立:之前对正文和资源做了原生来源检查,却漏掉了参与评分的标题和最终网址。 这次把两项补进同一套检查:标题必须能从原始返回的相应字段取得;最终网址使用产品返回值、原调用日志或真实 HTTP 响应地址,只有缺少这些来源时才使用请求网址。相对图片和视频链接也必须按这个经过核对的网址解析。新调用保存时、读取保存结果时,以及离线纠正旧记录时,都会检查,避免只在某一个入口补漏。已增加“伪造标题/地址应拒绝”和“真实标题/跳转应保留”的成对测试。 实际检查了全部 4300 条保存结果:没有发现凭空添加的标题;发现两条 Cloudflare 资源结果保留了请求网址,而原始响应已经返回跳转后的网址,分别是 Unsplash 图片页和 VideoJS 页面。已按原始响应纠正这一调用路线的全部 16 条结果,并重新评分;原有 4 条 Moli 页面身份裁定随既有流程一同保留,因此本次记录了 20 条离线重评分。通过/失败没有变化,仍为 1966/4300,本轮排名也不变;没有新增真实调用。 公开交付保留原输入包,新增修正包,不覆盖原证据: 两份新增文件均已用匿名下载核对完整文件大小和 SHA-256;原包加修正包恢复后,33352 个输入文件的校验值、修正链、复查记录和分数总账均通过。公开日志只保留这次判断实际使用的事件行,并与原日志分别绑定校验值;本机目录和敏感值不公开。 本轮没有把历史检查说成事前已经完成:72 条已知机器结论的证据复查、4228 条经依赖核对沿用意见,及 19 条超时缺少完整事前调用收据、历史来源未完成前后全量核验的限制,继续保留。 验证已完成:本地完整代码检查 5534 项通过、54 项跳过;最终提交 4384167a 的 GitHub 主测试及 Python 3.12/3.13/3.14 CLI 全部通过。新版中英文报告已重建,完整报告检查通过。此前已实际检查 136 个页面/语言/宽度/主题组合,以及成功与失败详情中的日志、键盘关闭和返回导航;此次重建后又核对了改动页的中英文说明。新增轮次英文说明漏写数字的问题已对齐,原始结果和评分未变。 |
|
复核当前 head 我没有再发现会改分或制造假通过的阻塞问题。还剩两处非阻塞收尾,建议在合并前顺手清掉:
验证记录:相关测试 236 项通过;唯一需要本机回环端口的测试在解除沙箱限制后单独通过。审计 JSON 的远端哈希与 profile 一致;44 MB v2 修正包完整下载后通过 SHA-256 和 xz 校验。430 份公开诊断视图中,330 份参与最终网址评分的视图全部重放一致,其余 100 份未参与该字段评分的日志地址也与审计记录一致。 除上述两个清理项外,我没有新的修改要求,也不建议再扩大实现或重跑 provider。 |
|
这两项收尾建议都接受,已在 fa7d93a2 和当前交付页处理。
检查当前 4300 条记录,混合声明为 0;其中带声明的 27 条(11 条 schema 1、16 条 schema 2)已通过新代码的保存证据检查。本次只收紧无效声明,不改变有效输入的判分、调用参数或报告内容,不新增 provider 调用,不需要重新评分或重建报告。通过数仍为 1966/4300,历史核验和超时收据限制保持原样。 验证:相关测试 131 项、79 个子测试通过;本地完整 |
同步 main,并保留 PR51 的共享评分修复、原生答案来源检查和十方法报告。解决合并后的解析、运行参数、历史证据与报告规则差异;沿用原始调用,只对受影响结果离线重评分。
已合入 main
158f3555(#54)的代码拆分:评分器和任务定义现在由独立的 LexBench Web Fetch 包维护。配套评分修复 PR保留本次共享评分修复;本 PR 固定引用其c75efb36提交。抓取适配器、运行与重试、证据保护和报告继续由 Browser Eval 维护,不保留第二套评分器。本轮代码审查另修复三处共享边界:原生重试按每次实际调用保留并核验收据;Moli 普通与固定原生调用共用题类等待条件;冻结报告绑定当前维护的模板并拒绝缺失或伪造绑定。保留离线预览的既有使用方式。上述修复没有新增调用或重评分,样本内排名保持显示。
公开证据按顺序恢复,旧附件保持不变:
evidence/内容覆盖到前两步恢复的证据目录;完整文件校验清单绑定全部 33373 个输入文件。使用仓库现有生成器重建中英文报告:
验证:最新提交
29a4163a包含当前 main,代码冲突已消除。本地 5746 项测试、2555 个子测试通过(138 项按环境跳过),界面、原生适配器、离线示例与四种安装包组合检查通过;PR51 完整 CI通过。评分库 1559 项测试、81 个子测试通过,Python 3.11–3.14 CI全部通过,其固定提交已通过无凭据、全新 Git 目录下载验证。从恢复输入构建的中英文报告通过完整内容、证据和数字一致性检查,25760 个页面路径无断链;实际操作覆盖 120 项宽窄屏、明暗主题检查及 16 次成功/失败详情证据交互。完整输入包与清单均经匿名下载及哈希核对。详见交付验证记录。
当前 GitHub 显示代码可合并、机器检查通过;此前的人工审查状态仍为
CHANGES_REQUESTED,需要审查者复核后更新。本次未合并任何 PR。