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:
ed
2026-06-20 02:08:15 -04:00
parent 541eb3d5ad
commit 4edd6a9583

Diff Content Not Available