From 461f2239b759a6cbef303229f9b82632bd489516 Mon Sep 17 00:00:00 2001 From: xiami762 <> Date: Wed, 22 Jul 2026 19:44:40 +0800 Subject: [PATCH 1/2] fix(updater): stop legacy supervisor before parent wait --- flocks/updater/restart_handoff.py | 17 +++++++++-------- tests/updater/test_restart_handoff.py | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/flocks/updater/restart_handoff.py b/flocks/updater/restart_handoff.py index f763d8970..1ed5fb050 100644 --- a/flocks/updater/restart_handoff.py +++ b/flocks/updater/restart_handoff.py @@ -591,13 +591,8 @@ def run(argv: Sequence[str] | None = None) -> int: f"frontend={args.frontend_host}:{args.frontend_port}" ) legacy_daemon_pid = _legacy_supervisor_pid(args) if args.prepare_handover else None - - if args.parent_pid is not None and not _wait_for_parent_exit(args.parent_pid): - _record_handoff_log(f"parent_exit_timeout parent_pid={args.parent_pid}") - _cleanup_dir(args.cleanup_dir) - return 1 - supervisor_stopped = False + if args.prepare_handover: supervisor_stopped = _stop_supervisor_before_restart( daemon_pid=legacy_daemon_pid, @@ -609,7 +604,13 @@ def run(argv: Sequence[str] | None = None) -> int: _record_handoff_log("legacy_handover_stop_timeout") _cleanup_dir(args.cleanup_dir) return 1 - elif args.pro_wheel_path or args.pro_bundle_manifest_path: + + if args.parent_pid is not None and not _wait_for_parent_exit(args.parent_pid): + _record_handoff_log(f"parent_exit_timeout parent_pid={args.parent_pid}") + _cleanup_dir(args.cleanup_dir) + return 1 + + if not args.prepare_handover and (args.pro_wheel_path or args.pro_bundle_manifest_path): supervisor_stopped = _stop_supervisor_before_restart( backend_port=args.backend_port, service_ports=(args.frontend_port,), @@ -622,7 +623,7 @@ def run(argv: Sequence[str] | None = None) -> int: _record_handoff_log(f"backend_port_unavailable port={args.backend_port}") _cleanup_dir(args.cleanup_dir) return 1 - elif not _ensure_backend_port_free(args.backend_port): + elif not args.prepare_handover and not _ensure_backend_port_free(args.backend_port): _record_handoff_log(f"backend_port_unavailable port={args.backend_port}") _cleanup_dir(args.cleanup_dir) return 1 diff --git a/tests/updater/test_restart_handoff.py b/tests/updater/test_restart_handoff.py index b044d3baa..fd7058753 100644 --- a/tests/updater/test_restart_handoff.py +++ b/tests/updater/test_restart_handoff.py @@ -736,11 +736,11 @@ def test_v2026_7_15_upgrade_handoff_stops_before_tasks_and_restarts( assert restart_handoff.run(args) == 0 assert events == [ - "wait-parent:1234", ( "stop-supervisor:{'daemon_pid': 2468, 'backend_port': 5173, " "'service_ports': (5173,), 'force_daemon_stop': True}" ), + "wait-parent:1234", "install", "cleanup-handover", f"spawn:{restart_argv}:{tmp_path}:True", From d7240e591e386ad2225383d50fcabf100f176cdc Mon Sep 17 00:00:00 2001 From: xiami762 <> Date: Wed, 22 Jul 2026 20:09:16 +0800 Subject: [PATCH 2/2] chore: bump version to v2026.7.22.1 --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5c58a57f4..f355f8608 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "flocks" -version = "v2026.7.22" +version = "v2026.7.22.1" description = "AI-Native SecOps platform with multi-agent collaboration" authors = [ {name = "Flocks Team", email = "team@example.com"} diff --git a/uv.lock b/uv.lock index a5584aa89..6b9fa8690 100644 --- a/uv.lock +++ b/uv.lock @@ -553,7 +553,7 @@ wheels = [ [[package]] name = "flocks" -version = "2026.7.22" +version = "2026.7.22.1" source = { editable = "." } dependencies = [ { name = "aiofiles" },