fix(LTX25-RESIDENCY-W0): the phase-table anchors are counted by the RENDER, because four of five assertions were ratios against the anchor itself - #1441
Merged
Conversation
… swallowed neighbour is now a RED Three fresh reviews have each broken this gate one level over from the last, and the third one named the shape that made all of it possible: containment, coverage, exclusivity and non-overlap are ALL ratios taken against the sub-scope anchor, so an anchor that moves WITH the leaf defeats four assertions at once. Two assertions that are not ratios close it. RECORD COUNT. Each anchor must be emitted once per unit of work the RENDER counted. `denoise.step` once per `Ltx2ConditioningTrace::dit_evaluations`, `decode.video.chunk` once per `video_decode_chunks` plus the reopen after the last chunk, the audio pair once each. `video_decode_chunks` is new and is incremented in the driver's own streaming sink beside `rendered_frames`; the gate re-derives it from `Ltx2GroupTilesByTemporalSlice` rather than trusting it. Neither counter is derived from the phase table, so no placement of a phase scope can move them. NOTHING BUT AN ANCHOR IS NESTED. A leaf that grows over a NEIGHBOUR does not overlap it and does not break the sum: the neighbour turns `nested`, which excludes it from `sum_leaf_seconds` and from the timeline the exclusivity check walks. That is how the whole PPM writer could be charged to `decode.video` — the leaf W5's lever is measured from — at 99.68% coverage. The gate now names the five anchors and refuses any other nested record, and asserts separately that no `decode.video` leaf encloses `artifacts.frames`. Neither needs a clock. `decode.video` also gains a sub-scope with production events at BOTH ends: `decode.video.vae`, opened in `Ltx2ConvVideoDecodeTiled` around `AccumulateTemporalGroup`. It is the VAE-side sub-scope the spec recorded as owed to W5. And the load, which had no anchor at all: swapping the `load.dit` and `load.prompt_embeds` scope names moved 96% of the load's seconds onto the wrong name with every gate in the file green. `load.dit` is the phase W2 and W3 both act on. An anchor for it would have to open inside `ltx2_loader.cpp`, outside this stage's authority, so what is asserted is the ORDER the driver loads in — which a swapped pair of names breaks — and the case title now says what it checks rather than claiming all fourteen leaves. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…emptying its leaf was free The third review's M11 leaves the `write(2)`s inside `decode.video` and emits `artifacts.frames` covering nothing — four microseconds for nine PPM files. The leaves stay disjoint, nothing nests, the sum does not move, and every interval assertion in the file holds, including the ones added an hour ago: the writer had no anchor, so there was nothing to say its name had stopped covering its work. `artifacts.frames.ppm` wraps the `WriteFileBytes` loop, so it moves with the WRITES rather than with the scope beside it, and `artifacts.frames` joins the carrying phases with its record count taken from `video_decode_chunks`. Its coverage threshold is 0.50 and deliberately loose: the leaf is 0.2 ms on this fixture and carries its own scope boundaries, so what binds here is the containment and the count, not the fraction. Measured 97.97% honest. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…, and every leaf that is still unanchored The row's spec gains a `### What a THIRD fresh review found` section with the two mutations that broke the second repair (M12, the anchor that moves with its leaf; M11, the writer with no anchor at all), the two record findings beside them, and the seven-row mutation table re-run against this head. The second review's counts are kept and are now marked as that head's. `### Owed out of W0` used to name seven sub-millisecond leaves. It now names EVERY leaf that is not one of the four carrying phases, with the stage that acts on it: `load.dit` is order-checked and unanchored and is what W2 and W3 both act on; `conditioning.tower` and `conditioning.connector` are the 39-100% bound #1269 is about and W4 acts on them; the rest are bookkeeping on a two-block fixture, which is a claim about the fixture and not about 21B. `docs/USAGE.md` gains the two new nested names and says that the anchor check is a COUNT as well as a containment — the only check in the table that is not a ratio against the leaf, and therefore the only one an anchor that moves with its leaf cannot satisfy. The committed artifact's `_source` records that it predates both new anchors, so a reader who diffs a fresh table against it is not left to guess. The fixture's `_caveat` said "Across five such runs" and listed six walls. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
`main` moved to aa0996d while this branch was open. No conflict: the incoming change is a record edit on an unrelated row, and this branch's own `docs/USAGE.md` hunk is in a different section of the file. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
… and the index gets its row `#1440` tracks what the third fresh review of #1408 found: four of the containment case's five assertions are ratios against the sub-scope anchor, so an anchor that moves with its leaf satisfies all of them. Filed and fixed in the same flow, per AGENTS.md, with the row appended to the index and the issue named from the spec's `## Owed` table and its new review section. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…swap and empty, and the counts get an N greater than 1 A fourth fresh review broke two of this gate's own stated guarantees with two-line mutations, and both holes are in the anchored set the PR declares. SIBLING NAMES WERE SWAPPABLE. Nothing in the case tied a sub-scope NAME to a POSITION: the counts are per name, containment holds for either, `subs` is sorted by start before the overlap check, and `CheckOnlyAnchorsAreNested` is a set-membership test. Swapping the `decode.audio.mel` and `decode.audio.vocoder` string literals in the driver moved 96.8% of `decode.audio`'s decomposed seconds onto the wrong name with every assertion green, on a leaf holding 47.8% of that render's named leaf seconds and that #1010 asks for by name. Assertion (1b) is the same shape assertion (6) already uses for the load: sibling sub-scopes appear in the order `parts` lists them, compared on each name's first record, so a swapped PAIR is a red. `decode.video.vae` WAS HELD BY A CARDINALITY ALONE. Its duration was compared against nothing — `Carrying{"decode.video", ...}` lists only `decode.video.chunk` in `parts`, so the vae contributed zero to any coverage. Moving the scope off `AccumulateTemporalGroup` and onto the `buffer.Allocate` beside it left the table reporting `decode.video.vae = 0.000 s` beside a five-millisecond `decode.video` and both cases green. It now has a coverage floor against `decode.video.chunk` seconds, measured 91.1%-98.6% over six renders and floored at 0.50. AND THE COUNTS ARE DEMONSTRATED AT N > 1. Every decode-side count was 1 or 1+1, because nine frames decode in one temporal chunk, so "once per unit of work" and "once per render" were indistinguishable. The case now renders a second time at 81 frames — the smallest request this fixture chunks — and re-runs every per-render assertion against a table that holds both. That makes the new `render` filter load-bearing rather than hypothetical: `PhaseLog` resets at LOAD while `Ltx2ConditioningTrace` resets per `Generate`, so an unfiltered count is process-wide against a per-render denominator. The tiling re-derivation also reads the fixture's own decoder blocks and the size the render reported, in place of three constants copied from a header comment. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…he session limit The implementer was interrupted at the rebuild-and-verify step. Committing so the work survives; the ten-mutation regression and the checkers have NOT been re-run on this tree yet, and the next commit owes both. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
`main` moved to `9ecaf1bb3` while this branch was open, and one of the three incoming commits touches this row's own driver: `d0eff4f25` (W0-LIVE, #1413) adds the per-forward `Tick` inside the x0 model lambda and three cases to `test_ltx2_video`. It adds no phase scope and moves none, so every anchor this branch asserts on is byte-identical after the merge, and the ten-mutation regression is re-run on this head rather than inherited from the head it was measured on. Verified rather than assumed on both keyed records the merge touched. `.agents/issue-index.md` is append-only and unions to 463 rows against 458 here and 461 on `main`, with no row from `main` missing. The spec and `docs/USAGE.md` each keep both sides: this branch's `### What a FOURTH fresh review found` and its anchor paragraph, and `main`'s W0-LIVE sections. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
… head, and the ENOSPC run that was not a verdict The mutation table in `### What a FOURTH fresh review found` was measured before `origin/main` was merged, and one of the incoming commits (`d0eff4f25`, W0-LIVE) edits this row's own driver. A mutation proof inherited from an earlier head is a claim about a tree that no longer exists, so all ten were re-applied to the merge commit `8c66ffa16` and the table now carries those numbers. Every one is RED, every one compiled rc 0, and every one restored byte-for-byte with a clean `git status --porcelain`. N6's pattern stopped matching on the way, because this branch's own repair edited the comment above the scope it moves. The harness refused rather than reporting a green, which is the whole reason it counts occurrences: a mutation that never applies reads exactly like a passing test. N10 is recorded as RECONSTRUCTED. The fourth review's own definition of it is not in this tree or on the forge, so the label carries the mutation its name describes — close `artifacts.frames.ppm` before the write loop rather than after it — and the section says so rather than implying provenance it does not have. The four suites on that head are added beside the table, and so is the run that reported three cases THREW: the box filled to 100% and the exceptions read `No space left on device`. That is a full disk presenting as a claim about the code, and the recorded numbers are the re-run with 91 GB free. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
`main` moved a second time while this branch was open, to `0adeb8b0e`. The three incoming commits touch none of the files this branch's mutation proofs are anchored in — `src/vllm/multimodal/ltx2_video.cpp`, `src/vllm/model_executor/models/ltx2_video_vae_tiled.cpp` and `tests/vllm/multimodal/test_ltx2_video.cpp` are byte-identical after the merge — but `4712dac40` does narrow `act(gate)` to the input dtype in `src/vt/cpu/cpu_ops.cpp`, which is on this render's own path. Numerics that move can move an assertion count, so the ten-mutation set and the four suites are re-run on this head rather than carried over from `8c66ffa16`. `.agents/issue-index.md` is append-only and unions to 466 rows against 463 here and 464 on `main`, with no row from `main` missing. `docs/USAGE.md` keeps both sides. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
… head, and N6's count moved between them `main` moved twice while this branch was open and the whole ten-mutation set was re-applied after each merge. The table now names `99703ce5a` and carries that head's numbers. The re-run was not a formality. N6 reports 5 failed assertions on this head against 3 on `8c66ffa16`, and M12 reports 3 against 5, because `4712dac40` narrows `act(gate)` to the input dtype in `src/vt/cpu/cpu_ops.cpp` — on this render's own path. Both stay RED, so the verdict is unchanged; the counts are not, and carrying the earlier table forward would have published numbers no command on this tree reproduces. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…nto the wrong name, and min_coverage sums `min_coverage` is checked on the SUM of a leaf's parts, so one part covering everything satisfies it and its siblings may measure nothing. A fifth fresh review reached that with two lines and no name change: leave `decode.audio.mel` open across the vocoder call and let `decode.audio.vocoder` open and close EMPTY beside it. Identical semantics, identical call order, only the instrument moves. The gate returned exit 0, 1/1, 527/527 — byte-identical to the honest tree — while the vocoder, the model #1010 asks for BY NAME, reported six microseconds of a half-second leaf. That is the same 100% attribution transfer the sibling NAME-SWAP mutation N1 produces, and N1 is red. Every other assertion survived it, and each for its own reason. (1b) passes because the mel still OPENS first, so it proves an order and not an identity. The counts are {1, 1} either way. Containment, `nested` and non-overlap all hold. This is round four's lesson again: assertion (6) was applied to the anchor that failed rather than to the property that failed. `Carrying::part_min_coverage` is the repair — a per-part floor against the leaf, required rather than defaulted and placed before `render` so a future leaf cannot acquire a second part without answering the question. `decode.audio` is the only multi-part leaf today, which is why the hole existed on exactly one pair and why (1b) is vacuous everywhere else. Only the vocoder gets a number, and the mel's absence is measured rather than assumed. Honest the vocoder holds 97.85%, 91.57%, 90.6% and 89.7% of its leaf here and 97.0% and 99.99% on the 21B artifact; under the mutation it holds 0.00045% and 0.0013%. Four to five orders, which is the separation the 0.50 `decode.video.vae` floor already exploits, so this floor is 0.50 too rather than tightened toward a share this contended box destroys. The MIRROR — mel emptied, the vocoder covering both calls — stays GREEN and is recorded as open in `### Owed out of W0` with the reason. Honest the mel holds 0.0004% to 2.9% on the 21B artifact; under the mirror it holds 0.0032%. The honest render's share is SMALLER than the mutation's, so the distributions overlap and any floor that reddens the mirror also reddens an honest render this row has already produced. Closing it needs a scope inside `Ltx2AudioDecoderForward`, in the shape `decode.video.vae` ships, and W1 is told in as many words that it is ranking a pair and not two models until then. Two stated reasons also claimed more than their numbers do. The vae denominator was justified by "without a second threshold for the reopen", but the reopen is itself a `decode.video.chunk` record and sits inside both candidate denominators: measured here the leaf is 0.00105035 s against 0.00103919 s of chunk, 1.06%, and the leaf is the marginally stricter of the two. And (1b) compares FIRST records, which is the whole order only because these parts do not interleave; a leaf with two repeating parts would satisfy it while running `A, B, B, A`. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…erit `origin/main` moved to `c8d926ea8` while the sibling-boundary repair was written. Five commits arrive, one of which — `aeba0de6f` — adds a conflict-marker gate this branch has never been run against. The whole mutation set is re-applied on this head rather than carried forward. That is not a formality on this row: when the set was re-run across the previous merge, N6 moved from 3 failed assertions to 5 and M12 from 5 to 3, because `4712dac40` narrowed `act(gate)` to the input dtype on this render's own path. The verdicts held and the counts did not, and a table naming numbers no command on this tree reproduces is the failure the row keeps re-learning. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…, and two RECONSTRUCTIONS that reddened for the wrong reason The set is re-applied on `17eba8ce2` rather than carried forward, and the counts moved again while every verdict held. N6 reports 3 failed assertions here against 5 on `99703ce5a`. N1 reports 6 against 3, and that one is this change's own doing: the per-part floor catches the name swap as well as the boundary shift, because under N1 the vocoder name lands on the mel's work and reads 2.76% and 7.68% of its leaf. Every share in the code and in the spec is now this head's. Honest the vocoder holds 99.46% and 94.10%; under R1b 0.00091% and 0.0035%; under the mirror the mel holds 0.00063% and 0.0051% against an honest 0.53% and 5.90% here and 0.0004% on the 21B artifact. That last pair is the whole argument for leaving the mirror open: the honest artifact share is SMALLER than the mutation's, so no threshold separates them. Seven of the twelve are reconstructions and the record now says which. Only R1b, its mirror, N1, N6 and M13 run from a definition recorded in this tree; the earlier reviews' own M12, M11, M11b, M7, M4, M10 and N10 are not in the tree or on the forge, so each is rebuilt from the row that describes it. TWO OF THOSE REBUILDS WERE WRONG, and a bare RED is exactly what would have hidden it. A first M4 that never re-closed `decode.video` reddened the SUMS case, which the recorded M4 does not. A first M12 closed `denoise.step` early instead of suppressing it — closing still EMITS the record — which left M12 and M7 byte-identical in their verdicts: 556 assertions, 26 failed, on the same five failure texts. Both were repaired until the failure SHAPE matched the recorded one, M4 aborting on a `REQUIRE_FALSE(nested)` and M12 failing first on `'denoise.step' was emitted 1 time(s)` against `dit_evaluations` = 8. A reconstruction that merely reds is not evidence that the recorded mutation reds. The vae denominator note also takes this head's numbers: leaf 0.191059 s against 0.191044 s of chunk, 0.0079%, where an earlier run of the same binary at the same geometry read 1.06%. The boundary cost is fixed and the leaf is not, which is the box rather than the structure, and it is why no duration here is compared with any other. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…hat is purely additive `origin/main` moved to `cae8ace0c` while the twelve-mutation table was written. Two commits arrive, and one of them touches `src/vt/cpu/cpu_ops.cpp` — the file whose `act(gate)` narrowing moved N6's and M12's counts across the previous merge, on this render's own path. It cannot do that here, and the reason is checkable rather than assumed: `git diff --numstat` reports 87 insertions and ZERO deletions in that file, 40/0 in `src/vt/ops.cpp` and 2/0 in `src/vt/op_provider.cpp`. The change registers a grouped dynamic depthwise convolution for DFlash2 and modifies no existing path. The set is re-run on this head regardless, because "additive" is an argument and the table's numbers are a measurement. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: AGENT:claude-opus-5 [Claude Code]
…s the fifth merge, and main's own audit-live-rows red is filed The twelve mutations were re-run on `1160d04b5` and every count is identical to `17eba8ce2`. That is the evidence the fifth merge commit's argument was owed: it predicted the delta could not move the counts because `git diff --numstat` reads 87 insertions and zero deletions in `src/vt/cpu/cpu_ops.cpp`, and a prediction about a file is not a measurement of a render. Twelve unchanged counts are. `scripts/agent-preflight.sh` also reports `audit-live-rows` and `test_audit_live_rows` failing, and neither is in this row's known-red baseline. They are not this branch's. A detached worktree at `origin/main` `cae8ace0c` with nothing applied fails the same assertion with the same value — `stale ACTIVE rows remain: ['KERNEL-DFLASH2-GROUPED-CONV']` — so the red arrived with `028438e68`, whose implementation landed while its kernel-matrix row stayed `ACTIVE` under a live claim. Filed as #1469 and owned by `KERNEL-DFLASH2-GROUPED-CONV`, not fixed here: that row, the kernel matrix and the DFlash2 claim are outside this row's authority, and a lifecycle move owes `docs/STATUS.md`, `docs/BENCHMARKS.md` and the moved spec's `## Now`. Worth recording how it hides: `scripts/audit-live-rows.py` run on its own returns rc 0 while printing `1 abandoned ACTIVE`. The count is the gate and the exit status does not carry it, so the script looks green to anyone who checks it the obvious way. 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 20, 2026
…ne overlaps) `origin/main` moved to `fdefb4529` while the previous preflight was running, so `commit-trailers` and `commit-style` SKIPPED again: a branch behind `main` reports nothing about its own tree, and a skipped gate is not a passed one. Unlike the previous four, this merge is not bookkeeping. `fdefb4529` (LTX25-RESIDENCY-W0, #1441) edits `src/vllm/multimodal/ltx2_video.cpp`, `include/vllm/multimodal/ltx2_video.h`, `tests/vllm/multimodal/test_ltx2_video.cpp` and `docs/USAGE.md` -- four files this branch also touches. The LTX gates are therefore re-run after it rather than inherited from the run before it. Written by hand rather than with `--no-edit`, because the default merge message carries no body and no trailer block and fails both gates this merge exists to un-skip. 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 20, 2026
…e that one touched four of this row's files The previous evidence entry was measured at `c9954f5c6`, before `fdefb4529` (LTX25-RESIDENCY-W0, #1441) arrived. That commit edits `ltx2_video.cpp`, `ltx2_video.h`, `test_ltx2_video.cpp` and `docs/USAGE.md`, so inheriting the earlier numbers across it would have been a gate result about a different tree. Re-run after an incremental build that recompiled 7 targets, so the binaries are the merged sources and not a stale link: `test_ltx2_pipeline` 59 cases / 3415 assertions, its focused arm 3 / 99, `test_ltx2_video` 101 of 101 cases / 4109 assertions, its focused arm 5 / 90, `test_capi` 65 / 654. Every one exits 0 with `SUCCESS!` and zero failed assertions. `test_ltx2_video` gained 462 assertions across the merge. They are #1441's own new phase-anchor cases, not a change in this row's five, whose focused arm is unmoved at 5 cases and 90 assertions. FOLLOWING_AGENTS_PROTOCOL 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.
W0's containment case asserts four things about each carrying phase —
containment, coverage, exclusivity, non-overlap — and all four are ratios taken
against the sub-scope anchor. An anchor that moves WITH its leaf therefore
defeats every one of them at once. That is the shape that let four fresh reviews
each break this gate one level over from the last, and it is what this change
closes.
What the third review broke, and what closed it
Two mutations against the merged
89261c955, both compiling clean, both exit 0on both gates. M12 emits
denoise.stepfor step 0 only, closesdenoisethere and opens
phase.finishover steps 1-7: 106/106 and 350/350 assertions,over a table putting
phase.finishat 28.73% of the named leaves against adenoiseof 6.11%, on a run whose honest denoise was 39.3%. M11 leaves thewrite(2)s insidedecode.videoand emitsartifacts.framescovering nothing:124/124 and 422/422, coverage still 99.68%,
artifacts.framesreporting fourmicroseconds while nine PPM files are written, with the whole writer charged to
the leaf W5's lever is measured from.
Two assertions that are not ratios close both.
The record count. Each anchor must be emitted once per unit of work the
RENDER counted. The counts come from
Ltx2ConditioningTrace:dit_evaluations,incremented inside the shared
Evaluatelambda every sampler arm reaches, andvideo_decode_chunks, added here and incremented in the driver's own streamingsink beside
rendered_frames. Neither is derived from the phase table, so noplacement of a phase scope can move either, and the gate re-derives
video_decode_chunksfromLtx2GroupTilesByTemporalSlicerather than trustingit.
Nothing but an anchor is nested. A leaf that grows over a NEIGHBOUR does not
overlap it and does not break the sum:
PhaseLog::Openmarks the neighbournested, which removes it fromsum_leaf_secondsand from the timeline theexclusivity check walks. The gate names the six anchors and refuses any other
nested record, and asserts separately that no
decode.videoleaf enclosesartifacts.frames.Two anchors are new.
artifacts.frames.ppmwraps theWriteFileBytesloop, sothe writer's name has something that moves with the WRITES rather than with the
scope beside it.
decode.video.vaeopens insideLtx2ConvVideoDecodeTiledaround
AccumulateTemporalGroup— the VAE-side sub-scope the spec recorded asowed to W5 — so that leaf has a sub-scope whose ends are both production events.
And the load, which had no anchor at all: swapping the
load.ditandload.prompt_embedsscope names moved 96% of the load's seconds onto the wrongname with every gate green, and
load.ditis the phase W2 and W3 both act on. Ananchor for it needs a scope inside
ltx2_loader.cpp, outside this stage'sauthority, so what is asserted is the ORDER the driver loads in. The case title
now says what it checks, and
### Owed out of W0names every leaf whoseplacement is still unproven, with the stage that acts on it.
What the FOURTH review broke, and what closed it
The fourth reviewer re-ran every earlier mutation against
165db635cand foundall seven RED. Two of this change's own stated guarantees still fell to
two-line mutations, and both are on the anchored set it declares.
N1 — sibling anchor names are swappable. Swap the
decode.audio.melanddecode.audio.vocoderstring literals (1 file, +2/-2, compile rc 0). Both gateswere green — containment exit 0, 1/1, 194/194 and SUMS exit 0, 1/1,
446/446, byte-identical to the honest claim — over a table reading
decode.audio.vocoder 0.007 s/decode.audio.mel 0.220 swhere the honesttable has them reversed. 96.8% of
decode.audio's decomposed seconds land onthe wrong name, on a leaf that is 47.8% of that render's named leaf seconds,
and issue #1010 asks for the vocoder BY NAME. Nothing tied a sub-scope NAME to a
POSITION: the counts are
{1, 1}either way, containment holds for both, thesub-scope intervals are sorted by start before the overlap check, and the nested
assertion is a set-membership test. The sharp part is that the load-order
assertion was added because M13 showed a sibling name swap moves 96% with
everything green, and the identical hole was left on the one sibling pair inside
its own anchored set.
N6 —
decode.video.vae's placement was not gated at all. Move the scope offAccumulateTemporalGrouponto thebuffer.Allocatebeside it (1 file, +7/-8,compile rc 0): containment exit 0, 194/194, SUMS exit 0, 446/446. The
table then reports
decode.video.vae = 0.000 sbeside a five-milliseconddecode.video, with the tile decode inside no sub-scope. That anchor was checkedfor cardinality, for
nestedand for containment in a chunk window and nothingelse —
Carrying{"decode.video", ...}lists onlydecode.video.chunkinparts, so the vae contributed zero to coverage, and it fired in neither M11nor M11a. The "both production events" claim was true of the source and unheld by
the gate.
Three repairs close them, and a fourth pays a claim this change had made in prose.
Assertion (1b), the sibling order. Two sub-scopes of one leaf must appear in
the order
partslists them, which is the order the driver runs them, comparedon each name's FIRST record so a part that legitimately repeats
(
decode.video.chunk) is unaffected. Same shape as the load-order assertion. Itproves a swapped PAIR is a red — not that either name covers the call it is named
after, which needs a scope inside the callee and is recorded as owed beside
load.dit.Assertion (6), the VAE coverage floor.
decode.video.vaemust cover at leasthalf of the render's
decode.video.chunkseconds. The denominator is the chunkwindows rather than the leaf, because the leaf's last chunk record is the empty
window between the final chunk and the end of the decode. Measured 91.1%, 93.6%,
97.4%, 98.2%, 98.5% and 98.6% over six renders; the floor is 0.50 because the
uncovered part is the per-group allocation, the overlap blend and the emit —
real work whose share grows as the tile shrinks — plus two instrument boundaries
against a chunk of about a millisecond on this fixture.
The counts are now demonstrated at N > 1. Every decode-side count was 1 or
1+1, because nine frames decode in ONE temporal chunk, so "once per unit of work"
and "once per render" were indistinguishable — the exact distinction assertion
(0) exists to make. The case now renders a second time at 81 frames, the smallest
request this fixture chunks, and re-runs every per-render assertion against a
table that holds both renders.
min_chunksmakes a geometry that stoppedchunking a red rather than a quiet regression to N = 1, and the tiling
re-derivation now reads the fixture's own decoder block list through
Ltx2VideoScaleFactorsFromBlocksand the size the render reported, in place ofthree constants copied from a header comment.
And the counts are taken per render.
PhaseLogresets at LOAD whileLtx2ConditioningTraceresets on everyGenerate, so an unfiltered record countis process-wide against a per-render denominator — correct only while the case
rendered once.
RecordsNamedandLeafIntervalsnow filter on therenderfield the records already carry, which the second render makes load-bearing
rather than hypothetical.
One threshold moved and it is a parameter rather than a loosening.
denoise'scoverage floor is 0.95 at nine frames and 0.90 at 81, because the uncovered part
is WORK — the post-process and the Euler or res_2s step, which no anchor wraps —
and its share depends on the geometry. Measured 99.28%, 99.38% and 99.55% at
latent_t = 2against 96.55%, 96.90% and 97.09% atlatent_t = 11, same binary,same box, three runs each: six points of margin on the measured value in both
cases, which is the rule the other thresholds are set by.
Two overstatements are corrected wherever they appear — the driver comment, the
ltx2_video_vae_tiled.cppcomment,docs/USAGE.md, the spec and this body.artifacts.frames's 0.50 disclosure said "what binds here is the containment andthe count"; a count of one plus containment permits that leaf to be TWICE its
anchor, and what binds is the count and the fact that the writer is not
nested.And
### Owed out of W0was honest and complete for LEAVES and silent about theANCHORS; it now states, per property, what is proven about them and what is not,
including that no anchor covers the CALL it is named after and that a leaf may
still grow over time NOBODY named up to its coverage slack — about 5.3% for
denoise, 11% fordecode.video, 1% fordecode.audioand up to 100% forartifacts.frames.What the FIFTH review broke, and what closed it
The fifth reviewer called the fourth repair "a strict, verified improvement"
where "every claim it makes about its own head reproduces", and then found a
FIFTH transfer shape on the same pair.
R1b — the sibling BOUNDARY, with no name touched. Leave
decode.audio.melopen across the vocoder call and let
decode.audio.vocoderopen and close EMPTYbeside it (
ltx2_video.cpp:4674-4682, 1 file, +2/-2, compile rc 0). Identicalsemantics, identical call order; only the instrument moves. Both gates were green
— containment exit 0, 1/1, 527/527 and SUMS exit 0, 1/1, 446/446,
byte-identical to the honest tree — while the vocoder, the model #1010 asks for
BY NAME, reported six microseconds of a half-second leaf. ~100% of
decode.audio's decomposed seconds land on the wrong name, which is the same endstate N1 produces, and N1 is red.
Every assertion survived it, each for its own reason. (1b) passes because the mel
still OPENS first, so it proves an ORDER and not an IDENTITY. The counts are
{1, 1}either way. Containment,nestedand non-overlap all hold. Andmin_coverageis checked on the SUM of the parts, never per part, so onepart covering everything satisfies it. Enumerating the multi-part leaves says why
this landed on exactly one pair:
denoise{denoise.step},decode.video{decode.video.chunk}andartifacts.frames{artifacts.frames.ppm}have ONE part each, so (1b) and any per-part rule are vacuous for them.
decode.audio{mel, vocoder}is the only multi-part leaf in the table. This isround four's lesson recurring: assertion (6) was applied to the anchor that
failed rather than to the property that failed.
Carrying::part_min_coveragecloses it — a per-part floor against the leaf,REQUIRED rather than defaulted and placed before
render, so a future leafcannot acquire a second part without answering the question. Honest, the vocoder
holds 99.46% and 94.10% of its leaf on the landing head and 97.0% and 99.99%
on the 21B artifact; under R1b it holds 0.00091% and 0.0035%. Four to five
orders of separation, which is the property the 0.50
decode.video.vaeflooralready exploits, so this floor is 0.50 too rather than tightened toward a share
this box destroys. It also catches the NAME SWAP, which is why N1 moved from 3
failed assertions to 6: under N1 the vocoder name sits on the mel's work and
reads 2.76% and 7.68%.
The MIRROR is measured, GREEN and left OPEN, and that is a measurement rather
than an omission. Mel emptied, the vocoder covering both calls: honest,
decode.audio.melholds 0.53% and 5.90% here and 0.0004% to 2.9% on the 21Bartifact; under the mirror it holds 0.00063% and 0.0051%. The honest 21B
render's share is smaller than the mutation's, so the distributions overlap and
any floor that reddens the mirror also reddens an honest render this row has
already produced.
### Owed out of W0now names the sibling-boundary shapeexplicitly, states which direction is closed and which is not, and tells W1 in as
many words that it is ranking a PAIR and not two models until a scope lands
inside
Ltx2AudioDecoderForward. The previous entry was true but read as aPRECISION debt — "opened by a statement ADJACENT to the call" — when the failure
is a 100% attribution transfer.
Two stated reasons also claimed more than their numbers did. The vae
denominator was justified by "without a second threshold for the reopen", but the
reopen is itself a
decode.video.chunkrecord and sits inside BOTH candidatedenominators: on the landing head the leaf is 0.191059 s against 0.191044 s of
chunk, 0.0079%, and the LEAF is the marginally stricter of the two, so the choice
loosens nothing. And (1b) compares FIRST records, which is the whole order only
because these parts do not interleave; a future leaf with two repeating parts
would satisfy
first(A) <= first(B)while runningA, B, B, A. Both sentencesare corrected at the site.
Evidence
Honest tree at
1160d04b5, the head that lands, x86 CPU, Release,-DVLLM_CPP_SERVER=OFF:test_ltx2_videotest_capitest_ltx2_vaetest_ltx2_tilingThe two gate cases on that head: containment exit 0, 1/1, 554/554, SUMS
exit 0, 1/1, 446/446.
Twelve mutations, run on BOTH merge heads —
17eba8ce2and1160d04b5:git diff --statdecode.audio.melopen across the vocoder call,decode.audio.vocoderopened EMPTY beside it — the sibling-boundary mutationdecode.audio.mel/decode.audio.vocoderscope namesdecode.video.vaeoffAccumulateTemporalGroupontobuffer.Allocatedenoise.stepemitted for the first evaluation only,denoiseclosed at step 0,phase.finishover the restdenoise.steprecord count againstdit_evaluations= 8decode.video,artifacts.framesemitted emptyCloses below the write, writer still around the loopload.dit/load.prompt_embedsscope namesdenoiseafter the first sampler step, openphase.finishtheredecode.videoleft open across the audio decodeREQUIRE_FALSEaborts the case early)artifacts.frames.ppmfrom theWriteFileBytesloop by closing it before the loopAcross the FOURTH merge the counts moved and the verdicts did not — N6 went
from 5 failed assertions to 3, and N1 from 3 to 6. Across the FIFTH merge every
count is byte-identical, all twelve. That merge touches
src/vt/cpu/cpu_ops.cpp, the file whoseact(gate)narrowing moved the countslast time, and
git diff --numstatreads 87 insertions and zero deletions there."Purely additive" was the prediction; twelve unchanged counts are the evidence,
and the prediction was not accepted in place of the run.
SEVEN OF THE TWELVE ARE RECONSTRUCTIONS, and the body says which. Only R1b,
its mirror, N1, N6 and M13 run from a definition recorded in this tree; the
earlier reviews' own M12, M11, M11b, M7, M4, M10 and N10 are not in the tree or
on the forge, so each is rebuilt from the row that describes it. Two rebuilds
were wrong on the first attempt and a bare RED would have hidden both. A first
M4 that never re-closed
decode.videoreddened the SUMS case, which the recordedM4 does not; a first M12 closed
denoise.stepearly instead of SUPPRESSING it —closing still emits the record — which made M12 and M7 identical in verdict, 556
assertions with 26 failed on the same five failure texts. Both were repaired
until the failure SHAPE matched the recorded one. A reconstruction that merely
reds is not evidence that the recorded mutation reds.
Every mutation was applied by exact-text replacement that refuses unless the
pattern occurs exactly once, its
git diff --statand compile return codeprinted, the binary's sha checked to have MOVED, and the tree restored and
re-verified with
git status --porcelainafterwards. The refusal earned its keepagain: M4's first anchor matched two sites and was refused rather than applied to
the wrong one.
The SUMS column is not a defect. It is the measurement, for the fifth time: a
sum cannot see a transfer, an anchor that moved with its leaf, a pair of anchor
names that were exchanged, or a scope boundary that moved between two siblings.
No timing conclusion is drawn from this box, and none may be. Every threshold
here is a within-run share. The leaf sums moved 0.658 s, 0.706 s and 0.779 s
across three runs of one binary at one geometry while this was written, and
earlier runs of the same case on the same box reported 0.080 s and 0.476 s. The
box also filled to 100% mid-run once and three cases threw
No space left on device; that was ENOSPC and not a verdict, and the suites above were re-run withheadroom.
Component checkers on this head, all rc 0:
check-public-doc-tables,check-windows-portability,check-surface-coverage,check-test-registration,check-symbol-anchors,check-env-doc,check-gate-commands,check-now-current,check-agent-record,check-issue-index-append-only,check-oracle-pins,check-prompt-contract,check-pr-size --base origin/main --head HEAD,check-commit-styleandcheck-commit-trailersover the branchrange.
scripts/agent-preflight.shreports FOUR failures on this head and none is thisbranch's.
test_cpu_x86_llamacpp_flooris #618 and prints its own reason — thebox was at load 37 on 20 cores while it ran.
doc-checkpoint rangeis theper-commit walk on
8e4c57967, which changesuser_usagewhile thedocs/USAGE.mdedit rides inf47c2e0e3; once a commit is published on a branchthat may not be force-pushed, no later commit can make that walk green.
Verified on the squashed shape, which is what lands:
check-doc-checkpoint.py --commit <squash>returns rc 0 against agit commit-treeof this head's tree parented onorigin/main.audit-live-rowsandtest_audit_live_rowsare new, and they aremain's. Adetached worktree checked out at
origin/maincae8ace0cwith nothing appliedfails the same assertion with the same value —
stale ACTIVE rows remain: ['KERNEL-DFLASH2-GROUPED-CONV'], 57 tests, 1 failure— so the red arrived with
028438e68, whose implementation landed while itskernel-matrix row stayed
ACTIVEunder a live claim. Filed as#1469, owned by
KERNEL-DFLASH2-GROUPED-CONV, and NOT fixed here: that row, the kernel matrixand the DFlash2 claim are outside this row's authority, and a lifecycle move owes
docs/STATUS.md,docs/BENCHMARKS.mdand the moved spec's## Now. Note how ithides —
scripts/audit-live-rows.pyrun on its own returns rc 0 while printing1 abandoned ACTIVE, so the script looks green to anyone who checks it theobvious way. CI is
REMOTE_UNVERIFIED(#1376).Closes #1440. Also fixes #1446, the fourth review's findings, filed and repaired
in the same flow.
FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]