Skip to content

feat(drivers): iOS simulators can live in Xcode's device set (drivers.ios.deviceSet) - #976

Merged
V3RON merged 36 commits into
feature/962-adrfrom
task/968
Oct 26, 2026
Merged

V3RON merged 36 commits into
feature/962-adrfrom
task/968

Conversation

@V3RON

@V3RON V3RON commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Closes #968

Status

Implement: done Review: fix-check passed at e7a2901 (CI bound fix), ADR flip 34876b8 verified by coordinator Hardware: pass at d1cec86 Gate: running
Next: the stack gate on #976 (merges #964 and #976)

  • pnpm test:changed passes, with the Tests lines of the issue
  • Website builds and the HTTP API check passes
  • Every iOS hit in the listed website pages says which setting it holds for; build-and-run.mdx exists and is in the sidebar under "Using devices"
  • docs/internal/EVENTS.md lists invalid-device-set and device-set-changed
  • Slow lane: the "default" case of e2e/slow-agent-device.test.ts passes — slow lane at d1cec86 (a first run timed out inside agent-device and did not reproduce)
  • Slow lane: scripts/slow-e2e.sh stop mid-run leaves no simulator whose durable mark names a lane instance — stopped a run mid-way at d1cec86; stop deleted the leased simulator, no mark left in either set

