{"record":{"id":"d84c69918ef78c50","repo":"JuliusBrussee/caveman","slug":"cachebench-failed-replay-response-is-not-bound-to","errorCode":null,"errorMessage":"cachebench: failed replay response is not bound to evidence","messagePattern":"cachebench: failed replay response is not bound to evidence","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cacheengine/cachebench/replay.go","lineNumber":847,"sourceCode":"\tif result.Evidence.Success {\n\t\tif result.Observation == nil || len(result.ProviderResponse) == 0 || len(result.VerificationEvidence) == 0 || bodyDigest(result.ProviderResponse) != result.Evidence.ProviderEvidenceSHA256 || bodyDigest(result.VerificationEvidence) != result.Evidence.QualityEvidenceSHA256 {\n\t\t\treturn errors.New(\"cachebench: successful replay result is not bound to retained artifacts\")\n\t\t}\n\t\tif err := validateObservationRecords([]ObservationRecord{*result.Observation}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tobservation := result.Observation\n\t\tif 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 {\n\t\t\treturn errors.New(\"cachebench: replay observation is not bound to replay evidence\")\n\t\t}\n\t\treturn nil\n\t}\n\tif result.Observation != nil || len(result.VerificationEvidence) != 0 {\n\t\treturn errors.New(\"cachebench: failed replay result contains success-only artifacts\")\n\t}\n\tif len(result.ProviderResponse) > 0 {\n\t\tif bodyDigest(result.ProviderResponse) != result.Evidence.ProviderEvidenceSHA256 {\n\t\t\treturn errors.New(\"cachebench: failed replay response is not bound to evidence\")\n\t\t}\n\t} else if result.Evidence.ProviderEvidenceSHA256 != \"\" {\n\t\treturn errors.New(\"cachebench: failed replay evidence references missing response\")\n\t}\n\treturn nil\n}\n\nfunc validTaskVerification(verification TaskVerification) bool {\n\treturn validBoundedText(verification.Verifier, 256, false) && validUniqueJSONObject(verification.Evidence)\n}\n\nfunc validProviderRequestID(value string) bool {\n\treturn validBoundedText(value, 256, true)\n}\n\nfunc validateReplayEvidence(record ReplayEvidenceRecord) error {\n\tif 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) {\n\t\treturn errors.New(\"cachebench: invalid replay evidence\")","sourceCodeStart":829,"sourceCodeEnd":865,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/cacheengine/cachebench/replay.go#L829-L865","documentation":"Error \"cachebench: failed replay response is not bound to evidence\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at cacheengine/cachebench/replay.go:847 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Bind the failed replay response to its evidence."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}