Skip to content

Improve launcher profile launch error states#20

Open
anhtahaylove wants to merge 1 commit into
ProxyShard:mainfrom
anhtahaylove:codex/launcher-status-errors
Open

Improve launcher profile launch error states#20
anhtahaylove wants to merge 1 commit into
ProxyShard:mainfrom
anhtahaylove:codex/launcher-status-errors

Conversation

@anhtahaylove

Copy link
Copy Markdown

Summary

  • keep per-profile launch failures visible in the Status column instead of only showing a transient toast
  • add a row-level Launch failed status with a Details action for the stored error message
  • clear stored launch errors once the profile is observed running again
  • make bulk launch surface failures instead of swallowing errors silently

Why

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-scripts
  • npm run build
  • git diff --check -- src/App.tsx src/App.css

This PR only changes Launcher React/CSS UX. It does not change browser engine behavior, fingerprint behavior, profile isolation, or automation API/MCP contracts.

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant