[gw5] darwin -- Python 3.12.12 /Users/cao/.pyenv/versions/3.12.12/bin/python3.12 tests/cli/test_sector_momentum_filter.py:3436: in test_consolidation_passes result = self._run_filter(picks, ch_data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ch_data = {'MOO': {'allows_concentration': False, 'dvr': 0.5, 'long_term_breakout': {'is_breakout': False}, 'regime': 'consolidation', ...}} picks = [{'effective_score': 100, 'momentum_final_score': 0.05, 'sector': 'Agriculture', 'sector_etf': 'MOO', ...}] self = tests/cli/test_sector_momentum_filter.py:3376: in _run_filter return apply_sector_momentum_filter( apply_sector_momentum_filter = channel_regime_data = {'MOO': {'allows_concentration': False, 'dvr': 0.5, 'long_term_breakout': {'is_breakout': False}, 'regime': 'consolidation', ...}} date = json = mock_exists = .mock_exists at 0x12a51d080> mock_read_text = .mock_read_text at 0x12a51c7c0> picks = [{'effective_score': 100, 'momentum_final_score': 0.05, 'sector': 'Agriculture', 'sector_etf': 'MOO', ...}] self = trading_day = datetime.date(2026, 3, 13) rtrader/cli/trader_eod_core/services/log_formatting_service.py:1700: in apply_sector_momentum_filter assignment = resolve_sector_etf_with_assignment(symbol, trading_day, snapshot_dir=snap_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CAUTION_WORSENING_BLOCK = True CHANNEL_REGIME_FILTER_ENABLED = True EXHAUSTION_FILTER_ENABLED = False INSTITUTIONAL_DISTRIBUTION_FILTER_ENABLED = False NEGATIVE_MOMENTUM_FILTER_ENABLED = False NEGATIVE_SCORE_FILTER_ENABLED = False NfsReadStatus = OK_WORSENING_FILTER_ENABLED = False OPTIONS_BEARISH_THRESHOLD = 1.0 OPTIONS_BULLISH_THRESHOLD = 1.0 OPTIONS_SENTIMENT_ENABLED = False OVERHEATED_SECTOR_FILTER_ENABLED = False SECTOR_BREAKOUT_EXCEPTION_ENABLED = False SECTOR_BREAKOUT_LOOKBACK_DAYS = 1 SECTOR_BREAKOUT_MIN_BREAKOUT_CONF = 1.0 SECTOR_BREAKOUT_MIN_CORRELATION = 1.0 SECTOR_BREAKOUT_MIN_MEMBERSHIP_CONF = 1.0 SYMBOL_CROSS_CHECK_THRESHOLD = 1.0 TREND_STATE_FILTER_ENABLED = False _P14 = _capitulation = False _find_spy_snap = _json_spy = _load_sector_channel = ._load_sector_channel at 0x12a51cc20> _market_defensive = True _nfs_base_r14 = '/Users/cao/mnt/silverssd' _r14_ch = {'allows_concentration': False, 'dvr': 0.5, 'long_term_breakout': {'is_breakout': False}, 'regime': 'consolidation', ...} _r14_data = {'rows': [{'channel_regime': {'allows_concentration': False, 'dvr': 0.5, 'long_term_breakout': {'is_breakout': False}, 'regime': 'consolidation', ...}}]} _r14_dvr = 0.5 _r14_path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-03-13/MOO.json') _r14_regime = 'consolidation' _r14_rows = [{'channel_regime': {'allows_concentration': False, 'dvr': 0.5, 'long_term_breakout': {'is_breakout': False}, 'regime': 'consolidation', ...}}] _r14_sect_mom = None _r14_sect_mom_val = None _r14_sector_etf = 'MOO' _r14_sector_strong = False _r14_slope = 0.0 _r14_suggests_exit = False _sector_channel_cache = {} _spy_ch = {'allows_concentration': False, 'dvr': 0.0151, 'gap_detected': False, 'gap_direction': '', ...} _spy_data = {'charts': {}, 'component_versions': {'divergence_detector': 19313, 'liquidation_engine': 19313}, 'created_at': '2026-03-13T19:03:58.367671+00:00', 'generated_at': '2026-03-13T19:03:58.367671+00:00', ...} _spy_dvr = 0.0151 _spy_mom = {'alpha_3d': -0.02405147033826727, 'final_score': -0.018922425843142947, 'last_5d_ohlc': [{'close': 678.3, 'date': '20...ose': 663.72, 'date': '2026-03-13', 'high': 672.335, 'low': 662.1, ...}], 'momentum_score': -0.019066724022033524, ...} _spy_momentum_guard_enabled = True _spy_path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-03-13/SPY.json') _spy_regime = 'shaking' _spy_ret10d = -0.03270374256733115 _spy_ret10d_threshold = 1.0 _spy_rows = [{'c1_to_c3_slope': 0.138936, 'c1_to_c3_slope_override': True, 'channel_regime': {'allows_concentration': False, 'dvr': 0.0151, 'gap_detected': False, 'gap_direction': '', ...}, 'chart_path': None, ...}] _spy_rsi = 34.911912073702965 _spy_rsi_threshold = 1.0 _spy_slope = -0.000578 _spy_snapshot_row = {'c1_to_c3_slope': 0.138936, 'c1_to_c3_slope_override': True, 'channel_regime': {'allows_concentration': False, 'dvr': 0.0151, 'gap_detected': False, 'gap_direction': '', ...}, 'chart_path': None, ...} _spy_status = _spy_text = '{\n "symbol": "SPY",\n "indicator": "divergence",\n "trading_day": "2026-03-13",\n "generated_at": "2026-03-13T19...n"\n }\n },\n "component_versions": {\n "divergence_detector": 19313,\n "liquidation_engine": 19313\n }\n}' _symbol_options_bearish = ._symbol_options_bearish at 0x12a51d440> bearish_families = set() cfg = exempt_symbols = None json = market_stress_level = None pick = {'effective_score': 100, 'momentum_final_score': 0.05, 'sector': 'Agriculture', 'sector_etf': 'MOO', ...} picks = [{'effective_score': 100, 'momentum_final_score': 0.05, 'sector': 'Agriculture', 'sector_etf': 'MOO', ...}] primary_etf_for_filter = None read_text_with_status = resolve_sector_etf_with_assignment = result = SectorMomentumFilterResult(filtered_picks=[], filtered_out_by_sector={}, saved_by_individual_momentum=[], filtered_out..._channel_regime={}, market_defensive=True, spy_momentum_guard=False, spy_regime_info='shaking slope=-0.0006 dvr=0.015') sector_direction = None sector_momentum_data = None sector_options_sentiment = None snap_dir = 'snapshots/2026-03-13' snap_dir_r14 = 'snapshots/2026-03-13' snapshot_dir = None symbol = 'CTVA' symbol_momentum = 0.05 symbol_options_sentiment = None symbol_sectors = None trading_day = datetime.date(2026, 3, 13) trend_stats_cache = {} weak_sectors = set() rtrader/services/soft_sector_service.py:1973: in resolve_sector_etf_with_assignment soft_sectors = _load_soft_sectors_from_snapshot(symbol, trading_day, snapshot_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AILabelRepository = age_days = 121 ai_label = SectorAILabel(symbol='CTVA', labeled_etf='MOO', sector_name='Agribusiness', reasoning="Corteva operates in the agricul...'ai', model_used='minimax/MiniMax-M2.1', confidence=0.95, labeled_at=datetime.datetime(2026, 2, 10, 14, 6, 57, 123000)) broad_etf = 'XLB' label_at = datetime.datetime(2026, 2, 10, 14, 6, 57, 123000, tzinfo=datetime.timezone.utc) label_is_fresh = False max_age_days = 60 snapshot_dir = 'snapshots/2026-03-13' symbol = 'CTVA' trading_day = datetime.date(2026, 3, 13) rtrader/services/soft_sector_service.py:1901: in _load_soft_sectors_from_snapshot status, text = read_text_with_status(snapshot_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ NFS_SNAPSHOTS_PATH = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots') NfsReadStatus = json = read_text_with_status = snapshot_dir = 'snapshots/2026-03-13' snapshot_path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-03-13/CTVA.json') symbol = 'CTVA' trading_day = datetime.date(2026, 3, 13) rtrader/utils/nfs.py:273: in read_text_with_status minio_text = _read_from_minio(s3key) ^^^^^^^^^^^^^^^^^^^^^^^ path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-03-13/CTVA.json') s3key = 'snapshots/2026-03-13/CTVA.json' timeout = 2.0 rtrader/utils/nfs.py:236: in _read_from_minio data = response.read().decode("utf-8") ^^^^^^^^^^^^^^^ _is_minio_reachable = client = minio_client = response = s3key = 'snapshots/2026-03-13/CTVA.json' ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/response.py:1112: in read data = self._raw_read(amt) ^^^^^^^^^^^^^^^^^^^ amt = None cache_content = False decode_content = True self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/response.py:1028: in _raw_read data = self._fp_read(amt, read1=read1) if not fp_closed else b"" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ amt = None fp_closed = False read1 = False self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/response.py:1011: in _fp_read return self._fp.read(amt) if amt is not None else self._fp.read() ^^^^^^^^^^^^^^^ amt = None c_int_max = 2147483647 read1 = False self = ../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:495: in read s = self._safe_read(self.length) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ amt = None self = ../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:642: in _safe_read data = self.fp.read(amt) ^^^^^^^^^^^^^^^^^ amt = 147696 self = ../.pyenv/versions/3.12.12/lib/python3.12/socket.py:720: in readinto return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ E Failed: Timeout (>60.0s) from pytest-timeout. b = self =