fix(LTX25-DEVICE-RESIDENCY): name the load prologue load.open, because a floor wide enough to hide it is a mute switch (#1439) - #1622
Merged
Conversation
…use a floor wide enough to hide it is a mute switch (#1439) `CHECK(leaves >= 0.95 * wall)` in `ltx2 video: a render through the ABI emits a phase table that SUMS to wall` reds `main` intermittently, and it failed at `0.702349 >= 0.702944` — 0.08% short. Two earlier sessions deliberately left it alone and recorded why: 91% of its residue is ONE contiguous ~11.3 ms interval at the head of the `load` span, before `load.dit` opens. It is a real startup phase. Any slack big enough to stop the flapping would exceed 12 ms and would hide it. So this names the phase instead of widening the floor. The assertion is byte-for-byte unchanged. `ltx2_video.cpp` opens `phase::Scope open_phase("load.open")` immediately after the `load` span and closes it immediately before the `load.dit` block, over the prologue the probe already identified: device resolution, the platform probe, the two refusals, the device-byte probe install, the DiT safetensors header open and the LoRA option parsing. `Scope::Close` rather than a nested block is the shape `render_phase_log.h` documents for this driver, whose regions are sequential statements in one function. Red first, and the red IS the reachability mutation. The test change was built alone, so the red arm is this tree with the gate asking for the name and no production scope to answer it: 447 assertions, 1 failed, `the phase table names no 'load.open' phase`. With the scope: 459 assertions, 0 failed. Deleting the production call site is precisely that first arm. A second mutation pins the CLOSE and not only the OPEN. Sinking `open_phase.Close()` below the `load.dit` block compiles and keeps the SUM case green at 459/459, and is caught instead by the #1440 nested-record rule: the carrying-phases case reds at 595/1 with `'load.dit' is emitted NESTED`. Tree md5-verified restored between arms. The residue, six runs per arm on one binary each, Release CPU: median `unaccounted_seconds` 2.91 ms before, 0.94 ms after; `load.open` is emitted as a leaf at `t=0.000` and measures about 1.3 ms. Two limits on that number, in the spec and repeated here because they bound the claim. The box was at loadavg 24-31, so the render's wall is 7-10 s rather than the 0.22-0.58 s of #1439's population — the flattering regime the issue itself identified, where a slower render passes. And the 11.3 ms head is not reproduced at this build type with the fixture warm; the prologue is about 1.3 ms here. The direction and the mechanism are measured; the magnitude at which the floor bites is inherited from the earlier probe, and a quiet-box run at fixture scale stays owed. The order case gains `load.open` as its first entry, so a swapped scope name reds there the way `load.dit` and `load.prompt_embeds` already do. Not owed: a `docs/models/ltx-2-5.md` edit. The spec said this change owes the phase names published there. That document publishes none — `## Inspect a render` names `sum_leaf_seconds`, `unaccounted_seconds` and two switches and no individual phase. Checked rather than assumed. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…anchor list must be re-derived at the FINAL head
`build-test-cpu` reds on `ltx2 video: the recorded reader anchors are the ones in
the source`. This branch inserted `phase::Scope open_phase("load.open")` into
`src/vllm/multimodal/ltx2_video.cpp` and moved every reader below it, so the
READER ANCHORS comment now points at the wrong lines. The guard did its job.
The repair is a new anchor list, and a list is only correct at the head it was
derived from. `origin/main` moved eight commits since this branch forked, so
deriving the numbers before the merge would record a set that the merge itself
invalidates -- which is the exact defect this gate exists to catch. So the merge
lands first and the derivation follows it.
The merge is textually trivial. `.agents/issue-index.md` is the only shared
record either side touched: `origin/main` appends four rows (#1183, #1613, #1614,
#1502) and this branch appends none, so the union driver has nothing to
reconcile and the result is main's file byte-for-byte. No other path conflicts.
FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
… row's own `load.open` scope moved (#1439) `ltx2 video: the recorded reader anchors are the ones in the source` reds `build-test-cpu` and `sanitize-cpu (thread)` on this branch. The cause is this branch: `phase::Scope open_phase("load.open")` and its `Close` went into `ResolveAndRender` above every accepted-key reader, so all fourteen readers moved down by 28 to 31 lines and the recorded list stopped naming any of them. Nothing is wrong with the code the comment describes. The readers are the same fourteen, in the same order, reading the same keys; only their line numbers changed. So the repair is the list, and the gate that caught it stays exactly as it is. It has now fired three times for three different insertions, which is the argument for deriving the numbers rather than trusting them. The new list is the one the test itself printed, at the head that carries it rather than at the head that broke it. `origin/main` had moved eight commits, so this branch merged first and the derivation ran after the merge -- recording a set that a pending merge would invalidate is the same defect in a new costume. The merge turned out not to touch `ltx2_video.cpp`, so the numbers are equal to the ones the pre-merge run reported, but that was checked and not assumed. Only the fourteen digits on the comment line change, so the edit cannot move an anchor it is recording: one line in, one line out, and the derived set is identical either side of it. Release CPU, whole `test_ltx2_video` binary, one build per arm. Stale list: 102 cases, 101 passed, 1 failed; 4227 assertions, 4226 passed, 1 failed. Corrected list: 102 cases, 102 passed, 0 failed; 4225 assertions, 4225 passed, 0 failed. The anchor case alone is 26 assertions in both arms, 25 passed before and 26 after, so it is the only case whose verdict this changes. The two-assertion difference in the totals is not this edit, and a control says so rather than an argument: a third run of the corrected binary, same bytes and same source, reported 4227 of 4227. So a render case's assertion count follows the phase records that run emits, it moves between 4225 and 4227 on its own, and the box was at load 28-75 throughout. Only the failure counts are stable. Not owed: `.agents/specs/ltx25-retire-dead-arms.md` section 2.1. Its table is declared "as of `3c6706cd0`", a dated record rather than a live one, and the test's own failure text says it stays. Checked rather than assumed. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
… the anchors it could have moved `origin/main` advanced to `0822160f5` while this branch's gate was running, so the trailer gates refused to report and asked for a merge. This is that merge. It carries one commit, SPEC-DFLASH2 W6 (#1314, #1637). It touches neither `src/vllm/multimodal/ltx2_video.cpp` nor `tests/vllm/multimodal/test_ltx2_video.cpp`, so the READER ANCHORS list this branch just re-derived still names the fourteen readers. That was checked against the merged tree and not assumed from the subject line, because an anchor list is only true at the head it was derived from and this is a different head. `.agents/issue-index.md` takes six appended rows from main and none from this branch, so the union driver has nothing to reconcile again. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…e the anchors at the merged head `origin/main` advanced five commits while this pull request's continuous integration settled. None of them edits `src/vllm/multimodal/ltx2_video.cpp` or `tests/vllm/multimodal/test_ltx2_video.cpp`, so the recorded `READER ANCHORS` line should still hold. That is a prediction, not a result, and this row has already been caught twice by exactly this staleness. The anchor list is therefore re-derived by running `test_ltx2_video` at the merged head rather than by reading the diff. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: Claude:claude-opus-5 [Claude Code]
localai-bot
pushed a commit
that referenced
this pull request
Aug 22, 2026
GitHub refused the squash with a conflict on `.agents/issue-index.md`. That file carries `merge=union` in `.gitattributes`, and the forge does NOT honour the driver -- so two branches that each append a row conflict there even though the union resolves cleanly. Doing the merge locally is what applies the driver. `#1622` landed between this branch's last merge and the squash attempt. The only shared file is that append-only index, and both sides only append. No source file is touched by both. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: Claude: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.
CHECK(leaves >= 0.95 * wall)inltx2 video: a render through the ABI emits a phase table that SUMS to wallredsmainintermittently, and it failed at0.702349 >= 0.702944— 0.08% short. Two earlier sessions deliberately left italone and recorded why: 91% of its residue is ONE contiguous ~11.3 ms interval at
the head of the
loadspan, beforeload.ditopens. It is a real startup phase.Any slack big enough to stop the flapping would exceed 12 ms and would hide it.
So this names the phase instead of widening the floor. The assertion is
byte-for-byte unchanged.
ltx2_video.cppopensphase::Scope open_phase("load.open")immediately after theloadspan and closes itimmediately before the
load.ditblock, over the prologue the probe alreadyidentified: device resolution, the platform probe, the two refusals, the
device-byte probe install, the DiT safetensors header open and the LoRA option
parsing.
Scope::Closerather than a nested block is the shaperender_phase_log.hdocuments for this driver, whose regions are sequentialstatements in one function.
Red first, and the red IS the reachability mutation. The test change was built
alone, so the red arm is this tree with the gate asking for the name and no
production scope to answer it: 447 assertions, 1 failed,
the phase table names no 'load.open' phase. With the scope: 459 assertions, 0 failed. Deleting theproduction call site is precisely that first arm.
A second mutation pins the CLOSE and not only the OPEN. Sinking
open_phase.Close()below theload.ditblock compiles and keeps the SUM casegreen at 459/459, and is caught instead by the #1440 nested-record rule: the
carrying-phases case reds at 595/1 with
'load.dit' is emitted NESTED. Treemd5-verified restored between arms.
The residue, six runs per arm on one binary each, Release CPU: median
unaccounted_seconds2.91 ms before, 0.94 ms after;load.openis emitted as aleaf at
t=0.000and measures about 1.3 ms.Two limits on that number, in the spec and repeated here because they bound the
claim. The box was at loadavg 24-31, so the render's wall is 7-10 s rather than
the 0.22-0.58 s of #1439's population — the flattering regime the issue itself
identified, where a slower render passes. And the 11.3 ms head is not reproduced
at this build type with the fixture warm; the prologue is about 1.3 ms here. The
direction and the mechanism are measured; the magnitude at which the floor bites
is inherited from the earlier probe, and a quiet-box run at fixture scale stays
owed.
The order case gains
load.openas its first entry, so a swapped scope name redsthere the way
load.ditandload.prompt_embedsalready do.Not owed: a
docs/models/ltx-2-5.mdedit. The spec said this change owes thephase names published there. That document publishes none —
## Inspect a rendernames
sum_leaf_seconds,unaccounted_secondsand two switches and noindividual phase. Checked rather than assumed.
Refs #1439, which stays OPEN. The repair is measured; the regime where the
floor bites is not, and one quiet-box run at fixture scale is what closes it.
That run is owed by
LTX25-DEVICE-RESIDENCYand is named in its## Owedrow.FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]