Two defects, and the second is why the first went unnoticed.
1. main fails build-test-cpu
test_qwen27_dense_forward throws, 1 of 9 cases, on build-test-cpu, build-newest-gcc and both sanitize-cpu legs:
tests/vllm/models/test_qwen27_dense_forward.cpp:280: ERROR: test case THREW exception:
vt: qwen3_5 dense: `layer.linear_attn.in_proj_qkv.weight_scale_inv` is present, which is
the block-wise (fine-grained) FP8 scale, but the checkpoint`s quantization_config declares
no weight_block_size. The tensors and the config disagree and there is no block geometry
to read the scale with; refusing rather than guessing 128x128
at src/vllm/model_executor/models/qwen3_5_dense_weights.cpp:428
[doctest] test cases: 9 | 8 passed | 1 failed | 0 skipped
The refusal itself looks correct — a fixture appears to present weight_scale_inv without a weight_block_size, and the loader is right to refuse rather than guess 128x128. What is wrong is that it fires in a test on main.
Attribution, not assumption: 4ee5f4a69 (fix(FIX-PROBE-CANNOT-SAY-NO), #1258/#1267) is the last commit to touch both qwen3_5_dense_weights.cpp and test_qwen27_dense_forward.cpp, and it is an ancestor of main. Preceding block-FP8 work: 281b4bc76 (#1189/#1256) and 09597106e (#1189).
How it surfaced: PR #1081 is records-only. git diff origin/main...HEAD --name-only | grep -cE "^(src|include|tests|scripts|CMakeLists)" returns 0 — it touches no build input at all, yet inherits this failure. A records PR cannot break a C++ test, so the failure is mains.
2. main CI never reports, so nobody sees it
Every recent main run is cancelled:
6e99e4540 cancelled 32b32bb14 cancelled 836c13c35 cancelled 45a4a71d3 cancelled
ci.ymls concurrency group cancels in-progress runs on push, and main is receiving pushes faster than a run completes (cuda-fat-build alone is 45-90 minutes). So mains own status is never established, and a red like this is only discovered when some unrelated PR inherits it.
That is the more expensive defect. It means main can be red for an unbounded time with no signal, and every PR author then has to prove the failure is not theirs — which costs a full investigation each time.
Worth considering: make the push-to-main lane non-cancellable (the schedule/workflow_dispatch events already keep their own partition through the event_name token), or add a periodic baseline run whose job is to answer "is main green right now". Either change is a CI-semantics change and owes its own spec and red-before per AGENTS.md.
Not fixed in flow
The repair belongs to the row that owns the block-wise FP8 loader path, and diagnosing whether the fixture or the loader is wrong needs that context. Filing rather than guessing at someone elses fixture.
Two defects, and the second is why the first went unnoticed.
1.
mainfailsbuild-test-cputest_qwen27_dense_forwardthrows, 1 of 9 cases, onbuild-test-cpu,build-newest-gccand bothsanitize-cpulegs:The refusal itself looks correct — a fixture appears to present
weight_scale_invwithout aweight_block_size, and the loader is right to refuse rather than guess128x128. What is wrong is that it fires in a test onmain.Attribution, not assumption:
4ee5f4a69(fix(FIX-PROBE-CANNOT-SAY-NO), #1258/#1267) is the last commit to touch bothqwen3_5_dense_weights.cppandtest_qwen27_dense_forward.cpp, and it is an ancestor ofmain. Preceding block-FP8 work:281b4bc76(#1189/#1256) and09597106e(#1189).How it surfaced: PR #1081 is records-only.
git diff origin/main...HEAD --name-only | grep -cE "^(src|include|tests|scripts|CMakeLists)"returns 0 — it touches no build input at all, yet inherits this failure. A records PR cannot break a C++ test, so the failure ismains.2.
mainCI never reports, so nobody sees itEvery recent
mainrun iscancelled:ci.ymls concurrency group cancels in-progress runs onpush, andmainis receiving pushes faster than a run completes (cuda-fat-buildalone is 45-90 minutes). Somains own status is never established, and a red like this is only discovered when some unrelated PR inherits it.That is the more expensive defect. It means
maincan be red for an unbounded time with no signal, and every PR author then has to prove the failure is not theirs — which costs a full investigation each time.Worth considering: make the
push-to-mainlane non-cancellable (theschedule/workflow_dispatchevents already keep their own partition through theevent_nametoken), or add a periodic baseline run whose job is to answer "ismaingreen right now". Either change is a CI-semantics change and owes its own spec and red-before per AGENTS.md.Not fixed in flow
The repair belongs to the row that owns the block-wise FP8 loader path, and diagnosing whether the fixture or the loader is wrong needs that context. Filing rather than guessing at someone elses fixture.