Repository navigation
fix(benchmark): count cyclic receipts without changing literal matching - #8469
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | gpt-6.1-sol | OpenAI | runtime_reported | reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: 2806ec2608d1c8ffacfb17e05d5cda9d6e08be6c;对照基线:67dcbde9bebe9d12c03193dc3edc39a0435d7250。
动机 / Motivation
使用本地EdgeBench镜像库存命令的操作者,需要判断所选运行目录内哪些回执可读、哪些已经损坏。
同一个目录含一个循环回执链接时,Python 3.11旧版报告不可读数为0;当前head报告1,重复传入该目录仍只计一次。
独立CLI对照确认循环及悬空规范回执进入原有不可读统计,正常回执、任务筛选、跨目录隔离和原有大小写匹配保持各解释器的既有结果。
本PR不改变评分、任务含义、排行榜、提交、运行权限或Docker行为,也不启动benchmark任务。
改动思路 / Approach
补充枚举仅负责发现遗漏的文件系统条目;目录、任务、文件名、解析和去重规则继续由现有inventory路径统一执行,无第二个统计owner。
当前PR边界为只读库存选择器及其回归;不需要新状态、版本化协议或后台服务,回退本提交即可恢复旧选择器。
原有literal glob在此大小写不敏感文件系统上表现出Python版本差异:3.11能读取大写变体,3.12不匹配。保留原选择器再串接规范文件名的符号链接,能修复旧版漏项而不把这种既有差异统一改写。两个集合分别去重已解析和未解析回执;新增入口无法绕过任务、根目录、路径深度或最终文件名限制。无需新状态或迁移,Python文件系统辅助器的放置合理。
具体改动 / Changes
完整差异为生产文件+9/-1、测试+13。已搜索base/head的inventory、unreadable_receipts及相关receipt读写方;复用本地库存owner,未添加第二个解析/聚合器。预先阅读的规范为 benchmark/edgebench/README.md,固定在 67dcbde9bebe9d12c03193dc3edc39a0435d7250。CACHE-LOCAL(只读所选目录、不读轨迹、不接触Docker)、CACHE-COHORT(重复根参数及可选任务筛选)、CACHE-GROUPING(规格摘要/角色/镜像版本及旧回执分组)在当前head均implemented;这些ID对应规范中原本未编号的要求。
关键代码讲解
inventory(benchmark/edgebench/image_inventory.py:22)保留literal_paths,在同一目录深度查找且只补入精确规范文件名的符号链接,随后进入同一resolve与去重路径。循环链接解析抛错时加入unresolved_receipts,重复根不会重复计数;解析成功但跨根、跨case、错名或错层级的目标仍跳过。main(benchmark/edgebench/image_inventory.py:100)保留现有argparse入口及JSON结果。独立测试实际执行模块CLI,缺失根仍exit2;修复循环链接后重跑可读回一个正常回执,不需要额外配置或确认。test_inventory_retains_literal_receipt_lookup_on_the_filesystem(benchmark/tests/test_edgebench_image_inventory.py:86)用此前的literal glob作兼容性oracle,没有把is_file或大小写折叠定义为新规则。已有循环、分组和隔离测试共同覆盖有用结果。
同一合成夹具、实际完整检出、明确断言的source imports和独立解释器运行结果如下;测试没有替换已安装版本后冒充source,也没有调用Docker:
| 实际CLI观察 | Python3.11.17 base → head | Python3.12.15 base → head |
|---|---|---|
| 一个规范循环回执,重复根 | 不可读0 → 1 | 1 → 1 |
| 损坏JSON/结构/目录/悬空回执组合 | 不可读4 → 5 | 5 → 5 |
| 可读大写文件名 | 保留原literal匹配 | 保留原不匹配 |
| 正常/别名去重、case/root/name/depth隔离、修复后重读、缺失根错误 | 均保留 | 均保留 |
head两版均通过8个CLI观察;库存pytest各3 PASS、1 SKIP。3.11旧版既有测试的不可读计数1≠2独立复现。标准premerge的5个direct和6个selected检查均PASS,但整体exit1、manual_review_required,不能写成全门禁通过。额外public boundary组件扫描2个文件为ok=true;该检查的外层exit1来自刻意未配置的隔离registry,扫描本身无缺失/不可读/警告。DCO存在。可选SForge/Harbor测试SKIP,未补装或启动任务。
对主干的风险 / Risks
最强回归风险是用通配枚举彻底替换literal选择器,漏掉此平台上原本可读的3.11大小写变体;当前实现和新增正向测试保留了该行为。代价是一轮额外的固定深度目录枚举,没有吞吐提升或大规模目录性能结论。根、case、文件名、深度校验均在读取内容前复用,重复发现的路径经set消除,不改变JSON字段或评分含义。其他文件系统未实测,回退单提交可恢复旧行为;本次同域简化已通过chain复用原循环完成,无需新增抽象。此修复没有default-off声明,也没有把注释变成权限或执行义务。
依据仓库 skills/loopx-pr-merge/SKILL.md 的benchmark helper/runtime及status observation例外,此head的变更范围符合该例外:只读辅助器、focused验证和公开边界检查已覆盖,不涉及scoring、task semantics、leaderboard/submission、权限或启动jobs。例外仍以owner authorization为前提,且不能替代当前exact-head review、required validation、未解决线程检查及fresh merge-readiness。标准门禁的benchmark人工hold仍须由有授权的合并流程处理;本评审不执行合并,也不认定本聊天拥有该授权。
我的整体评价 / Verdict
交付判断goal_achieved;long_horizon和user_experience均improved,依据为重复调用不累积错误、损坏回执读数更真实、相同命令可完成修复后重读,新增交互轮次为0。已检查main的JSON输出及缺失目录错误路径;此次不改变渲染页面或排版。
未验证范围:未验证其他文件系统上的实际大小写行为;未运行Docker、SForge/Harbor或benchmark任务。
现有literal兼容性应retain;改动与复现的问题相称,保留一个owner,没有新协议或泛化核心规则。未发现阻塞问题。APPROVE仅针对上述exact head及验证边界,人工hold和合并权限单独保留。
English verdict: APPROVE — fixes the reproduced Python 3.11 undercount while preserving runtime-specific literal matching; benchmark-helper exception applies conditionally on owner authorization and fresh merge gates.
Python 3.11 的 literal
Path.glob会漏掉循环符号链接,导致本地 EdgeBench 库存把不可读回执计为 0。本修复保留原有 literal 匹配,再补充同一目录层级、规范文件名的符号链接,统一交给现有解析、目录边界和去重逻辑处理。新增回归防止在大小写不敏感的文件系统上漏掉原本可读的回执。The local inventory now counts cyclic receipt symlinks on Python 3.11 while retaining each runtime's existing literal filename matching. It chains the original selector with canonical symlinks and reuses the existing resolver, root/case guards and sets. No scoring, task semantics, permissions, submission or benchmark execution changes; this helper only reads selected local receipt files.
Validation on final source and test bytes (preserved by signed commit
2806ec2608d1c8ffacfb17e05d5cda9d6e08be6c):is_file-based test oracle was also rejected because it incorrectly broadened Python 3.12 matching. The final test characterizes the original literal selector instead.manual_review_required(exit 1) because the benchmark path requires explicit review; this is not reported as an overall pass.cqr_952dcd2c95596f7144af, fingerprint952dcd2c95596f7144af84099e38f88c092551781ca644b5d22107d312d78d1e, valid against base67dcbde9bebe9d12c03193dc3edc39a0435d7250.合并复核 / Merge review: benchmark 路径的人工复核要求保留。请求独立复核确认只读 helper 例外适用,并核实准确提交、负面路径与验证边界后再合并。This is a post-release maintenance fix; it does not change the already published v2.3.0 tag. Reverting this commit restores the prior reader.