Casey
790e1eb6bd
fix(update): pause SCM-supervised Windows gateway services before venv mutation
...
On Windows installs where the gateway runs as an SCM service (WinSW,
NSSM, sc.exe create), the existing pause machinery kills the gateway
process directly — and the service wrapper's failure ladder resurrects
it within seconds, re-taking the venv file locks mid-update. The update
then dies partway through dependency sync with access-denied errors.
This extends _pause_windows_gateways_for_update() to detect when a
gateway's process tree is owned by a running SCM service, and to stop
the SERVICE through sc.exe instead of killing the child:
- gateway/status.py: expose service-ownership discovery for gateway
runtimes (find_windows_gateway_services maps validated gateway PIDs
through process ancestry to running SCM service PIDs, with
create-time identity checks against PID reuse).
- hermes_cli/update_cmd.py: stop verified services via sc.exe before
venv mutation and restart them afterward. Stops wait for a stable
SCM 'stopped' state AND for the original descendant processes to
exit (service 'Stopped' is not proof the child released its
handles). Failure to prove ownership, stop a service, or restart it
fails closed; rollback restores attempted services, and rollback
failures are surfaced rather than swallowed.
- Fail-closed throughout: unreadable identities, ambiguous ancestry,
or a service that will not reach a stable state abort the update
before any file mutation.
Complements #37039 (gateway-only concurrent instances no longer abort):
that fix lets the update proceed past the gate; this one makes the
pause actually stick when the gateway is service-supervised.
Note: tests/gateway/test_status.py::TestReadProcessCmdlinePsFallback::
test_ps_fallback_when_proc_unavailable fails on Windows on current main
before this change as well (POSIX ps fallback asserted on a platform
without it); all other touched suites pass (155 passed, 5 skipped).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-26 16:45:31 -07:00
..
2026-08-24 16:58:51 +10:00
2026-08-12 18:52:08 -07:00
2026-08-18 20:42:06 -04:00
2026-07-22 16:51:01 -04:00
2026-08-25 16:24:19 -07:00
2026-08-26 09:54:31 -07:00
2026-08-21 05:16:27 -07:00
2026-08-23 01:47:26 -07:00
2026-08-23 01:47:26 -07:00
2026-08-24 03:20:37 -07:00
2026-08-16 02:03:22 -07:00
2026-08-20 03:05:46 -07:00
2026-08-25 01:34:56 +05:30
2026-08-15 00:33:01 -07:00
2026-08-02 14:55:32 +05:30
2026-08-08 23:56:46 -07:00
2026-07-26 21:13:03 -07:00
2026-08-12 16:26:55 -07:00
2026-08-07 08:57:39 -07:00
2026-08-07 08:57:39 -07:00
2026-08-23 20:00:53 -07:00
2026-08-25 10:55:53 +10:00
2026-07-11 12:28:55 +05:30
2026-08-26 06:28:43 -07:00
2026-07-31 21:21:20 -07:00
2026-08-26 16:45:22 -07:00
2026-08-07 17:45:06 +05:30
2026-07-29 23:16:18 -07:00
2026-08-20 21:54:25 -07:00
2026-08-19 19:34:36 -07:00
2026-08-02 20:21:59 -07:00
2026-08-08 15:10:35 +05:30
2026-08-16 06:32:08 -07:00
2026-08-22 03:59:28 +05:30
2026-07-29 11:53:39 -07:00
2026-08-26 06:28:43 -07:00
2026-08-24 15:42:58 +05:30
2026-07-29 08:42:16 -07:00
2026-08-23 02:14:35 -07:00
2026-07-01 23:51:54 +05:30
2026-08-23 17:38:38 -07:00
2026-06-01 19:51:03 -07:00
2026-08-26 07:16:04 -07:00
2026-08-25 02:45:10 -07:00
2026-08-26 09:54:31 -07:00
2026-08-24 00:34:26 -07:00
2026-08-01 10:52:34 -07:00
2026-07-22 21:17:21 -07:00
2026-08-19 19:22:48 -07:00
2026-07-19 03:02:21 -07:00
2026-08-25 14:02:40 -07:00
2026-08-23 21:12:20 -07:00
2026-08-24 15:45:52 +05:30
2026-08-26 08:39:04 -07:00
2026-06-27 21:30:37 -07:00
2026-08-21 23:01:30 -07:00
2026-06-24 18:56:26 -07:00
2026-08-13 02:38:28 -07:00
2026-06-30 17:29:23 -07:00
2026-07-07 04:09:35 -07:00
2026-08-13 02:38:28 -07:00
2026-08-26 06:50:53 -07:00
2026-08-19 16:16:37 -07:00
2026-08-15 13:28:14 -07:00
2026-07-26 23:41:54 -07:00
2026-07-31 22:35:26 -07:00
2026-07-26 18:10:34 -07:00
2026-08-20 02:06:05 -07:00
2026-08-21 14:13:28 +10:00
2026-08-16 06:26:12 -07:00
2026-08-26 16:45:31 -07:00
2026-08-26 16:45:22 -07:00
2026-08-21 02:48:14 +08:00
2026-08-05 11:47:05 -04:00
2026-08-18 16:08:29 -07:00
2026-08-13 23:10:16 +05:30
2026-08-26 11:41:04 -07:00
2026-07-26 17:46:29 -07:00
2026-07-15 07:39:42 -07:00
2026-08-22 22:00:19 -07:00
2026-07-01 16:25:48 -05:00
2026-08-17 14:16:21 +05:30
2026-07-15 07:39:17 -07:00
2026-08-10 12:43:46 -07:00
2026-07-15 07:39:17 -07:00
2026-08-10 12:43:46 -07:00
2026-08-17 14:16:21 +05:30
2026-07-27 21:10:51 -07:00
2026-08-21 13:41:39 -07:00
2026-07-05 13:42:46 -07:00
2026-08-18 16:08:29 -07:00
2026-08-26 16:45:26 -07:00
2026-06-19 07:46:33 -07:00
2026-08-26 04:14:16 -07:00
2026-08-25 04:21:37 -07:00
2026-08-25 04:21:37 -07:00
2026-05-26 12:48:14 -07:00
2026-06-21 19:05:27 -07:00
2026-08-07 09:44:21 -07:00
2026-08-02 22:44:38 +05:30
2026-06-22 19:16:47 -05:00
2026-08-26 15:48:39 -07:00
2026-07-29 11:53:39 -07:00
2026-08-12 21:50:35 -07:00
2026-08-12 21:50:35 -07:00
2026-08-01 14:52:18 -07:00
2026-08-14 01:31:31 -07:00
2026-08-14 01:06:13 -07:00
2026-08-20 20:21:12 -07:00
2026-08-21 14:38:19 -07:00
2026-08-14 01:06:13 -07:00
2026-08-21 00:24:32 -07:00
2026-08-21 04:39:31 -07:00
2026-08-26 07:52:56 -07:00
2026-08-07 19:47:40 +05:30
2026-06-21 22:43:48 -07:00
2026-07-29 10:13:50 -07:00
2026-08-22 21:36:55 -07:00
2026-08-14 21:35:30 -07:00
2026-07-29 10:14:11 -07:00
2026-08-23 03:56:37 -07:00
2026-07-29 17:51:40 -05:00
2026-07-02 05:10:31 -07:00
2026-08-09 10:33:58 -07:00
2026-08-15 00:32:44 -07:00
2026-08-12 20:10:51 -07:00
2026-05-23 01:07:01 -04:00
2026-08-12 20:10:51 -07:00
2026-08-12 18:39:22 -07:00
2026-08-12 18:52:08 -07:00
2026-08-12 19:56:44 -07:00
2026-08-19 19:34:36 -07:00
2026-08-24 20:11:18 -07:00
2026-07-28 22:42:19 -07:00
2026-08-26 07:57:04 -07:00
2026-07-15 07:39:17 -07:00
2026-08-06 05:00:17 +05:30
2026-08-24 20:25:10 -07:00
2026-06-25 16:40:26 -05:00
2026-08-15 00:33:11 -07:00
2026-08-16 06:24:56 -07:00
2026-07-31 21:21:16 -07:00
2026-08-21 00:24:32 -07:00
2026-08-21 00:24:32 -07:00
2026-07-29 11:53:39 -07:00
2026-05-28 02:36:09 -07:00
2026-08-20 12:16:20 +05:30
2026-07-29 10:14:11 -07:00
2026-08-14 13:51:26 -07:00
2026-06-27 15:59:00 -07:00
2026-08-19 08:52:03 -07:00
2026-08-10 17:02:56 -07:00
2026-07-29 17:13:48 +05:30
2026-08-23 18:25:35 -07:00
2026-06-17 01:04:26 +08:00
2026-08-15 01:55:22 -07:00
2026-05-29 13:24:12 -07:00
2026-07-29 11:53:39 -07:00
2026-08-01 10:47:20 -07:00
2026-08-08 12:32:23 -07:00
2026-08-14 21:07:21 -07:00
2026-08-15 02:04:49 -07:00
2026-07-07 12:36:41 -07:00
2026-08-15 02:04:49 -07:00
2026-07-26 19:30:21 -07:00
2026-07-31 22:36:55 -07:00
2026-08-15 00:31:37 -07:00
2026-07-17 04:53:38 -07:00
2026-08-12 19:43:47 -07:00
2026-08-20 02:06:05 -07:00
2026-07-26 08:43:24 -07:00
2026-08-19 19:34:36 -07:00
2026-08-26 06:26:07 -07:00
2026-08-08 15:10:35 +05:30
2026-08-24 20:25:10 -07:00
2026-08-19 19:34:36 -07:00
2026-08-05 11:59:33 +05:30
2026-07-21 21:00:43 -05:00
2026-07-29 09:33:48 -07:00
2026-08-18 02:27:18 -07:00
2026-07-24 16:00:03 -07:00
2026-07-31 23:18:12 -07:00
2026-06-25 16:40:26 -05:00
2026-08-24 20:10:44 -07:00
2026-08-16 01:54:35 -07:00
2026-05-28 22:26:25 -07:00
2026-08-07 17:45:06 +05:30
2026-06-05 03:20:10 -07:00
2026-08-15 18:15:18 -07:00
2026-08-02 16:16:36 -07:00
2026-08-20 04:08:57 -07:00
2026-08-25 21:59:52 -07:00
2026-07-29 11:53:39 -07:00
2026-08-22 13:39:04 -04:00
2026-08-26 16:45:31 -07:00
2026-08-26 11:41:04 -07:00
2026-08-26 16:45:31 -07:00
2026-07-31 22:28:46 -07:00
2026-08-26 16:45:26 -07:00
2026-08-26 16:45:26 -07:00
2026-08-14 16:43:37 -07:00
2026-07-29 19:48:37 -07:00
2026-08-07 10:11:05 -07:00
2026-08-15 01:05:39 -07:00
2026-07-29 16:21:54 -07:00
2026-08-16 20:53:44 -07:00
2026-08-26 00:21:29 -07:00
2026-08-26 15:51:22 -07:00
2026-07-24 11:45:57 -07:00
2026-07-29 10:14:11 -07:00
2026-08-01 14:30:16 -07:00
2026-08-19 23:55:20 -07:00
2026-08-19 23:55:20 -07:00
2026-06-09 23:21:14 -07:00
2026-08-06 05:00:17 +05:30