diff --git a/hermes_cli/update_cmd_windows.py b/hermes_cli/update_cmd_windows.py index 2c36161482..7e8a9fdc12 100644 --- a/hermes_cli/update_cmd_windows.py +++ b/hermes_cli/update_cmd_windows.py @@ -956,7 +956,7 @@ def _pause_windows_gateways_for_update() -> dict | None: token = _pause_windows_gateway_services(service_gateways, token, profiles, unmapped) except RuntimeError as exc: if "rollback failures" not in str(exc): # everything stopped was restarted in-line - pause_record.discharge(intended) + pause_record.abandon_pause(intended, adopted) raise return pause_record.finish_pause(token, intended, adopted) diff --git a/hermes_cli/update_pause_record.py b/hermes_cli/update_pause_record.py index 3f0e348034..07ed56a2dc 100644 --- a/hermes_cli/update_pause_record.py +++ b/hermes_cli/update_pause_record.py @@ -317,6 +317,16 @@ def finish_pause(token: dict, intended: dict, adopted: dict | None) -> dict: return token +def abandon_pause(intended: dict, adopted: dict | None) -> None: + """This run's own stops were rolled back in-line: only an adopted orphan set is still owed, + and it goes back on disk unowned for the next launch.""" + if adopted is None: + discharge(intended) + return + carried = {key: intended[key] for key in ("pause_id", "pre_sha", "dirty_at_pause") if key in intended} + write({**adopted, **carried}, owner=UNOWNED) + + def drop_never_stopped(token: dict) -> dict: """Entries whose recorded process is still the same live incarnation were never stopped.""" alive = {pid for pid, ct in (token.get("identities") or {}).items()