Found during #1555's exact-head evidence + a controlled 2×2 attribution matrix (main 6ef7cc0 vs p5 branch, 2 runs each, same simulator; artifacts /private/tmp/ad-step17-attribution/ + state dirs ad-attr-{main,p5}-state).
Finding 1 — the stale-accept path is the NORM on this screen, not the exception. On every run (main and branch, passing and failing), each scroll in checkout-form.ad produced post_gesture_snapshot_stale_accept with attempts:12, durationMs:~3700, matchedPreGestureBaseline:true — i.e. the #1563 distrust loop runs to its full cap and still sees the pre-gesture baseline, on scrolls that demonstrably moved content. Either the iOS AX tree genuinely stays frozen >3.5s on this screen (consistent with the 21.8s/45-poll capture in #1563's own evidence), or the discriminating-overlap signature under-discriminates here. Every checkout scroll pays the full 3.5s cap as pure latency.
Finding 2 — the retry budget is wall-clock-bound, so contention silently starves it. In the one failing run (host load 16–28 from concurrent sessions), per-attempt latency roughly doubled (~562ms vs ~300ms), only 7 attempts fit before the deadline, and the accepted-stale snapshot fed the next interaction: click id="submit-order" refused as off-screen (#1566's guard, fail-closed — correct). An earlier occurrence under similar pollution (15 leaked daemons, load 9.4) manifested worse: the stale-but-on-screen rect for click id="checkbox-agree" was silently mis-tapped 270px off-target (tap at y=436 vs true y=706), the checkbox never toggled, and the flow failed downstream at wait "Order summary" — no guard can rescue a stale rect that is still inside the viewport.
Both branches behave identically — this is a main-side #1563/#1566-interaction gap, explicitly NOT a P5 finding (P5 touches replay-engine/façade code, no iOS capture path; verified by the matrix).
Recommended fixes to evaluate: (1) make the distrust retry loop attempt-count-bound (or scale its deadline by observed per-attempt latency) so contention cannot shrink the effective retry budget; (2) investigate WHY this screen's post-scroll signature matches the pre-gesture baseline for 3.5s+ on healthy runs — if the tree is genuinely frozen that long, the cap accept feeds stale geometry to the very next resolution, and interactions after any scroll on such screens inherit a mis-tap window (the guard only catches the off-screen subset).
Related: #1563 (the distrust mechanism + its 21.8s frozen-tree evidence), #1566 (the off-screen rescue that fail-closes the refused subset), #1542 (the ancestry of this corpus's iOS defects), #1545 (the daemon-leak contention amplifier).
Generated by Claude Code
Found during #1555's exact-head evidence + a controlled 2×2 attribution matrix (main 6ef7cc0 vs p5 branch, 2 runs each, same simulator; artifacts /private/tmp/ad-step17-attribution/ + state dirs ad-attr-{main,p5}-state).
Finding 1 — the stale-accept path is the NORM on this screen, not the exception. On every run (main and branch, passing and failing), each
scrollin checkout-form.ad producedpost_gesture_snapshot_stale_acceptwithattempts:12, durationMs:~3700, matchedPreGestureBaseline:true— i.e. the #1563 distrust loop runs to its full cap and still sees the pre-gesture baseline, on scrolls that demonstrably moved content. Either the iOS AX tree genuinely stays frozen >3.5s on this screen (consistent with the 21.8s/45-poll capture in #1563's own evidence), or the discriminating-overlap signature under-discriminates here. Every checkout scroll pays the full 3.5s cap as pure latency.Finding 2 — the retry budget is wall-clock-bound, so contention silently starves it. In the one failing run (host load 16–28 from concurrent sessions), per-attempt latency roughly doubled (~562ms vs ~300ms), only 7 attempts fit before the deadline, and the accepted-stale snapshot fed the next interaction:
click id="submit-order"refused as off-screen (#1566's guard, fail-closed — correct). An earlier occurrence under similar pollution (15 leaked daemons, load 9.4) manifested worse: the stale-but-on-screen rect forclick id="checkbox-agree"was silently mis-tapped 270px off-target (tap at y=436 vs true y=706), the checkbox never toggled, and the flow failed downstream atwait "Order summary"— no guard can rescue a stale rect that is still inside the viewport.Both branches behave identically — this is a main-side #1563/#1566-interaction gap, explicitly NOT a P5 finding (P5 touches replay-engine/façade code, no iOS capture path; verified by the matrix).
Recommended fixes to evaluate: (1) make the distrust retry loop attempt-count-bound (or scale its deadline by observed per-attempt latency) so contention cannot shrink the effective retry budget; (2) investigate WHY this screen's post-scroll signature matches the pre-gesture baseline for 3.5s+ on healthy runs — if the tree is genuinely frozen that long, the cap accept feeds stale geometry to the very next resolution, and interactions after any scroll on such screens inherit a mis-tap window (the guard only catches the off-screen subset).
Related: #1563 (the distrust mechanism + its 21.8s frozen-tree evidence), #1566 (the off-screen rescue that fail-closes the refused subset), #1542 (the ancestry of this corpus's iOS defects), #1545 (the daemon-leak contention amplifier).
Generated by Claude Code