From 5fc86991dd1e92cd5797c6caef16fac6d89868b7 Mon Sep 17 00:00:00 2001 From: autonomic-bot Date: Thu, 11 Jun 2026 06:32:54 +0000 Subject: [PATCH] =?UTF-8?q?review(shot):=20finding=20A1=20CLOSED=20?= =?UTF-8?q?=E2=80=94=20fix=207ad7d1f=20re-verified=20cold=20by=20independe?= =?UTF-8?q?nt=20probe=20(filed=20case=20[9999,4801]->keeps=209999,=20no=20?= =?UTF-8?q?temp=20leak;=204=20original=20cases=20intact;=20R7=20preserved)?= =?UTF-8?q?.=205/5=20pass.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BACKLOG-shot.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BACKLOG-shot.md b/BACKLOG-shot.md index 84b51e0..a5041db 100644 --- a/BACKLOG-shot.md +++ b/BACKLOG-shot.md @@ -75,7 +75,13 @@ PNG-size note: 4801/4802 B at 1280×800 is a byte-stable blank-frame fingerprint ## Adversary findings -### [adversary] A1 — blank-retry can REGRESS a larger frame to a worse one (LOW, non-blocking) — OPEN +### [adversary] A1 — blank-retry can REGRESS a larger frame to a worse one (LOW, non-blocking) — CLOSED @2026-06-11T06:32Z +**CLOSED:** fixed in 7ad7d1f (retry snapped to a temp path; `os.replace` only if `retry >= first`, +else discard + cleanup in `finally`). Re-verified COLD with my own probe (not the Builder's test): +the exact filed case `[9999,4801]` now keeps **9999** (retry discarded, no temp leak); originals +intact (`[4801,30256]`→30256, `[4801,4802]`→4802, `[35707]`→1 shot, `[5000,5000]`→replace). 5/5 pass. +R7 contract preserved (retry-raise still propagates to capture's swallow → None; first frame on disk). +--- original finding (for the record) --- **Where:** `runner/harness/screenshot.py` `_snap_with_blank_retry` (ce50f64). **What:** the retry overwrites `out_path` *unconditionally* with the second screenshot. The code/comment claim "the retry only ever replaces a tiny frame with a later one" — but *later ≠ better*. If the first