test(MUSIC3-DIT-ARM-REACH): gate the engine's own call to the DiT arm selector on a real device (#1131) - #1821
Merged
Merged
Conversation
…call to the DiT arm selector (#1131) Wave 1 of this row moved the DiT arm's selection rule out of `Music3SpeechEngine` into `Music3SelectDitArm`, so that a CPU gate could drive both sides of a condition no runner CI owns can satisfy. It left one thing unreached and said so: the engine's own two-line CALL. Mutation M5 deleted that call and every suite in the tree stayed green, which is what kept #1131 open. This section states how the residual closes, before any code is written for it. The residual is not closable on a runner -- it needs an accelerator and the 28.5 GB checkpoint -- so the section names the gate, the production entry point it enters through (`include/vllm.h`), the three profile buckets it reads to say WHICH ARM RAN, the absent fourth bucket that makes those counts mean something, the CTest label that makes a device-only gate selectable rather than forgotten, and the evidence the run owes. It also states the acceptance criterion in one line, so that a reader can tell afterwards whether it was met: with the engine's call deleted, the gate reds. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [claude-code]
… selector on a real device (#1131) `test_minimax_music3_device_arm_real` drives `include/vllm.h` -- `vllm_speech_engine_load` with `device = 1`, then `vllm_synthesize` -- and asserts which arm ran from the engine's own profile buckets. It is the gate #1131 asked for, and it is the first thing in the tree that enters through the line the engine actually executes rather than through the function that line calls. It reads three instruments and one absence, because the host and device arms agree numerically by design and no property of the audio can separate them. `acoustic.dit_staging` is emitted from inside `Music3SelectDitArm` past its CPU early return, so it is present if and only if the engine's call site ran and took the device branch; that is the one that answers the residual directly. `denoise.dit_device` says the production denoise loop selected the device branch, and `dit.pack` lives inside `DitForwardDevice`, so it says the device forward's body executed and a mislabelled bucket cannot fake it. Their call counts are checked against `steps x windows` and `2 x steps x windows`, with both quantities read from counters the run itself produced rather than from constants this file could agree with itself about. `denoise.dit_host` must be absent, which is what stops the other three from being merely present. The waveform is checked only for being finite and non-degenerate, and the case says in its own text that this is a control against an arm that threw halfway, not a numerical gate. Correctness against upstream stays where it already is. The entry is labelled `gpu;checkpoint;music3` so that a gate no runner can execute is selectable by name -- `ctest -L gpu` -- rather than depending on who remembers it exists, and it exits 77 without a device or a checkpoint so CTest reports Skipped and never Passed. `docs/USAGE.md` gains the section that says how to invoke it and where, because a gate nobody runs is the defect this row is fixing. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [claude-code]
…esidual, measured (#1131) The gate this row added was run on a real device against the real checkpoint, and the deletion mutation `.agents/reachability.md` prescribes was taken on the same head. `## Owed`'s first entry is struck through and `## Outcome, wave 2` carries what was measured. Job `f63f60e8-957a-4062-92f8-54e5bbb49d92` on `thor:gpu0` inside an `rc` lease, worker `rc-worker-kk96r`, boot id `e2112cac`, unchanged end to end. NVIDIA Thor sm_110, driver 595.78, nvcc 13.0.88 installed by the job. The checkpoint was staged off CIFS onto the worker's own disk and the copy verified by bytes rather than by existence -- `SRC_BYTES == DST_BYTES == 28517617303` -- which turned a 780 s cold weight load into 8.1 s. Green: the gate at 1 / 1 cases and 22 / 22 assertions, and the four adjacent Music3 suites at 40/403, 9/223, 37/649 and 7/50, every one `SUCCESS!` with zero `[SKIP]` lines. Which arm ran is read off `acoustic.dit_staging` (1), `denoise.dit_device` (2 = steps x windows), `dit.pack` (4 = twice that, one bracket spanning both guidance branches) and the absence of `denoise.dit_host`. Red, which is the point: with the engine's call to `Music3SelectDitArm` deleted -- one hunk, `compile_rc=0` reported before any verdict -- the gate fails at `REQUIRE(staging != nullptr)`, `Status: FAILURE!`. The run did not break. It produced `denoise.dit_host` at 196.786 s where the shipped tree produced `denoise.dit_device` at 0.527 s, on 0.24 seconds of audio, with every number unchanged. That is exactly what #1131 said no gate in the tree could see. The restore is proven by an empty `git status --porcelain` at the same SHA plus a green re-run, not by a hash: this build links CUDA objects and does not link bit-reproducibly, so the restored binary hashes differently and a hash comparison would have read a correct restore as a failed one. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [claude-code]
…ote landed, and say whose it is (#1829) Found on this pull request's own `windows-msvc-cpu` job. The diff here is four files and none of them is `dots3_note`, so the break arrived from `main`: `849a7dd73` declared `[[noreturn]] static ForwardLogits ForwardDevice(...)` -- the attribute on a non-void return type -- and MSVC turns that into C4646, which warnings-as-errors makes `error C2220`. The whole `vllm` project then fails to compile on Windows. GCC and Clang accept the declaration silently, which is why every POSIX job on the same commit is green. It landed unseen because the two `windows-msvc-*` jobs are pull-request-only and `main` receives no Windows verdict at all, so the first thing to notice it is whichever branch happens to run next. That is the half worth writing down: every pull request cut from `main` since now inherits a red it did not cause and has to prove that before it can proceed. Filed rather than fixed here, with the owner named. `ForwardDevice` overrides into a registry hook and cannot simply become `void`, so the repair is a semantic choice in a file the `MODEL-MM-dots3-note` row is actively developing, and this branch has no MSVC to verify one against. The index row names that row, which is what `AGENTS.md` requires of an issue not fixed in flow. The row also says plainly that this is not the known #584. That one is the runtime `exit -1073740791` in `test_openai_api_server.exe`; a reader who stops at the job name would wave a real compile break through as the inherited runtime one. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [claude-code]
…the thor evidence still holds (#1131) `main` moved eight commits while this row's device leg was running. The merge is clean, and the two files both sides touched were checked rather than trusted: `.agents/issue-index.md` comes out as main's 660 rows plus this branch's one new row with no duplicate key and nothing lost, and `docs/USAGE.md` and `tests/CMakeLists.txt` keep this row's section and its test entry intact. **The GPU evidence was taken at `bc61ce518` and is not re-run here, because nothing in the range can touch it.** `git diff af320ab..df1ee20` leaves `src/vllm/model_executor/models/minimax_music3_*` and `tests/doctest_main.cpp` untouched. #1812's listener, which is the one arrival that could plausibly reach another suite, lives inside `tests/vt/test_ops_attention_cross.cpp` and is suite-local. Saying which range was read is the point: "still valid" is a claim about a diff, and a reader who cannot see the diff cannot check it. Merged rather than left behind so that this pull request's checks run against the base it would actually land on, including the `macos-metal-mlx` red that #1692 made visible and #1823 owns. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [claude-code]
Routine integration before landing the DiT arm reachability gate. No conflicts. FOLLOWING_AGENTS_PROTOCOL Issue: #1131 Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…hat selects the gate gets pinned
The fresh review returned FAIL on six findings, and the first one is a measured
statement that is false. The row's `### Restore` said the restored CUDA binary
does not hash back to the baseline and generalised that into "this build links
CUDA objects and its link is not bit-reproducible". The job log holds three
sha256 lines for the gate binary and only two values: `ed268392...` baseline,
`ce8bd1f8...` mutated, `ed268392...` restored. The row compared restored against
MUTATED. The review reproduced the correct answer independently at this head on
`thor:gpu0` -- `HASH VERDICT: RESTORED == BASELINE`. The generalisation is
deleted rather than softened, because it is the sentence a later row would cite
to waive a hash restore on any CUDA build, and nothing measured it. The
`## Evidence this row owes` line it appeared to waive is marked MET on both legs.
`ctest -L gpu` returns 0 over an empty selection, so the label this row adds --
and documents as the way to invoke a gate no runner can execute -- fails open.
For a row whose subject is a gate that measures nothing while printing green,
shipping its own discovery mechanism in that state is in scope.
`scripts/check-test-registration.py` now pins the selection to the exact set
`{test_minimax_music3_device_arm_real}`, read from `ctest --show-only=json-v1`
over a configured tree and compared against a literal in the checker rather than
against CMake text. Renaming the label on the shipped `tests/CMakeLists.txt`
takes it from rc 0 to rc 1; the restored file hashes back to
`9a74e857a5a8b51e23a80d23e3b73f3c3af9f0f1`. Four mutations hold it in
`LabelSelectionMutationTests`, and the fixed manifest and its pinned digest move
with them.
`docs/USAGE.md` no longer implies a labelling convention that exists at n = 1:
six sibling checkpoint suites carry no label and, unlike this one, report Passed
when they skip. The depth twin gets issue #1839 before `Closes #1131` fires,
because #1131 named both arms and this row closes only the DiT one. A "12x"
that sat beside a 373x pair is named as the CTest wall ratio it actually is, the
server's `/v1/audio/speech` route is no longer called a thin client of the C ABI,
and the three instruments are no longer claimed independent on the one mutation
where they are not.
FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
Bring the branch up to `origin/main` so the trailer and commit-style gates, which refuse to run when the base is not an ancestor of HEAD, can report on this tree. 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 24, 2026
…mutation reds the gate (#1839) The spec's `## Outcome`, filled in from the leased run. `rc` lease on `thor:gpu0`, worker pod `rc-worker-kk96r`, boot id `e2112cac` unchanged end to end and the same pod as PR #1821's job. Release CUDA build for `110`, nvcc 13.0.88, `compile_rc=0` in 248 s, tree cloned inside the worker and asserted equal to the SHA under test. Checkpoint verified by bytes rather than by existence, `SRC_BYTES == DST_BYTES == 28517617303`. The gate is green at 1/1 · 23/23, `ar.depth_staging` 1 call, `ar.depth_device` 56 of 56 appends, `ar.depth_host` absent, and 56 / 7 depth stages = 8 appends each, which is the checkpoint's `num_codebooks` derived from the run. The acceptance criterion holds. Deleting the engine's two-line call reds it — `gate_mutated_rc=8`, 12 assertions / 11 passed / 1 failed, `Status: FAILURE!`, at `REQUIRE( staging != nullptr )` — while `test_minimax_music3_ar` 37/37 · 655/655 and `test_minimax_music3_speech` 9/9 · 223/223 stay green on the same binaries, which is #1839's recorded blindness reproduced at this head. The red is a named assertion and not a clock: neither labelled entry carries a `TIMEOUT` property, dumped from `ctest --show-only=json-v1` in the job. The restored binary hashes back to the BASELINE, not to the mutated one, and the gate re-runs green. That comparison is the one PR #1821 got wrong and corrected; this toolchain's CUDA link does reproduce, measured again here. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: Claude:claude-opus-5 [Claude Code]
localai-bot
added a commit
that referenced
this pull request
Aug 24, 2026
… arm selector (#1839) (#1845) Closes #1839. Row `MUSIC3-DEPTH-ARM-REACH`, lane #672, spec `.agents/specs/music3-depth-arm-reachability.md`. The twin of PR #1821. #1131 named BOTH MiniMax-Music3 device-arm twins; row `MUSIC3-DIT-ARM-REACH` took the DiT one on `thor:gpu0` and #1131 went with it, leaving the depth half tracked by nothing until #1839 was filed before that merge. `.agents/specs/minimax-music3.md` §19.5 measured the gap: deleting the engine's two-line call to `Music3SelectDepthArm` leaves `test_minimax_music3_ar` 37/37 and `test_minimax_music3_speech` 9/9 green, because the 0.646B RVQ depth decoder returns to its host reference loops and produces the same song, later. §19.1 measured that stage at 48.4% of a run and a 0.646B model costing 6.3x the 8.6B language model beside it. ## The gate `tests/parity/test_minimax_music3_depth_arm_real.cpp` enters through `include/vllm.h` — `vllm_speech_engine_load` with `device = 1`, then `vllm_synthesize`. That is a production entry point by `AGENTS.md` `## Nothing lands dead`'s own list. It constructs no engine, calls no `Music3DepthStage`, stages nothing and builds no arm by hand: the only thing that may select the device arm is the shipped engine executing the line under test. ## The instrument the issue said did not exist #1839's complaint is precise and it is not only "no CI runner has a GPU". The observable §19.6's "device path TAKEN" leg rides is `Music3DepthDeviceForwardCount()`, which §19.5 itself records as unreachable from production — its only readers are the tests written for it. A counter no production run reads measures a class, not a capability. The instrument that would answer the call site, `ar.depth_staging`, was read by nothing. So `Music3DepthStage`'s append lambda gains `ar.depth_device` and `ar.depth_host`, the depth twin of `denoise.dit_device` / `denoise.dit_host`, and the record that filed #1839 already described the gate as asserting `ar.depth_staging` "with the host bucket absent" — a bucket that did not exist. `profile::Count` writes a `seconds = -1` pure counter, so it joins no leaf sum and cannot make the split's parts exceed its whole; with the instrument off it returns on one predicted branch and reads no clock. | bucket | what it answers | |---|---| | `ar.depth_staging` | the engine CALLED `Music3SelectDepthArm` and the selector took the device branch. **The direct answer to #1839.** | | `ar.depth_device` | the production append lambda SELECTED the device branch, held to `ar.depth_forward`, which brackets every append on both arms | | `ar.depth_host` | **ABSENT** — the control that makes the other two mean something rather than merely be present | **They are not independent of one another on the call-site mutation, and this says so rather than implying otherwise.** `ar.depth_device` is emitted under `device_arm.engaged()`, and an arm is engaged only through fields the selector sets, so deleting the engine's call reds both at once. `ar.depth_staging` is the most direct; `ar.depth_device` corroborates. They separate on OTHER defects, which is why both are asserted: an arm that stages and is then dropped by the loop moves the first and not the second, and a partial fallback moves the third. The body-executed question — `dit.pack`'s role in the DiT twin — is deliberately not asked here. `ar.depth_device` sits in the same branch as the `DepthDecoderAppendDevice` call it labels with nothing between them, and `test_minimax_music3_ar.cpp`'s composed-stage case already holds `Music3DepthDeviceForwardCount()` to an exact `num_codebooks` per frame. That is a class assertion in the place a class assertion belongs. Counts are arithmetic over quantities the run produced — `ar.frames`, `ar.depth_stage`, `ar.depth_forward` — never against constants written in the test. `num_codebooks` is a checkpoint property, so only divisibility is asserted and the quotient is reported. ## Both sides of the branch, from a CPU runner `test_minimax_music3_ar.cpp`'s composed-stage case is the only place in the tree where `Music3DepthStage` runs twice in one process, once with a default-constructed arm and once with an arm staged onto a CPU `vt::Queue`. The two new buckets are asserted there on both sides: `ar.depth_host` `calls == num_codebooks` with `ar.depth_device` absent, then the reverse. ## The label lane The entry carries `LABELS "gpu;checkpoint;music3"` and exits 77 without a device or checkpoint, so CTest reports **Skipped**, never Passed. `scripts/check-test-registration.py` pins `ctest -L gpu` to the exact two-name set, because `ctest -L` prints `No tests were found!!!` and returns **0** over an empty selection. Renaming the label on one of the two shipped entries takes the checker from `rc 0` to `rc 1`: ``` ERROR: ctest -L gpu selects 1 test(s) [test_minimax_music3_device_arm_real]; REQUIRED_LABEL_SELECTIONS in scripts/check-test-registration.py pins 2 [test_minimax_music3_depth_arm_real, test_minimax_music3_device_arm_real] ``` and the restored `tests/CMakeLists.txt` hashes back to `ab66e87cff5d75355096c0ad4a7eb501c5ef5c35`. The mutation suite gains `M48` for that case — a **non-empty** miss, one gate leaving the lane while the other keeps it non-empty, which is only reachable at n > 1 and which a floor cannot see — and `M44`, `M45` and `M47` now mutate both entries so the empty-selection case they exist for is still the case they measure. 57 to 58 cases, `OK`, 0 skipped. ## Local gates, CPU-only Release | suite | test cases | assertions | Status | `[SKIP]` | |---|---|---|---|---| | `test_minimax_music3_ar` | 37 / 37 passed | 655 / 655 passed | SUCCESS! | 0 | | `test_minimax_music3_speech` | 9 / 9 passed | 223 / 223 passed | SUCCESS! | 0 | | `test_music3_profile` | 7 / 7 passed | 50 / 50 passed | SUCCESS! | 0 | | `test_minimax_music3_acoustic` | 40 / 40 passed | 395 / 395 passed | SUCCESS! | 0 | `test_minimax_music3_ar` is 655 against 649 on `origin/main`: the six new assertions, three per side of the branch. `test_minimax_music3_depth_arm_real` exits 77 on this build with the refusal quoted and CTest reports it **Skipped**. `scripts/agent-preflight.sh`: **100 gates `ok`, 0 FAIL, 0 SKIP, rc 0**, "All gates green." `check-commit-style` and `check-commit-trailers` both `rc 0` over the non-empty merge-base range; a detached scratch commit with a trailing-period subject and no body takes both to `rc 1`, so neither passed vacuously. `scripts/check-test-registration.py` `rc 0`. ## Measured on thor:gpu0 Inside an `rc` lease, 2026-08-24 08:38:37Z-08:44:56Z. Worker pod `rc-worker-kk96r`, boot id `e2112cac-660b-434e-911d-33cbd29b9176`, unchanged end to end and the same pod and boot as PR #1821's job, so the box has not rebooted between the twins. NVIDIA Thor `compute_cap 11.0`, driver 595.78, nvcc 13.0.88 installed by the job, Release CUDA build for `110`, `configure_rc=0`, `compile_rc=0` in 248 s. Tree cloned inside the worker and asserted equal to `9649a4c12903547cbe362369c9db7689c01fb3eb` before anything was built (`clean_tree=yes`). The **`rc` job UUID is UNVERIFIED** — the client header scrolled out of a `tail` and `rc ps` lists only live jobs — so the run is identified by device, submitter string, pod, boot id, the UTC window and `/mnt/nas_share/rc/m3depth/out/job.log`. Recorded as missing rather than guessed. The first submission was **refused by its own disk guard** (78 GiB free against `NEED_GB=110`, exit 95, device untouched) and that log is kept beside the run. The checkpoint was read from `/tmp/m3reach-ckpt` on the worker's overlay, which PR #1821's job staged on this same pod; reused is not trusted, and the same hard `SRC_BYTES == DST_BYTES == 28517617303` comparison a fresh copy gets was applied, with `findmnt` printed for the NAS source and for the path actually read. | suite | test cases | assertions | Status | `[SKIP]` | |---|---|---|---|---| | `test_minimax_music3_depth_arm_real` | 1 / 1 passed | 23 / 23 passed | SUCCESS! | 0 | | `test_minimax_music3_device_arm_real` (PR #1821's gate, control) | 1 / 1 passed | 22 / 22 passed | SUCCESS! | 0 | | `test_minimax_music3_acoustic` | 40 / 40 passed | 403 / 403 passed | SUCCESS! | 0 | | `test_minimax_music3_speech` | 9 / 9 passed | 223 / 223 passed | SUCCESS! | 0 | | `test_minimax_music3_ar` | 37 / 37 passed | 655 / 655 passed | SUCCESS! | 0 | | `test_music3_profile` | 7 / 7 passed | 50 / 50 passed | SUCCESS! | 0 | `ctest -N -L gpu` selected exactly `#70` and `#71`, so the pin is the tree's behaviour and not a declaration. `device 1 resolves to 'cuda'` and `vllm_speech_engine_device()` returned 1, so this is the granted arm. `ar.depth_staging` 1 call / 1.149 s, `ar.depth_device` 56, `ar.depth_forward` 56, `ar.depth_host` **absent**; `ar.frames` 6, `ar.depth_stage` 7, and 56 / 7 = 8 appends per stage, the checkpoint's `num_codebooks`, derived from the run rather than written into the test. ## The acceptance criterion Delete the production call site and rerun the focused gate (`.agents/reachability.md`). One hunk, `mutation_applied=1`, `git diff --stat` 1 file / 2 insertions / 2 deletions, and **`compile_rc=0` reported before any verdict**. ```diff Music3DepthDeviceWeights staged_depth; - const Music3DepthDeviceArm depth_arm = Music3SelectDepthArm( - queue_, ar.depth_config, ar.depth, /*release_host=*/true, &staged_depth); + const Music3DepthDeviceArm depth_arm; // MUTATION #1839: the engine's CALL deleted + (void)staged_depth; ``` **RED**: `gate_mutated_rc=8`, 1 case / 0 passed / 1 failed, 12 assertions / 11 passed / 1 failed, `Status: FAILURE!`, CTest `***Failed 19.07 sec`, at `test_minimax_music3_depth_arm_real.cpp:295: REQUIRE( staging != nullptr )`. **The red is a named assertion and not a clock.** Neither labelled entry carries a `TIMEOUT` property — dumped from `ctest --show-only=json-v1` inside the job, `HAS_TIMEOUT=False` for both — and `vllm_cpp_add_test` still sets only `SKIP_RETURN_CODE 77`. The one case-insensitive `timeout` match in the mutated log is CTest's own `Test timeout computed to be: 10000000`, its no-timeout sentinel; the grep was read rather than counted, because a count of 1 would otherwise be indistinguishable from a real timeout. **And what the red is made of is the argument.** The mutated run did not fail, break or produce different audio. `ar.depth_staging` and `ar.depth_device` went absent, `ar.depth_host` appeared at 56, `ar.depth_forward` went 0.327 s to 5.446 s over the same 56 calls and `ar.depth_stage` 0.519 s to 5.591 s, while `acoustic.dit_staging` 1 and `denoise.dit_device` 2 were unchanged — which is what says the mutation is scoped to the depth call site rather than disabling the accelerator. **No performance claim is made** and the ratios are named with the quantity each belongs to: the `ar.depth_forward` bucket is **16.7x**, the `ar.depth_stage` span **10.8x**, and the CTest wall for the whole gate **1.23x** because the run loads 28.5 GB either way. On **0.24 seconds** of audio, from a change that alters no number anywhere. **And the tree stayed green.** Under the identical mutation `test_minimax_music3_ar` is 37/37 · 655/655 `SUCCESS!` and `test_minimax_music3_speech` 9/9 · 223/223 `SUCCESS!` — #1839's recorded blindness, reproduced at this head, on the same binary set that reds the new gate. **Restore: the binary hashes back to the BASELINE.** `git status --porcelain` empty at the same SHA, `compile_rc=0`, `RESTORED_BINARY_SHA256` and `BASELINE_BINARY_SHA256` both `1f8e424f611ab9973fc529798565f5b3649c9ce1ed4d50d06ebbfbc23aeac8e4` against the mutated `9296b268...`, and the gate re-ran 1/1 · 23/23 `SUCCESS!`. The comparison is against the baseline and never against the mutated binary, which is the mistake PR #1821 made and corrected: this toolchain's CUDA link **does** reproduce, measured here on the same box. ## The CPU-side instrument has teeth too Deleting `profile::Count("ar.depth_device", 1)` from the production lambda — `mutation_applied=1`, `hunk_count=1`, `compile_rc=0` before the verdict, mutated binary `0fe1524bad50e28d...` against baseline `58342939c4c72f58...` — takes `test_minimax_music3_ar` to 37 / 36 passed / 1 failed, 635 / 634 / 1, `Status: FAILURE!` at `test_minimax_music3_ar.cpp:1813: REQUIRE( device_bucket != nullptr )`. Restored: porcelain empty, binary back to `58342939c4c72f58...`, suite back to 37/37 · 655/655. ## Scope No performance claim is made. The `release_host` pass-through on the depth selector's device path is `MUSIC3-DEPTH-DEVICE`'s and is unchanged; the DiT arm's own residual is `MUSIC3-DIT-ARM-REACH`'s and is unchanged. Known reds not owned here: `windows-msvc-*` (#584, #1829), `macos-metal-mlx` (#1823), `agent-record` hugo (#1722), `test_cpu_x86_llamacpp_floor` under box load (#618), and `build-test-cpu-arm64-full`'s pre-existing undefined `ApiServer::*` references. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: Claude:claude-opus-5 [Claude Code] --------- Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
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.
Closes #1131. Row
MUSIC3-DIT-ARM-REACH, lane #672, spec.agents/specs/music3-dit-arm-reachability.md.Wave 1 of this row (
5539686c7) moved the DiT arm's selection rule out ofMusic3SpeechEngineintoMusic3SelectDitArm, so a CPU gate could drive bothsides of a condition no runner CI owns can satisfy. It left one thing unreached
and said so under
## Owed: the engine's own two-line CALL. Mutation M5 deletedthat call and every suite in the tree stayed green. This change is that residual,
closed on hardware.
The gate
tests/parity/test_minimax_music3_device_arm_real.cppenters throughinclude/vllm.h--vllm_speech_engine_loadwithdevice = 1, thenvllm_synthesize. That is a production entry point byAGENTS.md## Nothing lands dead's own list, and its reach does not depend on any othersurface agreeing with it. It constructs no engine, calls no
Music3DenoiseChunksand builds no arm by hand: the only thing that may select the device arm is the
shipped engine executing the line under test.
It reads three instruments and one absence, because the host and device arms agree
numerically by design and no property of the audio can separate them.
acoustic.dit_stagingis emitted from insideMusic3SelectDitArmpast its CPUearly return, so it is present if and only if the engine's call site ran and took
the device branch -- that is the one that answers the residual.
denoise.dit_devicesays the loop selected the device branch, and
dit.packlives insideDitForwardDevice, so it says the forward's body executed and a mislabelled bucketcannot fake it. Their counts are held to
steps x windowsand2 x steps x windowswith both quantities read from counters the run produced, and
denoise.dit_hostmust be absent, which is what stops the other three from being merely present.
The three are not independent of each other on the call-site mutation, and the
spec says so rather than implying otherwise:
denoise.dit_deviceis emitted underon_device = device_arm.engaged(), and an arm is engaged only through fields theselector sets, so deleting the call reds all three at once.
acoustic.dit_stagingis the most direct and the other two corroborate. They separate on OTHER defects,
which is why all three are asserted: an arm staged and then dropped by the loop,
and a per-CFG-branch fallback that reads
dit.pack2 against 4 under an unchangedlabel.
The entry carries
LABELS "gpu;checkpoint;music3", so a gate no runner can executeis selectable by name (
ctest -L gpu) rather than by who remembers it, and it exits77 without a device or checkpoint so CTest reports Skipped, never Passed.
docs/USAGE.mdgains the section saying how to invoke it and where, because a gatenobody runs is the defect this row is fixing.
Measured on thor:gpu0
rclease jobf63f60e8-957a-4062-92f8-54e5bbb49d92, workerrc-worker-kk96r,boot id
e2112cac, unchanged end to end. NVIDIA Thor sm_110, driver 595.78, nvcc13.0.88 installed by the job, Release CUDA build for
110,configure_rc=0,compile_rc=0. Tree cloned inside the worker and asserted equal tobc61ce5182446475485f54504a742d9e38d1326abefore anything was built. Thecheckpoint was staged off CIFS onto local disk and verified by bytes rather than by
existence --
SRC_BYTES == DST_BYTES == 28517617303-- which is what turned a 780 scold weight load into 8.1 s.
[SKIP]test_minimax_music3_device_arm_realtest_minimax_music3_acoustictest_minimax_music3_speechtest_minimax_music3_artest_music3_profiledevice 1 resolves to 'cuda'andvllm_speech_engine_device()returned 1, so thisis the granted arm and not a request echoed back.
acoustic.dit_staging1 call,denoise.dit_device2 calls (steps 2 x windows 1),dit.pack4,denoise.dit_hostabsent.The acceptance criterion
Delete the production call site and rerun the focused gate
(
.agents/reachability.md). One hunk,mutation_applied=1, andcompile_rc=0reported before any verdict, because a mutation that fails to build reads as a
passing test.
RED: 1 case / 0 passed / 1 failed, 9 assertions / 8 passed / 1 failed,
Status: FAILURE!, CTest***Failed 211.54 sec, atREQUIRE(staging != nullptr). The fresh review reproduced it onthor:gpu0athead
718546680, in its own job and its own build directory, and confirmed thered is that assertion rather than a timeout -- no
TIMEOUTproperty is set, andvllm_cpp_add_testsets onlySKIP_RETURN_CODE 77.And what the red is made of is the argument itself. The mutated run did not fail,
break, or produce different audio. It produced
denoise.dit_hostat 196.786 s,93.43% of the run, where the shipped tree produced
denoise.dit_deviceat0.527 s in the same bucket position -- on 0.24 seconds of audio, from a
change that alters no number anywhere. Two ratios live in that sentence and they
are named separately: the denoise BUCKET ratio is 196.786 / 0.527 = 373x, and
the CTest WALL ratio for the whole gate is 211.54 s against 17.66 s = 12x,
because the run loads a 28.5 GB checkpoint and synthesises either way. Neither is
a performance claim. Nothing that reads the output can see any of it, and until
this gate existed nothing in the tree could.
Restore: the binary hashes back to the baseline. The job log carries three
sha256lines fortests/test_minimax_music3_device_arm_realand they hold twovalues --
ed268392...after the baseline build,ce8bd1f8...after the mutationbuild,
ed268392...after the restore build -- together with an emptygit status --porcelainat the same SHA,compile_rc=0, and the gate re-run1 / 1 and 22 / 22
SUCCESS!. The review reproducedRESTORED == BASELINEindependently at this head with a second SHA and a second build directory.
The review's findings, repaired
A fresh reviewer returned FAIL on six findings. Every one was in the record, and
the first was a measured statement that is false.
F1. An earlier draft of
### Restoresaid the restored binary does NOT hashback, and generalised that into "this build links CUDA objects and its link is not
bit-reproducible". It had compared the restored hash against the MUTATED one. The
generalisation is deleted rather than softened, because it is the sentence a later
row would cite to waive a hash restore on any CUDA build and nothing measured it.
The
## Evidence this row owesline it appeared to waive is marked MET on bothlegs.
F2.
ctest -L gpuprintsNo tests were found!!!and returns 0 when thelabel selects nothing (CMake 3.28.3), so the recipe this row documents fails open,
and
ctest_L_gpu_rc=0is also what a zero-test selection returns. For a row whosesubject is a gate that measures nothing while printing green, shipping its own
discovery mechanism in that state is in scope.
scripts/check-test-registration.pynow pins the selection to the exact set{test_minimax_music3_device_arm_real}, read fromctest --show-only=json-v1overa configured tree and compared against a literal in the checker rather than against
CMake text -- a checker that reads its expectation from the file it checks is a
tautology. Renaming the label on the shipped
tests/CMakeLists.txttakes thechecker from
rc 0torc 1withERROR: ctest -L gpu selects 0 test(s) [<none>]; REQUIRED_LABEL_SELECTIONS ... pins 1,and the restored file hashes back to
9a74e857a5a8b51e23a80d23e3b73f3c3af9f0f1.LabelSelectionMutationTestscarries four mutations -- label renamed,set_tests_propertiesdeleted, a second test taking the label, the labelledregistration removed -- and the suite's fixed manifest and its production-pinned
digest move with them. The suite goes 52 to 57 cases,
OK, 0 skipped.F3.
docs/USAGE.mdimplied a labelling convention that exists at n = 1. Itnow names the one labelled gate, warns that
-LE gpuis not the complement, andnames the six sibling checkpoint suites --
test_minimax_music3_{ar,llm,acoustic,quant,e2e}_realand
test_muse_glimmer_real_weights-- which carry no label and, unlike this one,do not exit 77: they print a
SKIPline and CTest reports them Passed.F4. #1131 named both device-arm twins and this change closes only the DiT one,
which would have orphaned
minimax-music3.md§19.7's un-struck depth entry. Filedas #1839 before merge, retracked in §19.7 and appended to the issue index.
Closes #1131stands. The depth twin is genuinely ungated: §19.6's "device pathTAKEN" leg rides
test_minimax_music3_ar, whose observableMusic3DepthDeviceForwardCount()§19.5 itself records as unreachable fromproduction, and
ar.depth_staging-- the instrument that would answer the callsite -- is emitted at
minimax_music3_llm.cpp:582and read by nothing. It isclosable by exactly this row's method, and this row's own run fired the span once.
F5. A "12x" sat immediately after "196.786 s ... 0.527 s", which is 373x. Both
ratios are now named with the quantity each belongs to.
F6.
/v1/audio/speechgoes throughApiServer::handle_audio_speechand aninternal
synthesizer_seam, not the C ABI, so calling it a thin client of thesetwo calls was loose. It is a second production path onto the same engine.
examples/minimax_music3_gengenuinely is a thin client. Reachability isunaffected:
include/vllm.his independently a listed production entry point.No device leg was re-run for this repair. The review reproduced the acceptance
criterion on hardware at the reviewed head, no finding disputes a measured value
from the lease job, and a second lease would spend a fleet device to re-derive a
number two jobs already agree on.
Scope
No performance claim is made. The second
## Owedentry -- the selector'srelease_hostpass-through -- stands as written; this gate asserts routing, notresidency.
Gates on the merged tree
scripts/agent-preflight.shis 102 gatesok, 0 FAIL, 0 SKIP, rc 0, "Allgates green.", on
815ffd6famerged onto0043efb43.check-commit-trailersand
check-commit-styleran over the non-empty 8-commit range and both returnedrc 0; a positive control (--message-filewith a bare subject) returnsrc 1,so neither passed vacuously.
scripts/check-test-registration.pyrc 0;tests/scripts/test_check_test_registration.py57 tests,OK,rc 0.The repair touches no C++ and no CMake, so no test binary changed and the four
Music3 suites are not re-run for it; their
thor:gpu0counts above are unchangedand remain the evidence.
Known reds not owned here:
windows-msvc-*(#1829, filed by this pull request,plus #584),
macos-metal-mlx(#1823, deliberately red onmain),agent-recordhugo (#1722), and
test_cpu_x86_llamacpp_floorunder box load (#618).FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]