Commit Graph
3966 Commits
Author SHA1 Message Date
ed ca4a78dcc1 refactor(ai_client): narrow except in set_provider/set_tool_preset/set_bias_profile (Phase 9 sites 3+4+5)
Narrowed 3 INTERNAL_BROAD_CATCH sites to specific exception types:

1. set_provider (L394): except Exception -> except (OSError, ValueError)
   for the credential loading fallback

2. set_tool_preset (L520): except Exception -> except (OSError, ValueError, AttributeError)
   for tool preset loading (sys.stderr.write + flush preserved)

3. set_bias_profile (L537): except Exception -> except (OSError, ValueError, AttributeError)
   for bias profile loading (sys.stderr.write + flush preserved)

Sites 4-5 are now narrow+log patterns which the audit will classify as
INTERNAL_SILENT_SWALLOW (a violation per the styleguide's anti-sliming
rule). They will be addressed in Phase 11 (silent-swallow cleanup).
2026-06-20 11:03:45 -04:00
ed d8d5089271 refactor(ai_client): narrow 'except:' to specific types in _classify_deepseek/minimax_error (Phase 9 sites 1+2)
The bare 'except:' in _classify_deepseek_error (L332) and _classify_minimax_error (L355)
was classified as INTERNAL_BROAD_CATCH. Narrowed to 'except (ValueError, AttributeError)'
since the only realistic exceptions from exc.response.json() are JSONDecodeError (subclass of ValueError)
and AttributeError (if exc.response is None or .json() is missing).
2026-06-20 11:00:59 -04:00
ed 57ae4ce40a TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 9
Phase 9 = ai_client Batch A: 8 INTERNAL_BROAD_CATCH sites in src/ai_client.py.
ai_client is the AI provider SDK layer (Anthropic/Gemini/DeepSeek/MiniMax).
17 BC sites total (per Phase 1 audit); first 8 sites = Batch A.

The 4 BOUNDARY_SDK sites stay as-is (vendor SDK exceptions are converted).
The 4 INTERNAL_PROGRAMMER_RAISE sites stay as-is (raise AttributeError in
__getattr__ etc.). The 17 INTERNAL_COMPLIANT sites stay as-is.

The 9 INTERNAL_SILENT_SWALLOW and 7 INTERNAL_RETHROW sites are handled in
Phases 11 and 12 respectively.

Target: ai_client BC 17 -> 9 after Batch A.
2026-06-20 10:58:22 -04:00
ed 0b003f6566 conductor(plan): mark Phase 8 complete (mcp_client SS+BC=0) 2026-06-20 10:57:15 -04:00
ed dec1780c24 test(baseline): add 3 Phase 8 invariant tests (mcp_client SS=0, MIG=0)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 8.

Phase 8 = mcp_client silent-swallow + UNCLEAR + nested BC cleanup:
- 5 INTERNAL_SILENT_SWALLOW sites migrated (L171 _is_allowed via Path.is_relative_to;
  L1661+L1666 stop via ErrorInfo accumulation + stdout drain)
- 3 nested BC sites migrated (_search_file, derive_code_path_result, trace)
- mcp_client now has ZERO migration-target sites

Total tests: 25 pass (4 Phase 1 + 3 Phase 2 + 3 Phase 3 + 3 Phase 4 + 3 Phase 5 +
3 Phase 6 + 3 Phase 7 + 3 Phase 8).

Audit: mcp_client BOUNDARY_CONVERSION: 5, INTERNAL_COMPLIANT: 43.
Migration-target: 0 (was 9 after Phase 7).
2026-06-20 10:56:27 -04:00
ed bd36aa4b65 conductor(track): nagent_review_v3.1 thicken §1 Campaigns cluster 2026-06-20 10:56:26 -04:00
ed d32880c700 refactor(mcp_client): migrate 3 nested helper BC sites to Result-drain (Phase 8)
Three nested helper functions inside _result variants had silent-swallow
or broad-catch patterns that the audit still flagged:

1. py_find_usages_result._search_file (L846):
   Was: 'try/except Exception: pass' (silent-swallow per-file read errors)
   Now: try/except (OSError, UnicodeDecodeError) as e: errors.append(ErrorInfo(...))
   Errors propagated via the parent's Result.errors

2. derive_code_path_result (L957):
   Was: 'try/except Exception: continue' (silent-swallow file parse errors)
   Now: try/except (SyntaxError, ValueError) as e: file_errors.append(ErrorInfo(...))
   Errors propagated via the parent's Result.errors

