feat(ltx-2.5): image conditioning at crf=0, the VAE encoder load path, and the keyframe refusal repair (#644) - #786
Merged
Merged
Conversation
…, and the keyframe refusal repair (#644) Row `LTX25-IMAGE-COND`, reconstructed onto `main` (`043e56862`). Carries the whole row: the feature reviewed as #657 and the review repair reviewed as #666. Neither ever reached `main`. ## Why this is a new branch rather than a merge #666's base branch was `row/LTX25-IMAGE-COND`, not `main`, so merging it squashed it onto #657's head. That head was `a7154bd1e`, itself a *merge of main*, and **squashing on top of a merge flattens the merge away**. Git then no longer knew the row had ever seen `main`: `git merge-base 247eba5 origin/main` fell back to `b81a5e413`, 67 commits behind, and the row's apparent diff grew to 252 files and 42,426 insertions — git believing this row had authored everything `main` landed since, down to `tools/oracle/music3_oracle.py` and `website/README.md`. That is invisible until the next merge, when it presents as ~19 conflicts including **add/add on files the row never touched** (`gpt2.*`, `talker.*`, `w2vbert.*`, `.agents/specs/indextts-2-5.md`, `.agents/specs/minimax-music3.md`). Hand-resolving those is how `main`'s newest work gets silently reverted, so the merge was abandoned and the row rebuilt instead. **The transferable rule: never squash-merge into a branch that has itself merged `main`.** The squash commit inherits authorship of everything `main` did since, and nothing reports it at the time. Check `baseRefName` before merging, not just whether one branch is an ancestor of the other. ## How it was rebuilt, and how that is verified Branched from an IMMUTABLE SHA, never the ref. `origin/main` is shared with the other worktrees in this checkout and moved four times during this work; at one point that made `main`'s own files (the `dit_front`/`dit_stack` cluster) read as content this row had deleted, which is a fabricated regression waiting to be "fixed". The row's real delta is `git diff 32d82c6 247eba5`: `32d82c64d` is the `main` the row was last gated against, and `247eba52b` is the squash, whose tree is byte-identical (`d276e5194`) to the gated `56c2309ca`. That is **19 files, all owned by this row**, applied three-way onto `main` and then rebased forward twice. CORRECTION for anyone repeating this: `git diff a7154bd 247eba5` is NOT the repair. It spans 246 files and 38,314 insertions, 11 of them `main`'s, because `a7154bd1e` carries `main` only to `b81a5e413` while `247eba52b` carries it to `32d82c64d`. Using it would reintroduce exactly the problem being fixed. The repair-only diff is `git show eb58fd5` — 8 files, +266/-57. `docs/FEATURES.md` conflicted twice and was resolved as a keyed record both times: `main`'s file taken WHOLESALE and this row's key reapplied onto it, never the automatic three-way result. `.agents/roadmap_v1.md` applied cleanly and was verified the same way. Both are now byte-identical to `043e56862` apart from exactly one line each — the LTX-2.5 DiT row and the `#644` row. `main`'s known duplicate `Safetensors direct load` key (#769) is carried through untouched at its existing multiplicity of 2, neither fixed here nor multiplied. Verified by file list, which is the check that catches a bad reconstruction: `git diff 043e568 --name-only` is exactly 19 LTX-2.5 files, with zero occurrences of `gpt2.*`, `talker.*`, `w2vbert.*`, `music3_oracle.py`, `bigvgan` or `website/`. Both CMake files are purely additive (zero removed lines), the registration delta is exactly +1 — 446 `vllm_cpp_add_test` against 445 — for `test_ltx2_image_cond`, and `git merge-base HEAD 043e568` is `043e56862` itself, so the base is healthy again. ## Gate (CPU-only, Release, VLLM_CPP_CUDA=OFF) BUILD_EXIT=0, 0 hits for "No space left" / "BFD assertion" ctest -N 461 (main's 460 + test_ltx2_image_cond) test_ltx2_video 33 cases / 576 assertions, exit 0 test_ltx2_image_cond 15 cases / 223 assertions, exit 0 test_ltx2_vae 36 / 3039 test_ltx2 35 / 2435 test_ltx2_loader 26 / 4826 test_ltx2_pipeline 37 / 2382 test_ltx2_device 15 / 523 scripts/agent-preflight.sh --staged All gates green. `test_ltx2_video` reads 33/576 where the pre-reconstruction record says 32/565. That drift is `main`'s: `fc903b8dd` (#674) added `TEST_CASE("ltx2 VAE weights load from an ODD safetensors payload offset (#674)")` to that same file, worth +1 case and +11 assertions. `main` went 30 -> 31 cases over the window while this row's own contribution stayed +2 (one rename, two additions), which is what the diff shows. `LTX2_CHECKPOINT_ROOT` is unset here, so `test_ltx2_video`'s shipped-checkpoint subcase SKIPPED and is not in those counts. **The full `ctest -j 8` at this exact head is VOID, not passing and not failing.** The shared disk went to 100% mid-run with two other sessions compiling: the run aborted at 265/461, and `test_tool_choice_grammar` "failed" by reading back an EMPTY `/tmp/vllm_toolchoice_gbnf_0.json` it had just written, with the ctest log itself truncated mid-sentence. An ENOSPC run reports on a filesystem, not on a diff, so it is recorded as void rather than interpreted. The build that preceded it completed cleanly with zero ENOSPC hits, and the seven suites above ran after it and passed. The last VALID full run was `eae25c745` — the identical 19-file row content on a base four commits older — at 459/461, the two being `test_engine_core_proc` (the documented `ctest -j` starvation, which passes serially) and `test_op_parity` (#737, since fixed on `main` by `043e56862`, which this branch now sits on). A full re-run is owed once the box has headroom; CI covers it on a clean runner. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
FOLLOWING_AGENTS_PROTOCOL Main pinned to an immutable SHA, not the ref. Keyed records reconciled by key. Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5[1m] [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.
Reconstruction of row
LTX25-IMAGE-CONDontomain. Issue #644. Spec:.agents/specs/ltx25-image-conditioning.md.Carries the whole row — the feature reviewed as #657 and the review
repair reviewed as #666. Neither ever reached
main, so both close assuperseded by this.
Why a new branch, and the lesson worth keeping
#666's
baseRefNamewasrow/LTX25-IMAGE-COND, notmain. Merging itsquashed it onto #657's head — and that head,
a7154bd1e, was itself amerge: origin/main. Squashing on top of a merge flattens the merge away.Git then no longer knew the row had ever seen
main. Measured:git merge-base 247eba52b origin/mainb81a5e413— 67 commits backgit merge origin/mainmain'sThose add/add files —
gpt2.*,talker.*,w2vbert.*,test_talker.cpp,test_w2vbert.cpp,.agents/specs/indextts-2-5.md,.agents/specs/minimax-music3.md— are howmain's newest work gets silentlyreverted by a well-meaning conflict resolution. The merge was abandoned rather
than resolved.
How it was rebuilt
Branched from an immutable SHA, never the ref.
origin/mainis shared withthe other worktrees in this checkout and moved four times during this work.
That is not cosmetic: at one point it made
main's own new files (thedit_front/dit_stackcluster) read as content this row had deleted, and the"repair" that invited produced a
CMakeLists.txtlisting TUs the tree did notcontain. Caught before building; the attempt was aborted, not patched.
The row's real delta is
git diff 32d82c64d 247eba52b—32d82c64dbeing themainthe row was last gated against,247eba52bthe squash, whose tree isbyte-identical (
d276e5194) to the previously gated56c2309ca. That is 19files, all owned by this row, applied three-way and rebased forward twice.
docs/FEATURES.mdconflicted twice; both times resolved as a keyed record —main's file taken wholesale, this row's key reapplied, never the automaticthree-way result.
.agents/roadmap_v1.mdapplied cleanly and was verified thesame way.
main's known duplicateSafetensors direct loadkey (#769) iscarried through untouched at its existing multiplicity of 2 — neither fixed here
nor multiplied.
Verification by file list
This is the check that catches a bad reconstruction, and it passes:
git diff 043e56862 --name-only→ exactly 19 files, all LTX-2.5gpt2.*,talker.*,w2vbert.*,music3_oracle.py,bigvgan,website/mainby exactly one line eachvllm_cpp_add_testvsmain's 445,for
test_ltx2_image_condgit merge-base HEAD 043e56862=043e56862— the base is healthy againWhat the row actually does
Unchanged from the reviewed work; see the commit body and the spec.
in the tree (
Ltx2VideoVaeEncoderKeyRules), plus image conditioning served atimage_crf=0— PPM → aspect-fill resize → VAE encode → place at latent frame0 → noise, gated against upstream executed at reduced dimensions.
false at pin
fd4ded7f(keyframes_abs_pos_embedding), and a test hadbeen written to assert that wrong reason by name. Both corrected; the
refusal now names the token-append machinery. Plus a gate for the per-phase
conditioning claim that a mutation had been surviving, nine corrected
file:lineanchors, and ares_x/num_layersstrictness fix mirroringupstream's subscript. Full RED/GREEN evidence in fix(ltx-2.5): the keyframe refusal named a FALSE reason, and a test pinned it (#644) #666.
Gate (CPU-only, Release,
VLLM_CPP_CUDA=OFF)test_ltx2_videoreads 33/576 where the pre-reconstruction record says32/565. That drift is
main's, not this row's:fc903b8dd(#674) addedTEST_CASE("ltx2 VAE weights load from an ODD safetensors payload offset (#674)")to the same file, worth +1 case and +11 assertions.
mainwent 30 → 31 casesover the window while this row's contribution stayed +2 (one rename, two
additions), which is what the diff shows.
LTX2_CHECKPOINT_ROOTis unset on this box, sotest_ltx2_video'sshipped-checkpoint subcase SKIPPED and is not in those counts.
The full ctest at this head is VOID — not passing, not failing
The shared disk hit 100% mid-run with two other sessions compiling. The run
aborted at 265/461, and
test_tool_choice_grammar"failed" by reading back anempty
/tmp/vllm_toolchoice_gbnf_0.jsonit had itself just written, with thectest log truncated mid-sentence. An ENOSPC run reports on a filesystem, not on a
diff, so it is recorded as void rather than interpreted as a result. The build
preceding it completed cleanly with zero ENOSPC hits, and the seven suites
above ran after it and passed.
The last valid full run was at
eae25c745— identical 19-file row content, abase four commits older — at 459/461, the two being
test_engine_core_proc(the documented
ctest -jstarvation; passes serially) andtest_op_parity(#737, since fixed on
mainby043e56862, which this branch now sits on).A local re-run is owed once the box has headroom; this PR's CI covers it on a
clean runner.
Reds inherited, not caused
windows-msvc-vulkanis #757 (C4456 shadowing intests/vt/test_backend_cross_device.cpp, fix in flight as #779) andwindows-msvc-cpufails later and differently intest_openai_api_server.exe—a fourth, distinct issue. Neither is this lane.
sanitize-cpushould now begreen: this branch sits past #674 (
fc903b8dd).Closes the work tracked by #657 and #666.
🤖 Generated with Claude Code