- test_paths.py: explicit initialize_paths(<empty_config>) instead of
SLOP_CONFIG env var (v3 design); add restore_paths fixture so other
tests keep their conftest workspace init.
- test_summary_cache.py: use tmp_path (under ./tests/) instead of
hardcoded Path('.test_cache') that FR1 blocks.
- test_orchestrator_pm_history.py: use tempfile.mkdtemp() instead of
writing to project-root 'test_conductor/' that FR1 blocks.
- test_gui_paths.py::test_save_paths: mock src.paths.initialize_paths
instead of src.paths.reset_paths (v3 entry point).
All 12 tests pass in the Tier 2 clone after these fixes.
project_manager.py (3 sites):
- get_all_tracks returns list[dict[str, Any]] where each dict now
has an 'errors' field (list[ErrorInfo]) capturing per-track
metadata recovery. The 3 SILENT_SWALLOW sites (state.from_dict,
metadata.json, plan.md) now append to this list instead of
silently passing.
orchestrator_pm.py (2 sites):
- get_track_history_summary returns Result[str]. The 2 SILENT_SWALLOW
sites (metadata.json + spec.md reads) append to a scan_errors list
that's threaded through the Result.
Tests updated to check result.ok and use result.data.
Phase 1.2 migrated src/orchestrator_pm.py:86 to send_result(). The
test_generate_tracks_with_history test mocked src.ai_client.send,
which would break once Phase 1.2 was applied. (Confirmed: test failed
after Phase 1.2 commit.)
Changes:
- Replace @patch(src.ai_client.send) with @patch(src.ai_client.send_result)
- Rename mock_send to mock_send_result
- Wrap mock return_value with Result(data="[]")
- Add "from src.result_types import Result" import
All 3 tests in test_orchestrator_pm_history.py pass.
Applied 236 return type annotations to functions with no return values
across 100+ files (core modules, tests, scripts, simulations).
Added Phase 4 to python_style_refactor track for remaining 597 items
(untyped params, vars, and functions with return values).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>