feat(lease): name the iOS simulator mode in a proxy lease device spec

Merged
VI
2d ago
+239-56

Summary

A proxy allocate can now ask for a slim or full iOS simulator. deviceMode joins osVersion, imageTag and physical as a device-spec key (ADR 0007, amended). The CLI's --device-mode, the SDK's leases.allocate({ deviceMode }) and MCP send it on agent_device.lease.allocate. A daemon refuses it with device-spec-unsupported, like the other keys, and it is excluded from env defaults.

Why: simlock leases slim simulators by default, and Apple Pay / Wallet (PassKit) flows need a full one. com.apple.passd is disabled on slim.

It is named deviceMode, not mode: mode is back --mode in-app|system, and a spec key named mode would make the daemon refuse those commands.

23 files. Backend side: callstackincubator/simlock#1225 (issue callstackincubator/simlock#1223).

agent-device open MyApp --platform ios --device-mode full

Validation

Tested SHA 21590b94705d74a807b92d604b194ea595d7a488, rebased on main 9cf8168a4.

  • check:affected --run --head 21590b947: stopped on the smoke-daemon-clean retirement flake (3 of 8 isolated failures on main), so no single receipt. The 14 checks before it and the 26 blocked ones, run through pnpm gate, passed. 97f95411c had a full passing receipt; only a test and help text changed since.
  • Live at 12580a6aa, the last production change, through a real gateway (transcript, RPC, Wallet): the allocate sends deviceMode: "full", the farm records mode: full, com.apple.passd runs.
  • The refusal is not reachable today. No gateway reports the mode yet: callstackincubator/simlock#1254 is an open draft and is not deployed. Its only coverage is unit tests and a stub gateway.
  • Guarantee: slim reported for full is refused, full for slim is served, and a missing mode is accepted unconfirmed.

šŸ¤– Generated with Claude Code