You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
computeDialCalibration records QualityBias mix-change breakpoints by sweeping unfloored uniform alpha, but live routing applies alpha[i] = max(dialToAlpha(t), floor[i]) via applyDialAlpha. On current floored bundles (v0.72–v0.74, latest = v0.73), roughly the first half of the dial produces an identical model mix / projected cost — the same class of “50% looks like 20%” failure that #479 fixed, reintroduced when #501/#515 added floors without retargeting the calibration sweep.
Why it matters
Routing correctness / cost-quality UX on the customer-facing QualityBias dial (dashboard + x-weave-routing-*).
Demonstrated on committed production artifacts, not a synthetic edge case.
Availability unaffected; quality and spend mix stop responding to dial travel until ~t=0.5.
v0.72+ — roster/fable changes multiplied unreachable low-α breakpoints (1 → 9); dead zone became customer-visible on latest.
Recommended fix
Share a helper that turns a raw uniform alpha into the effective floored per-cluster vector, and use it from both computeDialCalibration and applyDialAlpha.
Regression coverage:
Synthetic heterogeneous-floor test (different floors per cluster).
Frozen floored-bundle regression (v0.73 or successor): no long identical-mix run; mid dial materially pricier than low.
Backward-compat: bundles without alpha_floor keep current calibration behavior.
Summary
computeDialCalibrationrecords QualityBias mix-change breakpoints by sweeping unfloored uniform alpha, but live routing appliesalpha[i] = max(dialToAlpha(t), floor[i])viaapplyDialAlpha. On current floored bundles (v0.72–v0.74,latest= v0.73), roughly the first half of the dial produces an identical model mix / projected cost — the same class of “50% looks like 20%” failure that #479 fixed, reintroduced when #501/#515 added floors without retargeting the calibration sweep.Why it matters
x-weave-routing-*).Where
internal/router/cluster/scorer.go—computeDialCalibration(unfloored sweep)internal/router/cluster/scorer.go—applyDialAlpha/dialToAlpha(floored consumer used byRouteandRoutingDistribution)Reproduction (v0.73)
Same 21-point
RoutingDistributiongrid used by #479’s regression tests:alpha_floorlatest)Counterfactual: recompute calibration with per-cluster
max(a, floor[i])(same policy asapplyDialAlpha) → breakpoints 30 → 14, zero sub-floor breakpoints.Historical regression mechanism
computeDialCalibration/dialToAlpha). Regression tests (TestRoutingDistribution_NoDeadZone, mid-vs-low cost) pin on v0.67, which ships noalpha_floor.alpha_floorviaapplyDialAlpha = max(dialToAlpha(t), floor[i]). Did not update the calibration sweep. Reviews did not mentioncomputeDialCalibration.0.88 → 0.30and moved harness guard to the candidate pool. Calibration still unfloored.latest.Recommended fix
Share a helper that turns a raw uniform alpha into the effective floored per-cluster vector, and use it from both
computeDialCalibrationandapplyDialAlpha.Regression coverage:
alpha_floorkeep current calibration behavior.RoutingDistribution/cmd/routing-report --quality-biasreport.Do not keep NoDeadZone / mid-vs-low guards only on v0.67 — that is how this regressed silently.
Confidence
High — reproduced on committed artifacts; counterfactual confirms root cause; no open issue tracks this.