Private
Public Access
0
0
Commit Graph

6 Commits

Author SHA1 Message Date
ed b3aeaa4376 fix(post_de_cruft_iter2): fix 3 pre-existing test failures + lazy tomli_w imports
1. tier-1-unit-core::test_audit_script_exits_zero
   - audit_main_thread_imports.py failed with 3 heavy top-level imports
   - Made tomli_w lazy in src/personas.py, src/tool_presets.py, src/workspace_manager.py
   - Made 'from scripts import py_struct_tools' lazy inside src/mcp_client.py:dispatch()
   - Audit now exits 0 (28 files in main-thread import graph, no heavy top-level imports)

2. tier-2-mock-app-headless::test_status_endpoint_authorized
   - /status endpoint goes through _api_status() which returns controller.ai_status (default 'idle'),
     not the literal 'ok' string the test expected
   - Updated test to expect 'idle' (the actual ai_status default for a fresh controller)

3. tier-3-live_gui::test_auto_switch_sim
   - _capture_workspace_profile() in src/gui_2.py referenced 'WorkspaceProfile' as a bare name,
     but the module had only 'from src import workspace_manager' (the module, not the class)
   - Added 'from src.workspace_manager import WorkspaceProfile' to fix the NameError
   - Profile save/load round-trip now works; auto-switch fires Tier 3 bound profile

Additional test fixes (uncovered by full run):
- tests/test_cruft_removal.py: patch 'src.mcp_client.py_struct_tools' no longer works
  (lazy import means the attribute doesn't exist). Patched 'scripts.py_struct_tools.py_remove_def'
  and '.py_move_def' directly at the source module.
- tests/test_command_palette_sim.py: 'from src.command_palette' was deleted in
  module_taxonomy_refactor; updated to 'from src.commands' (which now hosts _close_palette,
  _execute, and Command after the merge).

Production fix:
- src/presets.py:save_preset now raises ValueError when scope='project' but
  project_root is None (fail-fast per error_handling.md, prevents silent
  write to '.').

Type registry regenerated to reflect new line numbers.
2026-06-27 10:17:51 -04:00
ed 84af01a777 test(cruft_removal): Phase 9 invariant tests (4 tests; verify wrappers + tests)
Phase 9 (Patch Phase) invariant tests per Tier 1's spec.md §12.6:

1. test_phase9_audit_legacy_wrappers_finds_zero: 0 legacy wrappers
2. test_phase9_baseline_tests_31_of_31_pass: 31/31 baseline tests pass
3. test_phase9_gui_2_wrappers_gone: _detect_refresh_rate_win32 +
   _resolve_font_path deleted from src/gui_2.py
4. test_phase9_rag_engine_chunk_code_gone: RAGEngine._chunk_code deleted

The 3 wrappers Tier 1 said were remaining in the tier-2-clone
(per the remote-tracking branch at 8f6d044d) are actually all
gone in the merged branch state. The 7 originally-failing baseline
tests all pass.

This is the Phase 9 task 5 deliverable: invariant test that verifies
the 3 wrappers and 7 tests with REAL pytest output, not claimed counts.

Test result: 4/4 Phase 9 tests pass. Total cruft_removal tests: 18.
2026-06-21 08:41:10 -04:00
ed bf3a0b9f73 refactor(gui_2): obliterate 2 legacy wrappers _detect_refresh_rate_win32 + _resolve_font_path (Phase 6)
Phase 6 (2 of 9 cruft sites obliterated):

OBLITERATED wrappers:
1. _detect_refresh_rate_win32() -> float (1 caller in App.__init__)
   Migrated: caller now uses _detect_refresh_rate_win32_result(...).data
   with explicit .ok check; on failure uses 0.0 default (no fps cap).
2. _resolve_font_path(font_path, assets_dir) -> str (1 caller in App._load_fonts)
   Migrated: caller now uses _resolve_font_path_result(...).data with .ok
   check; on failure falls back to 'fonts/Inter-Regular.ttf' (the bundled Inter).

Test result: 127/127 pass.
Audit gate: src/gui_2.py --strict exits 0 (no new violations).
Wrapper count: 2 -> 0.

PITFALL encountered: edit_file ate a def line in _apply_runtime_caps_override.
The function body got attached below the OBLITERATED stub. Fixed by
restoring the def line.

This completes Phases 3-6 (all file-level wrapper removals).
Phase 7 (remaining files) is N/A — audit found 0 wrappers in any src/ file.

Next: Phase 8 (audit gate + end-of-track report + campaign close-out).
2026-06-20 20:17:52 -04:00
ed 9646f7cf7b refactor(rag_engine): obliterate legacy _chunk_code wrapper (Phase 5)
Phase 5 (1 of 9 cruft sites obliterated):

OBLITERATED: RAGEngine._chunk_code wrapper. It delegated to _chunk_code_result
and provided a fallback to _chunk_text on AST failure.

Migration: index_file() now calls _chunk_code_result directly with .ok check
+ chunk-size threshold check + fallback to _chunk_text inline. The structured
ErrorInfo is propagated if needed (no caller currently consumes it).

Sub-track 5 tests updated:
- tests/tier2/phase13_invariant_test.py: _chunk_code moved to obliterated list
- tests/tier2/phase13_site2_test.py: _legacy_no_broad_except -> _legacy_obliterated
- tests/test_cruft_removal.py: 2 new tests (wrapper-obliterated invariant +
  caller-uses-result invariant)

PITFALL encountered: the edit_file tool removed a leading space on the
next class method's 'def' line, causing an IndentationError. Fixed by
binary-write replacement preserving CRLF + leading-space styleguide convention
(project uses 1-space indentation; class body methods start at column 1).

Test result: 124/124 pass.
Audit gate: src/rag_engine.py --strict exits 0 (no new violations).
Wrapper count: 3 -> 2 (Phase 6 remaining: gui_2 2).
2026-06-20 20:13:10 -04:00
ed c5a119d63f refactor(ai_client): obliterate 5 legacy model-list wrappers (Phase 4)
Phase 4 (5 of 9 cruft sites obliterated):

OBLITERATED wrappers:
1. _reread_file_items (4 callers in _send_gemini + _send_gemini_cli + 2 others)
2. _list_anthropic_models (1 caller in list_models)
3. _list_gemini_models (1 caller in list_models)
4. _extract_gemini_thoughts (1 caller in _send_gemini)
5. _list_minimax_models (2 callers in _set_minimax_provider_result + set_provider)

Migration: each caller now uses the _result sibling directly with .ok check
+ .data extraction. The Result[T] error context (structured ErrorInfo) is now
propagated instead of dropped. _send_gemini gets .data with explicit .ok check.

Updated tests to assert OBLITERATED state (5 sub-track 5 tests inverted from
'_legacy_preserved' to '_legacy_obliterated'):
- tests/test_baseline_result.py: test_phase9_redo_modules_import_cleanly
- tests/tier2/phase10_invariant_test.py: _list_gemini_models removed from list
- tests/tier2/phase10_site1_test.py: _legacy_unchanged -> _legacy_obliterated
- tests/tier2/phase11_invariant_test.py: _extract/_list_minimax moved to obliterated
- tests/tier2/phase11_sites78_test.py: _legacy_preserved -> _legacy_obliterated
- tests/tier2/phase12_invariant_test.py: _list_anthropic moved to obliterated
- tests/tier2/phase12_site4_test.py: _legacy_preserved -> _legacy_obliterated
- tests/test_gemini_thinking_format.py: helper uses _result directly
- tests/test_cruft_removal.py: 5 new obliterated-wrappers invariant tests

Test result: 122/122 pass (31 baseline + 16 heuristic + 9 cruft + 5 thinking + 61 tier2).
Audit gate: src/ai_client.py --strict exits 0 (no new violations introduced).
Wrapper count: 9 -> 3 (Phase 5-6 remaining: rag_engine 1, gui_2 2).
2026-06-20 20:01:25 -04:00
ed 5c871dacac refactor(mcp_client): obliterate legacy _resolve_and_check wrapper; migrate 5 callers to _resolve_and_check_result (Phase 3)
Phase 3 (1 of 9 cruft sites obliterated):

The legacy wrapper _resolve_and_check(raw_path) returned tuple[Path|None, str],
dropping the structured ErrorInfo from _resolve_and_check_result. Callers in
dispatch_tool_call (py_remove_def, py_add_def, py_move_def, py_region_wrap) used
the pattern 'p, err = _resolve_and_check(path); if err: return err' which is
exactly the false drain the user wants obliterated.

Migration:
- DELETED: _resolve_and_check wrapper (lines 175-188 in src/mcp_client.py)
- UPDATED: 5 callers in dispatch_tool_call now call _resolve_and_check_result
  directly with .ok check + NilPath check + structured error routing
- UPDATED: 4 test files that monkey-patched _resolve_and_check to mock the
  Result helper instead:
  - test_mcp_ts_integration.py (1 mock)
  - test_ts_c_tools.py (2 mocks)
  - test_ts_cpp_tools.py (8 mocks)
  - test_cruft_removal.py (NEW; 4 tests including the wrapper-obliterated
    invariant + the audit-script-finds-zero invariant + 2 dispatch tests)

Test result: 51/51 pass (31 baseline + 16 heuristic + 4 cruft).
Audit gate: src/mcp_client.py --strict exits 0 (no new violations introduced).
Baseline audit: --include-baseline --strict exits 1 only due to 4 pre-existing
non-baseline INTERNAL_RETHROW sites in outline_tool.py / warmup.py /
vendor_capabilities.py (out of scope per spec).

The wrapper IS DELETED. No pass-through. No backward compat. The dead code dies.
2026-06-20 19:48:00 -04:00