Skip to content

Post-gesture stale-accept saturates routinely on the checkout screen; wall-clock retry budget starves under contention into stale-geometry interactions #1569

Description

@thymikee

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions