Safe mode: one run with only the shell working (the app menu, --safe-mode, Shift at launch on Windows)
Host: `safe.rs` is a flag in this process's memory, never written to disk, so the next normal start is back to the owner's setup. While it is on a site tab gets the tab bridge and nothing of the app's page layers: its document-start scripts are `SiteHooks::safe_init_scripts` (default: the bridge alone) instead of `init_scripts`; `site_page_loaded`, `tab_placed` and `tab_background` are not called; `page_scripts` is empty; `eval_in_site_tabs` does nothing. So no page runtime, plugins, theme, custom CSS, feature flags, fixes, hotfix data or words reach a page: the site runs as in a browser, and only the shell is the app's. It starts from the launch argument `--safe-mode` (for when the interface itself is broken), from Shift held while the app starts (Windows), or from the shell: `safe_mode_get` / `safe_mode_set {on}` (shell-only), where a switch rebuilds every tab webview (profiles marked stale, `tabs-rebuild` asks the shell for its layout) so document-start scripts change too. Tests: the argument, the flag, and that app.rs and host.rs gate every layer.
Frame: the app menu's "Restart in safe mode…" says what it does before anything reloads; while on, the titlebar shows an amber "Safe mode | Leave" chip (one click leaves) and the row reads "Leave safe mode"; the chrome drops its theme (and pane themes) and takes it back on leaving, without touching the first-frame cache. `features.safeMode` (on by default).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d24b1d2234
commit
ca46210e53
19 changed files with 342 additions and 20 deletions
|
|
@ -147,11 +147,11 @@ export type ShellSite = {
|
|||
/**
|
||||
* Native features the app serves (waybetter-host modules it wires up): workspaces (`workspaces_*`),
|
||||
* encrypted folder sync (`sync_*`), developer mode (`dev_*`), plugin palette commands
|
||||
* (`tab_run_command`), page zoom and find in page (`tab_zoom`, `tab_find`: the host's own); and what its panel has that the
|
||||
* (`tab_run_command`), page zoom, find in page and safe mode (`tab_zoom`, `tab_find`, `safe_mode_*`: the host's own); and what its panel has that the
|
||||
* app menu links to: the Store (`PanelSite.store`) and the updater (`PanelSite.updates`). Each is
|
||||
* on unless set to false; off, the frame shows nothing of it.
|
||||
*/
|
||||
features?: { workspaces?: boolean; sync?: boolean; developer?: boolean; pluginCommands?: boolean; zoom?: boolean; find?: boolean; store?: boolean; updates?: boolean };
|
||||
features?: { workspaces?: boolean; sync?: boolean; developer?: boolean; pluginCommands?: boolean; zoom?: boolean; find?: boolean; safeMode?: boolean; store?: boolean; updates?: boolean };
|
||||
/**
|
||||
* The app menu (the titlebar's "Settings and more", Alt+F / F10): its rows in order (built-in
|
||||
* ones by name, the app's own as objects) and what the Language and Mode submenus need. Omit for
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue