JuliusBrussee/caveman · error
cachebench: trace request %q has invalid prefix
Error message
cachebench: trace request %q has invalid prefix
What it means
A trace record's prefix metadata is inconsistent: StableSegmentCount is negative or exceeds len(Prefix), or the Prefix array itself fails validPrefix. Prefix and StableSegmentCount drive cache-reuse math, so an impossible combination is rejected before evaluation.
Source
Thrown at cacheengine/cachebench/observed.go:52
if err := validateObservationRecords(records); err != nil {
return Report{}, err
}
if len(records) != len(trace) {
return Report{}, fmt.Errorf("cachebench: observation population %d does not match trace population %d", len(records), len(trace))
}
byID := make(map[string]TraceRecord, len(trace))
for index, request := range trace {
if request.Schema != TraceSchema && request.Schema != TraceSchemaV2 || strings.TrimSpace(request.RequestID) == "" {
return Report{}, fmt.Errorf("cachebench: trace request %d has invalid schema or request_id", index)
}
if _, exists := byID[request.RequestID]; exists {
return Report{}, fmt.Errorf("cachebench: duplicate trace request %q", request.RequestID)
}
if strings.TrimSpace(request.Provider) == "" || strings.TrimSpace(request.Epoch) == "" || !validUniqueJSONObject(request.Body) || request.BodySHA256 == "" || request.BodySHA256 != bodyDigest(request.Body) {
return Report{}, fmt.Errorf("cachebench: trace request %q has invalid identity, body, or digest", request.RequestID)
}
if request.StableSegmentCount < 0 || request.StableSegmentCount > len(request.Prefix) || !validPrefix(request.Prefix) {
return Report{}, fmt.Errorf("cachebench: trace request %q has invalid prefix", request.RequestID)
}
byID[request.RequestID] = request
}
for _, record := range records {
request, exists := byID[record.RequestID]
if !exists {
return Report{}, fmt.Errorf("cachebench: observation request %q absent from trace", record.RequestID)
}
if record.Provider != request.Provider || record.Epoch != request.Epoch {
return Report{}, fmt.Errorf("cachebench: observation request %q provider/epoch mismatch", record.RequestID)
}
if record.RequestBodySHA256 == "" || record.RequestBodySHA256 != request.BodySHA256 {
return Report{}, fmt.Errorf("cachebench: observation request %q body digest mismatch", record.RequestID)
}
}
report, err := EvaluateObserved(records, target)
if err != nil {
return Report{}, errView on GitHub (pinned to 27d5a3981a)
Solutions
- Set stable_segment_count to a value in [0, len(prefix)] — typically the number of leading stable segments.
- Regenerate the trace with the current version so prefix segments match validPrefix's expected shape.
- Validate prefix arrays with the package's own helpers in a pre-flight pass before evaluation.
Defensive patterns
Strategy: validation
Validate before calling
func validTracePrefix(r TraceRecord) error {
if r.StableSegmentCount < 0 || r.StableSegmentCount > len(r.Prefix) || !validPrefix(r.Prefix) {
return fmt.Errorf("request %q has invalid prefix", r.RequestID)
}
return nil
} Type guard
func prefixInRange(count, prefixLen int) bool {
return count >= 0 && count <= prefixLen
} Prevention
- Derive stable_segment_count from the prefix array at generation, never hand-edit it.
- Regenerate traces after tool upgrades that change the prefix schema.
- Round-trip traces through the validator in tests.
When it happens
Trigger: EvaluateObservedAgainstTrace on a trace record where StableSegmentCount < 0, StableSegmentCount > len(request.Prefix), or the prefix segments are malformed (bad segment shape/content per validPrefix).
Common situations: Trace records written by an older tool version with a different prefix segment schema; hand-adjusted stable_segment_count; prefix arrays truncated during file edits.
Related errors
- cacheengine: stable segment needs name and content
- message %d: %w
- cachebench: session %q row %d: %w
- cachebench: trace request %d has invalid schema or request_i
- cachebench: trace request %q has invalid identity, body, or
AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15).
Data as JSON: /api/errors/79c99c5d941cefe7.
Report an issue: GitHub.