You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(update): stage auto-updates instead of installing mid-session
On Windows the silent startup auto-updater launched the Inno Setup
installer inline with /CLOSEAPPLICATIONS, letting its Restart Manager
force-close the running pythinker.exe and kill the active session.
Redesign the update lifecycle around a typed UpdateIntent
(CHECK / STAGE_FOR_RESTART / INSTALL / INSTALL_AND_EXIT) so background
callers are type-unable to request an in-session install:
- Background startup updates download, sha256-verify, and stage the
Windows installer with an atomically written manifest; they can no
longer spawn installers, run package-manager upgrades, or raise
SystemExit (contained in _run_silent_update_job; the done-callback
stays as defense in depth).
- A pre-session bootstrap in the CLI entry applies a verified staged
update before any config/session/runtime construction and fails
closed (discard + continue) on any invalid or stale stage; apply
re-verifies the digest and version and guards against a concurrently
superseded manifest.
- In-shell /update stages on Windows (restart-to-apply notice); the
standalone `pythinker update` CLI keeps its install-and-exit
behavior as an explicit foreground operation.
- config auto_update becomes a policy enum off|notify|download|
apply_on_exit (default download) with legacy bool compatibility
(true->download, false->notify) including PYTHINKER_AUTO_UPDATE;
PYTHINKER_CLI_NO_AUTO_UPDATE stays the highest-precedence kill
switch. /update auto, the settings panel, and pythinker info are
mode-aware (info JSON auto_update_config is now a string).
- The post-install smoke check is skipped for the Windows staged path:
it would run the old executable and falsely certify the stage, which
is instead digest-verified at staging and again at apply.
0 commit comments