Skip to content

main is not verified by its own CI: every run is cancelled, and 5 tests fail under ASan/UBSan #274

Description

@localai-bot

Two findings, and the second is why nobody has noticed the first.

1. Five tests fail under ASan/UBSan

From the sanitize-cpu (address,undefined) job on
PR #259
(run),
99% tests passed, 5 tests failed out of 366:

  9 - test_load_direct_upload   (Failed)
 43 - test_llama_embedding_fold (Failed)
 58 - test_laguna_nvfp4_loader  (Failed)
233 - test_openai_api_server    (Failed)
237 - test_capi                 (Failed)

Not starvation: the run completed in 390 s with the other 361 passing in ~0.27 s
each, and it has now reproduced on two consecutive runs of that PR.

Not caused by that PR. Its entire diff is records/docs plus two test files
plus six comment-only lines in src/vllm/v1/engine/logprobs.cpp — the object
file is byte-identical to main's (md5 verified while the PR was being prepared),
so libvllm.a is bit-identical. A comment change cannot break a loader test, an
embedding fold, an NVFP4 loader or the C API. These are pre-existing on main.

test_capi is independently corroborated: a heap-corruption failure there was
already observed during the Jetson Thor sm_110 bring-up.

2. main's own CI never completes, so this was never going to be caught

Every recent main run is cancelled:

31395680680 ci completed/cancelled
31394968996 ci completed/cancelled
31394705099 ci completed/cancelled
31394011582 ci completed/cancelled
31393661001 ci completed/cancelled
31393588909 ci completed/cancelled
31393519175 ci completed/cancelled
31389045693 ci completed/cancelled

Merges land faster than a CI run takes, and each push cancels the in-flight run
for its concurrency group. The sanitizer job is ~27 minutes, so it is
structurally the least likely job to ever finish on main. The practical effect
is that main is not verified by its own CI — regressions are only visible
on PR branches, where they read as "someone else's problem" and get waved through
as flakes.

This also makes PR review harder in a specific way: with no green main
baseline, a contributor who sees sanitize-cpu red cannot tell whether they
caused it, and the cheap move is to assume they did not.

Suggested split

Worth treating as two pieces of work: triage the five sanitizer failures (each
likely its own root cause), and decide what a verified main should mean —
e.g. a post-merge run that is not cancellable, or a scheduled full run on a
quiet cadence, so there is a known-good baseline to diff against.

Found while holding #259 for a red sanitize-cpu rather than assuming it was
noise.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions