Skip to content

enhancement: read-only lease tier for DEVICE_BUSY arbiter refusals #620

Description

@Lykhoyda

Description

When another rn-dev-agent session's bridge owns a simulator, device_snapshot action=open fails with DEVICE_BUSY (holder PID/project/heartbeat shown — which is great). But the refusal is all-or-nothing: even read-only operations (screenshot, accessibility snapshot) are impossible against that device, because they all require opening a session first.

Real scenario: a verification-only session needed a screenshot of a simulator legitimately owned by another active session. CDP tools worked fine (they don't go through the arbiter), but the visual capture had to fall back to raw xcrun simctl. A read-only lease would have covered it without any risk of interfering with the owner's interactions.

Environment

Field Value
Plugin version 0.70.10
CDP Bridge 0.65.8
OS Darwin 25.5.0
Node.js v24.14.0
Metro running (multiple instances across worktrees)
iOS Simulators 3 booted
Android 1 physical device connected
legacy agent-device 0.17.5 (still installed)
maestro-runner 1.0.9

Recent Tool Activity

Telemetry: stale (last event 52 days ago — telemetry capture is not active in this plugin version; removed with the Experience Engine, GH #200).

CDP State at Time of Report

Connected to the physical Android device target on Metro; 0 JS errors.

Steps to Reproduce

  1. Session A: device_snapshot action=open on simulator X (holds the arbiter lease, heartbeating).
  2. Session B: device_snapshot action=open on the same simulator (even with attachOnly=true) → DEVICE_BUSY.
  3. Session B now has no plugin-native way to screenshot or snapshot simulator X.

Workaround

Raw xcrun simctl io <UDID> screenshot / adb exec-out screencap for pixels; CDP tools (cdp_component_tree, cdp_evaluate) for structure, since they bypass the arbiter.

Suggested Fix

A read-only lease tier in the arbiter: device_snapshot action=open mode=readonly (or a session-less device_screenshot deviceId=...) that permits screenshot/snapshot on a busy device while still refusing taps, fills, and gestures.


Submitted via /rn-dev-agent:send-feedback — data sanitized automatically

Metadata

Metadata

Assignees

No one assigned

    Labels

    effort:mEffort: ~1-3 daysenhancementNew feature or requestkano:performanceKano: more/better linearly increases satisfactionpriority:nextUp next after current 'now' items

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions