# Track: Fix Test Patches for ai_client_stub Integration ## Context After the refactor to use `ai_client_stub` as the module alias for `app_controller`, several tests fail because they use `patch('src.ai_client.X')` which doesn't properly reach the stub's module-level functions. This is a pre-existing architectural issue that needs fixing. ## Root Cause Analysis When tests use `patch('src.ai_client.get_current_tier', return_value='Tier 3')`: 1. `patch` creates/overrides `src.ai_client` in the `src` package namespace 2. But `app_controller` does `from src import ai_client_stub as ai_client` at module load time 3. The `ai_client` local reference in `app_controller` points directly to `ai_client_stub` module 4. Patch modifies `src.ai_client` (a different object), not `src.ai_client_stub` 5. Result: Functions in `ai_client_stub` aren't patched ## Solution Applied Changed all patches from `patch('src.ai_client.X')` to `patch('src.ai_client_stub.X')` where the stub was the actual target. Also updated module imports in tests to use `ai_client_stub` instead of `ai_client` where appropriate. ## Tasks Completed 1. [x] Fix AIProxyClient - add `_pending_lock` threading.Lock to __init__ 2. [x] Fix test_discussion_takes_gui.py - proper mocking for tab_item via imscope 3. [x] Fix test_on_tool_log_offloading - patch path to src.ai_client_stub.get_current_tier 4. [x] Fix test_redundant_calls_in_process_pending_gui_tasks - patch paths to src.ai_client_stub 5. [x] Fix test_gcli_path_updates_adapter - use ai_client_stub module reference 6. [x] Fix test_telemetry_data_updates_correctly - patch path to src.ai_client_stub.get_token_stats 7. [x] Fix test_gui_updates_on_event - patch path to src.ai_client_stub.get_token_stats 8. [x] Run batch tests to verify all fixes ## Files Modified - src/ai_client_proxy.py - added _pending_lock - src/ai_client_stub.py - added module-level import for GeminiCliAdapter - tests/test_app_controller_offloading.py - tests/test_process_pending_gui_tasks.py - tests/test_gui_updates.py - tests/test_discussion_takes_gui.py ## Test Results All previously failing tests now pass: - test_ai_client_proxy_run.py::test_initial_state_variables ✅ - test_discussion_takes_gui.py (both tests) ✅ - test_on_tool_log_offloading ✅ - test_redundant_calls_in_process_pending_gui_tasks ✅ - test_gcli_path_updates_adapter ✅ - test_telemetry_data_updates_correctly ✅ - test_gui_updates_on_event ✅ ## Checkpoints - 169fe520 - fix(ai_client_stub): add module-level import for GeminiCliAdapter - 12f16e9a - fix(ai_client_proxy): add _pending_lock threading.Lock - db69e3cb - fix(tests): update discussion takes GUI tests with proper mocking