{"record":{"id":"e1256a58bfcfbb51","repo":"JuliusBrussee/caveman","slug":"cachebench-successful-replay-result-is-not-bound","errorCode":null,"errorMessage":"cachebench: successful replay result is not bound to retained artifacts","messagePattern":"cachebench: successful replay result is not bound to retained artifacts","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cacheengine/cachebench/replay.go","lineNumber":831,"sourceCode":"\tencoder := json.NewEncoder(writer)\n\tencoder.SetEscapeHTML(false)\n\treturn encoder.Encode(record)\n}\n\nfunc emitValidatedReplayResult(emit func(ReplayResult) error, result ReplayResult) error {\n\tif err := validateReplayResult(result); err != nil {\n\t\treturn err\n\t}\n\treturn emit(result)\n}\n\nfunc validateReplayResult(result ReplayResult) error {\n\tif err := validateReplayEvidence(result.Evidence); err != nil {\n\t\treturn err\n\t}\n\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 != \"\" {","sourceCodeStart":813,"sourceCodeEnd":849,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/cacheengine/cachebench/replay.go#L813-L849","documentation":"Error \"cachebench: successful replay result is not bound to retained artifacts\" thrown in JuliusBrussee/caveman.","triggerScenarios":"Thrown at cacheengine/cachebench/replay.go:831 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Bind the successful replay result to its retained artifacts."],"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"}