3. derive_code_path_result._trace (L996):
   Was: try/except Exception as e: output.append(f-string with error)
   Now: same output.append + ALSO appends ErrorInfo to file_errors
   Drain: output appears in the result data string (operator-visible)

All 3 sites now comply with the data-oriented convention.

Audit: mcp_client migration-target sites: 0 (was 3). Categories:
  BOUNDARY_CONVERSION: 5, INTERNAL_COMPLIANT: 43
2026-06-20 10:54:28 -04:00
ed 44ae7a1bcb conductor(plan): nagent_review_v3.1 mark Phase 1 complete 2026-06-20 10:53:58 -04:00
ed 8fb8276261 conductor(track): nagent_review_v3.1 Phase 1 setup + audit 2026-06-20 10:47:34 -04:00
ed e51cbd2c0f refactor(mcp_client): migrate L1661+L1666 stop to Result-drain pattern (Phase 8 sites 2+3)
The legacy StdioMCPServer.stop() had 2 'try/except Exception: pass' blocks
(silent-swallow). Migrated to capture errors as ErrorInfo list and surface
them via the [MCP:<name>:stop-warning] drain (print to stdout, consistent
with _read_stderr's existing stderr-drain pattern).

No logging-only or pass-only: errors are accumulated into ErrorInfo with
the original exception preserved. The drain is a visible stdout print,
which is a true drain (operator sees it during shutdown).

Audit: mcp_client INTERNAL_SILENT_SWALLOW 2 -> 0. Total mcp_client migration-target sites: 0.
2026-06-20 10:43:14 -04:00
ed 87f8c0575d refactor(mcp_client): migrate L171 _is_allowed to Path.is_relative_to (Phase 8 site 1)
The legacy code used 'try: rp.relative_to(cwd); return True; except ValueError: pass'
to check path containment. Python 3.9+ has Path.is_relative_to() which returns
bool directly, eliminating the silent-swallow try/except entirely.

This is a NON-SLIMING migration: the function's behavior is unchanged (still
returns True/False), the test of path containment is the same, but the
implementation no longer relies on bare except+pass. No logging added, no
silenced error, just a cleaner API.

Audit: mcp_client INTERNAL_SILENT_SWALLOW 3 -> 2.
2026-06-20 10:38:18 -04:00
ed b037a8129f TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 8
Re-read lines 462-540 (The Broad-Except Distinction), lines 625-690 (Re-Raise
Patterns), and the AI Agent Checklist. CRITICAL anti-sliming protocol:

Phase 8 = mcp_client silent-swallow + UNCLEAR (6 sites):
  - 5 INTERNAL_SILENT_SWALLOW sites (bare-except or except+pass patterns)
  - 1 UNCLEAR site
Plus 3 nested BC cleanup (1 _search_file in py_find_usages_result + 2 trace
in derive_code_path_result).

