"""Phase 11 sites 7+8: _extract_gemini_thoughts + _list_minimax_models Result helpers. Site 7 (_extract_gemini_thoughts): try: candidates = getattr(resp, "candidates", None) or [] for ... parts = getattr(content, "parts", None) or [] ... if thought: chunks.append(p.text) except Exception: pass return "".join(chunks).strip() Body: pass + empty default '' = SS violation (silent + data loss). Site 8 (_list_minimax_models): try: client = OpenAI(api_key=api_key, base_url=base_url) models_list = client.models.list() found = [m.id for m in models_list] if found: return sorted(found) except Exception: pass return ["MiniMax-M2.7", "MiniMax-M2.5", "MiniMax-M2.1", "MiniMax-M2"] Body: pass + hardcoded default = SS violation. """ import sys sys.path.insert(0, ".") def test_phase11_sites78_extract_gemini_thoughts_result_exists(): import src.ai_client assert hasattr(src.ai_client, "_extract_gemini_thoughts_result"), \ "_extract_gemini_thoughts_result helper missing" def test_phase11_sites78_list_minimax_models_result_exists(): import src.ai_client assert hasattr(src.ai_client, "_list_minimax_models_result"), \ "_list_minimax_models_result helper missing" def test_phase11_sites78_helpers_return_result(): import src.ai_client import inspect for name in ("_extract_gemini_thoughts_result", "_list_minimax_models_result"): fn = getattr(src.ai_client, name) sig = inspect.signature(fn) assert "Result" in str(sig.return_annotation), \ f"{name} return must be Result, got {sig.return_annotation}" def test_phase11_sites78_legacy_obliterated(): """Legacy wrappers OBLITERATED (cruft-removal Phase 4).""" import src.ai_client assert not hasattr(src.ai_client, "_extract_gemini_thoughts"), ( "_extract_gemini_thoughts legacy wrapper must be DELETED." ) assert not hasattr(src.ai_client, "_list_minimax_models"), ( "_list_minimax_models legacy wrapper must be DELETED." )