tests/gateway/test_shutdown_forensics.py::TestSignalName::test_known_signals_resolve_to_names tests/gateway/test_shutdown_forensics.py::TestSignalName::test_unknown_int_returns_signal_num_token tests/gateway/test_shutdown_forensics.py::TestSignalName::test_none_returns_unknown tests/gateway/test_shutdown_forensics.py::TestSignalName::test_non_integer_falls_back_to_str tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_includes_self_pid_and_signal tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_handles_none_signal tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_includes_timestamps tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_includes_parent_summary_on_linux tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_under_systemd_flag_uses_invocation_id tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_under_systemd_false_without_invocation_id_and_normal_ppid tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_completes_quickly tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_detects_takeover_marker_for_self tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_detects_takeover_marker_for_other tests/gateway/test_shutdown_forensics.py::TestSnapshotShutdownContext::test_detects_planned_stop_marker tests/gateway/test_shutdown_forensics.py::TestFormatters::test_format_context_for_log_includes_signal_and_parent tests/gateway/test_shutdown_forensics.py::TestFormatters::test_context_as_json_round_trips tests/gateway/test_shutdown_forensics.py::TestFormatters::test_context_as_json_handles_unserialisable_values tests/gateway/test_shutdown_forensics.py::TestSpawnAsyncDiagnostic::test_spawns_subprocess_and_writes_output tests/gateway/test_shutdown_forensics.py::TestSpawnAsyncDiagnostic::test_returns_none_on_windows tests/gateway/test_shutdown_forensics.py::TestSpawnAsyncDiagnostic::test_handles_unwritable_log_path_gracefully tests/gateway/test_shutdown_forensics.py::TestSpawnAsyncDiagnostic::test_does_not_block_caller tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_seconds tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_minutes tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_combined_min_sec tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_hours tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_milliseconds tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_empty_returns_none tests/gateway/test_shutdown_forensics.py::TestParseSystemdDuration::test_unknown_unit_returns_none tests/gateway/test_shutdown_forensics.py::TestCheckSystemdTimingAlignment::test_returns_none_when_not_under_systemd tests/gateway/test_shutdown_forensics.py::TestCheckSystemdTimingAlignment::test_returns_none_when_unit_undeterminable