RULES (anti-sliming):
  - NO narrowing+logging (narrow + sys.stderr.write / logging.error = STILL violation)
  - NO silent recovery (except: pass = SILENT_SWALLOW violation)
  - MUST use full Result[T] propagation up to a true drain point
  - Logging is NOT a drain (per user's principle 2026-06-17)
2026-06-20 10:33:36 -04:00
ed b693c3ae4b conductor(track): nagent_review_v3.1 spec + plan (standalone-readable)
Initial v3.1 spec + plan for the delta thickening of v3. v3.1 is the canonical v3 review at depth (>=3,800 LOC main review) with a chunking strategy that v3 lacked. Adds 3 new top-level sections (YAML avoidance, agent context-window, fine-tuning). Load-bearing principle: v3.1 is standalone-readable without consulting v2.3 or v3.
2026-06-20 10:25:38 -04:00
ed 6aa5b9fa57 conductor(plan): mark Phase 7 complete (Batch E: 8 BC sites; BC 9->3) 2026-06-20 10:15:49 -04:00
ed 44607f79c7 test(baseline): add 3 Phase 7 invariant tests (Batch E complete)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 7.

Phase 7 Batch E migrated 8 sites (1 of 8 was done in 57b67780; 7 added here).
Total tests: 22 pass (4 Phase 1 + 3 Phase 2 + 3 Phase 3 + 3 Phase 4 + 3 Phase 5 +
3 Phase 6 + 3 Phase 7).

Audit: mcp_client BC 9 -> 3. Total MIG 56 -> 48 (8 sites migrated).
2026-06-20 10:14:37 -04:00
ed 02a94c225c refactor(mcp_client): migrate web_search, fetch_url, get_ui_performance to Result[T] (Phase 7 sites 6,7,8)
Added web_search_result, fetch_url_result, get_ui_performance_result inside Result Variants region.
The 3 legacy functions now delegate to their _result variants.

Audit: mcp_client BC 8 -> 3 (sites 6,7,8 migrated). Remaining 3 sites are
nested functions (1 in py_find_usages_result._search_file + 2 in derive_code_path_result.trace)
which are inherent to the implementation and will be addressed in Phase 8.
2026-06-20 10:10:47 -04:00
ed 2ea918547c refactor(mcp_client): migrate L1465 get_tree to Result[T] (Phase 7 site 5)
Added get_tree_result inside Result Variants region.
Legacy get_tree (str) now delegates to it.
2026-06-20 10:06:16 -04:00
ed 6fd26bc9d1 refactor(mcp_client): migrate L1358 derive_code_path to Result[T] (Phase 7 site 3)
Added derive_code_path_result inside Result Variants region.
Legacy derive_code_path (str) now delegates to it. The nested trace
function is now inside the _result variant; its inner try/except
captures ErrorInfo correctly.
2026-06-20 10:03:46 -04:00
ed f1e571c583 refactor(mcp_client): migrate L1334 py_get_docstring to Result[T] (Phase 7 site 2)
Added py_get_docstring_result inside Result Variants region.
Legacy py_get_docstring (str) now delegates to it.
2026-06-20 10:01:33 -04:00
ed 57b6778007 refactor(mcp_client): migrate L1338 py_get_hierarchy to Result[T] (Phase 7 site 1) 2026-06-20 09:26:04 -04:00
ed 69b90d93aa TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 7
Phase 7 = mcp_client Batch E: 8 more INTERNAL_BROAD_CATCH sites
  - L1338 py_get_hierarchy, L1359 py_get_docstring
  - L1383 derive_code_path, L1418 trace
  - L1452 get_tree
  - L1535 web_search, L1561 fetch_url, L1580 get_ui_performance

Target: mcp_client BC 9 -> 1 after Batch E (the _search_file nested try/except
is separate from these 8 Batch E sites; will be classified/fixed in Phase 8).
2026-06-20 09:24:36 -04:00
ed 05c4ed89f4 conductor(plan): mark Phase 6 complete (Batch D: 8 BC sites; BC 16->9) 2026-06-20 09:23:49 -04:00
ed fa58406b06 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 6: refactor(mcp_client): migrate 8 Batch D sites to Result[T]
Phase 6 Batch D (8 INTERNAL_BROAD_CATCH sites in mcp_client.py):

Legacy functions now delegate to _result variants:
  - py_get_signature_result + py_get_signature
  - py_set_signature_result + py_set_signature
  - py_get_class_summary_result + py_get_class_summary
  - py_get_var_declaration_result + py_get_var_declaration
  - py_set_var_declaration_result + py_set_var_declaration
  - py_find_usages_result + py_find_usages
  - py_get_imports_result + py_get_imports
  - py_check_syntax_result + py_check_syntax

Audit: mcp_client BC 16 -> 9 (8 sites migrated, -1 from _search_file nested
try/except now flagged as audit target; will be cleaned up in Phase 8).

Total: 48 sites migrated across Phases 3-6 (Phases 3+4+5+6 = 32 BC sites in mcp_client).
2026-06-20 09:23:12 -04:00
ed 99fea82686 feat(mcp_client): add 8 Batch D _result variants in Result Variants region
Phase 6 Batch D step 1: added 8 _result variants for:
  - py_get_signature_result
  - py_set_signature_result
  - py_get_class_summary_result
  - py_get_var_declaration_result
  - py_set_var_declaration_result
  - py_find_usages_result
  - py_get_imports_result
  - py_check_syntax_result

Legacy function migrations are pending (need manual edits due to slight
content variations between expected and actual source). Will follow up.
2026-06-20 09:15:39 -04:00
ed 3f496cad2c TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 6
Phase 6 = mcp_client Batch D: 8 more INTERNAL_BROAD_CATCH sites
  - L1024 py_get_signature, L1049 py_set_signature, L1078 py_get_class_summary
  - L1099 py_get_var_declaration, L1119 py_set_var_declaration
  - L1157 py_find_usages, L1180 py_get_imports, L1195 py_check_syntax

Target: mcp_client BC 16 -> 8 after Batch D.
2026-06-20 09:10:44 -04:00
ed 762ce7949a conductor(plan): mark Phase 5 complete (Batch C: 8 BC sites; BC 24->16) 2026-06-20 09:10:11 -04:00
ed b06fa638aa TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(mcp_client): migrate 8 Batch C sites to Result[T]
Phase 5 Batch C (8 INTERNAL_BROAD_CATCH sites in mcp_client.py):

Added _result variants in the Result Variants region:
  - ts_cpp_get_definition_result
  - ts_cpp_get_signature_result
  - ts_cpp_update_definition_result
  - py_get_skeleton_result (uses ASTParser)
  - py_get_code_outline_result (uses outline_tool, NOT ASTParser)
  - py_get_symbol_info_result (returns Result[tuple[str, int]])
  - py_get_definition_result (uses ast.parse directly)
  - py_update_definition_result (delegates to set_file_slice_result)

Each legacy string-returning function now delegates to its _result variant;
the try/except Exception is REMOVED from the legacy function.

The _result variants for py_* functions use ast.parse directly (matching
the existing implementation pattern). py_get_code_outline_result uses
outline_tool (not ASTParser as originally assumed).

Phase 4 test loosened (BC<=24, total MIG<=72) to allow Batch C overshoot.

Audit: mcp_client BC 24 -> 16. Total MIG 72 -> 64.
2026-06-20 09:09:35 -04:00
ed 195b0f451e conductor(plan): nagent_review_v3 mark Phase 14 complete + track status 2026-06-20 08:54:35 -04:00
ed b49be82048 conductor(track): nagent_review_v3 Phase 14 format verification + final 2026-06-20 08:53:11 -04:00
ed a55dfd05c3 conductor(plan): nagent_review_v3 mark Phase 13 complete 2026-06-20 08:46:54 -04:00
ed e150088d24 conductor(track): nagent_review_v3 Phase 13 refresh side artifacts 2026-06-20 08:46:05 -04:00
ed 952d0645fe TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5
Phase 5 = mcp_client Batch C: 8 more INTERNAL_BROAD_CATCH sites
  - L610 ts_cpp_get_definition, L624 ts_cpp_get_signature, L645 ts_cpp_update_definition
  - L695 py_get_skeleton, L713 py_get_code_outline, L739 py_get_symbol_info
  - L768 py_get_definition, L788 py_update_definition

Target: mcp_client BC 24 -> 16 after Batch C.
2026-06-20 08:42:27 -04:00
ed 4d7c0f10f7 conductor(plan): mark Phase 4 complete (Batch B: 8 BC sites; BC 32->24) 2026-06-20 08:42:14 -04:00
ed 6bb7f92275 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 4: refactor(mcp_client): migrate 8 Batch B sites to Result[T]
Phase 4 Batch B (8 INTERNAL_BROAD_CATCH sites in mcp_client.py):

Added _result variants inside the Result Variants region:
  - get_git_diff_result (subprocess.run + CalledProcessError)
  - ts_c_get_skeleton_result (ASTParser.get_skeleton)
  - ts_c_get_code_outline_result (ASTParser.get_code_outline)
  - ts_c_get_definition_result (ASTParser.get_definition)
  - ts_c_get_signature_result (ASTParser.get_signature)
  - ts_c_update_definition_result (ASTParser.update_definition)
  - ts_cpp_get_skeleton_result (ASTParser.get_skeleton with lang=cpp)
  - ts_cpp_get_code_outline_result (ASTParser.get_code_outline with lang=cpp)

Plus 5 internal _ast_* helpers (extract ASTParser boilerplate).

Each legacy string-returning function now delegates to its _result variant;
the try/except Exception is REMOVED from the legacy function.

Updated test_baseline_result.py:
  - Phase 3 tests loosened (BC<=32, total MIG<=80)
  - Phase 4 tests added (BC=24, total MIG=72, modules import cleanly)

Audit: mcp_client BC 32 -> 24. Total MIG 80 -> 72.
2026-06-20 08:41:32 -04:00
ed dd10a6803b conductor(plan): nagent_review_v3 mark Phase 12 complete 2026-06-20 08:37:29 -04:00
ed 448319f822 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 4
Re-read lines 462-540 (The Broad-Except Distinction). Same migration
pattern as Phase 3 Batch A: each legacy string-returning tool function
delegates to its _result variant. The try/except Exception in the
legacy function is REMOVED; the new Result variant captures ErrorInfo
with kind=INTERNAL and the original exception.

Phase 4 = mcp_client Batch B: 8 INTERNAL_BROAD_CATCH sites (lines 473-593)
  - L473 get_git_diff
  - L492 ts_c_get_skeleton, L509 ts_c_get_code_outline, L523 ts_c_get_definition
  - L537 ts_c_get_signature, L555 ts_c_update_definition
  - L576 ts_cpp_get_skeleton, L593 ts_cpp_get_code_outline

Target: mcp_client BC 32 -> 24 after Batch B.
2026-06-20 08:37:21 -04:00
ed db7d94de88 conductor(track): nagent_review_v3 §11 Collisions case study cluster 2026-06-20 08:37:07 -04:00
ed 64f8840ed3 conductor(plan): mark Phase 3 complete (Batch A: 8 BC sites migrated) 2026-06-20 08:36:28 -04:00
ed faa6ec6e51 test(baseline): add 3 Phase 3 invariant tests (Batch A complete)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.

Phase 3 tests assert:
1. mcp_client BC count 40 -> 32 (Batch A migrated 8 sites)
2. Total MIG 88 -> 80 (88 - 8 Batch A)
3. PHASE1_AUDIT_BASELINE.json still has 88 baseline (immutable)

Total: 10 tests pass (4 Phase 1 + 3 Phase 2 + 3 Phase 3).
2026-06-20 08:35:44 -04:00
ed a0908f8915 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L451 set_file_slice to Result[T] (Phase 3 site 8)
Added set_file_slice_result(Result[str]) inside the Result Variants region.
Legacy set_file_slice (str) now delegates to set_file_slice_result.

Audit: mcp_client BC count 33 -> 32 (Batch A complete: -8 sites).
2026-06-20 08:33:31 -04:00
ed c7e2ceffcd conductor(plan): nagent_review_v3 mark Phase 11 complete 2026-06-20 08:33:30 -04:00
ed f53c82e60c conductor(track): nagent_review_v3 §10 PEP case study cluster 2026-06-20 08:33:08 -04:00
ed dc903ab371 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L430 get_file_slice to Result[T] (Phase 3 site 7)
Added get_file_slice_result(Result[str]) inside the Result Variants region.
Legacy get_file_slice (str) now delegates to get_file_slice_result.

Audit: mcp_client BC count 34 -> 33.
2026-06-20 08:32:54 -04:00
ed 0274f35dea TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L414 get_file_summary to Result[T] (Phase 3 site 6)
Added get_file_summary_result(Result[str]) inside the Result Variants region.
Legacy get_file_summary (str) now delegates to get_file_summary_result.

Audit: mcp_client BC count 35 -> 34.
2026-06-20 08:32:21 -04:00
ed 7378a69787 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L395 edit_file to Result[T] (Phase 3 site 5)
Added edit_file_result(Result[str]) inside the Result Variants region.
Legacy edit_file (str) now delegates to edit_file_result.

Audit: mcp_client BC count 36 -> 35.
2026-06-20 08:31:44 -04:00
ed 8e6f202846 conductor(plan): nagent_review_v3 mark Phase 10 complete 2026-06-20 08:29:59 -04:00
ed 54e62b1037 conductor(track): nagent_review_v3 §9 Case-study methodology cluster 2026-06-20 08:29:36 -04:00
ed da9c5419ef TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L266 read_file to Result[T] (Phase 3 site 4)
Legacy read_file (str) now delegates to read_file_result (Result[str]).
The try/except Exception is REMOVED.

Audit: mcp_client BC count 37 -> 36.
2026-06-20 08:29:16 -04:00
ed dc41cb3775 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L254 list_directory to Result[T] (Phase 3 site 3)
Legacy list_directory (str) now delegates to list_directory_result (Result[str]).
The try/except Exception is REMOVED.

Audit: mcp_client BC count 38 -> 37.
2026-06-20 08:28:38 -04:00
ed 409ab5ae1f TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3: refactor(mcp_client): migrate L229 search_files to Result[T] (Phase 3 site 2)
Legacy search_files (str) now delegates to search_files_result (Result[str]).
The try/except Exception in the legacy function is REMOVED; the new Result
variant captures ErrorInfo (kind=INTERNAL with original exception).

Audit: mcp_client BC count 39 -> 38.
2026-06-20 08:27:43 -04:00