{"record":{"id":"9d97ea76988edf6d","repo":"JuliusBrussee/caveman","slug":"cachebench-provider-q-engine-eligible-population","errorCode":null,"errorMessage":"cachebench: provider %q engine-eligible population %d cannot meet minimum %d","messagePattern":"cachebench: provider %q engine-eligible population (.+?) cannot meet minimum (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cacheengine/cachebench/replay.go","lineNumber":551,"sourceCode":"\treturn prepared, nil\n}\n\nfunc validatePreparedReplayTarget(prepared []preparedReplay, target Target) error {\n\tif err := validateTarget(target); err != nil {\n\t\treturn err\n\t}\n\tproviders := map[string]bool{}\n\teligible := map[string]int{}\n\tfor _, item := range prepared {\n\t\tprovider := strings.ToLower(strings.TrimSpace(item.record.Provider))\n\t\tproviders[provider] = true\n\t\tif item.optimized.Decision == cacheengine.DecisionApply || item.optimized.Decision == cacheengine.DecisionObserveOnly {\n\t\t\teligible[provider]++\n\t\t}\n\t}\n\tfor provider := range providers {\n\t\tif eligible[provider] < target.MinEligibleRequest {\n\t\t\treturn fmt.Errorf(\"cachebench: provider %q engine-eligible population %d cannot meet minimum %d\", provider, eligible[provider], target.MinEligibleRequest)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (runner ReplayRunner) runSequential(ctx context.Context, prepared []preparedReplay, anchorTrace, anchorReal time.Time, now func() time.Time, sleep func(context.Context, time.Duration) error, emit func(ReplayResult) error) error {\n\tfor _, item := range prepared {\n\t\trecord := item.record\n\t\ttraceAt, _ := time.Parse(time.RFC3339Nano, record.At)\n\t\toffset, _ := scaledReplayGap(traceAt.Sub(anchorTrace), runner.TimeScale)\n\t\tscheduled := anchorReal.Add(offset)\n\t\tif delay := scheduled.Sub(now().UTC()); delay > 0 {\n\t\t\tif err := sleep(ctx, delay); err != nil {\n\t\t\t\treturn fmt.Errorf(\"cachebench: replay schedule interrupted: %w\", err)\n\t\t\t}\n\t\t}\n\t\tstarted := now().UTC()\n\t\tevidence := replayEvidenceBase(record, item.optimized, runner.TimeScale, scheduled, started, runner.Limits.MaxScheduleDrift)","sourceCodeStart":533,"sourceCodeEnd":569,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/27d5a3981a347890211bb1bf2439e5c821a63bc9/cacheengine/cachebench/replay.go#L533-L569","documentation":"validatePreparedReplayTarget found that after engine optimization, some provider has fewer cache-eligible requests (Decision Apply or ObserveOnly) than Target.MinEligibleRequest. This is the engine-filtered counterpart of error 881: raw population passed, but eligibility shrank it below the minimum.","triggerScenarios":"Calling Run with a target whose MinEligibleRequest is satisfied by raw counts but not after the engine marks some requests ineligible (below-threshold, refused). Example: 6 records for a provider, MinEligibleRequest 5, engine marks 3 ineligible.","commonSituations":"Traces where many requests fall below the engine's minimum cacheable size; strict engine rules rejecting part of the population; raising MinEligibleRequest without re-checking engine eligibility.","solutions":["Lower Target.MinEligibleRequest to fit the engine-eligible population.","Add more records for the provider so enough survive engine eligibility filtering.","Dry-run Optimize over the trace first and count eligible per provider, then set MinEligibleRequest within that budget.","Relax the engine rules causing rejections (or its minimum-size threshold) to raise the eligible count."],"exampleFix":"// before\ntarget := cachebench.Target{MinEligibleRequest: 5} // only 2 survive engine filtering\n\n// after\neligible := countEngineEligible(ctx, engine, records) // per provider\ntarget := cachebench.Target{MinEligibleRequest: minInt(eligible[\"openai\"], 5)}","handlingStrategy":"validation","validationCode":"eligible := map[string]int{}\nfor _, r := range records {\n    native, err := r.NativeRequest()\n    if err != nil { continue }\n    opt, err := engine.Optimize(ctx, native)\n    if err != nil { continue }\n    if opt.Decision == cacheengine.DecisionApply || opt.Decision == cacheengine.DecisionObserveOnly {\n        eligible[strings.ToLower(strings.TrimSpace(r.Provider))]++\n    }\n}\nfor p, n := range eligible {\n    if n < target.MinEligibleRequest { return fmt.Errorf(\"%s eligible %d < %d\", p, n, target.MinEligibleRequest) }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set MinEligibleRequest from measured engine-eligible counts, not raw record counts.","Watch for engine minimum-size rules rejecting many small requests; account for them in the target.","Re-validate targets whenever engine rules change."],"tags":["cachebench","eligibility","sample-size","replay"],"backgroundTag":null,"analyzedSha":"27d5a3981a347890211bb1bf2439e5c821a63bc9","analyzedAt":"2026-08-15T09:26:11.751Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}