{"record":{"id":"fa02e4385dec9e00","repo":"paperclipai/paperclip","slug":"runner-live-eval-selection-matched-no-scheduled-ex","errorCode":null,"errorMessage":"Runner live eval selection matched no scheduled executions","messagePattern":"Runner live eval selection matched no scheduled executions","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/eval/live-workflow-matrix.ts","lineNumber":292,"sourceCode":"    }\n  }\n  if (\n    selection.limit !== undefined &&\n    (!Number.isSafeInteger(selection.limit) || selection.limit <= 0)\n  ) {\n    throw new Error(\n      \"Runner live eval selection limit must be a positive integer\",\n    );\n  }\n  let entries = schedule.entries.filter(\n    (entry) =>\n      (candidateIds.size === 0 || candidateIds.has(entry.candidateId)) &&\n      (caseIds.size === 0 || caseIds.has(entry.caseId)),\n  );\n  if (selection.limit !== undefined)\n    entries = entries.slice(0, selection.limit);\n  if (entries.length === 0) {\n    throw new Error(\n      \"Runner live eval selection matched no scheduled executions\",\n    );\n  }\n  const selectedCandidateIds = new Set(\n    entries.map((entry) => entry.candidateId),\n  );\n  return {\n    ...schedule,\n    candidates: schedule.candidates.filter((candidate) =>\n      selectedCandidateIds.has(candidate.id),\n    ),\n    entries,\n    expectedExecutions: entries.length,\n  };\n}\n\nexport function assertRunnerLiveCandidateManifest(): void {\n  const slots = RUNNER_LIVE_CANDIDATE_SLOTS.map((slot) => slot.id);","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/eval/live-workflow-matrix.ts#L274-L310","documentation":"After applying candidateIds, caseIds, and limit filters to the schedule's entries, selectRunnerLiveEvalSchedule requires at least one scheduled execution to remain. If the filtered list is empty it throws, since a selection that matches nothing cannot produce a meaningful live eval run.","triggerScenarios":"Combining candidateIds and caseIds filters that no single entry satisfies (candidate and case never paired together), or a limit of 0 is impossible (guarded earlier) but a narrow filter on a schedule with no overlapping entries, or the schedule itself has no entries.","commonSituations":"Selecting a specific case for a candidate that schedules a disjoint set of cases; a regenerated schedule whose entries changed while the selection config did not; running the selection against an empty or freshly scaffolded schedule.","solutions":["Broaden the filters: drop candidateIds or caseIds until the intersection is non-empty.","Verify the pair (candidateId, caseId) actually exists in schedule.entries before restricting both.","Check the schedule was generated/populated (schedule.entries.length > 0) and regenerate if empty.","Pre-compute the filtered entries yourself and warn before calling the selector."],"exampleFix":"// before\nselectRunnerLiveEvalSchedule(schedule, { candidateIds: ['a'], caseIds: ['case-x'] }); // no such pairing\n// after\nconst hasPair = schedule.entries.some((e) => e.candidateId === 'a' && e.caseId === 'case-x');\nif (hasPair) selectRunnerLiveEvalSchedule(schedule, { candidateIds: ['a'], caseIds: ['case-x'] });\nelse selectRunnerLiveEvalSchedule(schedule, { candidateIds: ['a'] });","handlingStrategy":"validation","validationCode":"const filtered = schedule.entries.filter((e) =>\n  ((selection.candidateIds ?? []).length === 0 || (selection.candidateIds ?? []).includes(e.candidateId)) &&\n  ((selection.caseIds ?? []).length === 0 || (selection.caseIds ?? []).includes(e.caseId)));\nif (filtered.length === 0) throw new Error('selection would match no scheduled executions; widen filters');","typeGuard":null,"tryCatchPattern":"try {\n  const plan = selectRunnerLiveEvalSchedule(schedule, selection);\n} catch (err) {\n  if ((err as Error).message === 'Runner live eval selection matched no scheduled executions') {\n    logger.warn('selection empty; falling back to full schedule');\n    return selectRunnerLiveEvalSchedule(schedule, {});\n  }\n  throw err;\n}","preventionTips":["Check candidate/case pairing exists in entries before applying both filters.","Confirm the schedule actually has entries (entries.length > 0) before selecting.","Regenerate stale schedules after matrix changes.","Fall back to an unfiltered selection with a warning instead of failing the whole pipeline."],"tags":["eval","empty-result","configuration","runner"],"backgroundTag":"empty-result-set","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}