Skip to content

v6.2.2 — 修 peak_rss 断言(内核惰性记账,不是 bug)

Choose a tag to compare

@lza6 lza6 released this 05 Nov 03:05
· 28 commits to master since this release

替换 v6.2.0 / v6.2.1。两者 CI 均为红(本机 Windows 全绿掩盖了平台相关缺陷)。按 policy.md §5 发补丁版,不移动历史 tag。

本次修的是什么

v6.2.1 的 CI 只红 python (3.11)(3.12 绿),失败断言:

assert 84922368 >= 84926464   # 差 4096 字节,正好一页

这不是 bug,是操作系统行为:Linux 的 ru_maxrss 按页记账惰性更新,会短暂滞后于 /proc/self/statm 报的当前 RSS。严格断言 peak >= rss 本身就是错的(3.12 绿、3.11 红也说明它时序敏感)。

两处修:

  1. 实现改为先读当前 RSS、再读峰值(ru_maxrss 单调,后读让窗口最小化);
  2. 断言改成"两者同一量级"(容差 1MB),注释写明不能要求严格 ≥。

三个 CI 红的共同点(比单条修复更值得记)

轮次 症状 本机为什么绿
1 monkeypatch.setattr(os, "name", "nt") → Linux 上 Path() 变 WindowsPath → pytest INTERNALERROR 本机 os.name 本来就是 nt
2 服务报告 golden 绑了本机研究产物(last_snapshot_at string vs null) 本机有快照
3 peak_rss >= rss 断言(内核惰性记账差一页) 本机走 Windows 分支,采样方式不同

三次都是"环境相关"。这也是本轮把「确定性报告 golden」做成门禁时必须补的那一课:
shape() 的 volatile 判断要排在类型判断之前,且刻意不收计数器
(它们类型恒定,标 volatile 会连"这里是数字"这条检查一起丢掉)。

v6.2 的主体内容(本版包含,详见 v6.2.0 说明)

四类验收全部脚本化,一个命令就能重来:

类型 命令 实测
UI 截图 python run.py ui 23/23(真 Chrome × 5 状态 + 按钮交互 + 逐张看片)
真实调用 python run.py realcalls 37/37
真实 E2E python run.py e2e 40/40(含真浏览器段)
服务契约 golden python run.py report 13 端点形状一致
真实代码复审 claude -p 独立进程 两轮,问题全部关闭

加上:engines.py 覆盖率 57% → 100%(撤销 waiver)、FlareSolverr 会话生命周期、
vendors.py 单一事实源(治"命中某特征 ≠ 有盾"这类反复复发的错误)。

验证

  • 本机:Python 905 passed / 7 skipped;solver/ 89.4%,23 模块达标;文档 9 处一致;openapi 13 操作一致。
  • CI:run 41956389364(commit 8214c8e)4 job 全绿。
  • Linux(WSL, 3.12):纯函数测试全绿;剩余失败经逐条核实全部源于 WSL 自身 loopback 不可用(连最小 ThreadingHTTPServer 都连不上),非代码问题。