Improve launcher profile launch error states#20
Open
anhtahaylove wants to merge 1 commit into
Open
Conversation
chovizzz
added a commit
to chovizzz/ShardBrowser
that referenced
this pull request
Jul 9, 2026
…roxyShard#20) Final Med/Low bundle from the round-2 Codex backlog. ① UI save no longer wipes the remote checkout binding (lib.rs) remote_env_id / remote_lock_token / remote_base_version / remote_pending_push are serde(default) fields the profile editor doesn't round-trip, so a generic save reset them to None/false — silently unlinking a checked-out profile, dropping a pending push, and stranding the server lock until lease expiry. save_profile_core now re-reads the persisted values from disk and carries them over any save of an existing profile; these are owned by the sync pipeline, not the editor. (remote_open builds StoredProfile directly and is unaffected.) ② Atomic credential writes on Windows (store.rs) write_private's non-unix branch was a bare fs::write — a crash mid-write could truncate an existing secret file. Now mirrors the unix path: sibling temp + write + sync_all + rename-over (MoveFileEx REPLACE_EXISTING, atomic on-volume); temp cleaned up on error. ③ gc_snapshots deletes rows before blobs (server/locks.rs) Removing blob files before the DB rows could leave rows pointing at missing blobs — download can't heal that and hard-errors. Delete the rows first (skip blob removal entirely if that fails); a crash now leaves only orphan blobs, which the orphan GC reclaims. ④ Export strips the checkout secret (App.tsx) bulkExport copied the full profile _meta — including the live remote_lock_token (holder can pull the env's plaintext cookies + secrets) — into the clipboard. Sanitize the four remote_* fields on the way out so the secret never lands in exported JSON. Import already strips them on the way in. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Summary
Launch failedstatus with aDetailsaction for the stored error messageWhy
Launcher failures can happen during runtime install checks, UDP probe, geo resolution, Widevine pre-warm, or browser spawn. A toast disappears quickly, and bulk launch previously hid failures entirely. Keeping the error on the affected row makes the next action obvious without changing launcher/backend behavior.
Test
npm ci --ignore-scriptsnpm run buildgit diff --check -- src/App.tsx src/App.cssThis PR only changes Launcher React/CSS UX. It does not change browser engine behavior, fingerprint behavior, profile isolation, or automation API/MCP contracts.