refactor(ai_client): obliterate 5 legacy model-list wrappers (Phase 4)

Phase 4 (5 of 9 cruft sites obliterated):

OBLITERATED wrappers:
1. _reread_file_items (4 callers in _send_gemini + _send_gemini_cli + 2 others)
2. _list_anthropic_models (1 caller in list_models)
3. _list_gemini_models (1 caller in list_models)
4. _extract_gemini_thoughts (1 caller in _send_gemini)
5. _list_minimax_models (2 callers in _set_minimax_provider_result + set_provider)

Migration: each caller now uses the _result sibling directly with .ok check
+ .data extraction. The Result[T] error context (structured ErrorInfo) is now
propagated instead of dropped. _send_gemini gets .data with explicit .ok check.

Updated tests to assert OBLITERATED state (5 sub-track 5 tests inverted from
'_legacy_preserved' to '_legacy_obliterated'):
- tests/test_baseline_result.py: test_phase9_redo_modules_import_cleanly
- tests/tier2/phase10_invariant_test.py: _list_gemini_models removed from list
- tests/tier2/phase10_site1_test.py: _legacy_unchanged -> _legacy_obliterated
- tests/tier2/phase11_invariant_test.py: _extract/_list_minimax moved to obliterated
- tests/tier2/phase11_sites78_test.py: _legacy_preserved -> _legacy_obliterated
- tests/tier2/phase12_invariant_test.py: _list_anthropic moved to obliterated
- tests/tier2/phase12_site4_test.py: _legacy_preserved -> _legacy_obliterated
- tests/test_gemini_thinking_format.py: helper uses _result directly
- tests/test_cruft_removal.py: 5 new obliterated-wrappers invariant tests

Test result: 122/122 pass (31 baseline + 16 heuristic + 9 cruft + 5 thinking + 61 tier2).
Audit gate: src/ai_client.py --strict exits 0 (no new violations introduced).
Wrapper count: 9 -> 3 (Phase 5-6 remaining: rag_engine 1, gui_2 2).
This commit is contained in:
ed
2026-06-20 20:01:25 -04:00
parent da7ac0ddb3
commit c5a119d63f
10 changed files with 133 additions and 110 deletions
+39
View File
@@ -81,4 +81,43 @@ def test_audit_script_finds_zero_mcp_client_wrappers():
)
assert "src\\mcp_client.py" not in r.stdout, (
f"expected 0 wrappers in src/mcp_client.py, but found:\n{r.stdout}"
)
# ============ Phase 4 (ai_client wrappers) ============
def test_phase4_reread_file_items_wrapper_obliterated():
"""Phase 4 invariant: the legacy _reread_file_items wrapper is DELETED."""
from src import ai_client
assert not hasattr(ai_client, "_reread_file_items"), (
"_reread_file_items legacy wrapper must be OBLITERATED. "
"Callers must use _reread_file_items_result(...).ok directly."
)
def test_phase4_list_anthropic_models_wrapper_obliterated():
from src import ai_client
assert not hasattr(ai_client, "_list_anthropic_models"), (
"_list_anthropic_models legacy wrapper must be OBLITERATED."
)
def test_phase4_list_gemini_models_wrapper_obliterated():
from src import ai_client
assert not hasattr(ai_client, "_list_gemini_models"), (
"_list_gemini_models legacy wrapper must be OBLITERATED."
)
def test_phase4_extract_gemini_thoughts_wrapper_obliterated():
from src import ai_client
assert not hasattr(ai_client, "_extract_gemini_thoughts"), (
"_extract_gemini_thoughts legacy wrapper must be OBLITERATED."
)
def test_phase4_list_minimax_models_wrapper_obliterated():
from src import ai_client
assert not hasattr(ai_client, "_list_minimax_models"), (
"_list_minimax_models legacy wrapper must be OBLITERATED."
)