tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_removes_entries_past_max_age tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_uses_updated_at_not_created_at tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_disabled_when_max_age_is_zero tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_disabled_when_max_age_is_negative tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_skips_suspended_entries tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_skips_entries_with_active_processes tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_active_check_uses_session_key_not_session_id tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_does_not_write_disk_when_no_removals tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_writes_disk_after_removal tests/gateway/test_session_store_prune.py::TestPruneBasics::test_prune_is_thread_safe tests/gateway/test_session_store_prune.py::TestPrunePersistsToDisk::test_prune_rewrites_sessions_json tests/gateway/test_session_store_prune.py::TestGatewayConfigSerialization::test_session_store_max_age_days_defaults_to_90 tests/gateway/test_session_store_prune.py::TestGatewayConfigSerialization::test_session_store_max_age_days_roundtrips tests/gateway/test_session_store_prune.py::TestGatewayConfigSerialization::test_session_store_max_age_days_missing_defaults_90 tests/gateway/test_session_store_prune.py::TestGatewayConfigSerialization::test_session_store_max_age_days_negative_coerced_to_zero tests/gateway/test_session_store_prune.py::TestGatewayConfigSerialization::test_session_store_max_age_days_bad_type_falls_back tests/gateway/test_session_store_prune.py::TestGatewayWatcherCallsPrune::test_prune_gate_fires_on_first_tick tests/gateway/test_session_store_prune.py::TestGatewayWatcherCallsPrune::test_prune_gate_suppresses_within_interval