Private
Public Access
chore: TIER-2 READ conductor/code_styleguides/error_handling.md (lazy-loading fallback) before Phase 12
Per AI Agent Checklist Rule #0. Phase 12 focuses on the 2 UNCLEAR sites in src/gui_2.py at L65, L69. These are in the _LazyModule._resolve method: def _resolve(self) -> _Any: if self._cached is None: mod = _importlib.import_module(self._module_name) if self._attr_name is None: self._cached = mod else: try: self._cached = getattr(mod, self._attr_name) except AttributeError: # L64 sub_mod_name = f'{self._module_name}.{self._attr_name}' try: self._cached = _importlib.import_module(sub_mod_name) except (ImportError, ModuleNotFoundError): # L68 self._cached = _FiledialogStub() return self._cached Per the styleguide, lazy-loading sentinel fallbacks are a legitimate graceful-degradation pattern. The except body does NOT silently swallow; it FALLS BACK to a documented sentinel (_FiledialogStub) with an 'available' flag so the UI can detect and offer alternatives. This is analogous to a nil-sentinel dataclass (Pattern 1 in error_handling.md). The audit heuristic for 'narrow except + documented sentinel fallback' does not exist yet. We need to add a heuristic per the result_migration_review_pass_20260617 pattern. Plan for Phase 12: 1. Add new heuristic to scripts/audit_exception_handling.py: except (X, Y): self._cached = <named_sentinel_with_available_flag> in a method named _resolve/_load/_get -> INTERNAL_COMPLIANT 2. Add regression tests in tests/test_audit_heuristics.py 3. Verify UNCLEAR count drops to 0 for gui_2.py
This commit is contained in: