Chartered in #11833's ruling (maintainer, 2026-08-25, verbatim 「其他接受」; full record = #11833 comment 5406725658). Filed by PM session session_01KWRU3s15AJz7PGW7a7wdCh per the confirmed checklist.
The measured mismatch
Measured on #11833's PR #12011 investigation:
service-analytics's consumer-local type declares aggregations[].function as string;IDataEngine.aggregate declares a six-value enum: count | sum | avg | min | max | count_distinct;- the authorable
AggregationMetricType carries nine values — those six plus number / string / boolean (custom SQL expressions).
⇒ The analytics bridge can, on its declared types, forward a method the engine contract does not admit. The local string widening is what hides the gap today.
The question to answer (measurement first, ⛔ no fix before the answer)
Can an authored custom-SQL measure (number/string/boolean) actually reach the ObjectQL aggregate path at runtime, or is it routed to NativeSQLStrategy before it gets there?
Non-negotiables
⛔ Do not close this by widening the local type back to string — that is the concealment, not the fix. ⛔ Do not widen the contract enum from the consumer side (that is a spec-seat contract change if it turns out to be wanted — fork it back). Positive control required: prove the probe reaches the bridge with a measure that is admitted, before concluding anything about one that is not.
Acceptance criterion: a written verdict — routed-away or reachable — with the runtime evidence and the named routing site, plus (if reachable) the observed mishandling; #11833's analytics half consumes the answer.
Refs: #11833 (parent finding, fork 2) · PR #12011 · #4157 (the closed prior instance) · #10576 (the per-aggregation filter)
Chartered in #11833's ruling (maintainer, 2026-08-25, verbatim 「其他接受」; full record = #11833 comment 5406725658). Filed by PM session
session_01KWRU3s15AJz7PGW7a7wdChper the confirmed checklist.The measured mismatch
Measured on #11833's PR #12011 investigation:
service-analytics's consumer-local type declaresaggregations[].functionasstring;IDataEngine.aggregatedeclares a six-value enum:count | sum | avg | min | max | count_distinct;AggregationMetricTypecarries nine values — those six plusnumber/string/boolean(custom SQL expressions).⇒ The analytics bridge can, on its declared types, forward a method the engine contract does not admit. The local
stringwidening is what hides the gap today.The question to answer (measurement first, ⛔ no fix before the answer)
Can an authored custom-SQL measure (
number/string/boolean) actually reach the ObjectQLaggregatepath at runtime, or is it routed toNativeSQLStrategybefore it gets there?DataEngineLikere-declarations remain after the #11493 deletion (datasource-admin-plugin, service-analytics) #11833's analytics half.number/string/booleanmetric's SQL expression is replaced byCOUNT(*)#4157 is this exact class biting before: a custom-SQL metric's expression was replaced byCOUNT(*). Report the reading and the failure shape; the repair is scoped from there.Non-negotiables
⛔ Do not close this by widening the local type back to
string— that is the concealment, not the fix. ⛔ Do not widen the contract enum from the consumer side (that is a spec-seat contract change if it turns out to be wanted — fork it back). Positive control required: prove the probe reaches the bridge with a measure that is admitted, before concluding anything about one that is not.Acceptance criterion: a written verdict — routed-away or reachable — with the runtime evidence and the named routing site, plus (if reachable) the observed mishandling; #11833's analytics half consumes the answer.
Refs: #11833 (parent finding, fork 2) · PR #12011 · #4157 (the closed prior instance) · #10576 (the per-aggregation
filter)