# 041 — Stop silently coercing string metric values to 1.0 in sum()/avg() ## Summary `coerce_to_f64` (`src/engine.rs`) maps every `MetricPrimitive::String` value to a flat `1.0`. This means `sum()`/`avg()` on a string-valued metric silently becomes an occurrence count instead of erroring or behaving predictably, with no signal to the user that their aggregate doesn't mean what it looks like it means. ## Scope - At PromQL query-evaluation time, detect when the target metric's declared value kind is `String` and the requested aggregation is `sum`/`avg`. - Either reject the query with a clear error ("cannot sum/avg a string-typed metric; use count() or a numeric-typed metric"), or introduce an explicit `count()` aggregation so occurrence-counting is something a user opts into by name rather than something `sum()` does silently for the wrong metric kind. - Audit existing dashboards/panels for `sum()`/`avg()` over string-kind metrics that would now be rejected or need updating to `count()`. ## Acceptance criteria - Querying `sum()`/`avg()` over a string-kind metric either fails with a clear, actionable error or is redirected to an explicit `count()` semantic — it no longer silently returns a count while looking like a sum. - Numeric-kind metrics are unaffected. ## Depends on None.