[gw4] darwin -- Python 3.12.12 /Users/cao/.pyenv/versions/3.12.12/bin/python3.12 tests/services/test_service_freshness_watchdog.py:99: in test_fresh_heartbeat_skips_log_mtime results = check_once() ^^^^^^^^^^^^ check_once = hb_side_effect = .hb_side_effect at 0x12a168720> mock_mtime = mock_restart = self = rtrader/services/service_freshness_watchdog.py:375: in check_once reason = _check_daily_summary_outcome(deadline_min) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ age = 60.00012707710266 deadline_min = 330 hb_age = None hb_key = 'verdictgenprecleanup_service' hb_stale = 300 is_market = False mtime = 1779851027.471118 now = 1779851087.471245 out = {'account-monitor': {'age': 60.00012707710266, 'source': 'log_mtime', 'status': 'ok', 'threshold': 1800.0}, 'channel-s...: 3600.0}, 'trading-plan': {'age': 60.00012707710266, 'source': 'log_mtime', 'status': 'ok', 'threshold': 1800.0}, ...} outcome_check = 'daily_summary_narrative' service = 'daily-summary' threshold = 3600 thresholds = {'heartbeat_key': 'dailysummary_service', 'heartbeat_stale_seconds': 300, 'market_hours': 1800, 'off_hours': 3600, ...} rtrader/services/service_freshness_watchdog.py:305: in _check_daily_summary_outcome keys = list(r.scan_iter(match=pattern, count=20)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ close_dt = datetime.datetime(2026, 5, 26, 16, 0, tzinfo=) deadline_minutes_after_close = 330 deadline_with_buffer = 1779845400.0 now_et = datetime.datetime(2026, 5, 26, 23, 4, 47, 471355, tzinfo=) pattern = 'daily_summary:last_narrative_posted:2026-05-26:*' r = )>)> redis_testbox001 = today = datetime.date(2026, 5, 26) ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/commands/core.py:3228: in scan_iter cursor, data = self.scan( _type = None count = 20 cursor = 15152 data = [] kwargs = {} match = 'daily_summary:last_narrative_posted:2026-05-26:*' self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/commands/core.py:3203: in scan return self.execute_command("SCAN", *pieces, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _type = None count = 20 cursor = 15152 kwargs = {} match = 'daily_summary:last_narrative_posted:2026-05-26:*' pieces = [15152, b'MATCH', 'daily_summary:last_narrative_posted:2026-05-26:*', b'COUNT', 20] self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:657: in execute_command return self._execute_command(*args, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ args = ('SCAN', 15152, b'MATCH', 'daily_summary:last_narrative_posted:2026-05-26:*', b'COUNT', 20) options = {} self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:668: in _execute_command return conn.retry.call_with_retry( args = ('SCAN', 15152, b'MATCH', 'daily_summary:last_narrative_posted:2026-05-26:*', b'COUNT', 20) command_name = 'SCAN' conn = options = {} pool = )> self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/retry.py:116: in call_with_retry return do() ^^^^ do = . at 0x1299e6160> fail = . at 0x12a169080> failures = 0 is_retryable = None self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:669: in lambda: self._send_command_parse_response( args = ('SCAN', 15152, b'MATCH', 'daily_summary:last_narrative_posted:2026-05-26:*', b'COUNT', 20) command_name = 'SCAN' conn = options = {} self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:640: in _send_command_parse_response return self.parse_response(conn, command_name, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ args = ('SCAN', 15152, b'MATCH', 'daily_summary:last_narrative_posted:2026-05-26:*', b'COUNT', 20) command_name = 'SCAN' conn = options = {} self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:691: in parse_response response = connection.read_response() ^^^^^^^^^^^^^^^^^^^^^^^^^^ command_name = 'SCAN' connection = options = {} self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/connection.py:1133: in read_response response = self._parser.read_response(disable_decoding=disable_decoding) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ disable_decoding = False disconnect_on_error = True host_error = 'testbox001:6379' push_request = False self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/resp2.py:15: in read_response result = self._read_response(disable_decoding=disable_decoding) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ disable_decoding = False pos = 0 self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/resp2.py:25: in _read_response raw = self._buffer.readline() ^^^^^^^^^^^^^^^^^^^^^^^ disable_decoding = False self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/socket.py:115: in readline self._read_from_socket() buf = <_io.BytesIO object at 0x12727ddf0> data = b'' self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/socket.py:65: in _read_from_socket data = self._sock.recv(socket_read_size) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E Failed: Timeout (>60.0s) from pytest-timeout. buf = <_io.BytesIO object at 0x12727ddf0> current_pos = 0 custom_timeout = False length = None marker = 0 raise_on_timeout = True self = sock = socket_read_size = 65536 timeout =