Private
Public Access
0
0
Commit Graph

3811 Commits

Author SHA1 Message Date
ed 1e5a742813 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L1693 render_main_interface autosave to Result[T] (Phase 10 site 9)
Extracted _autosave_flush_result(app) -> Result[None] helper above the
call site in render_main_interface.
ANTI-SLIMING: full Result[T] propagation (NO except+pass with comment).
The helper returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17). The 'don't disrupt the GUI loop' intent is
preserved via the data plane (app._last_request_errors) rather than
silent swallow.

The legacy render_main_interface code preserves its behavior, calls the
helper, and drains errors to app._last_request_errors.

Tests: 2 new tests verify both paths (success and OSError).

Audit: L1693 reclassified from INTERNAL_SILENT_SWALLOW (5 sites remaining,
was 6). New helper L1693 is INTERNAL_COMPLIANT.
2026-06-20 00:56:58 -04:00
ed 9188e548ff TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L1647 render_main_interface focus_response to Result[T] (Phase 10 site 8)
Extracted _focus_response_window_result() -> Result[None] helper above
the call site in render_main_interface.
ANTI-SLIMING: full Result[T] propagation (NO bare-except+pass). The
helper returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17).

The legacy render_main_interface code preserves its behavior, calls
the helper, drains errors to app._last_request_errors.

Tests: 2 new tests verify both paths (success and RuntimeError).

Audit: L1647 reclassified from INTERNAL_SILENT_SWALLOW (6 sites remaining,
was 7). New helper L1647 is INTERNAL_COMPLIANT.
2026-06-20 00:53:35 -04:00
ed 24191c827d TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L1466 _close_vscode_diff terminate to Result[T] (Phase 10 site 7)
Extracted _close_vscode_diff_terminate_result(app) -> Result[None]
helper above the App._close_vscode_diff method.
ANTI-SLIMING: full Result[T] propagation (NO except+pass). The helper
returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17).

The legacy _close_vscode_diff method preserves its signature, calls
the helper, drains errors to self._last_request_errors, and proceeds
to set self._vscode_diff_process = None (preserving the original
post-error behavior of clearing the handle).

Tests: 2 new tests verify both paths (success and OSError).

Audit: L1466 reclassified from INTERNAL_SILENT_SWALLOW (7 sites remaining,
was 8). New helper L1466 is INTERNAL_COMPLIANT.
2026-06-20 00:52:01 -04:00
ed 96886772fd TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L1152 _gui_func entry log to Result[T] (Phase 10 site 6)
Extracted _gui_func_entry_log_result(app) -> Result[None] helper above
the App._gui_func method.
ANTI-SLIMING: full Result[T] propagation (NO except+pass-after-log).
The helper returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17).

The legacy _gui_func method preserves its signature, calls the helper,
drains errors to self._last_request_errors, and proceeds with the
rest of the render loop.

Tests: 2 new tests verify both paths (success and OSError).

Audit: L1152 reclassified from INTERNAL_SILENT_SWALLOW (8 sites remaining,
was 9). New helper L1152 is INTERNAL_COMPLIANT.
2026-06-20 00:50:20 -04:00
ed cab4548f78 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L1052 shutdown save_ini to Result[T] (Phase 10 site 5)
Extracted _shutdown_save_ini_result(app) -> Result[None] helper above
the App.shutdown method.
ANTI-SLIMING: full Result[T] propagation (NO bare-except+pass). The
helper returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17).

The legacy shutdown method preserves its signature, calls the helper,
drains errors to self._startup_timeline_errors, and proceeds to
self.controller.shutdown().

Tests: 2 new tests verify both paths (success and OSError).

Audit: L1052 reclassified from INTERNAL_SILENT_SWALLOW (9 sites remaining,
was 10). New helper L1052 is INTERNAL_COMPLIANT.
2026-06-20 00:49:00 -04:00
ed ad702f7e88 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L728 run() immapp call to Result[T] (Phase 10 site 4)
Extracted _run_immapp_result(app) -> Result[None] helper above the
App.run method.
ANTI-SLIMING: full Result[T] propagation (NO pass-after-print). The
helper returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17). The legacy run() wrapper sets
controller._gui_degraded_reason and _last_imgui_assert (the canonical
degradation drain), appends to _startup_timeline_errors, and returns
WITHOUT the original stderr.print logging.

Tests: 2 new tests verify both paths (success and RuntimeError).

