chore: TIER-2 READ conductor/code_styleguides/error_handling.md lines 462-940 before Phase 11 — CRITICAL ANTI-SLIMING (logging is NOT a drain)

Phase 11: ai_client silent-swallow (11 sites; was 9, +2 from Phase 9 narrowing set_tool_preset/set_bias_profile).

CRITICAL ANTI-SLIMING RULES (MUST follow):
1. NO narrowing + logging: 'except (NarrowType): logging.error(...)' is a VIOLATION
2. NO empty defaults: 'except (NarrowType): args = {}' is a VIOLATION (sliming)
3. NO pass: 'except: pass' is a VIOLATION (silent)
4. NO traceback.print_exc alone: similar to logging, data is lost
5. logging.error / logger.exception / sys.stderr.write alone: NOT a drain

Per MUST-NOT-DO #6: 'DO NOT catch except Exception and silently swallow.'
Per MUST-NOT-DO #7: 'DO NOT catch except Exception in non-*_result code without conversion to ErrorInfo.'

Per TIER1_REVIEW 2026-06-20 (Phase 9 redo): 'empty default is NOT a drain — the caller must observe the errors.'

Canonical pattern for SS sites:
  def _feature_result(...) -> Result[T]:
    try:
      return Result(data=compute())
    except (NarrowType) as e:
      return Result(data=<zero>, errors=[ErrorInfo(kind=INTERNAL, message=str(e), source=..., original=e)])

Legacy wrapper preserves original signature; surface errors via Result where possible.

Some sites may not have a clear 'caller' (e.g., _extract_gemini_thoughts is called inline); for these, the _result helper captures the structured error and the legacy function returns the empty data default (preserving current behavior).
This commit is contained in:
ed
2026-06-20 13:49:31 -04:00
parent 5a3bf33841
commit 82378339e0

Diff Content Not Available