Skip to content

fix: emulator selection not prompting on fresh install#380

Open
anisaoshafi wants to merge 2 commits into
mainfrom
devx-983-emulator-selection-is-not-triggered-on-a-new-device-install
Open

fix: emulator selection not prompting on fresh install#380
anisaoshafi wants to merge 2 commits into
mainfrom
devx-983-emulator-selection-is-not-triggered-on-a-new-device-install

Conversation

@anisaoshafi

@anisaoshafi anisaoshafi commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Quite some commands (login, status, stop, setup, snapshot, az, aws, etc.) wired PreRunE: initConfig(nil) which eagerly writes the default config.toml (type = "aws") to disk on their own first.
That's the reason why the "Which emulator would you like to use?" prompt didn't trigger, because this one relies on the config.toml file being present or not.

I had a new device set up, where I freshly install lstk, that's how I noticed.

Renamed nitConfig(nil) func to initConfigDeferCreate(nil) which now does read-only config load, no eager write.
Added regression test, and also verified manually uninstalling then installing lstk, which now triggers the emulator selector to pop up.

@anisaoshafi anisaoshafi added semver: patch docs: skip Pull request does not require documentation changes labels Jul 9, 2026
@anisaoshafi
anisaoshafi marked this pull request as ready for review July 10, 2026 07:58
@anisaoshafi
anisaoshafi requested a review from a team as a code owner July 10, 2026 07:58
@gtsiolis

Copy link
Copy Markdown
Member

Commenting for reach as this would be nice to merge before Thursday's release.

@gtsiolis
gtsiolis force-pushed the devx-983-emulator-selection-is-not-triggered-on-a-new-device-install branch from 09f2e7a to 4ead93d Compare July 14, 2026 11:52
@gtsiolis

gtsiolis commented Jul 14, 2026

Copy link
Copy Markdown
Member

Heads-up: Rebased and resolved conflicts.

Copy link
Copy Markdown
Collaborator Author

Thanks @gtsiolis. Feel free to review it and we can merge it if it looks good to you 🙌

@anisaoshafi
anisaoshafi requested a review from skyrpex July 20, 2026 12:02
@anisaoshafi
anisaoshafi force-pushed the devx-983-emulator-selection-is-not-triggered-on-a-new-device-install branch from 4ead93d to 3feaa53 Compare July 20, 2026 15:52

@gtsiolis gtsiolis left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed the behavior. Left two comments.

Comment thread CLAUDE.md

Created automatically on first run with defaults. Supports emulator types: `aws`, `snowflake`, and `azure`.

`initConfigDeferCreate` (wrapping `config.Load`) only ever *reads* config — it never writes the default config.toml to disk. That's deliberate: the emulator-selection prompt (`container.SelectEmulator`) is shown only when `firstRun` is still true, and only bare `lstk` and `lstk start` wire it in (`NeedsEmulatorSelection: firstRun` in `startEmulator`). If some other command eagerly persisted a default (`type = "aws"`) config on its own first run, the selector would never get a chance to show on a genuinely fresh install — every command must use `initConfigDeferCreate`, never a hypothetical eager-create variant, so that only a real emulator start (interactive selection, or the non-interactive default-emulator path) ever writes the file. `EnsureCreated()` therefore has exactly two legitimate callers: the non-interactive first-run path in `cmd/root.go` (after a successful default start) and `container.SelectEmulator` (after the user picks one).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue(non-blocking): This says two callers, but there are three: cmd/root.go, container.SelectEmulator, and container.ApplyEmulatorType (the --type path from #381, already on main), right?

Comment thread cmd/aws.go
}
}
return initConfig(nil)(cmd, args)
return initConfigDeferCreate(nil)(cmd, args)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: L51 above has a stale reference to the removed function, right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs: skip Pull request does not require documentation changes semver: patch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants