Rework per hermes-sweeper review (keep_open, salvageability=medium):
- Capture moves out of the render body into the session-switch layout-effect
cleanup, so only committed switches persist state (no uncommitted render
can write localStorage).
- Live state is fed by both scroll events and a ResizeObserver on the
content element, so distance-from-bottom stays fresh under async
relayout that changes height without a scroll event (the staleness gap
#70478's own review threads flagged).
- State is distance-from-bottom (or sticky-bottom), not raw scrollTop:
the render-budget backfill prepends older turns and main anchors by
distance-from-bottom, so an absolute offset no longer identifies the
same reading location after the height change.
- Restore integrates with main's hasGroups/settle/anchor lifecycle: the
settle loop re-applies the remembered target, defers on a clamped offset
(content still arriving), hands back locked only for sticky-bottom, and
leaves mid-read sessions escaped at their offset.
- anchorBeforePrepend no longer records 0 mid-load, which would clobber a
restored offset once the backfill lands; the settle loop owns the target
every frame until settled.
- Storage is scoped per profile with the session.ts .profile.<encoded>
key pattern (no cross-profile bleed, #67709 pattern) and LRU-capped at
120 sessions per profile.
- Regression tests: state classification, target math, profile isolation,
LRU eviction, corrupt/invalid payload handling.
Related to #45562 (partial; no automatic closure)
(cherry picked from commit 1d79bef93f63d7b190b471bf652b5109b4288a8e)
Adapt the config-only portion of #104347; omit its environment flag and unrelated docs. Explicit update commands remain independent.
Co-authored-by: Rohith Pariki <rohithpariki@gmail.com>
Slim adaptation of #83772 to the current schema and failure-hint table.
Generated helpers are module exports on every execution path, not globals.
Correct schema, recovery hints and CLI tip rather than injecting names or
changing the execution boundary. Two registry-driven invariants reproduce
both misleading instructions on main and execute the corrected guidance.
Additional tool fix discovered during campaign #104904.
Original diagnosis and correction: @yuzilongleif-collab (#83772).
Co-authored-by: yuzilongleif-collab <235949691+yuzilongleif-collab@users.noreply.github.com>
Discover systemd targets before stopping old processes, restart even when
there are no gateway PIDs, and require successful scope listings plus active
verification. Pending launchd recovery also retains failures for inaccessible
listings and installed jobs without supervision. Keep existing PID cleanup
intact but before recovery so it cannot kill freshly verified workers.
Slim redo informed by #104274, #104283, and #104285.
Co-authored-by: fangliquanflq <fangliquan@qq.com>
Co-authored-by: liuhao1024 <sunsky.lau@gmail.com>
Preserve producer descriptions without identity wrappers and size the existing themed tooltip to the viewport. Replace skipped and structural tests with two behavioral invariants. Native Electron before/after hover, click and keyboard verification passed; campaign suite validation remains queued.
Use mktemp -d before launching the optional UI; skip UI if allocation fails. Native Chrome collision and allocation-failure probes preserve preexisting directories.
Track the path actually launched, preserving the no-UI case and unrelated profiles. Adapted the ownership approach from #104362.
Co-authored-by: liuhao1024 <sunsky.lau@gmail.com>
Deletes the temporary --user-data-dir used by the update UI shim when the browser process is shut down, preventing ~100MB leaks per update. Fixes issue #104350.
Salvage #104301 error presentation and translations. Keep drill-in outcome local to its mounted scope, ignore stale responses, retain existing rows, and show retry even when cached lanes exist.
Co-authored-by: elvindu <dumanxiang@qq.com>