JuliusBrussee/caveman · error
session-value feature %q outside artifact bounds
Error message
session-value feature %q outside artifact bounds
What it means
A feature value in the runtime state falls outside the [min,max] bounds declared for it in the artifact's FeatureSpecs. Because clamping assumptions baked into the model would silently distort such inputs, sessionValueVector fails closed instead of clamping, indicating extractor drift or an artifact trained on a different value distribution.
Source
Thrown at proxy/routing/session_value.go:425
func sessionValueVector(specs []SessionValueFeatureSpec, state map[string]SessionValueFeatureValue) ([]float64, []float64, error) {
for name := range state {
if _, known := sessionValueFeatureVocabulary[name]; !known {
return nil, nil, fmt.Errorf("unknown session-value feature %q", name)
}
}
values := make([]float64, len(specs))
missing := make([]float64, len(specs))
for i, spec := range specs {
feature, present := state[spec.Name]
if !present || !feature.Available {
if spec.Required {
return nil, nil, fmt.Errorf("required session-value feature %q unavailable", spec.Name)
}
missing[i] = 1
continue
}
if !finite(feature.Value) || feature.Value < spec.Min || feature.Value > spec.Max {
return nil, nil, fmt.Errorf("session-value feature %q outside artifact bounds", spec.Name)
}
values[i] = (feature.Value - spec.Mean) / spec.Scale
}
return values, missing, nil
}
func sessionValueEligibilityReason(features Features, candidate Candidate, baselineUnit float64, policy FrontierPolicy) string {
if candidate.Provider == "" || candidate.Model == "" || unitPrice(candidate.Price) <= 0 {
return "unpriced_or_invalid_candidate"
}
if !policy.AllowCrossProvider && candidate.Provider != features.Provider {
return "cross_provider_disabled"
}
if !candidateSupports(candidate, features) {
return "capability_or_context_mismatch"
}
return policyRejectReason(features, candidate, baselineUnit, policy)
}View on GitHub (pinned to 766dce6b13)
Solutions
- Regenerate the artifact with bounds covering the current feature distribution
- Fix the feature extractor if it is emitting values outside its intended range
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at proxy/routing/session_value.go:425 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18).
Data as JSON: /api/errors/73eea94d6e704c80.
Report an issue: GitHub.