Files
manual_slop/conductor/tracks/test_patch_fixes_20260513/spec.md
T
ed 12f16e9a11 fix(ai_client_proxy): add _pending_lock threading.Lock
And fix test_discussion_takes_gui.py patches to use ai_client_stub
2026-05-13 11:24:58 -04:00

3.3 KiB

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:

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

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