record(intake): place the recipes.vllm.ai sweep and its six issues (#605-#610) - #612
Merged
Conversation
-#610) FOLLOWING_AGENTS_PROTOCOL The 2026-07-28 feature-gap sweep asked what vLLM has that we lack. This one asks a different question -- can a user run the PUBLISHED recipe for a model we already ship -- and the answers disagree. Read vllm-project/recipes at 86c7777a: 157 model recipes, 70 distinct CLI flags, 15 env vars. Architectures resolved from each model's HF config.json (137/157; the rest are gated repos or diffusion pipelines with no top-level architectures) and joined against model-matrix.md and the registry at the pin. Model coverage is broad -- 79 of the unstarted recipes already have rows, so they are scoped, not missing. The serve surface is where it breaks. vllm-serve aborts on an unknown argument, so an unmapped flag is not a degraded run but no run: --enable-auto-tool-choice (89 recipes) and --trust-remote-code (82) are both no-ops for us and both abort startup. --reasoning-parser resolves 10 of upstream's 28 names, so 61 of 76 recipe uses throw -- including qwen3, the corpus's single most common value, which the published Qwen3.5/3.6 recipes pass to models we gate token-exact. Tool parsers are the healthy axis at 82/90. #605 is placed on SAMPLE-REASONING rather than opening a track: that spec already enumerates these names in W2/W3. What the recipe data adds is the ordering, and it inverts the numbering -- W3 covers 43 of 76 uses, W2 covers 18 and four of its names have zero. #606 and #607 are left as em dashes because no row owns serve CLI recipe compatibility, and a wrong row id in a keyed record is worse than an honest blank. Two things worth recording beyond the issues. --language-model-only, --async-scheduling, --enforce-eager and --mamba-ssm-cache-dtype appear in this repo only in tools/bench/ scripts that drive the ORACLE, so grepping the flag name reads as coverage and is the opposite of it. And taxonomy.yaml carries a dgx_spark_gb10 profile that 8 recipes declare -- upstream has published GB10-validated configurations for our exact gate box, six of them for rows already active, which fixes the honest denominator for us instead of us choosing it. Records only, no product code touched. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
FOLLOWING_AGENTS_PROTOCOL The em dash was honest when written -- no row owned serve CLI recipe compatibility. The spec PR creates one, so the keyed record is updated in place rather than left understating where the work lives. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…row exists" FOLLOWING_AGENTS_PROTOCOL This reverts 84beead. The row exists on row/serve-recipe-args, not here, so on THIS branch the placement was a record pointing at nothing -- check-agent-record caught it exactly right, twice over: "dangling link specs/serve-recipe-args.md" and "references unknown stable row SERVE-RECIPE-ARGS". The em dash goes back, and it is not a placeholder for laziness: the table documents that convention precisely because a row id that does not resolve is worse than an honest blank. #606 gets placed once its row lands on main, in a change that can actually see it. Grouping the placement with the intake was the mistake -- two branches, one keyed record, and the ordering between them is not something either branch can assume. python3 scripts/check-agent-record.py: 0 errors. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…#609, #610) FOLLOWING_AGENTS_PROTOCOL The sweep counted 11 unrowed RECIPES and then reported them as if they were rows. They are not: 11 recipes resolve to 8 distinct architectures, because MossTTSDelayModel alone is reached by four of them (MOSS-TTS, MOSS-TTSD-v1.0, MOSS-SoundEffect, MOSS-VoiceGenerator). #610's headline said seven while its own table enumerated six. A row is an architecture, so 8 is the number that matters, and the issue title is corrected to match its table. Caught by the implementer re-deriving the audit independently rather than taking the brief's count on faith -- which is what the brief asked for and the reason the wrong number did not reach the matrix. The rollup moved 314->322 / 362->370. Also records what this sweep CANNOT see. 20 of the 157 recipe configs were unreadable (gated or 404: Voxtral-4B-TTS-2603, GLM-TTS, IndexTTS-2.5, stable-audio-open-1.0, several meta-llama), so those architectures are unverified and 8 is a FLOOR. And any vllm-omni architecture no recipe references is invisible to a recipe-driven sweep by construction. Stating the blind spot beats letting the number read as a total. python3 scripts/check-agent-record.py: 0 errors. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…ce (#620) FOLLOWING_AGENTS_PROTOCOL This branch appended #609 and #610 to the intake table with em-dash rows, because when it was written neither issue had a row to point at. #620 has since added the eight matrix rows AND placed both issues in place, keyed to MODEL-TEXT-qwen3-5-qwen3-5-moe-for-causal-lm and MODEL-MM-moss-tts-moss-tts-delay-talker-for-generation. Two branches, one keyed record, entries at different line positions: git merges both without a conflict and the table ends up defining #609 and #610 twice. That is the move-plus-add duplicate shape -- it does not announce itself, because a clean merge is exactly what it produces. The append is the weaker of the two (em dash vs a real row), so it goes; #620 owns those keys. This branch keeps #605-#608, which #620 does not touch. Not a merge-order fix: removing the duplicate here is correct whichever PR lands first. python3 scripts/check-agent-record.py: 0 errors. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…CausalLM FOLLOWING_AGENTS_PROTOCOL The sweep reported 8 unrowed architectures. One of them, Qwen3_5MoeForCausalLM, was already owned by #490 and its open PR #601 -- which does not merely row it but REGISTERS it alongside Qwen3_5ForCausalLM, resolves the backbone prefix, refuses unsupported MoE layouts, and carries CPU 404/404 plus SACRED GPU 315/315, 235/235 and 138/138, reviewed twice over five reproduced mutations. #601 also adds a row this sweep never saw, MODEL-TEXT-qwen3-5-qwen3-5-for-causal-lm. So 7 are owed: BailingMoeV3ForCausalLM plus the six vllm-omni architectures. AGENTS.md says to re-verify a gap against issues AND PRs before claiming. I grepped issue titles with terms that did not match #490's wording and did not check open PRs at all. The verification that should have run first was cheap: diff every open PR against main for each architecture string. Run afterwards, it shows Qwen3_5MoeForCausalLM in two branches and the other seven in one -- which is exactly the answer needed before dispatching anyone. This matters beyond one wasted row. Two branches ADDING the same keyed row merge without a conflict and define it twice; nothing announces it, because a clean merge is the symptom. Same shape as the #609/#610 duplication removed two commits ago, from the same root cause: assuming a keyed record has one writer. Both counting lessons are recorded in the sweep section rather than just fixed, since the next sweep will face both. python3 scripts/check-agent-record.py: 0 errors. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…622) FOLLOWING_AGENTS_PROTOCOL NOW.md said "all 362 archs have rows". That number is owned by model-matrix.md, whose rollup is CI-enforced, and #625 moves it to 369 -- so the line was about to be wrong, as it had been before. Bumping it would be the wrong fix. AGENTS.md is explicit: never store a measurement of one file inside another, because a number that moves on every edit couples every PR to lines it does not own. NOW.md is authored at operator cadence and is "never a per-row lifecycle write", so a row-adding PR could not satisfy both rules at once -- it had to leave NOW.md wrong or touch a file outside its scope. That is a records defect, not a stale line, and it is #622. The claim survives without the figure: "every arch in the pinned registry has a row" is what the sentence was actually asserting, and it stays true as rows are added. The count is one link away in the file that owns it. Removing the number removes the failure mode instead of guarding it -- and nothing checks NOW.md's figure against the matrix, deliberately, since that would be the second description this protocol exists to avoid. NOW.md stays inside budget: 73 lines / 3,822 chars against 100 / 6,000. scripts/agent-preflight.sh --staged: exit 0. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
localai-bot
pushed a commit
that referenced
this pull request
Aug 13, 2026
…ment and three anchors that disagree with the tree (#606, #631) Repairs the fresh scoped review of #624. The review's verdict was FAIL on the RECORD and explicitly not on the code: the seam, the mirrored cli_args.py:395 validation, the notice and the four tests all reproduced exactly, mutation included. Nothing in `src/` or `tests/` changes here, by design. 1. AN UNNAMED RED LANE (the one that matters). The spec's `## Now` attributed the red CI to the two `windows-msvc-*` lanes and #584, so a reader was told the CPU lane was green. It is not: `build-test-cpu` fails on `test_cpu_threadpool`, 1 of 404, at `ratio 101.567` against a fixed `< 100.0`. AGENTS.md § Gates wants exactly one result per applicable rule, and a lane omitted reads as a lane satisfied. It is now named, with the same attribution rigor already spent on #584 rather than a bare "unrelated": the guard divides two wall-clock medians, the 2-core runner collapsed the DENOMINATOR to 0.48 us, and argument parsing inside `ParseArgs` has no path to a threadpool dispatch ratio. Already filed as #631 while the review was running, so this references that issue rather than opening a second one. The evidence is three observations of the same code, and the third is the informative one. The 2-core runner read 101.567; #631's table read 2.699 on a 20-core box; rebuilding the reviewed head here read 0.990872 on a 20-core box (9 cases / 9 passed, 19602 assertions, `Status: SUCCESS!`). Two same-class boxes 2.7x apart is the finding: the statistic will not carry a fixed threshold. Recorded rather than smoothed, and the middle row is kept attributed to #631 rather than restated as mine. Also recorded because it falsifies the test's own claim at `test_cpu_threadpool.cpp:496` that it can "be trusted ... never to fail spuriously on a busy one". NOT fixed in flow, deliberately. Repairing that guard changes a gate's semantics, which AGENTS.md routes through its own spec and red-before evidence; and raising 100 to a larger number would be widening a scope to turn a red gate green, which is the specific thing forbidden. 2. A COMMENT FALSE ABOUT ITS OWN TREE. The `ENGINE_ROWS` 152 -> 153 justification in `check-agent-record.py` said the row is `SPIKE` and that "no seam, no test, and no `docs/USAGE.md` entry exists yet". All four were true at the spec commit `0d8274ac3` and none is true at this head. `main` is squash-only, so the single landing commit would have shipped a comment contradicted by files in the same commit — AGENTS.md § History is git: the record cannot disagree with the tree. Corrected to state the tree rather than framed "as of the spec commit". The as-of framing would also have been accurate, and is rejected on purpose: it dates a justification to a commit that squash-merging deletes, so the reader who meets the line has no way to check it. A comment that describes the file it sits in is verifiable by looking; one that describes a vanished intermediate is not. 3. THREE STALE LINE ANCHORS, in `.agents/engine-matrix.md` and the spec. `b7eaadd07` inserted a 4-line comment at `server_main.cpp:299-302` and shifted everything below it. Re-derived from the file rather than from the review's table, and the table was right: `FindAcceptedInertArg` 308 -> 312, the parse branch 501 -> 505, the mirrored validation 557 -> 560. `kAcceptedInertArgs:289` sits above the insertion and all four test anchors (`:141`, `:165`, `:188`, `:212`) are exact; those five are untouched. 4. A FORWARD REFERENCE, made legible instead of resolved. The spec cited `roadmap_v1.md` § Recipe-surface sweep, which does not exist there yet — it arrives with #612, along with the intake rows for #605-#608. The citation now says so. #606 is deliberately NOT added to the intake table: #612 owns those keys, and two branches adding the same keyed record merge cleanly and then define it twice, which has already happened twice in this campaign. 5. `InertArg::takes_value` recorded as a named cold path. Both shipped entries are `kNoValue`, so the value-consuming branch is unexercised and cannot be tested without inventing an entry. The obligation moves to the spec: the first entry with `takes_value == true` owes a test in the same change. No speculative code and no speculative test. check-pr-size requires paired mutation evidence for any change to `scripts/check-agent-record.py`. This PR already carries it — `test_agent_record.py`'s `test_serve_recipe_args_row_is_inside_the_engine_ratchet` is the semantic evidence for the 152 -> 153 bump, and the checker verifies the pair over the whole PR range. The edit above is comment-only and changes no behavior that any test could newly pin, so no test is added: a test written to satisfy a counter rather than to defend a guarantee is the thing that rule exists to prevent. Verification, all foreground and observed: `scripts/agent-preflight.sh --staged` exit 0, "All gates green"; `scripts/check-windows-portability.py` exit 0, "Windows portability contract OK" (it is Windows-only and not part of preflight, which is how the earlier `open (` trap got through); each corrected anchor read back from the file it points into. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
localai-bot
pushed a commit
that referenced
this pull request
Aug 13, 2026
FOLLOWING_AGENTS_PROTOCOL main advanced while this branch was open: #616's spec amendment squash-landed, along with the four other recipe-sweep PRs. Two conflicts, resolved deliberately. reasoning-parsers.md: this branch carries #616's amendment (it was based on that branch) PLUS its own W3 status -- nano_v3 added to the wave list and the "Brick 1 DONE" record. Taking this side is correct because it is a strict superset; verified by confirming the amendment section and all names survive, not by assuming supersetness from the diff shape. roadmap_v1.md: the check-agent-record gate refused with "issue #605 listed twice" -- and it was RIGHT. #612 landed an intake row for #605 while this branch carried its own, so the merge would have defined one key twice. That is the fourth time this campaign that two branches wrote the same keyed record; it is the first time a gate caught it rather than a human, which is worth recording. Resolved per AGENTS.md: kept main's row in main's position and folded this branch's content into it as a scoped update, rather than appending a second row. Not resolved by taking either side wholesale: the surviving row now states both the original defect AND that brick 1 landed, because after this merge both are true and a keyed record must describe its key's current state. scripts/agent-preflight.sh --staged: exit 0, all gates green. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
localai-bot
pushed a commit
that referenced
this pull request
Aug 13, 2026
FOLLOWING_AGENTS_PROTOCOL main advanced to b81a5e4 (#641's LTX-2.5, then #650's oracle policy) and roadmap_v1.md's Open-issues table conflicted. That table is a KEYED RECORD, so AGENTS.md forbids resolving it by automatic three-way merge: took main's file WHOLESALE and reapplied this branch's two scoped edits. The two edits are NOT the same operation, and treating them alike is the trap I walked into first. #608 already exists on main -- it landed via #612 -- so it is an UPDATE IN PLACE. #649 is new, so it appends. My first attempt appended both and produced a duplicate #608, caught by counting rather than by any gate: the uniqueness check the checker does run would have caught it too, but only after I had already written the wrong thing. Verified rather than asserted: diff against main is +2/-1 -- one row replaced, one added -- and grep gives exactly one #608 row and one #649 row. One gate needed a second look. test_cpu_x86_llamacpp_floor's contended-leg case failed once here at load 26.97, then passed twice consecutively in this same worktree, and passes on clean main at the same load; the test file and tools/bench are byte-identical to main. That is #618's known flakiness, not this resolution. Re-ran the full staged gate afterwards for a clean result rather than reasoning past the red. scripts/agent-preflight.sh --staged: exit 0, all gates green. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Places the
recipes.vllm.aiaudit inroadmap_v1.md: the six issues into theintake table, and a Recipe-surface sweep section alongside the 2026-07-28
vLLM feature-gap sweep.
Issues: #605, #606, #607, #608, #609, #610.
Why a second sweep
The feature-gap sweep asked what vLLM has that we lack. This asks whether a user
can run the published recipe for a model we already ship. Where they disagree,
this one is sharper: a model gated token-exact whose own recipe command aborts at
argument parsing is not usable, however good the kernels are.
Grounding
vllm-project/recipes@86c7777aa699482ef1ebd0c5da9fc540ccc00a40— 157 modelrecipes, 70 distinct CLI flags, 15 env vars. Architectures resolved from each
model's HF
config.json(137/157 — the remainder are gated repos or diffusionpipelines with no top-level
architectures), joined againstmodel-matrix.md, andchecked against vLLM's registry at the pin
5559679and onmain.What it found
Model coverage is broad — 79 of the unstarted recipes already have rows, so they
are scoped rather than missing. The serve surface is where it breaks:
vllm-serveaborts on an unknown argument, so--enable-auto-tool-choice(89recipes) and
--trust-remote-code(82) — both no-ops for us — stop theserver before model load.
--reasoning-parserresolves 10 of upstream's 28 names: 61 of 76 recipe usesthrow, including
qwen3, the corpus's most common value, which the publishedQwen3.5/3.6 recipes pass to models we gate token-exact.
Placement decisions
#605 goes on
SAMPLE-REASONINGrather than opening a track — that spec alreadyenumerates these names in W2/W3. What the recipe data adds is ordering, and it
inverts the numbering: W3 covers 43/76 uses, W2 covers 18 and four of its names
have zero recipe demand.
#606, #607, #609 and #610 are left as em dashes. No row owns serve CLI recipe
compatibility or model-matrix intake, and per the convention this table documents,
a wrong row id in a keyed record is worse than an honest blank.
Also recorded
A measurement trap:
--language-model-only,--async-scheduling,--enforce-eagerand
--mamba-ssm-cache-dtypeappear in this repo only intools/bench/scriptsthat drive the oracle. Grepping the flag name reads as coverage and is the
opposite of it.
And
taxonomy.yamlcarries a restricteddgx_spark_gb10profile that 8 recipesdeclare — upstream has published GB10-validated configurations for our exact gate
box, six for rows already active.
Records only, no product code touched.
scripts/agent-preflight.sh --stagedclean.🤖 Generated with Claude Code