Files
pxpipe/tests
teamchong 0a25aeb51d feat(dashboard): honest saved_pct uncertainty band (saved_pct_low..saved_pct_high)
The headline used to publish a precise saved_pct (e.g. "68.2%") even
when α was thin / fallback. Switch to a range whenever uncertainty is
wide enough to matter — point estimate only when the spread is tight.

- fitCosts() returns alpha_low / alpha_high (and chars_per_token bounds)
  from p10/p90 of per-sample residual α = (tokens - β·pixels) / chars
  across the fit-sample ring. For n≤3 uses min/max; for larger n uses
  10th/90th percentile. Order-clamped against the central point so a
  noisy sample can't put low > point or high < point.
- baselineCost() gains an optional alphaOverride knob that varies ONLY
  the chars-per-token side while keeping the image-cost regime stable
  (β·pixels when fit is present, 2500/img fallback otherwise). Without
  this knob, an earlier draft mixed regimes and produced
  saved_pct_low > saved_pct — silently incoherent.
- Totals tracks three parallel baselines: effectiveInputBaselineEst
  (point), …Low, …High. Every event updates all three.
- /proxy-stats exposes saved_pct, saved_pct_low, saved_pct_high plus
  the matching effective_input_baseline_est_{low,high} and
  saved_effective_tokens_{low,high}. Bounds clamped ≥ 0.
- HTML headline collapses to point estimate when (high − low) < 5 pp;
  otherwise renders "lo–hi%" as the headline with point as subtitle.
- When fit is null (n<3), wide fallback brackets (0.15 / 0.25 / 0.50)
  produce a deliberately wide range so the headline shows a calibrating
  state instead of a fake-precise point estimate.
- 5 new tests: alpha_low ≤ alpha ≤ alpha_high invariant, chars/tok
  bound inversion, serveStats bound monotonicity, null-fit range shape,
  and warmup-baseline ordering.

Tests: 261 → 266 (+5). Typecheck + build clean.
2026-05-19 14:56:30 -04:00
..