- schema_validator: collapse is_enabled()+get() double lookup into a
single get() call so operator-supplied enabled_func is invoked once
- update_chart: use guarded chart_datasource_id local var instead of
re-accessing chart.datasource_id after the None check
- chart_utils: propagate post_map_validate() details+suggestions into
the raised ValueError so callers log actionable context
- schemas: clarify chart_type_display_name description — prefer over
viz_type when present, fall back to viz_type when null
- schemas: add or-empty-string fallback to dedup key labels to satisfy
mypy (dict is typed dict[tuple[bool, str], str])
- plugins/xy: guard config.x.name is not None before cardinality check
- runtime/__init__, plugins/xy, registry: add noqa BLE001 to intentional
broad exception catches with inline rationale comments
- tests: add TestUpdateChartColumnNormalization covering normalization
called with guarded ID, graceful exception handling, and skip-when-null
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>