Repository navigation
fix(open): refuse --launch-console on a provider-owned device before the relaunch close - #3938
Conversation
Size Report
Startup median (7 runs, lower is better):
|
|
The code looks right at 37dc3c4, but the live evidence for the dispatch-order change is still missing. All 16 checks pass at this commit, and there are no conflicts. This PR changes app-lifecycle dispatch order in the Android and Apple Not blocking, and you can take or leave these: (1) The daemon calls Could launch-only options be admitted once, before I did not run tests or Before merge, this needs the two device runs above and an answer on admitting before |
|
|
Thanks for the update. The code at 0a4b925 reads well, and all 19 checks pass. There are no conflicts. The device runs I asked for in the 37dc3c4 review (#3938 (comment)) are still missing, so this is not ready to merge yet. This PR moves the open-admission refusal ahead of the close, runner and runtime-hint steps in packages/platform-apple/src/lifecycle.ts:126 and packages/platform-android/src/lifecycle.ts:112. That changes app-lifecycle dispatch on live devices, and the PR body says it is not device-facing. Nothing yet shows that the one supported owner (a local iOS simulator) is still admitted after rebinding, or that an Android refusal leaves the foreground app untouched. Please record the device, the SHA and the outputs of two runs. First, on a local iOS simulator, Could admission run once, before Not blocking, and fine to take or leave: the new scenario test in provider-device-runtime.fixtures.ts:214 uses a hand-written I ran no tests or device commands myself. I judged the fixture from the fixture and provider sources. I did not find the committed mutation test that the PR body describes, and I did not reproduce it. I also did not trace whether a shut-down Android emulator boots during |
0a4b925 to
e8b9aa6
Compare
…the relaunch close A provider-owned iOS simulator has the same device shape as a local one, so open --relaunch --launch-console passed the existing shape check, closed the running app, and only then failed. The provider branch of the lifecycle binding now refuses launch-console with UNSUPPORTED_OPERATION and the typed reason launch-console-owner-unadmitted before it resolves an interactor, so no close or launch runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e8b9aa6 to
51a56a6
Compare
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
The code looks good at 51a56a6. The earlier concerns are fixed: the hand-rolled fixture is gone, the docs now say "local", and the refusal now comes before the relaunch close, so a provider-owned device is no longer closed and reopened first. Not blocking, and you can take or leave these: the debugging workflow help in src/commands/schema/cli-help-workflows.ts still says "--launch-console is only for direct iOS simulator app launches" without "local", and two tests pin that wording (cli-help-first-screen.test.ts:68, cli-help-workflows.test.ts:19), so say "local iOS simulator" there and update both assertions; also, the check in packages/contracts/src/application-lifecycle-interaction.ts:90 fires before the shape checks, so a provider All 21 checks pass, with none failing or pending, and there are no conflicts. On evidence: I could not see the raw Limrun run output behind the PR body's live-validation claim. The tested commit f40fdfd9cf has the same patch-id as head, so the run covers this change, but I could not re-run it or confirm the device and outputs. I did not run TestMu or WebDriver devices live. They share the same binder and bindDirectApplicationLifecycle route as Limrun, so the refusal takes the same code path. I also did not rerun check:affected or the unit and scenario tests, and I judged the regression by reading the old route, where The remaining step is for a maintainer to accept the recorded Limrun run as the device evidence. |
* origin/main: (76 commits) fix(open): refuse --launch-console on a provider-owned device before the relaunch close (#3938) fix(test-app): keep the inert surface control above the settings fold (#3993) fix(fill): redact the read-back of a sensitive fill (#4014) fix(apple): read the runner cache toolchain key from Xcode's own files (#3995) docs: point stable test suites to e2e (#4010) docs(mutation): state the file-name rule that marks test support code (#4011) refactor(kernel): read the Action Button leaf from isHandheldAppleDevice (#3988) fix(ios): match alert labels through the OS prompt strings of the preferred languages (#4006) fix(mutation): measure each kernel against the tests that import it (#3994) fix(webdriver): avoid unused pre-tap focus geometry reads (#3997) refactor(apple): share coordinate drag execution (#4003) fix(apple): type a text-entry-trait element as a text input in the simulator AX tree (#4008) refactor(contracts): own the unsupported-interactor stub both platforms duplicated (#4002) refactor: reuse canonical device identity projections (#3996) refactor(apple): share simulator status-bar diagnostics (#3998) refactor(runtime): share host command runner construction (#3999) refactor(android): centralize session error encoding (#4000) chore: mark 0.21.33 as released chore(gates): detect new native duplication with jscpd (#3980) fix(android): publish the Compose role on its clickable parent instead of a fake child (#3983) ...
* base-3865: (76 commits) fix(open): refuse --launch-console on a provider-owned device before the relaunch close (callstack#3938) fix(test-app): keep the inert surface control above the settings fold (callstack#3993) fix(fill): redact the read-back of a sensitive fill (callstack#4014) fix(apple): read the runner cache toolchain key from Xcode's own files (callstack#3995) docs: point stable test suites to e2e (callstack#4010) docs(mutation): state the file-name rule that marks test support code (callstack#4011) refactor(kernel): read the Action Button leaf from isHandheldAppleDevice (callstack#3988) fix(ios): match alert labels through the OS prompt strings of the preferred languages (callstack#4006) fix(mutation): measure each kernel against the tests that import it (callstack#3994) fix(webdriver): avoid unused pre-tap focus geometry reads (callstack#3997) refactor(apple): share coordinate drag execution (callstack#4003) fix(apple): type a text-entry-trait element as a text input in the simulator AX tree (callstack#4008) refactor(contracts): own the unsupported-interactor stub both platforms duplicated (callstack#4002) refactor: reuse canonical device identity projections (callstack#3996) refactor(apple): share simulator status-bar diagnostics (callstack#3998) refactor(runtime): share host command runner construction (callstack#3999) refactor(android): centralize session error encoding (callstack#4000) chore: mark 0.21.33 as released chore(gates): detect new native duplication with jscpd (callstack#3980) fix(android): publish the Compose role on its clickable parent instead of a fake child (callstack#3983) ...
Summary
open <app> --relaunch --launch-console <path>against a provider-owned iOS simulator (Limrun, TestMu) closed the running app and only then failed. A provider simulator has the same device shape as a local one, so the existing shape check let the request through.The provider branch of the lifecycle binding (
packages/contracts/src/application-lifecycle-interaction.ts) now refuses--launch-consolebefore it resolves an interactor, so no close or launch runs. The refusal isUNSUPPORTED_OPERATIONwithdetails.reason: launch-console-owner-unadmitted,details.deviceId, and a hint to drop the flag or use a local iOS simulator. The flag help and docs now say "local iOS simulator". The provider scenario fixture is built withbindDirectApplicationLifecycle, as production provider runtimes are, and a new scenario proves the refusal leaves the fake device with no close and no open.Scope change: this replaces the earlier version of the PR (owner admission called at each lifecycle entry, 12 files, +332/−54). That version kept the older Apple and Vega refusals beside the new check, and preparation steps still ran before it. Moving one admission step ahead of
prepareApplicationOpenwas also prototyped (69 files, +384/−136); it adds a lifecycle operation every runtime owner, including provider plugins, must implement. The failure only occurs on provider-owned devices, so the fix stays at that one branch. Local iOS and Android open paths are unchanged.Validation
51a56a6b9f(rebased ontomainat61ce711a1c).pnpm check:affected --run: all runnable checks passed (exactCommit=true; format, lint, typecheck, layering, fallow, build, vitest-related, command-docs, docs-links, docs-prose).f40fdfd9cf):open host.exp.Exponentsucceeded;open host.exp.Exponent --relaunch --launch-console <path> --jsonreturnedUNSUPPORTED_OPERATION,reason: launch-console-owner-unadmitted, the LimrundeviceId, and the hint; a followingsnapshotstill showed Expo Go in the foreground. The instance was torn down.🤖 Generated with Claude Code