Skip to content

fix(BUILD-MAIN-TIP-TESTFIX): main tip builds again — DSA test follows W9, glm5_next_weights stops shadowing (#2372) - #2399

Closed
lu-zero wants to merge 4 commits into
mudler:mainfrom
lu-zero:row/BUILD-MAIN-TIP-TESTFIX
Closed

fix(BUILD-MAIN-TIP-TESTFIX): main tip builds again — DSA test follows W9, glm5_next_weights stops shadowing (#2372)#2399
lu-zero wants to merge 4 commits into
mudler:mainfrom
lu-zero:row/BUILD-MAIN-TIP-TESTFIX

Conversation

@lu-zero

@lu-zero lu-zero commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

fix(BUILD-MAIN-TIP-TESTFIX): glm5_next_weights stops shadowing v under MSVC -Werror (#2372)

Closes #2372

What changed: the loader facet of main-tip's build break. The other facet the
issue named, the schedule test's 11-argument call, landed on main from an
independent find while this row was in review — 08fa2f5aa (#2395) applies
the same twelve-argument repair — so the rebased branch drops its duplicate
as already applied and carries one fix.

src/vllm/model_executor/models/glm5_next_weights.cppKdaHeadCount's
else-if chain declared const GgufValue* v three times. An if-condition
declaration is visible in the else branch, so the declarations at 223 and
226 shadow the one at 220; MSVC /W4 reports C4456 twice and the Windows
-Werror regime escalates to C2220, reding both windows-msvc-* jobs.
gcc/clang do not warn by default, which is why every Linux build stayed
green. The fix renames only the two shadowing declarations and their
immediate uses (v_group, v_inner); no behavior change.

Evidence: red captured locally before the fix — the loader compile under
the shadow form is what MSVC reded on; after the fix, gcc -Wshadow on the
TU flags exactly 223:31/226:31 on the pre-fix form and nothing there after —
the project builds with -Werror but without -Wshadow, which is how this
stayed invisible on Linux. CI on this PR's previous head already proved the
gcc facet of the issue green: build-test-cpu, build-newest-gcc, and both
sanitize-cpu jobs, including the schedule test that the landing of
08fa2f5aa now keeps green on main. On the Windows arm, this PR's CI round
shows the compile error gone — no C4456/C2220 anywhere in either
windows-msvc log; the residual red there is a new, distinct defect:
test_openai_api_server.exe aborts at runtime (0xC0000409) in 3 of 79
cases, filed as #2403 with the same first-execution exposure as this break
(those binaries could not link until the compile error cleared). Fresh
reviewer verdict: PASS on all six guarantees with each mutation restored
byte-for-byte; its two prose findings (line numbers in the spec and in the
loader commit body) are repaired in-tree.

Remaining red after this lands, out of scope: windows-msvc-* (#2403,
owned by the api_server row; not caused by this change) and
documentation-checkpoint (#2375, main-only, owned by the gate).

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai-glm-5.3-flash [maki]

Scope: the two build breaks mudler#2372 attributes to main's tip - the DSA
schedule test call left at 11 arguments when W9 (11f34ef) inserted
attn_pre_o_proj before shared, and the glm5_next_weights KdaHeadCount
else-if chain whose second and third `const GgufValue* v` shadow the
first under MSVC C4456 (escalated by C2220; gcc/clang stay silent, so
Linux CI never saw it). Between them they red six CI job names on
every open PR.

Design: the test call mirrors the production call exactly
(glm_moe_dsa_forward.cpp:455-460 passes /*attn_pre_o_proj=*/nullptr,
shared); the loader fix renames only the two shadowing declarations
and their immediate uses. No behavior change in either facet.

Evidence plan: red-first build of test_glm_moe_dsa_schedule on this
worktree before the fix; the MSVC arm cannot red locally (no MSVC on
this host) and its red is the CI log, with CI on this PR's head as
the green authority - both named in the spec as the unavoidable
adaptation. Mutation plan: the 11-arg revert re-reds the build, and
gcc -Wshadow flags a reintroduced shadow, giving the MSVC-only
warning a local detection mechanism.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai-glm-5.3-flash [maki]
…-Werror (mudler#2372)

KdaHeadCount's else-if chain declares `const GgufValue* v` in each
condition. An if-condition declaration is visible in the else branch,
so the declarations at lines 223 and 226 hide the one at 220. MSVC
/W4 reports C4456 twice and the Windows -Werror regime escalates to
C2220, reding both windows-msvc jobs. gcc and clang do not warn by
default, which is why every Linux build stayed green while Windows
broke.

The fix renames only the two shadowing declarations and their
immediate uses (v_group, v_inner); the first branch's v and every
other line of the function are untouched, and both KvInt calls keep
their exact arguments, so no behavior changes.

Detection proof: the project builds with -Werror but without
-Wshadow, which is exactly how this stayed invisible on Linux.
Appending -Wshadow to the TU's compile command flags 223:31 and
226:31 on the pre-fix form and nothing there on the fixed form, so
the MSVC-only warning now has a local detector. The MSVC arm's green
evidence remains CI on this PR's head, per the spec's named
adaptation.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai-glm-5.3-flash [maki]
…udler#2372)

The fresh reviewer's mutation pass placed the two renamed uses at
225 and 228, not the 224 and 227 the design section claimed, and the
shadowed declaration at 220 rather than 221. Numbers only; the design
and the fixes are unchanged.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai-glm-5.3-flash [maki]
…record the split (mudler#2372)

The schedule-test repair landed on main from an independent find while this
row was in review: 08fa2f5 (mudler#2395) applies the same twelve-argument call,
found by building main. The rebased branch drops its duplicate as already
applied and now carries only the KdaHeadCount rename; it still closes mudler#2372,
which names both breaks. The spec gains the same note, so the record and the
branch agree.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:zai-glm-5.3-flash [maki]
@lu-zero
lu-zero force-pushed the row/BUILD-MAIN-TIP-TESTFIX branch from baf0975 to ff25006 Compare August 31, 2026 15:54
@lu-zero lu-zero closed this Aug 31, 2026
@lu-zero
lu-zero deleted the row/BUILD-MAIN-TIP-TESTFIX branch August 31, 2026 19:14
mudler added a commit that referenced this pull request Sep 1, 2026
…o the model (#2398)

Merges `row/ENG-MM-INPUT-PIPELINE` (43ed5cb, PR #2398). The runner now builds
device-resident multimodal buffers and hands them to the registered forward
through `ModelForwardInput.mm`, so a vision tower is reachable from the server's
default configuration rather than only from a test that constructs it by hand.

CORRECTION TO A COMMIT BODY THIS MERGE CARRIES. Commit 9775230's body explains
the new preemption test by saying it sizes the hog's decode chunk to exhaust the
token budget "so the waiting loop is never entered". A fresh review refuted that.
The waiting loop is not gated by the token budget at all: `Scheduler::schedule`
wraps the waiting section in `if (preempted_reqs.empty())`
(src/vllm/v1/core/sched/scheduler.cpp:849), which sits before
`while (!waiting->empty() && token_budget > 0)`, so a step that preempted
anything can never reach that loop whatever the budget. Upstream mirrors this at
the pin 5559679229, vllm/v1/core/sched/scheduler.py:668. The reviewer proved it by
rerunning the mutation with half the budget unspent; the case still went red. The
test is therefore MORE robust than its own commit body claimed, not less. The
in-tree comment was corrected by 43ed5cb; this paragraph corrects the history
that 9775230 already wrote, because a merge cannot rewrite it.

Landing with five red CI lanes, every one of them attributed to a defect that
predates this branch and reproduces on `main` without it:
`build-test-cpu` fails only `test_gguf_device_fit_reach` (#2450, confirmed by
building the same binary at origin/main with this branch absent); both
`sanitize-cpu` arms fail on #2430 (an out-of-bounds write in
`dense_attn::MakeTensor`, which indexes a rank-4 array by an unchecked incoming
rank) and #2431 (a 384-byte leak); both `windows-msvc` arms fail on the C4456
shadowing in glm5_next_weights.cpp that #2399 owns. `build-newest-gcc` passed,
and `build-test-cpu` compiled clean before reaching ctest, which is what
independently confirms the plugin compile break this branch introduced and then
fixed is gone.

Verified before merging: whole test tree built against this exact merge, nine
suites green (test_scheduler 47/513, test_plugin_system 1/29,
test_openai_api_server_mm_forward 4/30, test_runner 36/1851,
test_model_registry 24/993, test_chat_mm 11/126, test_openai_serving 48/1365,
test_openai_api_server 79/1212, test_glm_moe_dsa_schedule 12/533).

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
mudler added a commit that referenced this pull request Sep 1, 2026
…n architecture (#2481)

Merges `row/ENG-MM-INPUT-PIPELINE-mm-processor-registry` (8f4f19e, PR #2481).
Closes #2475.

The server used to install its multimodal seam by the FILE EXISTENCE of
`preprocessor_config.json` and then hardcode Qwen3-VL's processor and chat
function, with a swallowed catch falling back silently to the text path. That is
not merely absent for a second multimodal model: `dots3-note` ships a
`preprocessor_config.json` too, with a different `vision_config` shape, so it
would have been handed Qwen3-VL's processor, or answered image requests as
text-only with no diagnostic. The silent arm is the worse one, because a
multimodal server that answers as text-only looks like a working server.

It now dispatches on the model architecture through a self-registering registry,
mirroring vLLM: `register_processor` keys on the model class
(vllm/multimodal/registry.py:142-172 at pin 5559679229), `_get_model_cls` raises
by name for an unregistered architecture (:176-186), and Qwen3-VL registers in
its own translation unit (qwen3_vl.py:1673-1678) rather than editing a shared
table. The registry lives in the entrypoints layer because the registered
artefact needs `ChatPromptRenderFn`, `ImageCodecFn` and `ChatMessage`; putting it
on `ModelFactory` would make `model_executor` depend on `entrypoints`, and
upstream splits it the same way. An unregistered architecture now refuses by
name, and a factory that produces no callable refuses too rather than reporting
success -- that second arm was found by the fresh review, not by the author, and
without it a registered-but-empty seam logged "seam wired" while the image
request went to the text path.

WHAT IS STILL OWED, stated because a green suite hides it. Half of #2408 item 5
is closed and half is not. The closed half: the test harness used to
RE-IMPLEMENT the install, which is why deleting the production line left the
suite green; it now calls the production `InstallMultiModalChatSeam`, and both
mutations go red through it. The open half: the production call site in `main`
is still ungated, and the residual is wider than one line -- it is the whole
context assembly plus both new `LoadedEngine` accessors. Two mutations prove it,
each verified to have reached the binary by sha256:
`mm_ctx.architecture = ""` and `InstallMultiModalChatSeam(chat, false, ...)`
both leave the suite green, and the second reintroduces exactly the defect this
change removes. Closing it was attempted and measured, not skipped: a loadable
checkpoint does carry the server past the install and out through a controlled
exit, so neither reach nor exit is the blocker. The blocker is that the only
loadable fixture is text-only, where the mutated and real calls are
observationally identical. What is missing is a multimodal-declaring checkpoint
with a tokenizer and weights the loader accepts -- a fixture with its own
generator, not a test.

Verified before merging: whole test tree built against this exact merge with zero
FAILED targets, and eight suites green -- test_openai_api_server_mm_forward 9/73
(the ninth case is the empty-seam refusal), test_chat_mm 11/126,
test_openai_serving 48/1365, test_serve_mm_limits 11/109,
test_openai_api_server 79/1216, test_tower_skip 7/94, test_capi 66/668,
test_model_registry 24/993.

Landing with inherited red CI lanes, none caused by this branch and each
reproducing on `main` without it: `windows-msvc` twice on the glm5_next_weights
C4456 shadowing that #2399 owns, `build-test-cpu` on `test_gguf_device_fit_reach`
(#2450), and both `sanitize-cpu` arms on #2430 and #2431.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

main tip does not build: the DSA schedule test predates W9's signature, and glm5_next_weights trips MSVC -Werror

1 participant