running-process 4.6.2__tar.gz → 4.6.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {running_process-4.6.2 → running_process-4.6.4}/Cargo.lock +7 -7
- {running_process-4.6.2 → running_process-4.6.4}/Cargo.toml +1 -1
- {running_process-4.6.2 → running_process-4.6.4}/PKG-INFO +31 -1
- {running_process-4.6.2 → running_process-4.6.4}/README.md +30 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/build.rs +3 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/README.md +1 -1
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/running-process-broker-v2.rs +198 -30
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/manifest.rs +4 -1
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/containment.rs +100 -5
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/lib.rs +8 -4
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/originator.rs +73 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/mod.rs +6 -2
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/spawn.rs +112 -6
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/spawn_imp_unix.rs +39 -18
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/spawn_imp_windows.rs +142 -29
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/windows.rs +7 -2
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker_v2_scaffold_accepts_connection.rs +169 -31
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/containment_test.rs +143 -6
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_tui_repaint_test.rs +65 -7
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/Cargo.toml +1 -1
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/daemon_client.rs +2 -1
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/registry.rs +3 -1
- {running_process-4.6.2 → running_process-4.6.4}/pyproject.toml +1 -1
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/__init__.py +1 -1
- {running_process-4.6.2 → running_process-4.6.4}/LICENSE +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/Cargo.toml +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/README.md +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/examples/handoff_rollout_evidence.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v1/broker_v1_admin.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v1/broker_v1_envelope.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v1/broker_v1_manifest.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v1/broker_v1_service_def.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v1/buf.yaml +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v2/broker_v2_control.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v2/broker_v2_manifest.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/broker_v2/broker_v2_service_def.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/proto/daemon.proto +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/README.md +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/daemon.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/running-process-broker-v1.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/running-process-cleanup.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/runpm.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/bin/trampoline.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/boot_autostart/linux.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/boot_autostart/macos.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/boot_autostart/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/boot_autostart/windows.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/README.md +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/adopt.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_handle.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lib/accept_handed_off.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lib/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lib/wire.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lifecycle/identity.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lifecycle/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lifecycle/probe.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lifecycle/probe_async.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_lifecycle/verify_pid.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_sdk/frame_client.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_sdk/frame_client_async.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_sdk/identity_file.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_sdk/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/backend_sdk/mux.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/broker_http_port.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/broker_http_server.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/brokered_backend.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/builders.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/capabilities.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/client.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/client_v2.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/doctor.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/fs_health.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/get_http_endpoint_dispatch.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/host_identity.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/http_endpoint_registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/crash_dump.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/names.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/names_v2.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/privilege.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/process_tree.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/lifecycle/sid.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol/frame_ext.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol/framing.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol/registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol/validate.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/README.md +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/backend_handle.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/client_compat.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/io.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/loader.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/manifest_io.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/protocol_v2/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/secure_dir.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/admin.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/backend_endpoint_allocator.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/backend_launcher.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/backend_registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/broadcast.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/connection.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/control_socket.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/deadline_stream.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/fd_pressure.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/ack.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/fallback.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/handoff_token.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/latency.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/orchestrate.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/orchestrate_unix.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/pending.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/unix.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/windows.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff/wire.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/handoff_serve.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/hello_handler.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/hello_router.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/idle_coord.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/instance.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/metrics.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/perf_guard.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/recovery.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/serve.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/service_def_loader.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/spawn_coordinator.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/spawn_wait.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/trace_context.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/server/version_allow_list.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/instances.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/list.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/prune.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/uninstall.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/verify_artifacts.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/cleanup/verify_basic.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/client.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/deadline_io.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/observer.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/paths.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/pipe_session.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/pty_session.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/client/telemetry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/console_detect.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/attach_stream.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/config.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/emergency_reserve.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/core.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/kill.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/maintenance.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/observer.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/pipe_sessions_handlers.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/process_tree.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/pty_sessions_handlers.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/registry_handlers.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/services.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/spawn.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/telemetry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers/util.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/handlers_tests.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/idle.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/observer_registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/pipe_attach_stream.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/pipe_sessions.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/platform/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/platform/unix.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/platform/windows.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/pty_sessions.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/reaper.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/runtime_gc.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/server.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/services.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/services_snapshot.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/shadow.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/daemon/telemetry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/environment.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/helpers.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/maintenance/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/maintenance/release_handles.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/cmdline.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/descendants_linux.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/descendants_macos.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/file_handles.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/pid_identity.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/observer/tests.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/process_tree.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/backend.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/child.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/conpty_acquire.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/conpty_api.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/conpty_sidecar_hashes.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/pipes.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/proc_thread_attr.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/pseudoconsole.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/conpty_passthrough/win_version.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/native_pty_process.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/pty_posix.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/pty_windows.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/pty/terminal_input.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/public_symbols.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/runpm_config.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/rust_debug.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/systemd_killmode.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/terminal_graphics.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/test_support/conformance.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/test_support/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/tests.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/types.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/unix.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/README.md +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/admin.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_endpoint_allocator.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_handle_boot_id.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_handle_common.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_handle_dead.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_handle_probe.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_handle_recycled.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_sdk.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/backend_sdk_async.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/broadcast_release_handles.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/builders.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/client.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/conformance_kit.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/connection.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/contrib_templates.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/docs_escape_hatch.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/docs_index.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/doctor.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/fd_pressure.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/framing.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/golden_bytes.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_ack_deadline.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_adopted_backend.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_adoption.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_backend_lib.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_capability.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_cross_os_acceptance.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_end_to_end_acceptance.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_fallback_perm_denied.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_latency.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_latency_e2e.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_orchestrate.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_serve_e2e.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_serve_latency.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_token_mismatch.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_transport.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_under_load.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_unix_e2e_orchestrate.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_unix_orchestrate.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_windows_duplicate_handle.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_windows_orchestrate.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/handoff_wire.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_concurrent.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_handler.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_rate_limit.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_router.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_service_unknown.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_skip.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/hello_version_blocked.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/idle_coord.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/instance.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/instance_isolation.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/into_backend_io.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/lifecycle_event_size.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/main.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/manifest_atomic.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/manifest_boot_id.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/manifest_corruption.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/manifest_roundtrip.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/metrics_names_frozen.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/names.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/peer_creds_drop.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/perf_guard.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/process_tree_lifecycle.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/proto_field_numbers.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/proto_roundtrip.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/recovery_one_retry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/serve.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/service_def_loader.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/servicedef_cli.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/socket_common.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/spawn_coordinator.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/spawn_wait.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/toy_three_party.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/trace_propagation.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/verify_pid/linux.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/verify_pid/macos.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/verify_pid/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/broker/verify_pid/windows.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/brokered_backend_ui.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/cleanup_list.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/cleanup_prune_confirm.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/cleanup_prune_dryrun.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/cleanup_uninstall.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/cleanup_verify_artifacts.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/common.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/cleanup/main.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/common/mitm_stdin.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/common/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_autostart_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_backlog_accumulation_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_cross_process_pty_attach_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_fast_ctrl_c_handoff_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_integration/compiler_wrap_seam_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_integration/env_replace_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_integration/main.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_integration/more_tests.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_integration/stdout_seam_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_non_tty_attach_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_pipe_session_attach_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_pty_session_attach_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_resize_rpc_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_runpm_save_resurrect.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_runpm_service_stubs.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_sessions_bulk_ops_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_sessions_log_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_tee_ring_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_termination_outcome_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/daemon_tree_kill_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/fs_adversarial_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/interactive_pty_session_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/maintenance/main.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/maintenance/release_handles_unix.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/maintenance/release_handles_windows.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/originator_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/process_core_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/pty_conhost_job_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/pty_master_public_api_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/pty_mitm_paste_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/pty_mitm_stdin_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/pty_unix_teardown_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/runpm_boot_autostart_fixtures.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/runpm_toml_config.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/cross_user_release_handles.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/cve_dbus_2014_3639.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/cve_dbus_2023_34969.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/cve_sccache_2023_1521.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/deferred_runtime_surfaces.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/dependency_surface.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/fuzz_campaign_signoff.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/main.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/manifest_tamper_detection.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/no_network_dependencies.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/pipe_name_validation.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/pipe_squatting.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/security_audit_workflow.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/security_fuzz_workflow.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/service_name_validation.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/unsafe_inventory.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/wanted_version_shell_injection.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/security/wanted_version_traversal.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/spawn_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/terminal_graphics_capabilities_test.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/ui/brokered_backend_state_in_bind.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process/tests/ui/brokered_backend_state_in_bind.stderr +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/containment.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/debug_traces.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/helpers.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/idle_detector.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/lib.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/metrics.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/originator.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/pid_tracking.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/priority.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/process.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/process_tree.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/pty_buffer.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/pty_process.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/public_symbols.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/py_native_process.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/signal_bool.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/terminal_input.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/control_churn.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/expect_match.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/idle_detector.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/mod.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/parse_command.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/process_tree.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/pty_buffer.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/pty_process.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/registry.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/signal_bool.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/running-process-py/src/tests/terminal_input.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/test-watchdog/Cargo.toml +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/test-watchdog/src/lib.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/crates/test-watchdog/tests/hang_dump.rs +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/assets/example.txt +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/cli.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/command_render.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/compat.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/console_encoding.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/daemon.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/dashboard.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/exit_status.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/expect.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/interrupt_handler.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/launch.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/line_iterator.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/output_formatter.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/priority.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/process_utils.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/processor_cli.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/__init__.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_command.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_console_io.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_errors.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_idle_helpers.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_idle_state.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_interactive.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_process_helpers.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_pseudo_terminal.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_pty_expect.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_pty_idle_waiter.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_pty_input_relay.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_pty_reader.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_pty_wait_for.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_terminal_strip.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_types.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/pty/_wait_input.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/__init__.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_classmethod_api.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_core.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_helpers.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_iter.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_subprocess.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_types.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process/_wait_methods.py +0 -0
- {running_process-4.6.2 → running_process-4.6.4}/src/running_process/running_process_manager.py +0 -0
|
@@ -1351,7 +1351,7 @@ dependencies = [
|
|
|
1351
1351
|
|
|
1352
1352
|
[[package]]
|
|
1353
1353
|
name = "running-process"
|
|
1354
|
-
version = "4.6.
|
|
1354
|
+
version = "4.6.4"
|
|
1355
1355
|
dependencies = [
|
|
1356
1356
|
"anyhow",
|
|
1357
1357
|
"blake3",
|
|
@@ -1390,7 +1390,7 @@ dependencies = [
|
|
|
1390
1390
|
|
|
1391
1391
|
[[package]]
|
|
1392
1392
|
name = "running-process-observer"
|
|
1393
|
-
version = "4.6.
|
|
1393
|
+
version = "4.6.4"
|
|
1394
1394
|
dependencies = [
|
|
1395
1395
|
"blake3",
|
|
1396
1396
|
"dirs",
|
|
@@ -1401,21 +1401,21 @@ dependencies = [
|
|
|
1401
1401
|
|
|
1402
1402
|
[[package]]
|
|
1403
1403
|
name = "running-process-observer-interposer-linux"
|
|
1404
|
-
version = "4.6.
|
|
1404
|
+
version = "4.6.4"
|
|
1405
1405
|
dependencies = [
|
|
1406
1406
|
"libc",
|
|
1407
1407
|
]
|
|
1408
1408
|
|
|
1409
1409
|
[[package]]
|
|
1410
1410
|
name = "running-process-observer-interposer-macos"
|
|
1411
|
-
version = "4.6.
|
|
1411
|
+
version = "4.6.4"
|
|
1412
1412
|
dependencies = [
|
|
1413
1413
|
"libc",
|
|
1414
1414
|
]
|
|
1415
1415
|
|
|
1416
1416
|
[[package]]
|
|
1417
1417
|
name = "running-process-observer-interposer-windows"
|
|
1418
|
-
version = "4.6.
|
|
1418
|
+
version = "4.6.4"
|
|
1419
1419
|
dependencies = [
|
|
1420
1420
|
"retour",
|
|
1421
1421
|
"windows-sys 0.59.0",
|
|
@@ -1423,7 +1423,7 @@ dependencies = [
|
|
|
1423
1423
|
|
|
1424
1424
|
[[package]]
|
|
1425
1425
|
name = "running-process-py"
|
|
1426
|
-
version = "4.6.
|
|
1426
|
+
version = "4.6.4"
|
|
1427
1427
|
dependencies = [
|
|
1428
1428
|
"interprocess",
|
|
1429
1429
|
"libc",
|
|
@@ -1437,7 +1437,7 @@ dependencies = [
|
|
|
1437
1437
|
|
|
1438
1438
|
[[package]]
|
|
1439
1439
|
name = "running-process-win-gnu-bridge"
|
|
1440
|
-
version = "4.6.
|
|
1440
|
+
version = "4.6.4"
|
|
1441
1441
|
dependencies = [
|
|
1442
1442
|
"windows-sys 0.59.0",
|
|
1443
1443
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: running_process
|
|
3
|
-
Version: 4.6.
|
|
3
|
+
Version: 4.6.4
|
|
4
4
|
License-File: LICENSE
|
|
5
5
|
Summary: A Rust-backed subprocess wrapper with split stdout/stderr streaming
|
|
6
6
|
Home-Page: https://github.com/zackees/running-process
|
|
@@ -430,6 +430,36 @@ PTY mode is intentionally more conservative:
|
|
|
430
430
|
|
|
431
431
|
`./test` runs the Rust tests, rebuilds the native extension with the unoptimized `dev` profile, runs the non-live Python tests, and then runs the `@pytest.mark.live` coverage that exercises real OS process and signal behavior.
|
|
432
432
|
|
|
433
|
+
### Repository Dylint
|
|
434
|
+
|
|
435
|
+
The native Linux x86 consolidated preflight runs the repository-owned
|
|
436
|
+
`running_process_env_literal` lint. It rejects direct string literals for
|
|
437
|
+
`RUNNING_PROCESS_*` environment controls in `std::env` calls, keeping broker
|
|
438
|
+
escape hatches and test seams tied to their canonical constants. The lint
|
|
439
|
+
library, `cargo-dylint`, and `dylint-link` are pinned to Dylint `6.0.1`; the
|
|
440
|
+
library and CI both use `nightly-2026-04-16`.
|
|
441
|
+
|
|
442
|
+
To run the same gate locally:
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
soldr rustup toolchain install nightly-2026-04-16 --profile minimal \
|
|
446
|
+
--component rustc-dev --component llvm-tools-preview
|
|
447
|
+
uvx soldr cargo install cargo-dylint@6.0.1 dylint-link@6.0.1 --locked
|
|
448
|
+
(
|
|
449
|
+
cd lints/running-process-env-literal
|
|
450
|
+
CARGO_TARGET_DIR=../../target/dylint RUSTUP_TOOLCHAIN=nightly-2026-04-16 \
|
|
451
|
+
uvx soldr cargo test --locked
|
|
452
|
+
)
|
|
453
|
+
CARGO_TARGET_DIR=target/dylint RUSTUP_TOOLCHAIN=nightly-2026-04-16 \
|
|
454
|
+
uvx soldr cargo dylint --all --workspace
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
The first check exercises the negative UI fixture and proves the lint rejects
|
|
458
|
+
a literal control name. The second checks the workspace. CI gives the exact
|
|
459
|
+
tool binaries and nightly target directory dedicated persistent caches and
|
|
460
|
+
runs the gate once, rather than adding a cold Dylint build to every platform
|
|
461
|
+
job.
|
|
462
|
+
|
|
433
463
|
On local developer machines, `./test` also runs the Linux Docker preflight so Windows and macOS development catches Linux wheel, lint, and non-live pytest regressions before push. GitHub-hosted Actions skip that Docker-only preflight and run the native platform suite directly.
|
|
434
464
|
|
|
435
465
|
For a live-only test run with the timeout crash watchdog and automatic thread
|
|
@@ -416,6 +416,36 @@ PTY mode is intentionally more conservative:
|
|
|
416
416
|
|
|
417
417
|
`./test` runs the Rust tests, rebuilds the native extension with the unoptimized `dev` profile, runs the non-live Python tests, and then runs the `@pytest.mark.live` coverage that exercises real OS process and signal behavior.
|
|
418
418
|
|
|
419
|
+
### Repository Dylint
|
|
420
|
+
|
|
421
|
+
The native Linux x86 consolidated preflight runs the repository-owned
|
|
422
|
+
`running_process_env_literal` lint. It rejects direct string literals for
|
|
423
|
+
`RUNNING_PROCESS_*` environment controls in `std::env` calls, keeping broker
|
|
424
|
+
escape hatches and test seams tied to their canonical constants. The lint
|
|
425
|
+
library, `cargo-dylint`, and `dylint-link` are pinned to Dylint `6.0.1`; the
|
|
426
|
+
library and CI both use `nightly-2026-04-16`.
|
|
427
|
+
|
|
428
|
+
To run the same gate locally:
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
soldr rustup toolchain install nightly-2026-04-16 --profile minimal \
|
|
432
|
+
--component rustc-dev --component llvm-tools-preview
|
|
433
|
+
uvx soldr cargo install cargo-dylint@6.0.1 dylint-link@6.0.1 --locked
|
|
434
|
+
(
|
|
435
|
+
cd lints/running-process-env-literal
|
|
436
|
+
CARGO_TARGET_DIR=../../target/dylint RUSTUP_TOOLCHAIN=nightly-2026-04-16 \
|
|
437
|
+
uvx soldr cargo test --locked
|
|
438
|
+
)
|
|
439
|
+
CARGO_TARGET_DIR=target/dylint RUSTUP_TOOLCHAIN=nightly-2026-04-16 \
|
|
440
|
+
uvx soldr cargo dylint --all --workspace
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
The first check exercises the negative UI fixture and proves the lint rejects
|
|
444
|
+
a literal control name. The second checks the workspace. CI gives the exact
|
|
445
|
+
tool binaries and nightly target directory dedicated persistent caches and
|
|
446
|
+
runs the gate once, rather than adding a cold Dylint build to every platform
|
|
447
|
+
job.
|
|
448
|
+
|
|
419
449
|
On local developer machines, `./test` also runs the Linux Docker preflight so Windows and macOS development catches Linux wheel, lint, and non-live pytest regressions before push. GitHub-hosted Actions skip that Docker-only preflight and run the native platform suite directly.
|
|
420
450
|
|
|
421
451
|
For a live-only test run with the timeout crash watchdog and automatic thread
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
use std::path::Path;
|
|
2
2
|
|
|
3
3
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
4
|
+
// cargo-llvm-cov sets this cfg while linking LLVM's profiling runtime.
|
|
5
|
+
println!("cargo:rustc-check-cfg=cfg(coverage)");
|
|
6
|
+
|
|
4
7
|
// Without these, edits to the .proto don't reliably retrigger
|
|
5
8
|
// codegen on incremental builds.
|
|
6
9
|
println!("cargo:rerun-if-changed=proto/daemon.proto");
|
|
@@ -4,7 +4,7 @@ Top-level modules of the published `running-process` crate. Feature gating is
|
|
|
4
4
|
described in the repo-root `CLAUDE.md` ("Rust workspace" section).
|
|
5
5
|
|
|
6
6
|
- `lib.rs` / `public_symbols.rs` — crate surface and re-exports
|
|
7
|
-
- `environment.rs` — user baseline environment (Windows `CreateEnvironmentBlock`, Unix
|
|
7
|
+
- `environment.rs` — user baseline environment (Windows `CreateEnvironmentBlock`, Unix login reconstruction)
|
|
8
8
|
- `spawn.rs`, `spawn_imp_unix.rs`, `spawn_imp_windows.rs` — process spawn implementations
|
|
9
9
|
- `process_tree.rs` — process-tree enumeration and tree kill
|
|
10
10
|
- `containment.rs` — Job Objects / process-group containment
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
//! earlier integration tests.
|
|
11
11
|
//! 2. **Persistent accept loop** — each accepted connection spawns
|
|
12
12
|
//! a thread that handles the Hello round-trip. The accept loop
|
|
13
|
-
//!
|
|
14
|
-
//! in-flight handlers are
|
|
13
|
+
//! polls with bounded latency so Unix SIGTERM/SIGINT can request a
|
|
14
|
+
//! normal shutdown; in-flight handlers are drained with a deadline.
|
|
15
15
|
//! 3. **ServiceDefinitionLoader integration** — on each Hello, look
|
|
16
16
|
//! up `hello.service_name` via the default v2 service-definition
|
|
17
17
|
//! directory ([`ServiceDefinitionLoader::default_root`]). Reject
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
//! `broker-v2-scaffold`.
|
|
34
34
|
//!
|
|
35
35
|
//! Future slices:
|
|
36
|
-
//! -
|
|
36
|
+
//! - Windows console-event graceful shutdown.
|
|
37
37
|
//! - Backend-pipe resolution + adopt forwarding.
|
|
38
38
|
//! - Single-instance lock (refuse start if another broker is bound).
|
|
39
39
|
//! - Refuse-privileged-run guard (port from v1).
|
|
@@ -41,12 +41,13 @@
|
|
|
41
41
|
use std::env;
|
|
42
42
|
use std::io::Write;
|
|
43
43
|
use std::process::ExitCode;
|
|
44
|
+
use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
|
44
45
|
use std::sync::Arc;
|
|
45
|
-
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
46
46
|
use std::thread;
|
|
47
|
+
use std::time::{Duration, Instant};
|
|
47
48
|
|
|
48
49
|
use interprocess::local_socket::traits::{Listener as _, Stream as _};
|
|
49
|
-
use interprocess::local_socket::ListenerOptions;
|
|
50
|
+
use interprocess::local_socket::{ListenerNonblockingMode, ListenerOptions};
|
|
50
51
|
use prost::Message;
|
|
51
52
|
use running_process::broker::lifecycle::names_v2::v2_program_pipe;
|
|
52
53
|
use running_process::broker::lifecycle::privilege::refuse_privileged_run;
|
|
@@ -56,8 +57,8 @@ use running_process::broker::protocol::{
|
|
|
56
57
|
ENVELOPE_VERSION,
|
|
57
58
|
};
|
|
58
59
|
use running_process::broker::protocol_v2::ServiceDefinitionLoader;
|
|
59
|
-
use running_process::broker::server::service_def_loader::ServiceDefinitionError;
|
|
60
60
|
use running_process::broker::server::deadline_stream::{hello_read_deadline, DeadlineStream};
|
|
61
|
+
use running_process::broker::server::service_def_loader::ServiceDefinitionError;
|
|
61
62
|
|
|
62
63
|
/// Default program name when `--program` is not passed. Matches the
|
|
63
64
|
/// slice-3c scaffold so existing integration tests keep working.
|
|
@@ -68,6 +69,59 @@ const SCAFFOLD_PIPE_IDX: u32 = 0;
|
|
|
68
69
|
/// cap is the hard upper bound but we want backpressure before that.
|
|
69
70
|
const MAX_INFLIGHT_HANDLERS: usize = 256;
|
|
70
71
|
const MAX_INFLIGHT_HANDLERS_ENV: &str = "RUNNING_PROCESS_BROKER_MAX_INFLIGHT_HANDLERS";
|
|
72
|
+
const ACCEPT_POLL_INTERVAL: Duration = Duration::from_millis(20);
|
|
73
|
+
const HANDLER_DRAIN_TIMEOUT: Duration = Duration::from_secs(5);
|
|
74
|
+
|
|
75
|
+
#[cfg(unix)]
|
|
76
|
+
static SIGNAL_SHUTDOWN_REQUESTED: AtomicBool = AtomicBool::new(false);
|
|
77
|
+
|
|
78
|
+
#[cfg(unix)]
|
|
79
|
+
extern "C" fn record_shutdown_signal(_signal: libc::c_int) {
|
|
80
|
+
// Async-signal-safe by construction: do not allocate, log, join threads,
|
|
81
|
+
// or call the LLVM profile runtime from this handler.
|
|
82
|
+
SIGNAL_SHUTDOWN_REQUESTED.store(true, Ordering::Relaxed);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#[cfg(unix)]
|
|
86
|
+
fn install_shutdown_signal_handlers() -> std::io::Result<()> {
|
|
87
|
+
SIGNAL_SHUTDOWN_REQUESTED.store(false, Ordering::Relaxed);
|
|
88
|
+
for signal in [libc::SIGTERM, libc::SIGINT] {
|
|
89
|
+
// SAFETY: `record_shutdown_signal` has C ABI, lives for the process
|
|
90
|
+
// lifetime, and performs only an atomic store.
|
|
91
|
+
let previous = unsafe {
|
|
92
|
+
libc::signal(
|
|
93
|
+
signal,
|
|
94
|
+
record_shutdown_signal as *const () as libc::sighandler_t,
|
|
95
|
+
)
|
|
96
|
+
};
|
|
97
|
+
if previous == libc::SIG_ERR {
|
|
98
|
+
return Err(std::io::Error::last_os_error());
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
Ok(())
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
#[cfg(coverage)]
|
|
105
|
+
unsafe extern "C" {
|
|
106
|
+
fn __llvm_profile_write_file() -> libc::c_int;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
fn flush_coverage_profile() -> Result<(), String> {
|
|
110
|
+
#[cfg(coverage)]
|
|
111
|
+
{
|
|
112
|
+
// SAFETY: cargo-llvm-cov links this process with LLVM's profiling
|
|
113
|
+
// runtime. This call occurs after the signal handler has returned and
|
|
114
|
+
// after handler threads have been drained, in ordinary Rust control
|
|
115
|
+
// flow.
|
|
116
|
+
let result = unsafe { __llvm_profile_write_file() };
|
|
117
|
+
if result != 0 {
|
|
118
|
+
return Err(format!(
|
|
119
|
+
"__llvm_profile_write_file returned nonzero status {result}"
|
|
120
|
+
));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
Ok(())
|
|
124
|
+
}
|
|
71
125
|
|
|
72
126
|
fn max_inflight_handlers() -> usize {
|
|
73
127
|
std::env::var(MAX_INFLIGHT_HANDLERS_ENV)
|
|
@@ -151,14 +205,14 @@ fn main() -> ExitCode {
|
|
|
151
205
|
// would bind the v2 pipe in a namespace other users can't reach
|
|
152
206
|
// AND would create privileged sockets that downstream daemons
|
|
153
207
|
// get adopted into. Mirrors v1's `running-process-broker-v1`
|
|
154
|
-
// startup check exactly. The `
|
|
208
|
+
// startup check exactly. The `RUNNING_PROCESS_BROKER_ALLOW_PRIVILEGED`
|
|
155
209
|
// env var is honored for isolated test environments that
|
|
156
210
|
// intentionally exercise privileged startup behavior.
|
|
157
211
|
if let Err(err) = refuse_privileged_run() {
|
|
158
212
|
eprintln!(
|
|
159
213
|
"running-process-broker-v2: refusing privileged startup: {err}. \
|
|
160
214
|
Run as an unprivileged user, or set \
|
|
161
|
-
|
|
215
|
+
RUNNING_PROCESS_BROKER_ALLOW_PRIVILEGED=1 for isolated test environments only."
|
|
162
216
|
);
|
|
163
217
|
return ExitCode::from(77); // EX_NOPERM
|
|
164
218
|
}
|
|
@@ -252,7 +306,23 @@ fn main() -> ExitCode {
|
|
|
252
306
|
let exit_code = if opts.once {
|
|
253
307
|
accept_one(&listener, Arc::clone(&loader))
|
|
254
308
|
} else {
|
|
255
|
-
|
|
309
|
+
#[cfg(unix)]
|
|
310
|
+
if let Err(err) = install_shutdown_signal_handlers() {
|
|
311
|
+
eprintln!("running-process-broker-v2: install shutdown signal handlers failed: {err}");
|
|
312
|
+
return ExitCode::from(1);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
#[cfg(unix)]
|
|
316
|
+
let shutdown = &SIGNAL_SHUTDOWN_REQUESTED;
|
|
317
|
+
#[cfg(not(unix))]
|
|
318
|
+
let shutdown = &AtomicBool::new(false);
|
|
319
|
+
|
|
320
|
+
accept_loop(
|
|
321
|
+
&listener,
|
|
322
|
+
Arc::clone(&loader),
|
|
323
|
+
Arc::clone(&inflight),
|
|
324
|
+
shutdown,
|
|
325
|
+
)
|
|
256
326
|
};
|
|
257
327
|
|
|
258
328
|
#[cfg(unix)]
|
|
@@ -260,22 +330,34 @@ fn main() -> ExitCode {
|
|
|
260
330
|
let _ = std::fs::remove_file(&socket_path);
|
|
261
331
|
}
|
|
262
332
|
|
|
333
|
+
if let Err(err) = flush_coverage_profile() {
|
|
334
|
+
eprintln!("running-process-broker-v2: coverage profile flush failed: {err}");
|
|
335
|
+
return ExitCode::from(1);
|
|
336
|
+
}
|
|
337
|
+
|
|
263
338
|
exit_code
|
|
264
339
|
}
|
|
265
340
|
|
|
266
341
|
/// Persistent accept loop. Spawns one handler thread per accepted
|
|
267
|
-
/// connection, bounded by `MAX_INFLIGHT_HANDLERS`.
|
|
268
|
-
///
|
|
269
|
-
/// success — production exit is via SIGTERM, a follow-up slice).
|
|
342
|
+
/// connection, bounded by `MAX_INFLIGHT_HANDLERS`. A nonblocking listener
|
|
343
|
+
/// makes the shutdown flag observable within [`ACCEPT_POLL_INTERVAL`].
|
|
270
344
|
fn accept_loop(
|
|
271
345
|
listener: &interprocess::local_socket::Listener,
|
|
272
346
|
loader: Arc<ServiceDefinitionLoader>,
|
|
273
347
|
inflight: Arc<AtomicUsize>,
|
|
348
|
+
shutdown: &AtomicBool,
|
|
274
349
|
) -> ExitCode {
|
|
350
|
+
if let Err(err) = listener.set_nonblocking(ListenerNonblockingMode::Accept) {
|
|
351
|
+
eprintln!("running-process-broker-v2: set listener nonblocking failed: {err}");
|
|
352
|
+
return ExitCode::from(1);
|
|
353
|
+
}
|
|
354
|
+
|
|
275
355
|
let max_inflight = max_inflight_handlers();
|
|
356
|
+
let mut handlers = Vec::new();
|
|
276
357
|
loop {
|
|
277
|
-
|
|
278
|
-
|
|
358
|
+
reap_finished_handlers(&mut handlers);
|
|
359
|
+
match poll_accept_until_shutdown(shutdown, || listener.accept()) {
|
|
360
|
+
Ok(Some(stream)) => {
|
|
279
361
|
// Backpressure: refuse to spawn if we're already at the cap.
|
|
280
362
|
// The peer's blocking read on the Hello-reply socket will
|
|
281
363
|
// see EOF when this branch closes the stream.
|
|
@@ -300,20 +382,28 @@ fn accept_loop(
|
|
|
300
382
|
Ok(svc) => println!(
|
|
301
383
|
"running-process-broker-v2 Hello service={svc:?} negotiated",
|
|
302
384
|
),
|
|
303
|
-
Err(err) =>
|
|
304
|
-
"running-process-broker-v2 Hello handler failed: {err}"
|
|
305
|
-
|
|
385
|
+
Err(err) => {
|
|
386
|
+
eprintln!("running-process-broker-v2 Hello handler failed: {err}")
|
|
387
|
+
}
|
|
306
388
|
}
|
|
307
389
|
});
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
390
|
+
match spawn_result {
|
|
391
|
+
Ok(handler) => handlers.push(handler),
|
|
392
|
+
Err(err) => {
|
|
393
|
+
eprintln!(
|
|
394
|
+
"running-process-broker-v2: thread spawn failed: {err}; \
|
|
395
|
+
dropping connection"
|
|
396
|
+
);
|
|
397
|
+
// Decrement here since the spawned thread never ran.
|
|
398
|
+
inflight.fetch_sub(1, Ordering::SeqCst);
|
|
399
|
+
}
|
|
315
400
|
}
|
|
316
401
|
}
|
|
402
|
+
Ok(None) => {
|
|
403
|
+
println!("running-process-broker-v2: shutdown requested; draining handlers");
|
|
404
|
+
drain_handlers(&mut handlers, HANDLER_DRAIN_TIMEOUT);
|
|
405
|
+
return ExitCode::SUCCESS;
|
|
406
|
+
}
|
|
317
407
|
Err(err) => {
|
|
318
408
|
// accept() errors are typically fatal (listener died);
|
|
319
409
|
// exit so a supervisor can restart us.
|
|
@@ -324,6 +414,55 @@ fn accept_loop(
|
|
|
324
414
|
}
|
|
325
415
|
}
|
|
326
416
|
|
|
417
|
+
fn poll_accept_until_shutdown<T>(
|
|
418
|
+
shutdown: &AtomicBool,
|
|
419
|
+
mut accept: impl FnMut() -> std::io::Result<T>,
|
|
420
|
+
) -> std::io::Result<Option<T>> {
|
|
421
|
+
while !shutdown.load(Ordering::Relaxed) {
|
|
422
|
+
match accept() {
|
|
423
|
+
Ok(value) => return Ok(Some(value)),
|
|
424
|
+
Err(err) if err.kind() == std::io::ErrorKind::WouldBlock => {
|
|
425
|
+
thread::sleep(ACCEPT_POLL_INTERVAL);
|
|
426
|
+
}
|
|
427
|
+
Err(err) if err.kind() == std::io::ErrorKind::Interrupted => {}
|
|
428
|
+
Err(err) => return Err(err),
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
Ok(None)
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
fn reap_finished_handlers(handlers: &mut Vec<thread::JoinHandle<()>>) {
|
|
435
|
+
let mut index = 0;
|
|
436
|
+
while index < handlers.len() {
|
|
437
|
+
if handlers[index].is_finished() {
|
|
438
|
+
let handler = handlers.swap_remove(index);
|
|
439
|
+
if handler.join().is_err() {
|
|
440
|
+
eprintln!("running-process-broker-v2: handler thread panicked");
|
|
441
|
+
}
|
|
442
|
+
} else {
|
|
443
|
+
index += 1;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
fn drain_handlers(handlers: &mut Vec<thread::JoinHandle<()>>, timeout: Duration) {
|
|
449
|
+
let deadline = Instant::now() + timeout;
|
|
450
|
+
while !handlers.is_empty() && Instant::now() < deadline {
|
|
451
|
+
reap_finished_handlers(handlers);
|
|
452
|
+
if !handlers.is_empty() {
|
|
453
|
+
thread::sleep(ACCEPT_POLL_INTERVAL);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
reap_finished_handlers(handlers);
|
|
457
|
+
if !handlers.is_empty() {
|
|
458
|
+
eprintln!(
|
|
459
|
+
"running-process-broker-v2: handler drain timed out after {timeout:?}; \
|
|
460
|
+
detaching {} handler(s)",
|
|
461
|
+
handlers.len()
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
327
466
|
/// One-shot accept (replaces the prior scaffold behavior; used by
|
|
328
467
|
/// `--once` for tests + by the slice-3c integration test).
|
|
329
468
|
fn accept_one(
|
|
@@ -643,6 +782,35 @@ mod tests {
|
|
|
643
782
|
}
|
|
644
783
|
}
|
|
645
784
|
|
|
785
|
+
#[test]
|
|
786
|
+
fn accept_poll_exits_without_accepting_after_shutdown_request() {
|
|
787
|
+
let shutdown = AtomicBool::new(true);
|
|
788
|
+
let result = poll_accept_until_shutdown(&shutdown, || -> std::io::Result<()> {
|
|
789
|
+
panic!("accept must not run after shutdown")
|
|
790
|
+
})
|
|
791
|
+
.unwrap();
|
|
792
|
+
assert!(result.is_none());
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
#[test]
|
|
796
|
+
fn accept_poll_observes_shutdown_while_listener_would_block() {
|
|
797
|
+
let shutdown = Arc::new(AtomicBool::new(false));
|
|
798
|
+
let setter = Arc::clone(&shutdown);
|
|
799
|
+
let signaler = thread::spawn(move || {
|
|
800
|
+
thread::sleep(ACCEPT_POLL_INTERVAL);
|
|
801
|
+
setter.store(true, Ordering::Relaxed);
|
|
802
|
+
});
|
|
803
|
+
let start = Instant::now();
|
|
804
|
+
let result = poll_accept_until_shutdown(&shutdown, || -> std::io::Result<()> {
|
|
805
|
+
Err(std::io::ErrorKind::WouldBlock.into())
|
|
806
|
+
})
|
|
807
|
+
.unwrap();
|
|
808
|
+
|
|
809
|
+
signaler.join().unwrap();
|
|
810
|
+
assert!(result.is_none());
|
|
811
|
+
assert!(start.elapsed() < Duration::from_secs(1));
|
|
812
|
+
}
|
|
813
|
+
|
|
646
814
|
#[test]
|
|
647
815
|
fn parse_cli_defaults() {
|
|
648
816
|
let args = vec!["bin".to_owned()];
|
|
@@ -654,7 +822,11 @@ mod tests {
|
|
|
654
822
|
|
|
655
823
|
#[test]
|
|
656
824
|
fn parse_cli_program_arg() {
|
|
657
|
-
let args = vec![
|
|
825
|
+
let args = vec![
|
|
826
|
+
"bin".to_owned(),
|
|
827
|
+
"--program".to_owned(),
|
|
828
|
+
"zccache".to_owned(),
|
|
829
|
+
];
|
|
658
830
|
let opts = parse_cli(&args).unwrap();
|
|
659
831
|
assert_eq!(opts.program, "zccache");
|
|
660
832
|
}
|
|
@@ -742,11 +914,7 @@ mod tests {
|
|
|
742
914
|
match reply.result {
|
|
743
915
|
Some(hello_reply::Result::Refused(r)) => {
|
|
744
916
|
assert_eq!(r.code, ErrorCode::ErrorVersionBlocked as i32);
|
|
745
|
-
assert!(
|
|
746
|
-
r.reason.contains("allow_list"),
|
|
747
|
-
"got: {}",
|
|
748
|
-
r.reason
|
|
749
|
-
);
|
|
917
|
+
assert!(r.reason.contains("allow_list"), "got: {}", r.reason);
|
|
750
918
|
}
|
|
751
919
|
other => panic!("expected Refused, got {other:?}"),
|
|
752
920
|
}
|
{running_process-4.6.2 → running_process-4.6.4}/crates/running-process/src/broker/manifest.rs
RENAMED
|
@@ -30,6 +30,9 @@ pub const CACHE_MANIFEST_MEDIA_TYPE: &str = "application/vnd.running-process.cac
|
|
|
30
30
|
/// Highest manifest schema this crate understands.
|
|
31
31
|
pub const SUPPORTED_MANIFEST_SCHEMA_VERSION: u32 = 1;
|
|
32
32
|
|
|
33
|
+
/// Test/development override for the central manifest registry directory.
|
|
34
|
+
pub const RUNNING_PROCESS_MANIFEST_DIR_ENV: &str = "RUNNING_PROCESS_MANIFEST_DIR";
|
|
35
|
+
|
|
33
36
|
/// Errors returned by manifest persistence and validation.
|
|
34
37
|
#[derive(Debug, thiserror::Error)]
|
|
35
38
|
pub enum ManifestError {
|
|
@@ -178,7 +181,7 @@ pub fn scan_central(registry_dir: &Path) -> Vec<ManifestScanEntry> {
|
|
|
178
181
|
/// `RUNNING_PROCESS_MANIFEST_DIR` is honored as a test/development
|
|
179
182
|
/// override. Production callers should leave it unset.
|
|
180
183
|
pub fn central_registry_dir() -> PathBuf {
|
|
181
|
-
if let Some(path) = std::env::var_os(
|
|
184
|
+
if let Some(path) = std::env::var_os(RUNNING_PROCESS_MANIFEST_DIR_ENV) {
|
|
182
185
|
return PathBuf::from(path);
|
|
183
186
|
}
|
|
184
187
|
|
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
//! responsibility is now scoped to:
|
|
8
8
|
//!
|
|
9
9
|
//! - holding an optional `originator` label,
|
|
10
|
-
//! - injecting [`ORIGINATOR_ENV_VAR`] into every child the group
|
|
10
|
+
//! - injecting [`ORIGINATOR_ENV_VAR`] into every *contained* child the group
|
|
11
|
+
//! spawns, and stripping it from every *daemon* child (a daemon outlives its
|
|
12
|
+
//! spawner, so it must not be attributable to it — see
|
|
13
|
+
//! [`ContainedProcessGroup::spawn_daemon`]),
|
|
11
14
|
//! - dispatching to either [`crate::spawn()`] or [`crate::spawn_daemon`].
|
|
12
15
|
//!
|
|
13
16
|
//! # `RUNNING_PROCESS_ORIGINATOR` environment variable
|
|
@@ -107,19 +110,111 @@ impl ContainedProcessGroup {
|
|
|
107
110
|
/// handle list, and survives the returned [`DaemonChild`] being
|
|
108
111
|
/// dropped. To terminate, call [`DaemonChild::kill`].
|
|
109
112
|
///
|
|
110
|
-
/// The
|
|
111
|
-
///
|
|
112
|
-
///
|
|
113
|
+
/// The originator env var is deliberately **stripped**, never injected.
|
|
114
|
+
///
|
|
115
|
+
/// A daemon outlives the process that happened to start it — that is the
|
|
116
|
+
/// entire point of spawning one. Tagging it `TOOL:<spawner pid>` makes it
|
|
117
|
+
/// indistinguishable from an abandoned descendant, so as soon as the
|
|
118
|
+
/// spawner exits, any originator-based reaper sees a live process whose
|
|
119
|
+
/// originator is dead and kills it. Build-cache daemons (zccache, sccache)
|
|
120
|
+
/// are the common casualty: they are started lazily by whichever compiler
|
|
121
|
+
/// invocation happens to run first, inherit that session's tag, and get
|
|
122
|
+
/// reaped when it ends — taking the warm cache down with them.
|
|
123
|
+
///
|
|
124
|
+
/// This also restores the intent of the daemon environment policy.
|
|
125
|
+
/// [`crate::EnvironmentPolicy::Auto`] resolves to `UserBaseline` for
|
|
126
|
+
/// daemons, which rebuilds the environment from the user's login identity
|
|
127
|
+
/// and drops process-local variables. Explicit `command.env(...)` entries
|
|
128
|
+
/// are applied *last*, so injecting here silently defeated that policy for
|
|
129
|
+
/// this one variable.
|
|
113
130
|
pub fn spawn_daemon(&self, command: &mut Command) -> Result<DaemonChild, std::io::Error> {
|
|
114
|
-
|
|
131
|
+
Self::strip_originator_env(command);
|
|
115
132
|
free_spawn_daemon(command)
|
|
116
133
|
}
|
|
134
|
+
|
|
135
|
+
/// Remove the originator tag from `command`. Split out from
|
|
136
|
+
/// [`Self::spawn_daemon`] so the policy is unit-testable without
|
|
137
|
+
/// spawning a real detached process.
|
|
138
|
+
fn strip_originator_env(command: &mut Command) {
|
|
139
|
+
command.env_remove(ORIGINATOR_ENV_VAR);
|
|
140
|
+
}
|
|
117
141
|
}
|
|
118
142
|
|
|
119
143
|
#[cfg(test)]
|
|
120
144
|
mod tests {
|
|
121
145
|
use super::*;
|
|
122
146
|
|
|
147
|
+
fn originator_entry(command: &Command) -> Option<Option<&std::ffi::OsStr>> {
|
|
148
|
+
let key = std::ffi::OsStr::new(ORIGINATOR_ENV_VAR);
|
|
149
|
+
command.get_envs().find(|(k, _)| *k == key).map(|(_, v)| v)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/// The two halves must compose: a daemon drops the originator tag *and*
|
|
153
|
+
/// carries the positive marker. Absence alone is ambiguous — it also
|
|
154
|
+
/// describes a process whose environment was clobbered — so a reaper
|
|
155
|
+
/// needs the declaration, not just the missing tag (clud#522).
|
|
156
|
+
#[test]
|
|
157
|
+
fn daemon_declares_itself_and_drops_the_originator_tag() {
|
|
158
|
+
let mut cmd = Command::new("echo");
|
|
159
|
+
cmd.env(ORIGINATOR_ENV_VAR, "CLUD:12345");
|
|
160
|
+
ContainedProcessGroup::strip_originator_env(&mut cmd);
|
|
161
|
+
crate::spawn::mark_as_daemon(&mut cmd);
|
|
162
|
+
|
|
163
|
+
assert_eq!(
|
|
164
|
+
originator_entry(&cmd),
|
|
165
|
+
Some(None),
|
|
166
|
+
"the originator tag must still be removed"
|
|
167
|
+
);
|
|
168
|
+
let marker = std::ffi::OsStr::new(crate::DAEMON_MARKER_ENV_VAR);
|
|
169
|
+
assert_eq!(
|
|
170
|
+
cmd.get_envs()
|
|
171
|
+
.find(|(k, _)| *k == marker)
|
|
172
|
+
.and_then(|(_, v)| v),
|
|
173
|
+
Some(std::ffi::OsStr::new("1")),
|
|
174
|
+
"a daemon must positively declare itself"
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/// A daemon must not carry its spawner's originator tag: it outlives the
|
|
179
|
+
/// spawner, so the tag turns it into reaper bait the moment the spawner
|
|
180
|
+
/// exits. `env_remove` must win even when the caller explicitly set it.
|
|
181
|
+
#[test]
|
|
182
|
+
fn spawn_daemon_strips_originator_env() {
|
|
183
|
+
let mut cmd = Command::new("echo");
|
|
184
|
+
cmd.env(ORIGINATOR_ENV_VAR, "CLUD:12345");
|
|
185
|
+
ContainedProcessGroup::strip_originator_env(&mut cmd);
|
|
186
|
+
assert_eq!(
|
|
187
|
+
originator_entry(&cmd),
|
|
188
|
+
Some(None),
|
|
189
|
+
"daemon command must carry an explicit removal of {ORIGINATOR_ENV_VAR}"
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/// The stripping must be unconditional — a group *with* an originator is
|
|
194
|
+
/// exactly the case that used to inject the tag into daemons.
|
|
195
|
+
#[test]
|
|
196
|
+
fn spawn_daemon_strips_originator_even_for_tagged_group() {
|
|
197
|
+
let group = ContainedProcessGroup::with_originator("CLUD").unwrap();
|
|
198
|
+
assert!(group.originator().is_some());
|
|
199
|
+
let mut cmd = Command::new("echo");
|
|
200
|
+
ContainedProcessGroup::strip_originator_env(&mut cmd);
|
|
201
|
+
assert_eq!(originator_entry(&cmd), Some(None));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/// Contrast: *contained* children keep the tag. That is what makes the
|
|
205
|
+
/// on-exit reaper able to find genuinely abandoned descendants.
|
|
206
|
+
#[test]
|
|
207
|
+
fn contained_spawn_still_injects_originator_env() {
|
|
208
|
+
let group = ContainedProcessGroup::with_originator("CLUD").unwrap();
|
|
209
|
+
let mut cmd = Command::new("echo");
|
|
210
|
+
group.inject_originator_env(&mut cmd);
|
|
211
|
+
let expected = format!("CLUD:{}", std::process::id());
|
|
212
|
+
assert_eq!(
|
|
213
|
+
originator_entry(&cmd),
|
|
214
|
+
Some(Some(std::ffi::OsStr::new(expected.as_str())))
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
|
|
123
218
|
#[test]
|
|
124
219
|
fn contained_process_group_creates_successfully() {
|
|
125
220
|
let group = ContainedProcessGroup::new();
|