fix(limrun): report the session device id in iOS settings refusals - #3243
Conversation
…t the session device id Move SimctlSettingRequest into @agent-device/contracts/settings so platform-apple and provider-limrun import one type instead of a provider-local copy. Let callers name the device id a privacy refusal reports, separately from the simctl udid; Limrun passes its session device id instead of 'booted'. The lazy-load test now counts module evaluation rather than plan calls.
SimctlSettingRequest.deviceId is required, so no caller can fall back to the
simctl udid ('booted' on Limrun) when reporting a refusal; the local path
passes device.id for both.
Size Report
Startup median (7 runs, lower is better):
|
|
The code in 360f3e2 looks right to me. The new Is there a simpler design? I looked and found none. The refusal needs a device id apart from the udid, and the type was already shared across two packages. Moving it to contracts and adding one required field is the smallest fit, and it removes a duplicate type. The Smoke Tests job failed in the macOS iOS smoke run during Please rerun the cancelled and failed jobs. Once they pass, nothing else stands in the way of merge. |
|
I re-ran CI. Everything passes except iOS Smoke Tests and CodeQL
Neither step reaches the settings code this PR changes; the diff only adds |
|
* origin/main: (77 commits) fix(apple-runner): fence prep spawns behind a start-owned admission (callstack#3239) 0.21.22 test(apple): own the simctl settings plan tests in simctl-settings.test.ts (callstack#3244) fix(limrun): report the session device id in iOS settings refusals (callstack#3243) 0.21.21 feat(remote): add a host-allocated macos-app lease backend (callstack#3236) test(android): bound the screenshot write wait by wall time, not event-loop turns (callstack#3250) feat(recording): cap the touch overlay frame rate at the caller's --fps (callstack#3241) fix(ad-script): let .ad scripts carry scroll --until and wait capture flags (callstack#3197) (callstack#3234) feat(provider-webdriver): keyboard enter, dismiss, and status over WebDriver (callstack#3233) feat(selectors): match role= against snapshot kind with a node-scoped alias window (callstack#3232) fix(provider-webdriver): read field values, placeholders, secure fields, and checked state from page source (callstack#3231) feat(replay): accept --test-ime on test and replay so flow-owned Android opens opt into the test IME (callstack#3235) refactor(daemon): route daemon-level diagnostics through one scope helper (callstack#3242) docs(adr): correct ADR 0031 pointer event delivery evidence (callstack#3245) fix(ios): stop a tap's post-gesture lookup from recording an XCTest failure (callstack#3060) (callstack#3237) fix(recording): render the touch overlay at most 30 fps and inside the record request (callstack#3219) fix(daemon): keep an idle daemon alive only for retained leases (callstack#3227) fix(provider-webdriver): send an empty JSON object on bodyless POSTs (callstack#3230) Feat/maestro repeat while (callstack#3214) ...
Summary
A Limrun iOS settings refusal reported
deviceId: 'booted', because the simctl plan used the simctl udid as the device id. On Limrun the udid is alwaysbooted, so the caller could not tell which session's device refused.SimctlSettingRequestnow lives in@agent-device/contracts/settings.provider-limrunused a hand-copiedLimrunIosSimctlSettingRequest; that copy is deleted.deviceId, separate fromudid. Limrun passessession.device.id; the local simulator path passesdevice.idfor both. No caller can fall back to the udid.src/sdk/limrun-runtime-dependencies.test.tsnow counts evaluations of the Apple simctl plan module, which is what its name claims.8 files, 143 gross lines.
Validation
At
360f3e2260:pnpm check:affected --runpasses (508 files, 3985 tests). A new plan test sendsudid: 'booted'withdeviceId: 'limrun:ios:lease-a'and checks that the refusal reports the device id while simctl still receivesbooted.