fix(interaction): route the first settle capture afresh

Merged
TH
13h ago
+12-6

Summary

--settle and wait stable pinned every capture to the runner's private-AX tier whenever the session's last read came from it. Each settle stores its own pinned capture as the next baseline, so one runner fallback kept every later press @ref --settle off the iOS simulator AX bridge. That is the call shape e2e sends for every tap.

The loop now routes its first capture normally. It still pins to private AX once one of its own captures recovers there, so a runner-served loop keeps one tier. Tap-failure corroboration keeps its baseline pin (same-backend evidence, #1605/#1634).

3 files. Codex design review agreed to scope this to settle only.

Validation

  • pnpm check:affected --run --head ca3e358055: passed (exactCommit: true).
  • The updated settle and wait-stable pin tests fail on origin/main source and pass at head.
  • Live, Bluesky 1.136.0 (real account, Discover feed), iOS 27.0 simulator. Sequence: snapshot pinned to private AX, then press @ref --settle --settle-quiet 150 on a feed tab, 4 runs:
    • base origin/main: 0 bridge / 2 runner captures, 1635โ€“1802 ms.
    • head ca3e358055: 2โ€“3 bridge / 0 runner captures, 1068โ€“1402 ms.
  • On the deeper part of the same feed, runner private AX costs 6.5โ€“8.2 s per capture against ~200 ms on the bridge.
  • CI owns integration and coverage lanes.

๐Ÿค– Generated with Claude Code