#962 Completion conditions:

  • With drivers.ios.deviceSet: "default", a leased simulator is listed by a plain xcrun simctl list devices and agent-device drives it (snapshot), on a real Mac. — slow lane "default" case at d1cec86
  • With the key unset, every iOS behaviour is as today. — the existing iOS driver, daemon and e2e suites pass unchanged in CI
  • Under "default", a simulator this Simlock did not create is never in its device list, so cleanup, the warm pool, nuke and doctor --purge-orphans never touch it. — src/drivers/ios/index.test.ts listManaged and foreignDevices tests under deviceSet default
  • A bad value, or a switch with simulators left from the other setting, turns iOS off with a reason simlock doctor shows; Android keeps running. (Today a refused driver makes simlock doctor fail with an internal error; iOS simulators can live in Xcode's device set (drivers.ios.deviceSet) #968 fixes that.) — src/drivers/ios/index.test.ts device-set-changed test, src/daemon/dispatcher.test.ts and src/cli/index.test.ts driver-unavailable doctor tests
  • The website has a "Build and run your app" page, the configuration, cleanup, device and how-it-works pages describe both settings, and simlock instructions gives the build route for each. — website build in CI, src/instructions/index.test.ts iOS builds section test

Assumptions

  • Assumption: how the script test points slow-e2e.sh at a scratch Devices folder — an SIMLOCK_SLOW_DEVICES override, like the script's other scratch overrides.
  • Assumption: the protocol bump — Per-platform lease limit per requester, on a worker and a gateway #966 already moved it to 61, so this PR moves it to 62.
  • Assumption: the iOS driver's Xcode set path when coreSimulatorRoot is absent — it falls back to ".", as src/drivers/ios/index.ts:313 already does; the daemon always passes it (src/daemon/main.ts:1372).
  • Assumption: the bound on a driver-unavailable finding's detail — 1000 characters; doctor cuts the driver's summary so the retry remedy stays whole.

Review

Spec review: 0 blocking, 0 fixed, 0 notes. Code review: 2 blocking, 2 fixed, 0 notes. Claims review: 1 blocking, 1 fixed, 2 notes.
Rounds: 2. Tokens: 7.9M.
Runs: 20. Cost USD: 8.1105. Agent seconds: 4687.
Assessment: complete

Written by an agent.

Written by an agent.

V3RON added 19 commits October 24, 2026 20:16
@V3RON
V3RON added this pull request to stack #977 October 24, 2026 18:28
@V3RON

V3RON commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor Author

Review ledger

Round 1: 832caec
Round 2: 4e02370
Round fix-check: d1cec86
Round fix-check: 34876b8
Round fix-check: e7a2901

Runs: 20. Cost USD: 8.1105. Agent seconds: 4687.
Tokens input 682, output 173593, cache read 20950874, cache write 1233939.
- build implementer: claude-sonnet-5-5 814 s $1.464
- build implementer: claude-sonnet-5-5 951 s $1.2608
- audit implementer: claude-sonnet-5-5 424 s $0.4763
- review 1 reviewer: claude-sonnet-5-5 493 s $0.3438
- review 1 code-reviewer both: claude-opus-5-5 419 s $2.3866
- review 1 spec-reviewer spec: claude-sonnet-5-5 30 s $0.2542
- review 1 claims-reviewer claims: claude-sonnet-5-5 50 s $0.2392
- fix 1 implementer: claude-sonnet-5-5 68 s $0.1607
- review 2 reviewer: claude-sonnet-5-5 47 s $0.1153
- hardware hardware-verifier: claude-sonnet-5-5 11 s $0.0657
- fix fix-check implementer: claude-sonnet-5-5 104 s $0.1757
- review fix-check reviewer: claude-sonnet-5-5 76 s $0.2051
- hardware hardware-verifier: claude-sonnet-5-5 336 s $0.0915
- hardware-fix implementer: claude-sonnet-5-5 204 s $0.18
- hardware hardware-verifier: claude-sonnet-5-5 147 s $0.0785
- hardware hardware-verifier: claude-sonnet-5-5 50 s $0.0922
- fix fix-check implementer: claude-sonnet-5-5 49 s $0.0624
- fix fix-check implementer: claude-sonnet-5-5 134 s $0.1527
- fix fix-check implementer: claude-sonnet-5-5 146 s $0.1303
- review fix-check reviewer: claude-sonnet-5-5 134 s $0.1755
Finding outcomes: {"fixed":3}. Classes: {"architecture 17":1,"architecture 9":1,"false claim in flow doc":1}.
{"findings":[{"id":"R1","role":"code","class":"architecture 17","outcome":"fixed","path":"src/drivers/ios/index.ts","round":"1","fix":"4e02370d1e0fc3c3ea581e9ab0d4b776557c2277"},{"id":"R2","role":"code","class":"architecture 9","outcome":"fixed","path":"src/drivers/ios/index.ts","round":"1","fix":"4e02370d1e0fc3c3ea581e9ab0d4b776557c2277"},{"id":"R3","role":"claims","class":"false claim in flow doc","outcome":"fixed","path":"docs/internal/flows/device-exec.md","round":"1","fix":"4e02370d1e0fc3c3ea581e9ab0d4b776557c2277"}]}

Written by an agent.

@V3RON

V3RON commented Oct 24, 2026

Copy link
Copy Markdown
Contributor Author

Review notes

Not blocking, not verified. Each is one reviewer's claim.

  • claims: website/src/content/docs/docs/using-devices/build-and-run.mdx:42 is about raw xcrun simctl, so the wrapper's refusal of shutdown all does not contradict it.
  • claims: website/src/content/docs/docs/using-devices/build-and-run.mdx:39 the agent-device XCTest runner claim was not checked.

Written by an agent.

@V3RON

V3RON commented Oct 24, 2026

Copy link
Copy Markdown
Contributor Author

Decision taken

The build-and-run page's switch steps carry a decision taken in delivery, pending the maintainer: an operator with a custom drivers.ios.deviceRoot keeps it set while running the cleanup, and removes it only when switching to "default". No registry check was added. Options, reasons and how to revert: #964 (comment)

Written by an agent.

@V3RON
V3RON marked this pull request as ready for review October 24, 2026 19:18
@V3RON V3RON added the needs-hardware PR parked: a Done when line needs a real simulator or emulator run. label Oct 24, 2026
@V3RON V3RON removed the needs-hardware PR parked: a Done when line needs a real simulator or emulator run. label Oct 26, 2026
@V3RON
V3RON merged commit 15e462c into main Oct 26, 2026
56 checks passed
@V3RON
V3RON deleted the task/968 branch October 26, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

iOS simulators can live in Xcode's device set (drivers.ios.deviceSet)

1 participant