Skip to content

LCB judge: empty test suite scored as PASS for every submission (vacuous all([])) #443

Description

@arekay-nv

Summary

In the LiveCodeBench grading service, an empty test suite causes every submission for that question to be scored as passing, silently inflating pass@1. Surfaced during review of #433 but pre-existing — not introduced by that PR.

Where

src/inference_endpoint/evaluation/livecodebench/lcb_serve.py, in _LCBWorker.__call__:

results[qid][code_idx] = all(case_result > 0 for case_result in res)

all([]) is vacuously True, so whenever res == [] the sample is marked PASS.

How res becomes empty

  • A {qid}.json test-case file that exists but has empty public_test_cases + private_test_cases yields a suite with inputs: []. LCBTestLoader(strict=True) — the default LCBServe uses — only raises on a missing file, not on empty content.
  • run_test over inputs: [] runs grade_stdio/grade_call_based across zero inputs, appends nothing, and returns ([], metadata).
  • The no-result branches in run_code_subprocess likewise build res = [-1] * len(suite["inputs"]), which degenerates to [] when inputs == [].

Impact

A question with an empty/degenerate suite is a free PASS for every code sample → reported pass@1 is inflated with no error, no infra_error, and no raise. On an MLPerf accuracy path this is a silent correctness/validity bug.

Suggested fix

Treat an empty suite as an error/skip rather than a vacuous pass — e.g.

results[qid][code_idx] = bool(res) and all(c > 0 for c in res)

and/or reject empty suites explicitly upstream (raise in the loader, or classify as an infra-style error in run_code_subprocess so it is visible to the all-infra guard) rather than letting them reach all().

Provenance

Found by a multi-model review council (Claude accuracy lens + Grok 4.5) during review of #433; both independently rated it high/critical. Verified reachable under the default strict=True.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions