ed
dc397db7ed
refactor(src): eliminate 11 T | None legacy wrappers in favor of _result API
...
TIER-3 READ AGENTS.md + conductor/workflow.md + conductor/code_styleguides/error_handling.md + the 4 source files + 3 test files before this commit.
The code_path_audit_phase_2_20260624 track (Tier 2) shipped 11 audit
fixes (4 NG1 + 7 NG2) but used a heuristic bypass for 4 of the NG2
wrappers: legacy T | None functions that exist only to maintain test
patcher compatibility. Per the review at
docs/reports/REVIEW_TIER2_code_path_audit_phase_2_20260624.md Finding 8,
this track eliminates the legacy wrappers properly.
11 wrappers eliminated (8 main + 3 _legacy_compat inner):
- src/ai_client.py: get_current_tier (1 src + 1 test consumer)
- src/ai_client.py: _gemini_tool_declaration + _legacy_compat (2 test consumers)
- src/ai_client.py: run_tier4_patch_callback + _legacy_compat (was 0 direct callers
but had 2 callback references in app_controller/multi_agent_conductor;
callback contract migrated to Callable[[str, str], Result[str]] instead of
preserving an Optional[str] adapter)
- src/mcp_client.py: _get_symbol_node + _legacy_compat (8 in-file consumers)
- src/mcp_client.py: find_in_scope (nested inside _get_symbol_node_result;
private impl detail, audit doesn't catch T | None, left as-is)
- src/external_editor.py: launch_diff (1 src + 3 test + 1 live_gui test consumer)
- src/external_editor.py: launch_editor (no consumers; deleted)
- src/session_logger.py: log_tool_output (2 src + 3 test consumers)
- src/project_manager.py: parse_ts (no consumers; deleted)
For each consumer: replace legacy_fn(args) with legacy_fn_result(args).data.
For T | None checks: replace if x is None: with if not result.ok: or
if not result.ok or not isinstance(result.data, ...) (depending on pattern).
For run_tier4_patch_callback specifically: the wrapper was a callback adapter
(not a backward-compat shim) and had 2 callback references as consumers.
Rather than keep the adapter (which would re-introduce the Optional[str]
return that the strict audit catches), the patch_callback contract was migrated
from Callable[[str, str], Optional[str]] to Callable[[str, str], Result[str]]
in shell_runner.py + app_controller.py + 9 _send_<vendor>_result signatures
in ai_client.py. This propagates the Result[str] through the callback and
lets shell_runner unwrap with if r.ok and r.data instead of if patch_text.
Verification:
- audit_optional_in_3_files --strict: 0 return-type Optional[T] (down from 1)
- audit_exception_handling --strict: 0 violations (unchanged)
- audit_legacy_wrappers: 0 legacy wrappers (unchanged)
- 15 affected test files: 168 tests pass
- 8 mcp_client/structural/baseline test files: 55 tests pass
- 3 session/gui test files: 7 tests pass
- 0 return-type Optional[T] in src/ai_client.py (was 1: run_tier4_patch_callback)
2026-06-25 11:18:03 -04:00
..
2026-06-21 10:12:56 -04:00
2026-05-10 15:38:16 -04:00
2026-06-24 10:03:48 -04:00
2026-03-02 22:56:32 -05:00
2026-06-25 11:18:03 -04:00
2026-06-08 00:46:12 -04:00
2026-06-08 00:33:21 -04:00
2026-06-21 11:59:51 -04:00
2026-05-07 15:02:00 -04:00
2026-05-04 21:52:39 -04:00
2026-05-14 22:23:48 -04:00
2026-06-08 00:47:21 -04:00
2026-05-13 22:35:52 -04:00
2026-03-05 17:13:59 -05:00
2026-03-05 14:04:17 -05:00
2026-05-06 13:48:47 -04:00
2026-06-18 12:09:00 -04:00
2026-06-17 00:38:29 -04:00
2026-06-17 00:38:29 -04:00
2026-06-25 11:18:03 -04:00
2026-05-13 22:35:52 -04:00
2026-06-06 15:11:13 -04:00
2026-06-17 00:38:29 -04:00
2026-06-24 17:12:49 -04:00
2026-06-24 17:12:49 -04:00
2026-06-24 17:12:49 -04:00
2026-06-25 11:18:03 -04:00
2026-05-09 15:00:35 -04:00
2026-03-11 23:14:09 -04:00
2026-06-17 00:38:29 -04:00
2026-06-08 20:46:41 -04:00
2026-06-08 17:49:34 -04:00
2026-06-08 15:19:30 -04:00
2026-05-12 19:06:54 -04:00
2026-06-07 19:54:17 -04:00
2026-06-22 01:00:06 -04:00
2026-06-08 20:46:41 -04:00
2026-06-07 10:20:17 -04:00
2026-06-08 10:13:07 -04:00
2026-06-21 10:38:17 -04:00
2026-03-11 23:04:42 -04:00
2026-06-08 23:45:25 -04:00
2026-06-19 14:25:53 -04:00
2026-06-06 16:34:46 -04:00
2026-06-25 11:18:03 -04:00
2026-06-19 19:13:20 -04:00
2026-06-19 16:24:01 -04:00
2026-06-08 23:45:25 -04:00
2026-06-08 20:46:41 -04:00
2026-06-02 21:34:56 -04:00
2026-06-07 19:54:17 -04:00
2026-05-16 03:00:20 -04:00
2026-06-02 17:30:46 -04:00
2026-05-10 15:14:54 -04:00
2026-05-20 07:51:58 -04:00
2026-05-13 22:35:52 -04:00
2026-06-07 10:23:45 -04:00
2026-06-07 10:54:51 -04:00
2026-06-17 18:53:25 -04:00
2026-06-18 09:37:28 -04:00
2026-06-20 11:59:20 -04:00
2026-06-07 15:24:57 -04:00
2026-06-06 14:22:18 -04:00
2026-06-20 01:47:23 -04:00
2026-06-21 12:43:22 -04:00
2026-06-07 19:54:17 -04:00
2026-05-08 22:01:15 -04:00
2026-06-24 11:08:07 -04:00
2026-06-20 20:01:25 -04:00
2026-06-08 00:41:20 -04:00
2026-05-06 13:48:47 -04:00
2026-03-10 10:25:09 -04:00
2026-03-10 09:53:59 -04:00
2026-03-10 09:27:12 -04:00
2026-06-08 01:14:12 -04:00
2026-06-08 00:27:04 -04:00
2026-06-09 17:01:14 -04:00
2026-06-09 16:40:18 -04:00
2026-06-03 00:52:08 -04:00
2026-05-13 22:35:52 -04:00
2026-03-04 10:01:55 -05:00
2026-06-25 09:29:24 -04:00
2026-06-22 00:42:44 -04:00
2026-06-25 09:29:24 -04:00
2026-06-25 09:29:24 -04:00
2026-06-25 09:29:24 -04:00
2026-06-25 09:29:24 -04:00
2026-06-24 11:14:46 -04:00
2026-06-02 22:54:52 -04:00
2026-06-06 16:48:04 -04:00
2026-06-03 14:25:59 -04:00
2026-06-03 14:53:05 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-06-17 00:29:21 -04:00
2026-06-17 00:33:36 -04:00
2026-06-09 18:42:53 -04:00
2026-05-16 03:00:20 -04:00
2026-05-16 11:22:41 -04:00
2026-06-17 22:38:17 -04:00
2026-05-16 03:00:20 -04:00
2026-06-18 12:09:00 -04:00
2026-06-17 23:15:57 -04:00
2026-05-20 07:51:58 -04:00
2026-03-22 12:59:10 -04:00
2026-06-17 22:38:17 -04:00
2026-05-16 17:58:19 -04:00
2026-06-17 00:38:29 -04:00
2026-03-05 16:37:30 -05:00
2026-06-21 08:41:10 -04:00
2026-05-11 17:15:04 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-06-17 00:38:29 -04:00
2026-05-16 03:00:20 -04:00
2026-06-06 18:30:44 -04:00
2026-06-02 01:42:41 -04:00
2026-06-07 19:54:17 -04:00
2026-05-09 15:00:35 -04:00
2026-06-15 18:21:58 -04:00
2026-06-03 08:33:10 -04:00
2026-05-09 12:35:58 -04:00
2026-03-06 12:48:02 -05:00
2026-06-24 13:48:33 -04:00
2026-06-07 21:21:38 -04:00
2026-06-25 11:18:03 -04:00
2026-06-19 14:25:53 -04:00
2026-05-16 03:00:20 -04:00
2026-03-12 15:41:01 -04:00
2026-06-16 19:06:09 -04:00
2026-06-07 10:10:53 -04:00
2026-05-13 22:35:52 -04:00
2026-06-03 12:24:51 -04:00
2026-05-20 07:51:58 -04:00
2026-05-16 03:00:20 -04:00
2026-03-06 12:48:02 -05:00
2026-05-16 03:00:20 -04:00
2026-06-17 00:38:29 -04:00
2026-06-17 00:38:29 -04:00
2026-06-17 00:38:29 -04:00
2026-05-13 22:35:52 -04:00
2026-06-20 20:01:25 -04:00
2026-06-07 21:21:38 -04:00
2026-05-10 15:38:16 -04:00
2026-06-20 17:54:48 -04:00
2026-06-21 12:57:32 -04:00
2026-06-24 17:12:49 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-06-17 00:38:29 -04:00
2026-06-21 23:06:54 -04:00
2026-06-09 15:37:47 -04:00
2026-06-06 17:16:53 -04:00
2026-06-25 11:18:03 -04:00
2026-06-07 14:43:36 -04:00
2026-03-13 12:05:49 -04:00
2026-05-06 13:48:47 -04:00
2026-05-13 22:35:52 -04:00
2026-06-03 11:27:04 -04:00
2026-06-07 19:54:17 -04:00
2026-06-03 11:27:04 -04:00
2026-05-16 15:59:40 -04:00
2026-06-19 12:36:21 -04:00
2026-05-13 22:35:52 -04:00
2026-06-19 09:40:01 -04:00
2026-06-05 10:33:38 -04:00
2026-06-05 10:25:25 -04:00
2026-05-13 22:35:52 -04:00
2026-05-16 03:00:20 -04:00
2026-06-03 11:27:04 -04:00
2026-06-07 19:54:17 -04:00
2026-06-02 17:30:46 -04:00
2026-06-02 02:20:07 -04:00
2026-05-13 22:35:52 -04:00
2026-06-02 17:30:46 -04:00
2026-06-06 21:29:03 -04:00
2026-05-16 01:21:27 -04:00
2026-06-08 15:19:30 -04:00
2026-06-17 00:38:29 -04:00
2026-05-13 22:35:52 -04:00
2026-06-25 11:18:03 -04:00
2026-06-02 01:27:32 -04:00
2026-05-16 03:00:20 -04:00
2026-05-05 17:50:55 -04:00
2026-06-07 19:54:17 -04:00
2026-06-17 22:42:10 -04:00
2026-06-17 22:42:10 -04:00
2026-05-12 19:02:30 -04:00
2026-06-08 17:51:39 -04:00
2026-06-07 19:54:17 -04:00
2026-06-07 01:34:48 -04:00
2026-06-15 09:41:39 -04:00
2026-06-09 15:37:47 -04:00
2026-06-17 00:38:29 -04:00
2026-06-15 11:04:46 -04:00
2026-06-09 15:42:00 -04:00
2026-06-18 14:26:12 -04:00
2026-06-03 17:37:44 -04:00
2026-06-24 13:48:47 -04:00
2026-06-15 13:52:38 -04:00
2026-06-15 13:25:31 -04:00
2026-06-03 13:47:08 -04:00
2026-06-15 18:27:40 -04:00
2026-06-07 21:21:38 -04:00
2026-03-06 12:48:02 -05:00
2026-03-07 12:43:29 -05:00
2026-06-22 01:00:00 -04:00
2026-05-09 15:00:35 -04:00
2026-06-21 23:06:54 -04:00
2026-06-06 18:01:39 -04:00
2026-03-07 16:25:44 -05:00
2026-06-03 21:48:12 -04:00
2026-06-06 16:58:32 -04:00
2026-06-04 23:13:33 -04:00
2026-06-03 21:14:16 -04:00
2026-06-03 11:08:58 -04:00
2026-06-03 21:33:47 -04:00
2026-06-03 10:59:57 -04:00
2026-05-06 13:48:47 -04:00
2026-06-12 18:07:16 -04:00
2026-03-12 15:31:10 -04:00
2026-03-05 17:13:59 -05:00
2026-06-22 00:59:35 -04:00
2026-06-20 19:48:00 -04:00
2026-06-25 09:29:24 -04:00
2026-06-24 17:12:49 -04:00
2026-06-25 11:18:03 -04:00
2026-05-09 15:00:35 -04:00
2026-05-16 14:45:06 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-06-07 19:54:17 -04:00
2026-05-16 14:45:06 -04:00
2026-06-06 13:30:18 -04:00
2026-05-16 03:00:20 -04:00
2026-05-16 03:00:20 -04:00
2026-03-05 16:37:30 -05:00
2026-03-07 20:32:59 -05:00
2026-06-07 17:57:36 -04:00
2026-03-06 12:48:02 -05:00
2026-06-10 09:16:46 -04:00
2026-03-02 13:26:20 -05:00
2026-06-07 10:01:40 -04:00
2026-06-07 19:54:17 -04:00
2026-06-18 14:40:04 -04:00
2026-06-24 17:12:49 -04:00
2026-06-22 00:59:42 -04:00
2026-06-17 00:38:29 -04:00
2026-06-19 12:36:21 -04:00
2026-06-17 00:30:48 -04:00
2026-06-17 22:31:35 -04:00
2026-06-07 19:54:17 -04:00
2026-05-13 22:35:52 -04:00
2026-03-07 00:15:06 -05:00
2026-06-19 12:36:21 -04:00
2026-03-07 16:41:47 -05:00
2026-05-06 14:59:34 -04:00
2026-05-06 14:59:34 -04:00
2026-05-06 14:30:22 -04:00
2026-03-10 11:09:11 -04:00
2026-03-10 23:21:14 -04:00
2026-03-10 23:21:14 -04:00
2026-06-17 00:38:29 -04:00
2026-05-10 15:46:53 -04:00
2026-05-04 18:49:18 -04:00
2026-03-07 16:36:04 -05:00
2026-05-09 15:00:35 -04:00
2026-05-09 15:00:35 -04:00
2026-05-09 15:00:35 -04:00
2026-06-03 15:18:18 -04:00
2026-06-06 01:12:29 -04:00
2026-06-07 19:54:17 -04:00
2026-03-07 11:24:05 -05:00
2026-05-06 13:48:47 -04:00
2026-03-05 15:10:53 -05:00
2026-06-19 09:40:01 -04:00
2026-05-09 15:00:35 -04:00
2026-05-16 15:59:40 -04:00
2026-06-07 16:56:05 -04:00
2026-06-11 16:38:09 -04:00
2026-06-22 00:59:50 -04:00
2026-06-11 16:38:09 -04:00
2026-06-20 08:25:27 -04:00
2026-06-08 00:47:03 -04:00
2026-06-15 18:05:45 -04:00
2026-06-09 17:10:33 -04:00
2026-06-12 20:14:01 -04:00
2026-06-12 20:14:40 -04:00
2026-05-16 15:59:40 -04:00
2026-06-17 00:38:29 -04:00
2026-06-10 17:20:57 -04:00
2026-06-10 14:43:27 -04:00
2026-06-16 00:09:02 -04:00
2026-05-14 23:38:23 -04:00
2026-06-09 10:37:14 -04:00
2026-06-10 15:14:35 -04:00
2026-06-12 16:29:22 -04:00
2026-06-17 00:38:29 -04:00
2026-06-09 16:14:40 -04:00
2026-05-16 15:59:40 -04:00
2026-05-16 14:45:06 -04:00
2026-06-25 11:18:03 -04:00
2026-03-12 19:08:51 -04:00
2026-03-06 16:43:11 -05:00
2026-05-16 14:45:06 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-05-13 22:35:52 -04:00
2026-03-07 11:54:11 -05:00
2026-05-11 18:19:50 -04:00
2026-06-17 00:38:29 -04:00
2026-06-06 13:57:26 -04:00
2026-05-15 17:17:05 -04:00
2026-05-04 04:52:40 -04:00
2026-06-19 12:36:21 -04:00
2026-03-07 15:20:39 -05:00
2026-06-17 00:38:29 -04:00
2026-05-09 15:00:35 -04:00
2026-05-09 15:00:35 -04:00
2026-06-09 16:25:44 -04:00
2026-03-19 19:53:09 -04:00
2026-06-07 19:54:17 -04:00
2026-05-13 22:35:52 -04:00
2026-05-16 14:45:06 -04:00
2026-03-09 23:16:02 -04:00
2026-06-19 14:25:53 -04:00
2026-06-06 16:55:20 -04:00
2026-06-04 22:31:22 -04:00
2026-06-17 14:20:17 -04:00
2026-06-17 10:26:32 -04:00
2026-03-09 01:13:23 -04:00
2026-06-04 23:16:21 -04:00
2026-05-16 15:59:40 -04:00
2026-05-16 03:00:20 -04:00
2026-06-15 14:26:32 -04:00
2026-05-06 20:37:48 -04:00
2026-06-24 23:20:16 -04:00
2026-06-16 19:13:30 -04:00
2026-06-16 20:25:44 -04:00
2026-06-17 14:50:01 -04:00
2026-06-19 07:41:15 -04:00
2026-06-16 22:26:04 -04:00
2026-06-17 00:38:29 -04:00
2026-06-06 16:09:16 -04:00
2026-06-17 00:38:29 -04:00
2026-05-10 10:13:56 -04:00
2026-06-17 00:38:29 -04:00
2026-05-16 15:59:40 -04:00
2026-06-25 11:18:03 -04:00
2026-03-10 09:53:59 -04:00
2026-03-11 20:30:09 -04:00
2026-05-09 15:00:35 -04:00
2026-03-10 09:27:12 -04:00
2026-03-10 09:27:12 -04:00
2026-06-09 16:14:40 -04:00
2026-05-13 22:35:52 -04:00
2026-05-09 15:00:35 -04:00
2026-05-13 22:35:52 -04:00
2026-06-20 19:48:00 -04:00
2026-06-20 19:48:00 -04:00
2026-06-22 01:02:38 -04:00
2026-05-04 05:18:04 -04:00
2026-05-16 11:22:41 -04:00
2026-05-09 16:55:45 -04:00
2026-03-09 23:25:06 -04:00
2026-03-07 21:40:40 -05:00
2026-06-11 21:46:41 -04:00
2026-06-03 11:31:29 -04:00
2026-06-21 15:32:46 -04:00
2026-06-21 15:34:18 -04:00
2026-06-21 16:33:44 -04:00
2026-06-21 15:35:41 -04:00
2026-06-21 15:39:22 -04:00
2026-06-05 11:52:49 -04:00
2026-06-10 15:13:25 -04:00
2026-05-16 03:00:20 -04:00
2026-06-10 15:45:44 -04:00
2026-05-13 22:35:52 -04:00
2026-03-04 09:46:02 -05:00
2026-06-06 22:48:50 -04:00
2026-06-07 16:02:30 -04:00
2026-06-21 22:39:14 -04:00
2026-06-22 01:00:06 -04:00
2026-03-04 10:01:55 -05:00
2026-05-05 20:51:03 -04:00
2026-06-09 20:45:24 -04:00
2026-06-05 20:14:39 -04:00
2026-05-13 22:35:52 -04:00
2026-06-10 15:14:35 -04:00