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