{"record":{"id":"71d6adf0719719bf","repo":"JuliusBrussee/caveman","slug":"cacheengine-nil-context","errorCode":null,"errorMessage":"cacheengine: nil context","messagePattern":"cacheengine: nil context","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cacheengine/native.go","lineNumber":26,"sourceCode":"\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/JuliusBrussee/caveman/proxy/providers/jsonsplice\"\n)\n\n// Optimize applies provider-native cache metadata or returns copied original\n// bytes on every unsupported or unsafe path. It makes no network call.\nfunc (e *Engine) Optimize(ctx context.Context, request NativeRequest) (NativeResult, error) {\n\tif e == nil || e.guard == nil || e.prefixSafety == nil || e.resolveProfile == nil {\n\t\treturn NativeResult{}, errors.New(\"cacheengine: nil engine\")\n\t}\n\tif e.configErr != nil {\n\t\treturn NativeResult{}, e.configErr\n\t}\n\tif ctx == nil {\n\t\treturn NativeResult{}, errors.New(\"cacheengine: nil context\")\n\t}\n\tif err := ctx.Err(); err != nil {\n\t\treturn NativeResult{}, err\n\t}\n\tif len(request.Body) > e.maxRequestBytes {\n\t\treturn NativeResult{}, errors.New(\"cacheengine: request exceeds configured byte limit\")\n\t}\n\toriginal := append([]byte(nil), request.Body...)\n\tunsupported := Profile{ID: \"unsupported\", Mode: ModeUnsupported, Attribution: AttributionNone}\n\tresult := NativeResult{\n\t\tBody:     original,\n\t\tDecision: DecisionPassThrough,\n\t\tReason:   ReasonUnsupported,\n\t\tProfile:  unsupported,\n\t\tPlan: Plan{\n\t\t\tDecision: DecisionPassThrough, Reason: ReasonUnsupported,\n\t\t\tProfileID: unsupported.ID, Mode: unsupported.Mode, Attribution: unsupported.Attribution,\n\t\t\tEconomicsBasis: \"unavailable\", KeyShardCount: 1,","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/766dce6b1394ebb56a3090748d5a0240a5aefb36/cacheengine/native.go#L8-L44","documentation":"Engine.Optimize rejects a nil context before doing any work. The guard fires when a caller (prepare or a simulated-trace evaluation) passes a literal nil ctx instead of context.Background/WithCancel; later stages rely on ctx for cancellation and tracing, so the nil is caught up front rather than panicking deep in native cache-metadata optimization. It follows separate nil-engine and stale-config-error guards.","triggerScenarios":"Thrown at cacheengine/native.go:26 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass the caller's context.Context (e.g. context.Background() at top level)","Thread the request context through to the Optimize call"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"766dce6b1394ebb56a3090748d5a0240a5aefb36","analyzedAt":"2026-08-18T03:14:35.516Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}