## callstack/agent-device — v0.21.15…v0.21.16

_49 commits._

### Features
- **feat(daemon): opt-in inactivity expiry for idle local device claims (#2833) (#2988)** (16e0757)
- **feat(sdk): export the client's option, result, and node types from the package root (#2959)** (8c89891)
- **feat(ios): the snapshot node carries the field's placeholder (#2961)** (5712a35)
- **feat(ios): appstate reads the session app's XCUIApplication state through the runner (#2929)** (f2813ac)

### Fixes
- **fix(remote): renew the lease while an artifact upload runs (#2946) (#2990)** (915ae73)
- **fix(ios-runner): a caller deadline no longer kills a starting runner (#2982)** (99af4e8)
- **fix(remote): speak one platform axis between a device and its bound connection (#2962) (#2989)** (047f9ee)
- **fix(ios-runner): certify cached runner products by content, not by stats (#2991)** (70a6b55)
- **fix(apple-runner): stop an inline status probe clearing an outstanding command charge (#2994)** (0d460b3)
- **fix(daemon): consume the post-gesture record when its capture aborts (#2983)** (de00955)
- **fix(test): stop two gates depending on the host and the process interleaving (#2993)** (3660c7f)
- **fix(ios): drive simulator biometrics through notifyutil (#2981)** (13a7b5d)
- **fix(scroll): an overscroll bounce at the edge is not movement (#2984)** (bce6f52)
- **fix(android): name the placeholder in a fill verification failure (#2985)** (1ea91d2)
- **fix(ios-runner): keep the text-entry fixture inside the iOS guard so tvOS builds** (94433db)
- **fix(ios-runner): keep the presented surface's route for no-app commands (#2954)** (0ad2064)
- **perf(ci): verify restored Apple runner cache with Xcode (#2964)** (37d5000)
- **fix(interaction): a ref the stored tree lacks refuses with a typed reason (#2960)** (1206495)
- **perf(ci): reuse iOS runner and narrow native cache key (#2952)** (76dbee0)
- **fix(ios): a text field under the software keyboard reports focused in the snapshot (#2925)** (8df1010)
- **perf(ios): reuse prepared runner in Settings smoke replay (#2949)** (3475a08)
- **fix(ios-runner): slow synthesized replacement so a value-owning field loses fewer characters (#2904)** (64854af)
- **fix(ios): make both rect guards refuse the sentinel and let the fold answer clipped carriers (#2945)** (5baa18f)
- **fix(ios-runner): give app launch its own policy axis (#2899)** (c7b79ee)
- **fix(ios): refuse alert activation after deadline (#2937)** (b4c6993)
- **fix(ios-runner): enter tree capture before reading snapshot viewport (#2938)** (5cd643c)

### Backend
- **0.21.16** (c58fe85)
- **0.21.15** (476fa32)

### Tests
- **test: delete tests that only assert their own scaffolding (#2986)** (101ecd3)
- **test(ios-runner): drop the screenshot-stability window test the trailing-window test subsumes (#2978)** (34f2eb1)
- **test(ios-runner): delete the surface-host lookup only its own pins called (#2979)** (6d09dda)
- **test(ios): retain bridge circuit diagnostics in smoke (#2936)** (56e8e70)
- **test(e2e): capture scenario assertion failure evidence (#2921)** (17333fd)
- **test: drop cases that re-assert their own input or a stronger sibling (#2933)** (614bfc1)
- **test(apple,vega): give two runner/Vega probes assertions that can lose (#2939)** (479be84)
- **test(capture-kit): pin the ax1 digest wire format the daemon persists (#2941)** (bfc464a)
- **test(daemon): remove daemon pins that cannot fire (#2942)** (21d959e)
- **test: stop pretending type-level pins are runtime assertions (#2943)** (c0f8c10)

### Docs
- **docs(agents): add a test-audit procedure with the mutation discipline that worked (#2951)** (9a09675)
- **docs(ios): state the fold's clipped-carrier hittability as false, not nil (#2958)** (0414e12)

### Chore
- **refactor(ios): one handheld-simulator leaf guard for settings owners (#2992)** (67566f4)
- **refactor(ios): name the runner session xctestrun as a process-identity contract (#2987)** (26db9d0)
- **refactor(ios-runner): charge the text-entry budget the plan the runner posts (#2977)** (1354fa0)
- **refactor(ios): point xcodebuild at the scoped simulator set and delete the XCTestDevices redirect (#2963)** (78c0ca4)
- **refactor(ios-runner): make off-main access to main-owned capture state fail the runner gates (#2911)** (f4fccd0)
- **refactor(apple): put the Apple app states at one source and reuse the contract failure (#2950)** (c31cc49)
- **ci(macos): run the darwin-only Vitest files on a lane that reaches them (#2944)** (769ee23)
- **refactor(settings): one appearance and state parser for every owner (#2932)** (05b3850)
- **refactor(commands): keep bindCommands as the only catalog surface (#2934)** (f95ee69)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/callstack/agent-device?utm_source=github-action)._