docs: mark profile isolation, settings persistence, and permission trim done

This commit is contained in:
2026-07-10 16:12:51 -04:00
parent 2cdad7461d
commit e4c0f57316
+19 -15
View File
@@ -71,6 +71,17 @@ Real and verified:
manual Run Now; per-(space,profile) active-tab memory survives manual Run Now; per-(space,profile) active-tab memory survives
background-tab closes; shortcuts bind only the current platform's keys; background-tab closes; shortcuts bind only the current platform's keys;
sync-owner publish is first-claim-wins on every platform. sync-owner publish is first-claim-wins on every platform.
- Profile isolation: the sidebar (tabs + favorites) is scoped to the
active profile like every other surface, so a private profile created
in-window (`>new-private-profile`) never leaks tabs into a standard one
(`state.rs::visible_tabs`/`favorites`; PRD §8.11).
- Settings persistence: scalar settings (search engine, new-tab
destination, favorite limit, appearance, history policy, the 9 sync
toggles) ride `local-state.json` and survive a restart — a paused sync
toggle stays paused (`local_state.rs::LocalSettings`).
- Site permissions: the per-site UI offers only the 5 features Servo
actually enforces (`SitePermissionFeature::enforced()`), guarded against
drift by `ely_servo_host`'s `enforced_features_match_the_servo_mapping`.
Deferred deliberately (do NOT fake; ship with their subsystem): Deferred deliberately (do NOT fake; ship with their subsystem):
- Updates settings page — returns with a real updater. - Updates settings page — returns with a real updater.
@@ -90,27 +101,20 @@ file:line evidence lives in the 2026-07-10 bug-sweep report):
idle devices churn (byte-exact AlreadyCurrent + Vec-order serialization). idle devices churn (byte-exact AlreadyCurrent + Vec-order serialization).
Needs record-level merge + tombstones + Conflict Center (PRD §9). Do Needs record-level merge + tombstones + Conflict Center (PRD §9). Do
not "quick-fix"; fix before any multi-device testing. not "quick-fix"; fix before any multi-device testing.
2. Privacy: private-profile tabs are visible in the standard sidebar and 2. Session fidelity in `local-state.json` is partial: scalar settings and
Ctrl+Tab cycles into them (`state.rs` visible_tabs filters by space the syncable entities persist, but back/forward stacks, splits, tab
only; `tab_selection.rs`) — violates PRD §8.11. groups, archived tabs, and downloads do not yet — extend the local-state
3. Settings scalars are not persisted (search engine, new-tab document (its `settings`/`body` split is built to grow).
destination, appearance, policies, the 9 sync toggles — a paused sync 3. Engine/webview: redirect or pushState leaves tab state "loading"
toggle silently re-enables on restart, privacy-relevant) and session
fidelity is partial (stacks, splits, groups, archived tabs, downloads
not yet in `local-state.json`; extend the local-state document).
4. Site permissions: only 5 of 16 features are enforced through Servo
(`runtime_permissions.rs:153`); the other 11 rows are placebo toggles —
trim the UI to enforced features until the engine covers them.
5. Engine/webview: redirect or pushState leaves tab state "loading"
forever and pins stale pixels (`ely_servo_host/src/runtime_webview.rs` forever and pins stale pixels (`ely_servo_host/src/runtime_webview.rs`
requested-vs-current URL reconciliation); persistent-profile sidecars requested-vs-current URL reconciliation); persistent-profile sidecars
are never reclaimed while the app runs; sidecar stderr is nulled; are never reclaimed while the app runs; sidecar stderr is nulled;
final URLs >32KiB cause a reload loop. final URLs >32KiB cause a reload loop.
6. Downloads engine: pause/resume/cancel/retry are UI-only, progress 4. Downloads engine: pause/resume/cancel/retry are UI-only, progress
never updates, checksum runs on the UI thread, open/reveal hardcode never updates, checksum runs on the UI thread, open/reveal hardcode
`/usr/bin/open`; `ely://auth/callback` exchange and save-page commands `/usr/bin/open`; `ely://auth/callback` exchange and save-page commands
are unimplemented. are unimplemented.
7. Smaller confirmed papercuts: several synced mutations never schedule 5. Smaller confirmed papercuts: several synced mutations never schedule
an upload (splits, group toggles, deletions), trash_space leaks split an upload (splits, group toggles, deletions), trash_space leaks split
layouts, reload of the current URL is a no-op (crashed tabs can't layouts, reload of the current URL is a no-op (crashed tabs can't
reload in place), mid-Vec tab inserts skip sort normalization, Esc reload in place), mid-Vec tab inserts skip sort normalization, Esc
@@ -119,7 +123,7 @@ file:line evidence lives in the 2026-07-10 bug-sweep report):
vault rotation silently skips devices without wrapping keys, vault rotation silently skips devices without wrapping keys,
SyncStatus counters are hardcoded, second in-process Servo host panics SyncStatus counters are hardcoded, second in-process Servo host panics
(upstream OnceLock). (upstream OnceLock).
8. Integration tests litter the real data root with `profile_*` dirs 6. Integration tests litter the real data root with `profile_*` dirs
(`~/Library/Application Support/com.elydora.ELY-Browser/profiles/`); (`~/Library/Application Support/com.elydora.ELY-Browser/profiles/`);
tests should take an overridable data root. tests should take an overridable data root.