# 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

## Failed Tests

1. `tests/test_app_controller_offloading.py::test_on_tool_log_offloading`
   - Patches `src.ai_client.get_current_tier` expecting it to affect `app_controller._on_tool_log()`
   - But `app_controller` imported the stub directly, so patch doesn't reach it

2. `tests/test_process_pending_gui_tasks.py::test_redundant_calls_in_process_pending_gui_tasks`
   - Patches `src.ai_client.set_provider` and `src.ai_client.reset_session`
   - Same root cause

3. `tests/test_process_pending_gui_tasks.py::test_gcli_path_updates_adapter`
   - Sets `ai_client._gemini_cli_adapter = None` expecting `app_controller` to see it
   - Same import aliasing issue

4. `tests/test_gui_updates.py::test_telemetry_data_updates_correctly`
   - Patches `src.ai_client.get_token_stats`
   - Same issue

5. `tests/test_gui_updates.py::test_gui_updates_on_event`
   - Same issue with `get_token_stats` patch

## Solution Options

### Option A: Fix Tests to Use Correct Patch Path
Change all patches from `patch('src.ai_client.X')` to `patch('src.ai_client_stub.X')`.

**Pros:**
- Minimal code change
- Resolves the actual issue
- Follows proper patch semantics

**Cons:**
- Must update all affected tests

### Option B: Add Module-Level Alias in src package
Create `src/ai_client.py` that re-exports from `ai_client_stub`:
```python
from src.ai_client_stub import *
```

**Pros:**
- Makes `src.ai_client` available as actual module
- Tests using `patch('src.ai_client.X')` would work

**Cons:**
- Creates dual namespace confusion
- May conflict with existing `ai_client_proxy.py`

### Option C: Fix app_controller to Not Use Alias
Change all `from src import ai_client_stub as ai_client` to `from src import ai_client` and ensure `src.ai_client` is the stub.

**Cons:**
- Significant refactor
- May break other imports

## Recommended Solution: Option A

Fix the tests to use the correct patch path (`src.ai_client_stub`). This is surgical and addresses the root cause without creating architectural complexity.

## Tasks

1. [ ] Fix `test_on_tool_log_offloading` - change patch path to `src.ai_client_stub.get_current_tier`
2. [ ] Fix `test_redundant_calls_in_process_pending_gui_tasks` - change patches to `src.ai_client_stub`
3. [ ] Fix `test_gcli_path_updates_adapter` - use correct patch/module path
4. [ ] Fix `test_telemetry_data_updates_correctly` - change patch to `src.ai_client_stub.get_token_stats`
5. [ ] Fix `test_gui_updates_on_event` - same as above
6. [ ] Run full batch test to verify all tests pass
7. [ ] Create checkpoint commit