JuliusBrussee/caveman · error

cachebench: failed replay evidence references missing respon

Error message

cachebench: failed replay evidence references missing response

What it means

Error "cachebench: failed replay evidence references missing response" thrown in JuliusBrussee/caveman.

Source

Thrown at cacheengine/cachebench/replay.go:850

		}
		if err := validateObservationRecords([]ObservationRecord{*result.Observation}); err != nil {
			return err
		}
		observation := result.Observation
		if observation.RequestID != result.Evidence.RequestID || observation.Provider != result.Evidence.Provider || observation.Epoch != result.Evidence.Epoch || observation.RequestBodySHA256 != result.Evidence.TraceBodySHA256 || observation.ProviderEvidenceSHA256 != result.Evidence.ProviderEvidenceSHA256 || observation.EligibleInputTokens != result.Evidence.ProviderTotalInputTokens || observation.Applied != result.Evidence.Applied || observation.EngineDecision != result.Evidence.Decision || observation.EngineReason != result.Evidence.Reason || observation.Attribution != result.Evidence.Attribution || !slices.Equal(observation.OptimizerIDs, result.Evidence.OptimizerIDs) || observation.QualityPassed != result.Evidence.QualityPassed || observation.QualityEvidenceSHA256 != result.Evidence.QualityEvidenceSHA256 || observation.QualityVerifier != result.Evidence.QualityVerifier || bodyDigest(observation.Usage) != result.Evidence.ProviderUsageSHA256 {
			return errors.New("cachebench: replay observation is not bound to replay evidence")
		}
		return nil
	}
	if result.Observation != nil || len(result.VerificationEvidence) != 0 {
		return errors.New("cachebench: failed replay result contains success-only artifacts")
	}
	if len(result.ProviderResponse) > 0 {
		if bodyDigest(result.ProviderResponse) != result.Evidence.ProviderEvidenceSHA256 {
			return errors.New("cachebench: failed replay response is not bound to evidence")
		}
	} else if result.Evidence.ProviderEvidenceSHA256 != "" {
		return errors.New("cachebench: failed replay evidence references missing response")
	}
	return nil
}

func validTaskVerification(verification TaskVerification) bool {
	return validBoundedText(verification.Verifier, 256, false) && validUniqueJSONObject(verification.Evidence)
}

func validProviderRequestID(value string) bool {
	return validBoundedText(value, 256, true)
}

func validateReplayEvidence(record ReplayEvidenceRecord) error {
	if record.Schema != ReplayEvidenceSchema || !validBoundedText(record.RequestID, 512, false) || !validSHA256(record.TraceBodySHA256) || !validSHA256(record.WireBodySHA256) || !validBoundedText(record.Provider, 64, false) || !validBoundedText(record.Model, 512, false) || !validBoundedText(record.Epoch, 1024, false) || !validTimingBasis(record.TimingBasis) || !validBoundedText(record.TokenBasis, 128, false) || record.TimeScale <= 0 || record.TimeScale > 1000 || !validBoundedText(record.Reason, 1024, false) || record.ScheduleDriftMilliseconds < 0 || record.ScheduleToleranceMilliseconds <= 0 || record.HTTPStatus < 0 || record.HTTPStatus > 999 || !validProviderRequestID(record.ProviderRequestID) {
		return errors.New("cachebench: invalid replay evidence")
	}
	scheduled, scheduledErr := time.Parse(time.RFC3339Nano, record.ScheduledAt)
	started, startErr := time.Parse(time.RFC3339Nano, record.StartedAt)

View on GitHub (pinned to 27d5a3981a)

Solutions

  1. Fix the failed replay evidence so it references an existing response.

When it happens

Trigger: Thrown at cacheengine/cachebench/replay.go:850 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15). Data as JSON: /api/errors/92728eae03d98e84. Report an issue: GitHub.