[Bug] VaR / ES / CVaR tail-risk claims pass grounding completely unchecked

Author: he-yufengCreated Sep 12, 2026Updated Sep 14, 2026

[Bug] VaR / ES / CVaR tail-risk claims pass grounding completely unchecked

Follow-up investigation from #1418's confidence-level sub-case (and #1419's documented residual). While verifying whether the 95% in VaR 95%: 1,57% gets validated as a VaR candidate, I found the deeper thing: tail-risk metrics are not in the grounding vocabulary at all, so these claims never reach the gate.

Reproduced on current main (f84b2977):

_ANALYSIS_METRIC_RE.search / _metric_kind_for_text:
'VaR 95%: 1.57%'              -> metric: False, kind: None
'95% 置信水平下 VaR 为 -1.57%' -> metric: False, kind: None
'在险价值 VaR 为 1.57%'       -> metric: False, kind: None
'风险价值 1.57%'              -> metric: False, kind: None
'VaR (95%) = 1.57%'           -> metric: False, kind: None
'ES 1.9%'                     -> metric: False, kind: None
'CVaR 2.1%'                   -> metric: False, kind: None

End to end, with drawdown evidence -0.0157 ingested, both VaR 95%: 1,57% and 95% 置信水平下 VaR 为 -1.57% validate as valid=True with zero issues — not because the numbers checked out (the gate never looked), and equally not because the confidence figure was handled. Any invented tail figure passes the same way, e.g. VaR 95%: 9,99% would also pass untouched.

Two implications:

  1. The confidence-contamination sub-case from #1418 does not materialize on the prose path: nothing about a VaR claim is validated, so 95% is never mistaken for a VaR candidate either. Closing that thread of #1419's residual note.
  2. The real gap is bigger: tail-risk claims (VaR / ES / CVaR / 在险价值 / 风险价值) are entirely ungrounded. Gating them is a design decision, not a drive-by fix — the kind taxonomy needs a tail-risk kind (or mapping to drawdown), and the confidence frame (VaR <conf>%: <value>, <conf>% 置信水平下 VaR 为 <value>) needs its own handling so the confidence percentage never becomes a measurement. Filing this so the design has a home instead of a drive-by behavior change.

Suggested shape when someone picks it up: a tail_risk metric kind covering VaR/ES/CVaR/在险价值/风险价值, evidence keyed from backtest outputs (VaR columns in metrics.csv map into it), and a confidence-frame mask so 95% in VaR 95%: x is exempt from measurement, mirroring _LABELLED_SCORE_RE.