Private
Public Access
0
0
Commit Graph

52 Commits

Author SHA1 Message Date
ed 5b139e6ab1 feat(gui_2): add 3 drain-plane render functions (Phase 2, tasks 2.1-2.3)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 2.

Adds the drain plane that consumes the 8 controller error attributes
(the data plane added by sub-track 3 Phase 6).

Module-level functions in src/gui_2.py (lines 7293-7410):
- _drain_normalize_errors (helper, lines 7295-7326): duck-typed
  normalizer for 3 error-container shapes (Optional[ErrorInfo],
  List[Tuple[str, ErrorInfo]], Dict[str, ErrorInfo])
- render_controller_error_modal (lines 7328-7368): FR-DP-1 Pattern 2
  drain point; reads all 8 controller attrs, opens per-attr popups
- _render_worker_error_indicator (lines 7370-7385): FR-DP-2 status-bar
  widget showing worker error count, clickable
- _render_last_request_errors_modal (lines 7387-7409): FR-DP-3 per-request
  error modal opened after AI request completion

App class delegation wrappers (lines 1138-1148):
- App._render_controller_error_modal -> module-level
- App._render_worker_error_indicator -> module-level
- App._render_last_request_errors_modal -> module-level

Per UI Delegation Pattern: App class has thin wrappers; logic at
module level for hot-reload support. 1-space indentation, CRLF.

Audit: no new violations introduced (gui_2.py still 25 V + 13 S +
2 RETHROW + 2 UNCLEAR + 12 COMPLIANT = 54). Tests: 4/4 pass.
2026-06-19 21:32:24 -04:00
ed 554fbbd541 test(gui_2): add Phase 1 invariant tests (test_gui_2_result.py, 2 tests)
TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 1.

Adds tests/test_gui_2_result.py with 2 Phase 1 invariant tests:

1. test_phase_1_inventory_has_42_rows: parses
   tests/artifacts/PHASE1_SITE_INVENTORY.md and asserts the Site
   Inventory table contains exactly 42 rows.

2. test_phase_1_audit_has_42_migration_target_sites: runs
   scripts/audit_exception_handling.py --src src --json, finds the
   src/gui_2.py file record, counts sites in the migration-target
   category set (excludes INTERNAL_COMPLIANT, INTERNAL_PROGRAMMER_RAISE,
   BOUNDARY_FASTAPI, BOUNDARY_SDK, BOUNDARY_CONVERSION), and asserts the
   count is 42.

This locks the 42-site migration target count: if the audit heuristic
or inventory drift, the test catches it before Phase 2.

Both tests pass:
  tests/test_gui_2_result.py::test_phase_1_inventory_has_42_rows PASSED
  tests/test_gui_2_result.py::test_phase_1_audit_has_42_migration_target_sites PASSED
2026-06-19 21:22:27 -04:00