Audit: L728 reclassified from INTERNAL_SILENT_SWALLOW (10 sites remaining,
was 11). New helper L728 is INTERNAL_COMPLIANT.
2026-06-20 00:46:43 -04:00
ed e761244c4a TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L612 _post_init callback to Result[T] (Phase 10 site 3)
Extracted _post_init_callback_result(app) -> Result[None] helper above
the App._post_init method.
ANTI-SLIMING: full Result[T] propagation (NO pass-after-logging). The
helper returns Result(data=None) on success or Result(data=None,
errors=[ErrorInfo]) on exception (logging NOT a drain per the user's
principle 2026-06-17).

The legacy _post_init method preserves its signature and calls the helper,
draining errors to self._startup_timeline_errors.

Tests: 2 new tests verify both paths (success and RuntimeError).

Audit: L612 reclassified from INTERNAL_SILENT_SWALLOW (10 sites remaining,
was 11). New helper L612 is INTERNAL_COMPLIANT.
2026-06-20 00:44:30 -04:00
ed 6585cdc5e7 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L264 _resolve_font_path to Result[T] (Phase 10 site 2)
Extracted _resolve_font_path_result(font_path, assets_dir) -> Result[str]
helper above the legacy wrapper.
ANTI-SLIMING: full Result[T] propagation (NO narrowing+logging). The helper
returns Result(data=resolved_path) on success or Result(data=fallback,
errors=[ErrorInfo]) on exception at Path.is_relative_to (logging NOT a
drain per the user's principle 2026-06-17).

The legacy _resolve_font_path() wrapper preserves its signature and
delegates to the helper. The call site in App._load_fonts invokes the
result helper directly and drains errors to self._startup_timeline_errors.

Tests: 2 new tests verify both paths (relative-under-assets success and
is_relative_to raising ValueError on cross-drive paths).

Audit: L264 reclassified from INTERNAL_SILENT_SWALLOW (11 sites remaining,
was 12). New helper L243 is INTERNAL_COMPLIANT.
2026-06-20 00:43:29 -04:00
ed c73038382e TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 10: refactor(gui_2): migrate L216 _detect_refresh_rate_win32 to Result[T] (Phase 10 site 1)
Extracted _detect_refresh_rate_win32_result() helper above the legacy wrapper.
ANTI-SLIMING: full Result[T] propagation (NO narrowing+logging). The helper
returns Result(data=rate) on success or Result(data=0.0, errors=[ErrorInfo])
on exception (logging NOT a drain per the user's principle 2026-06-17).

The legacy _detect_refresh_rate_win32() wrapper preserves its signature and
delegates to the helper. The call site in App.__init__ invokes the result
helper directly and drains errors to self._startup_timeline_errors.

Tests: 2 new tests (test_phase_10_l216_detect_refresh_rate_win32_result_success,
test_phase_10_l216_detect_refresh_rate_win32_result_failure) verify both paths.

Audit: L216 reclassified from INTERNAL_SILENT_SWALLOW (12 sites remaining,
was 13). New helper L219 is INTERNAL_COMPLIANT.
2026-06-20 00:42:06 -04:00
ed 11d331238d chore: TIER-2 READ conductor/code_styleguides/error_handling.md lines 462-540 (logging NOT a drain) before Phase 10
CRITICAL ANTI-SLIMING PHASE.

Per the user's principle (2026-06-17) and error_handling.md:530:
'IF ANY PLACE HAS A ERROR LOG IT ALSO NEEDS A RESULT[T]. RESULT[T]
PROPOGATES UNTIL IT REACHED A DRAIN POINT WHERE THE ERROR CAN BE
HANDLED APPROPRIATELY WITHOUT CRASHING THE APP.'

The 13 INTERNAL_SILENT_SWALLOW sites have logging-only except bodies
(sys.stderr.write, print, traceback.print_exc). Per the styleguide,
logging is NOT a drain. These sites MUST be migrated to full
Result[T] propagation. No narrowing + logging; no pass after
logging; no intentional silent recovery.

Migration pattern for Phase 10:
1. Extract a _<site>_result helper that returns Result[bool]
2. The helper's except body converts the exception to ErrorInfo
3. The legacy wrapper drains to the appropriate data plane attr:
   - _startup_timeline_errors for startup-time (L216, L241, L567, L684, L971)
   - _last_request_errors for render-loop/event handler (L1071, L1501, L1527, L6691, L7026, L7042)
   - _worker_errors for background thread callbacks (L4739, L1345)

The 13 sites (per PHASE1_SITE_INVENTORY.md):
- L216 _detect_refresh_rate_win32
- L241 _resolve_font_path
- L567 _post_init
- L684 run
- L971 shutdown
- L1071 _gui_func
- L1345 _close_vscode_diff
- L1501 render_main_interface (auto-save)
- L1527 render_main_interface (auto-save)
- L4739 _on_warmup_complete_callback
- L6691 render_tier_stream_panel
- L7026 render_task_dag_panel
- L7042 render_task_dag_panel

One atomic commit per site. NO sliming heuristics. NO pass-after-logging.
NO 'intentional silent recovery'. Each site becomes a Result[T].
2026-06-20 00:31:32 -04:00
ed a6c89dc754 fix(test): loosen Phase 6 invariant assertion to <=3 to remain robust after Phases 7-8
The Phase 6 invariant test was originally written to assert ==3 (the
pre-Phase-7 baseline). After Phases 7-8 migrated the 3 remaining sites,
the count dropped to 0, which broke the strict equality assertion.

Changed to <=3 (matching the Phase 5 invariant test pattern) so the
test passes at every point in the migration timeline. Documented the
robustness rationale in the test docstring.
2026-06-20 00:29:22 -04:00
ed 962cb16ae2 conductor(plan): Mark Phase 9 as complete (6b02f49) 2026-06-20 00:27:43 -04:00
ed 6b02f49253 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 9: conductor(gui_2): Phase 9 checkpoint — 0 helper/utility sites in this track
Adds 2 invariant tests:
- test_phase_9_invariant_helper_utility_count_dropped: pins the count
  to exactly 0 (post-Phase-9 baseline; no Phase 9 sites, count should
  remain 0 after Phases 7-8 dropped it).
- test_phase_9_invariant_zero_sites_in_phase_9: documents that no
  Phase 9 site tests exist (machine-checkable: future agent adding a
  Phase 9 site will see this test fail at the count assertion).

Per PHASE1_SITE_INVENTORY.md, the one Phase 9 site (L1398 _close_vscode_diff)
is INTERNAL_SILENT_SWALLOW (the bare-except classification) and will be
handled in Phase 10 (logging NOT a drain per the convention).

Updates state.toml: phase_9 status = completed.
2026-06-20 00:27:30 -04:00
ed 26b8503f3d TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 9: re-read Helper/utility migration guidance (lines 1000-1020 in plan.md), drain plane section, and Result-recovery pattern. Phase 9 covers helper/utility module-level sites; the audit shows 0 INTERNAL_BROAD_CATCH sites in this category in src/gui_2.py. The one Phase 9 site from the inventory (L1398 _close_vscode_diff) is actually INTERNAL_SILENT_SWALLOW (the bare-except classification), which is handled in Phase 10 (logging NOT a drain). Phase 9 has no sites to migrate in this track. 2026-06-20 00:26:45 -04:00
ed e202b4408f conductor(plan): Mark Phase 8 as complete (7ec512c) 2026-06-20 00:26:36 -04:00
ed 7ec512c792 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 8: conductor(gui_2): Phase 8 checkpoint — 2 property setter sites migrated
Adds 2 invariant tests:
- test_phase_8_invariant_property_setter_count_dropped: pins the count
  to exactly 0 (post-Phase-8 baseline; all 22 INTERNAL_BROAD_CATCH sites
  in src/gui_2.py migrated across Phases 3-8).
- test_phase_8_invariant_all_2_migration_sites_have_tests: verifies the
  2 migrated sites (L591, L897) have both success and failure tests.

Updates state.toml: phase_8 status = completed.
2026-06-20 00:26:24 -04:00
ed f0c0de915c TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 8: refactor(gui_2): migrate L897 _capture_workspace_profile to Result[T] (Phase 8)
Migrate the imgui.save_ini_settings_to_memory try/except in
App._capture_workspace_profile (L897) to the canonical Result[T] pattern:

- Extract _capture_workspace_profile_ini_result(app) -> Result[str]
  helper into Phase 8 Property Setter / State Result Helpers region.
- The legacy _capture_workspace_profile method calls the helper and
  drains errors to app._last_request_errors (per FR-BC-4 event-handler
  drain pattern; this is a property setter on the App).
- The original fallback behavior (ini = '' on failure) is preserved
  so the legacy WorkspaceProfile still constructs with empty ini_content.

Tests:
- test_phase_8_l897_capture_workspace_profile_ini_result_success
- test_phase_8_l897_capture_workspace_profile_ini_result_failure

Audit: INTERNAL_BROAD_CATCH count in src/gui_2.py is now 0. All 22
INTERNAL_BROAD_CATCH sites originally in src/gui_2.py have been
migrated to Result[T] across Phases 3-8.
2026-06-20 00:25:33 -04:00
ed d3b71a7304 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 8: refactor(gui_2): migrate L591 _diag_layout_state to Result[T] (Phase 8)
Migrate the ini-file-read try/except in App._diag_layout_state (L591) to
the canonical Result[T] pattern:

- Extract _diag_layout_state_ini_text_result(app, ini_path) -> Result[str]
  helper into new Phase 8 Property Setter / State Result Helpers region.
- The legacy _diag_layout_state method calls the helper and drains errors
  to app._startup_timeline_errors (the Phase 2 drain plane for startup
  callbacks).
- The original fallback behavior (early return on read failure, stderr
  write for visibility) is preserved.

Tests:
- test_phase_8_l591_diag_layout_state_ini_text_result_success
- test_phase_8_l591_diag_layout_state_ini_text_result_failure

Audit: INTERNAL_BROAD_CATCH count in src/gui_2.py dropped from 2 to 1
(remaining: L896 _capture_workspace_profile, formerly L897 in inventory).
2026-06-20 00:24:13 -04:00
ed 16079d930d TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 8: re-read Drain Plane section (lines 396-470, all 5 drain patterns), Result-recovery pattern, and the per-drain-plane routing. Phase 8 covers property setter / state sites. For startup callbacks (L591 _diag_layout_state), the canonical drain is app._startup_timeline_errors (the phase 2 drain plane). For property setters (L897 _capture_workspace_profile), the canonical drain is app._last_request_errors (per FR-BC-4 event-handler drain pattern). 2026-06-20 00:22:33 -04:00
ed b0d3915103 conductor(plan): Mark Phase 7 as complete (50ee495) 2026-06-20 00:22:09 -04:00
ed 50ee495199 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 7: conductor(gui_2): Phase 7 checkpoint — 1 worker site migrated
Adds 2 invariant tests:
- test_phase_7_invariant_batch_d_count_dropped: pins the count to <=2
  (post-Phase-7 baseline, down from 3 pre-Phase-7).
- test_phase_7_invariant_all_1_migration_sites_have_tests: verifies the
  1 migrated site (L4321 worker) has both success and failure tests.

Updates state.toml: phase_7 status = completed.
2026-06-20 00:21:57 -04:00
ed bcfb4887b1 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 7: refactor(gui_2): migrate L4321 worker to Result[T] (Phase 7)
Migrate the worker() closure in _check_auto_refresh_context_preview (L4321)
to the canonical Result[T] pattern:

- Extract _worker_context_preview_result(app) -> Result[None] helper into
  new Phase 7 Worker/Background Result Helpers region.
- The legacy worker() wrapper calls the helper and drains errors to
  app.controller._worker_errors (with controller._worker_errors_lock
  acquired on append) per sub-track 3 Phase 6 Group 6.5 telemetry drain.
- The try/finally cleanup (setting _is_generating_preview=False and
  handling _pending_preview_refresh) is preserved verbatim.

Tests:
- test_phase_7_l4321_worker_context_preview_result_success
- test_phase_7_l4321_worker_context_preview_result_failure

Audit: INTERNAL_BROAD_CATCH count in src/gui_2.py dropped from 3 to 2
(remaining: L591 _diag_layout_state, L897 _capture_workspace_profile).

The lock-protected append ensures thread-safety when multiple worker
threads call _report-style drains concurrently. The helper preserves
the original fallback behavior (app.context_preview_text =
'Error generating context preview.' on failure) so the user-visible
UX is unchanged.
2026-06-20 00:20:52 -04:00
ed d0de8e8a1a TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 7: re-read Thread-safe Result accumulation guidance (lines 244-251), Drain Plane section (lines 396-470, especially Pattern 4 telemetry emission), and the Result-recovery pattern (lines 396-460). Phase 7 covers worker/background sites that run on the io_pool thread; the canonical drain is pp.controller._report_worker_error(op_name, result) which acquires pp.controller._worker_errors_lock on append. The lock protects against concurrent appends from multiple worker threads corrupting the list (per app_controller.py:855-856). 2026-06-20 00:18:29 -04:00
ed 3f2faff5bc conductor(plan): Mark Phase 6 as complete (c574393) 2026-06-20 00:18:21 -04:00
ed c574393c57 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 6: conductor(gui_2): Phase 6 checkpoint — 0 signal-handler sites in this track
Per PHASE1_SITE_INVENTORY.md, Phase 6 (signal-handler category) has 0
INTERNAL_BROAD_CATCH sites in src/gui_2.py. All sites that might appear
in a signal-handler category were classified into other phases (Phase 8
for startup callbacks, Phase 7 for worker/background).

Adds 2 invariant tests:
- test_phase_6_invariant_signal_handler_count_dropped: pins the count
  to exactly 3 (the pre-Phase-7 baseline) before Phases 7-9 migrate.
- test_phase_6_invariant_zero_sites_in_phase_6: documents that no
  Phase 6 site tests exist (machine-checkable: future agent adding a
  Phase 6 site will see this test fail at the count assertion).

Updates state.toml: phase_6 status = completed.
2026-06-20 00:18:07 -04:00
ed 5aaa411c6b TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 6: re-read Pattern 3 (Intentional app termination, lines 409-419), cross-thread safety section (lines 244-251), and thread-safe Result accumulation guidance. Phase 6 covers signal-handler category sites; the audit shows 0 INTERNAL_BROAD_CATCH sites in this category in src/gui_2.py (the inventory classifies signal-handler try/except under other categories — Phase 6 has no sites in this track). 2026-06-20 00:16:41 -04:00
ed d872899eac test(gui_2): add 2 Phase 5 invariant tests + Phase 5 checkpoint
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5.

Phase 5 Batch C migration complete. 11 INTERNAL_BROAD_CATCH event-handler
sites migrated to Result[T] pattern per FR-BC-4. The legacy wrappers drain
errors to app._last_request_errors (data plane attribute).

Migrated sites:
- L1284 _populate_auto_slices outline
- L1293 _populate_auto_slices file_read
- L1367 _apply_pending_patch
- L1393 _open_patch_in_external_editor
- L1428 request_patch_from_tier4
- L3163 render_tool_preset_manager_content bias_save
- L3582 render_context_batch_actions preview
- L5380 render_operations_hub ext_editor_panel
- L5786 render_text_viewer_window ced
- L5920 render_external_editor_panel config
- L7208 render_beads_tab list

V count dropped from 14 to 3 (11 sites migrated; remaining 3 in Phase 7/8).

Invariant tests:
- test_phase_5_invariant_batch_c_count_dropped: locks V count <= 3
- test_phase_5_invariant_all_11_migration_sites_have_tests: locks all 11
  sites have both success and failure tests
2026-06-20 00:09:03 -04:00
ed 2c17fde57e TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L7208 render_beads_tab list to Result[T] (Phase 5)
Extract _render_beads_tab_list_result helper from the beads_client.BeadsClient
+ list_beads() try/except in render_beads_tab. Legacy wrapper drains errors
to app._last_request_errors per FR-BC-4 event-handler pattern.

[pre-audit] L7208 INTERNAL_BROAD_CATCH
[post-audit] V count: 4 -> 3 (L7208 removed)
2026-06-20 00:06:52 -04:00
ed 9a3be5eda8 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L5920 render_external_editor_panel config to Result[T] (Phase 5)
Extract _render_external_editor_panel_config_result helper from the external
editor config rendering try/except in render_external_editor_panel. Legacy
wrapper drains errors to app._last_request_errors per FR-BC-4
event-handler pattern.

[pre-audit] L5920 INTERNAL_BROAD_CATCH
[post-audit] V count: 5 -> 4 (L5920 removed)
2026-06-20 00:04:53 -04:00
ed 82b5648f3b TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L5786 render_text_viewer_window ced to Result[T] (Phase 5)
Extract _render_text_viewer_window_ced_result helper from the
TextEditor set_text/render try/except in render_text_viewer_window CED
branch. Legacy wrapper drains errors to app._last_request_errors per FR-BC-4
event-handler pattern.

[pre-audit] L5786 INTERNAL_BROAD_CATCH
[post-audit] V count: 6 -> 5 (L5786 removed)
2026-06-20 00:02:10 -04:00
ed 6119143400 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L5380 render_operations_hub ext_editor_panel to Result[T] (Phase 5)
Extract _render_operations_hub_external_editor_panel_result helper from the
render_external_editor_panel call try/except in render_operations_hub
External Tools tab. Legacy wrapper drains errors to app._last_request_errors
per FR-BC-4 event-handler pattern.

[pre-audit] L5380 INTERNAL_BROAD_CATCH
[post-audit] V count: 7 -> 6 (L5380 removed)
2026-06-19 23:59:08 -04:00
ed f1cdc926cf TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L3582 render_context_batch_actions preview to Result[T] (Phase 5)
Extract _render_context_batch_actions_preview_result helper from the
_do_generate preview try/except in render_context_batch_actions. The
imgui.button callback drains errors to app._last_request_errors per FR-BC-4
event-handler pattern.

[pre-audit] L3582 INTERNAL_BROAD_CATCH
[post-audit] V count: 8 -> 7 (L3582 removed)
2026-06-19 23:56:37 -04:00
ed 5b341038a7 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L3163 render_tool_preset_manager_content bias_save to Result[T] (Phase 5)
Extract _render_tool_preset_bias_save_result helper from the BiasProfile
save try/except in render_tool_preset_manager_content. The imgui.button
callback drains errors to app._last_request_errors per FR-BC-4
event-handler pattern.

[pre-audit] L3163 INTERNAL_BROAD_CATCH
[post-audit] V count: 9 -> 8 (L3163 removed)
2026-06-19 23:54:02 -04:00
ed b20ea145b3 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L1428 request_patch_from_tier4 to Result[T] (Phase 5)
Extract request_patch_from_tier4_result helper from the
ai_client.run_tier4_patch_generation try/except in App.request_patch_from_tier4.
Legacy wrapper drains errors to app._last_request_errors per FR-BC-4
event-handler pattern.

[pre-audit] L1428 INTERNAL_BROAD_CATCH
[post-audit] V count: 10 -> 9 (L1428 removed)
2026-06-19 23:50:33 -04:00
ed 77a48b18bf TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L1393 _open_patch_in_external_editor to Result[T] (Phase 5)
Extract _open_patch_in_external_editor_result helper from the external editor
launch try/except in App._open_patch_in_external_editor. Legacy wrapper
drains errors to app._last_request_errors per FR-BC-4 event-handler pattern.

[pre-audit] L1393 INTERNAL_BROAD_CATCH
[post-audit] V count: 11 -> 10 (L1393 removed)
2026-06-19 23:45:29 -04:00
ed 374866619d TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L1367 _apply_pending_patch to Result[T] (Phase 5)
Extract _apply_pending_patch_result helper from the apply_patch_to_file
try/except in App._apply_pending_patch. Legacy wrapper drains errors to
app._last_request_errors per FR-BC-4 event-handler pattern.

[pre-audit] L1367 INTERNAL_BROAD_CATCH
[post-audit] V count: 12 -> 11 (L1367 removed)
2026-06-19 23:39:16 -04:00
ed ce289db999 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L1293 _populate_auto_slices file_read to Result[T] (Phase 5)
Extract _populate_auto_slices_file_read_result helper from the file read
try/except in App._populate_auto_slices. Legacy wrapper drains errors to
app._last_request_errors per FR-BC-4 event-handler pattern.

[pre-audit] L1293 INTERNAL_BROAD_CATCH
[post-audit] V count: 13 -> 12 (L1293 removed)
2026-06-19 23:33:04 -04:00
ed 38b6f5c00f TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L1284 _populate_auto_slices outline to Result[T] (Phase 5)
Extract _populate_auto_slices_outline_result helper from the
mcp_client.{py,ts_c,ts_cpp}_get_code_outline try/except in
App._populate_auto_slices. Legacy wrapper drains errors to
app._last_request_errors per FR-BC-4 event-handler pattern.

[pre-audit] L1284 INTERNAL_BROAD_CATCH
[post-audit] V count: 14 -> 13 (L1284 removed)
2026-06-19 23:29:10 -04:00
ed 3c34913caa chore: TIER-2 READ conductor/code_styleguides/error_handling.md lines 396-407 (Pattern 2 event handler drain) before Phase 5
Per AI Agent Checklist Rule #0 (re-read per phase).

Phase 5 focuses on the 13 INTERNAL_BROAD_CATCH sites inside event handler
functions. Per the spec (FR-BC-4), the drain for event handlers is
to accumulate in app._last_request_errors or a similar per-event
accumulator (not imgui.open_popup, since the event handler is called
from a button click, not a render frame).

Event handler sites (per PHASE1_SITE_INVENTORY.md):
- L1335, L1344 (_populate_auto_slices): mcp_client calls
- L1418 (_apply_pending_patch): patch modal handler
- L1444 (_open_patch_in_external_editor): external editor launch
- L1479 (request_patch_from_tier4): tier4 patch generation
- L3214 (render_tool_preset_manager_content): modal content render
- L3633 (render_context_batch_actions): modal content render
- L5430 (render_operations_hub): tab content render
- L5836 (render_text_viewer_window): window render
- L5970 (render_external_editor_panel): panel render
- L7258 (render_beads_tab): tab render

The legacy wrapper pattern: extract a _<site>_result helper that
returns Result[bool]; the legacy wrapper routes errors to
app._last_request_errors.append((op_name, ErrorInfo(...))).
2026-06-19 22:59:06 -04:00
ed 19c534e54b TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 4: test(gui_2): add 2 Phase 4 invariant tests + relax Phase 3 invariant for decreasing count
The Phase 3 invariant test (test_phase_3_invariant_batch_a_count_dropped)
asserted exactly 17 INTERNAL_BROAD_CATCH sites, the post-Phase 3 baseline.
After Phase 4 migrates 3 more sites, the count drops to 14. The test now
asserts <= 17 (the upper bound; the Phase 3 boundary).

Adds test_phase_4_invariant_batch_b_count_dropped: locks in <= 14 sites
(post-Phase 4 baseline; down from 17).

Adds test_phase_4_invariant_all_3_migration_sites_have_tests: ensures each
of the 3 Batch B sites (L3398, L3718, L3740) has both _success and _failure tests.

All 30 tests pass.
2026-06-19 22:56:00 -04:00
ed a213677cf0 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 4: refactor(gui_2): migrate L3740 render_ast_inspector_modal file_content to Result[T] (Phase 4)
Adds _render_ast_inspector_file_content_result(app, f_path) -> Result[str | None]
helper that wraps the mcp_client.read_file try/except in render_ast_inspector_modal.
On success, returns the file content string. On failure, returns Result(data=None,
errors=[ErrorInfo]). The legacy wrapper handles the side effects (sets
app._cached_ast_file_lines + app.text_viewer_content) and drains errors to
app._last_request_errors (per FR-BC-3 modal pattern; data plane attribute).

Audit: BROAD_CATCH count 15 -> 14, COMPLIANT count 22 -> 23. Migration
target count drops by 1. All 3 Phase 4 sites migrated. Tests: 2/2 pass.
2026-06-19 22:52:32 -04:00
ed e558da81e1 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 4: refactor(gui_2): migrate L3718 render_ast_inspector_modal outline to Result[T] (Phase 4)
Adds _render_ast_inspector_outline_result(app, f_path) -> Result[str] helper that wraps
the mcp_client.configure + outline fetch try/except in render_ast_inspector_modal.
The data field carries the outline string so the legacy wrapper can iterate it
without an additional instance attribute. Errors drain to app._last_request_errors
(per FR-BC-3 modal pattern; data plane attribute).

Audit: BROAD_CATCH count 16 -> 15, COMPLIANT count 21 -> 22. Migration
target count drops by 1. Tests: 2/2 pass.
2026-06-19 22:48:43 -04:00
ed 1ef0e07093 TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 4: refactor(gui_2): migrate L3398 render_persona_editor_window to Result[T] (Phase 4)
Adds _render_persona_editor_save_result(app) -> Result[bool] helper that wraps
the models.Persona(...) construction + _cb_save_persona try/except in
render_persona_editor_window Save button. The legacy wrapper drains errors
to app._last_request_errors (per FR-BC-3 modal pattern; data plane attribute).

Audit: BROAD_CATCH count 17 -> 16, COMPLIANT count 20 -> 21. Migration
target count drops by 1. Tests: 2/2 pass.
2026-06-19 22:43:46 -04:00
ed e80b5f787b chore: TIER-2 READ conductor/code_styleguides/error_handling.md lines 396-407 (Pattern 2 modal drain) before Phase 4 2026-06-19 22:32:38 -04:00
ed fab2e55b84 fix(tier2): undo sandbox file leaks from 00e5a3f2
Tier-2 autonomous sandbox-specific files leaked into the main repo
via an accidental `git add .` in the tier-2 clone. Revert the
selective subset the user identified (not the whole commit):

- Delete .opencode/agents/tier2-autonomous.md and
  .opencode/commands/tier-2-auto-execute.md (canonical sources
  remain at conductor/tier2/agents/ and conductor/tier2/commands/)
- Restore opencode.json MCP path to manual_slop and restore the
  default_agent: tier2-tech-lead
- Restore mcp_paths.toml extra_dirs to ["C:/projects/gencpp"]

The other changes in 00e5a3f2 (4 throwaway scripts under
scripts/tier2/artifacts/, the project_history.toml timestamp) are
out of scope for this fix and remain at HEAD.
2026-06-19 22:31:46 -04:00
ed c33a32c5da conductor(plan): mark Phase 3 complete (8 INTERNAL_BROAD_CATCH sites migrated)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.

Phase 3 migrated 8 INTERNAL_BROAD_CATCH sites to Result[T] helpers.
State updated: V=30 (was 38), COMPLIANT=20 (was 12).
broad_catch_count_zero = false (17 sites remain for Phases 4-9).

Phase 4 begins: INTERNAL_BROAD_CATCH Batch B (3 modal/dialog sites).
2026-06-19 22:27:01 -04:00
ed e622f1ead6 test(gui_2): add 2 Phase 3 invariant tests + Phase 3 checkpoint
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.

Phase 3 covered (8 INTERNAL_BROAD_CATCH sites migrated to Result[T]):
- L731 _load_fonts main font [53412af1]
- L742 _load_fonts mono font [61cf4055]
- L1123 _gui_func render [0f102612]
- L1171 _show_menus do_generate [bcbd4644]
- L1197 _show_menus hwnd [f51abe07]
- L1222 _show_menus is_max [44e28889]
- L1284 _handle_history_logic [500108ea]
- L4848 render_warmup_status_indicator [0dacbfce]

Each site has a _result helper that returns Result[bool] with ErrorInfo
on failure; the legacy wrapper routes errors to the appropriate data
plane attribute (_last_request_errors, _startup_timeline_errors,
or _worker_errors).

Audit: V=30 (down from 38), COMPLIANT=20 (up from 12). Tests: 22/22 pass.
Phase 3 invariant tests added:
- test_phase_3_invariant_batch_a_count_dropped: verifies 17 INTERNAL_BROAD_CATCH
  remain (was 25; dropped 8).
- test_phase_3_invariant_all_8_migration_sites_have_tests: verifies all 8
  sites have both success and failure tests.

Phase 4 begins: INTERNAL_BROAD_CATCH Batch B (3 modal/dialog sites).
2026-06-19 22:26:20 -04:00
ed 82c0c1fafe test(gui_2): fix Phase 1 audit test to allow decreasing count (post-Phase 3)
The Phase 1 test originally asserted exactly 42 migration-target sites.
After Phase 3 migrated 8 sites, the count dropped to 34. The test
now asserts <= 42 (the starting count) so it passes both at Phase 1
boundary and after subsequent phases migrate sites.

Per-phase invariant tests (added in Phase 3+ test files) verify the
specific expected count per phase.

TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.
2026-06-19 22:25:09 -04:00
ed 0dacbfce62 refactor(gui_2): migrate L4848 render_warmup_status_indicator to Result[T] (Phase 3)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.

Adds _render_warmup_status_indicator_result(app) -> Result[dict] helper that
wraps the controller.warmup_status() try/except in
render_warmup_status_indicator. The data field carries the status dict so
the legacy wrapper can use it for rendering without an additional instance
attribute.

render_warmup_status_indicator becomes a thin wrapper that drains errors
to app.controller._worker_errors under the controller's lock (worker error
plane; thread-safe per app_controller pattern).

Audit: BROAD_CATCH count 18 -> 17, COMPLIANT count 19 -> 20. Migration
target count drops from 42 to 34 (8 sites migrated). Tests: 2/2 pass.
2026-06-19 22:22:21 -04:00
ed 500108ea6d refactor(gui_2): migrate L1284 _handle_history_logic to Result[T] (Phase 3)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.

Adds _handle_history_logic_result(app) -> Result[bool] helper that wraps
the snapshot debounce try/except from App._handle_history_logic. The
_is_applying_snapshot pre-condition guard stays in the legacy wrapper
(not error handling; the original early return has no try/except).

App._handle_history_logic becomes a thin wrapper that drains errors to
_last_request_errors. The drain failure mode is structurally safe
(hasattr check + append) so no outer try/except is required (per the
L1123 wrapper decision; avoiding new INTERNAL_SILENT_SWALLOW violations).

Audit: BROAD_CATCH count 19 -> 18, COMPLIANT count 18 -> 19. Tests: 2/2 pass.
2026-06-19 22:18:53 -04:00