fix: emulator selection not prompting on fresh install#380
Open
anisaoshafi wants to merge 2 commits into
Open
Conversation
anisaoshafi
marked this pull request as ready for review
July 10, 2026 07:58
Member
|
Commenting for reach as this would be nice to merge before Thursday's release. |
gtsiolis
force-pushed
the
devx-983-emulator-selection-is-not-triggered-on-a-new-device-install
branch
from
July 14, 2026 11:52
09f2e7a to
4ead93d
Compare
Member
|
Heads-up: Rebased and resolved conflicts. |
Collaborator
Author
|
Thanks @gtsiolis. Feel free to review it and we can merge it if it looks good to you 🙌 |
anisaoshafi
force-pushed
the
devx-983-emulator-selection-is-not-triggered-on-a-new-device-install
branch
from
July 20, 2026 15:52
4ead93d to
3feaa53
Compare
gtsiolis
approved these changes
Jul 20, 2026
gtsiolis
left a comment
Member
There was a problem hiding this comment.
Confirmed the behavior. Left two comments.
|
|
||
| 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). |
Member
There was a problem hiding this comment.
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?
| } | ||
| } | ||
| return initConfig(nil)(cmd, args) | ||
| return initConfigDeferCreate(nil)(cmd, args) |
Member
There was a problem hiding this comment.
suggestion: L51 above has a stale reference to the removed function, right?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 toinitConfigDeferCreate(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.