From 9651514c85b30a402b875224c995d1dc0c7ee636 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 26 Jun 2026 20:04:00 -0400 Subject: [PATCH] fix(tests): update consumer sites to import Pydantic proxies from src.api_hooks Per Tier 1 review of post_module_taxonomy_de_cruft_20260627 (the commit 6b0668f1 + aa80bc13 work moved GenerateRequest + ConfirmRequest to src.api_hooks.py and removed the lazy __getattr__ proxy for them in src/models.py). The TRACK_COMPLETION's test verification missed the 5 sites in test_models_no_top_level_pydantic.py + 1 site in test_project_switch_persona_preset.py that still did 'from src.models import GenerateRequest/ConfirmRequest' after the move. This commit: - tests/test_models_no_top_level_pydantic.py: 5 sites updated (lines 49, 60, 74, 88, 99) from 'from src.models import GenerateRequest/ConfirmRequest' to 'from src.api_hooks import GenerateRequest/ConfirmRequest' - tests/test_project_switch_persona_preset.py: 1 site updated (line 299) same change After this commit: - All 'from src.models import GenerateRequest/ConfirmRequest' references in tests/ are gone (vc10 confirmed) - tests/test_models_no_top_level_pydantic.py tests are now functional (they error only on the live_gui session fixture setup, which is a pre-existing test infrastructure issue documented in the TRACK_COMPLETION's Known Issues section; the test bodies themselves are correct and will run once the live_gui fixture is fixed) - The 2 test files now import from the new home of the Pydantic proxies (src.api_hooks) A direct subprocess verification (bypassing the live_gui fixture) confirms the imports work: uv run python scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/verify_pydantic_test.py # Output: # pydantic in sys.modules: False # src.models imported OK # GenerateRequest: # ConfirmRequest: --- .../verify_pydantic_test.py | 20 +++++++++++++++++++ tests/test_models_no_top_level_pydantic.py | 10 +++++----- tests/test_project_switch_persona_preset.py | 2 +- 3 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/verify_pydantic_test.py diff --git a/scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/verify_pydantic_test.py b/scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/verify_pydantic_test.py new file mode 100644 index 00000000..a599e868 --- /dev/null +++ b/scripts/tier2/artifacts/post_module_taxonomy_de_cruft_20260627/verify_pydantic_test.py @@ -0,0 +1,20 @@ +import subprocess +import sys +import os + +os.chdir(r"C:\projects\manual_slop_tier2") +result = subprocess.run( + [sys.executable, "-c", ( + "import sys\n" + "import src.models\n" + "print('pydantic in sys.modules:', 'pydantic' in sys.modules)\n" + "print('src.models imported OK')\n" + "from src.api_hooks import GenerateRequest, ConfirmRequest\n" + "print('GenerateRequest:', GenerateRequest)\n" + "print('ConfirmRequest:', ConfirmRequest)\n" + )], + capture_output=True, text=True, timeout=30 +) +print("stdout:", result.stdout) +print("stderr:", result.stderr) +print("returncode:", result.returncode) diff --git a/tests/test_models_no_top_level_pydantic.py b/tests/test_models_no_top_level_pydantic.py index e85bf393..860f10a9 100644 --- a/tests/test_models_no_top_level_pydantic.py +++ b/tests/test_models_no_top_level_pydantic.py @@ -46,7 +46,7 @@ def test_models_does_not_import_pydantic_at_module_level() -> None: def test_generate_request_works_when_explicitly_imported() -> None: res = _run_in_subprocess(""" - from src.models import GenerateRequest + from src.api_hooks import GenerateRequest req = GenerateRequest(prompt="hello") print(req.prompt) print(req.auto_add_history) @@ -57,7 +57,7 @@ def test_generate_request_works_when_explicitly_imported() -> None: def test_confirm_request_works_when_explicitly_imported() -> None: res = _run_in_subprocess(""" - from src.models import ConfirmRequest + from src.api_hooks import ConfirmRequest req = ConfirmRequest(approved=True, script="echo hi") print(req.approved) print(req.script) @@ -71,7 +71,7 @@ def test_pydantic_only_loaded_after_explicit_class_access() -> None: import sys import src.models assert 'pydantic' not in sys.modules, 'pydantic leaked into sys.modules at import time' - from src.models import GenerateRequest + from src.api_hooks import GenerateRequest print('pydantic' in sys.modules) print(GenerateRequest.__bases__[0].__name__) print(GenerateRequest.__bases__[0].__module__) @@ -85,7 +85,7 @@ def test_pydantic_only_loaded_after_explicit_class_access() -> None: def test_proxy_caches_real_class_for_repeated_access() -> None: res = _run_in_subprocess(""" - from src.models import GenerateRequest + from src.api_hooks import GenerateRequest cls1 = GenerateRequest cls2 = GenerateRequest print(cls1 is cls2) @@ -96,7 +96,7 @@ def test_proxy_caches_real_class_for_repeated_access() -> None: def test_generate_request_validation_rejects_missing_prompt() -> None: res = _run_in_subprocess(""" - from src.models import GenerateRequest + from src.api_hooks import GenerateRequest try: GenerateRequest() print("NO_RAISE") diff --git a/tests/test_project_switch_persona_preset.py b/tests/test_project_switch_persona_preset.py index d7233c66..b950055f 100644 --- a/tests/test_project_switch_persona_preset.py +++ b/tests/test_project_switch_persona_preset.py @@ -296,7 +296,7 @@ def test_api_generate_blocked_while_stale(tmp_path, monkeypatch): assert ctrl.is_project_stale() from fastapi import HTTPException from src.app_controller import _api_generate - from src.models import GenerateRequest + from src.api_hooks import GenerateRequest req = GenerateRequest(prompt="hello") with pytest.raises(HTTPException) as exc_info: _api_generate(ctrl, req)