c5a119d63f
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).
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
"""Phase 10 invariant tests (GREEN).
|
|
|
|
9 BC sites migrated via 7 helpers:
|
|
- _list_gemini_models_result (site 1)
|
|
- _delete_gemini_cache_result (sites 2+3)
|
|
- _should_cache_gemini_result (site 4)
|
|
- _create_gemini_cache_result (site 5)
|
|
- _send_cli_round_result (site 6)
|
|
- _run_tier4_analysis_result (site 7)
|
|
- _run_tier4_patch_callback_result (site 8)
|
|
- _run_tier4_patch_generation_result (site 9)
|
|
"""
|
|
import sys
|
|
sys.path.insert(0, ".")
|
|
|
|
|
|
def test_phase10_ai_client_bc_count_zero():
|
|
"""After Phase 10: ai_client BC count is 0 (was 17 at baseline)."""
|
|
import json
|
|
import subprocess
|
|
r = subprocess.run(
|
|
["uv", "run", "python", "scripts/audit_exception_handling.py",
|
|
"--include-baseline", "--json"],
|
|
capture_output=True, text=True
|
|
)
|
|
data = json.loads(r.stdout)
|
|
files = {f["filename"]: f for f in data["files"]}
|
|
ai = files["src\\ai_client.py"]
|
|
bc = sum(1 for x in ai["findings"] if x["category"] == "INTERNAL_BROAD_CATCH")
|
|
assert bc == 0, f"expected ai_client BC=0 after Phase 10, got {bc}"
|
|
|
|
|
|
def test_phase10_all_helpers_exist():
|
|
"""All 7 new _result helpers must exist on ai_client."""
|
|
import src.ai_client
|
|
expected = [
|
|
"_list_gemini_models_result",
|
|
"_delete_gemini_cache_result",
|
|
"_should_cache_gemini_result",
|
|
"_create_gemini_cache_result",
|
|
"_send_cli_round_result",
|
|
"_run_tier4_analysis_result",
|
|
"_run_tier4_patch_callback_result",
|
|
"_run_tier4_patch_generation_result",
|
|
]
|
|
for name in expected:
|
|
assert hasattr(src.ai_client, name), f"{name} helper missing from src.ai_client"
|
|
|
|
|
|
def test_phase10_legacy_functions_preserved():
|
|
"""Legacy functions preserved EXCEPT those OBLITERATED by cruft-removal Phase 4."""
|
|
import src.ai_client
|
|
legacy = [
|
|
"_send_gemini",
|
|
"_send_gemini_cli",
|
|
"run_tier4_analysis",
|
|
"run_tier4_patch_callback",
|
|
"run_tier4_patch_generation",
|
|
]
|
|
# _list_gemini_models wrapper was OBLITERATED by cruft-removal Phase 4
|
|
obliterated = ["_list_gemini_models"]
|
|
for name in legacy:
|
|
assert hasattr(src.ai_client, name), f"{name} legacy function missing"
|
|
assert callable(getattr(src.ai_client, name)), f"{name} not callable"
|
|
for name in obliterated:
|
|
assert not hasattr(src.ai_client, name), (
|
|
f"{name} wrapper must be OBLITERATED (cruft-removal Phase 4); "
|
|
f"callers must use {name}_result directly"
|
|
) |