Skip to content

spec(LTX25-DEVICE-RESIDENCY): the levers were ranked and nothing staged them, so the instrument is stage zero (#1264) - #1271

Merged
localai-bot merged 5 commits into
mainfrom
row/LTX25-DEVICE-RESIDENCY
Aug 18, 2026
Merged

spec(LTX25-DEVICE-RESIDENCY): the levers were ranked and nothing staged them, so the instrument is stage zero (#1264)#1271
localai-bot merged 5 commits into
mainfrom
row/LTX25-DEVICE-RESIDENCY

Conversation

@localai-bot

@localai-bot localai-bot commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

ltx25-decode-speed.md is a SPIKE that ranked the LTX-2.5 device-residency
levers, read every oracle and filed thirteen issues it owns, and states in its
own stop conditions that it has no implementation authority and no fresh review.
This row takes that ownership. It cites the spike and restates none of its
evidence, oracle analysis or provenance.

.agents/specs/ltx25-device-residency.md is READY with the nine structured
sections and a ## Now. It stages fourteen issues into W0-W7 plus a parallel
oracle lane, each stage landing on its own branch, reachable from a production
entry point at its own merge commit, revertible without touching the next, and
owing an open issue before it starts.

The instrument is first, and the argument is not that instruments are virtuous

The ranking every later stage would inherit has three measurement defects. The
evidence is unretrievable (#1040 — the sampler CSVs and rung 2's run.log are on
a host that stopped answering, and the spike marks even its passing numbers
REMOTE_UNVERIFIED). The subject is unnamed (#1087 measures a 1731 s phase and
says in its own text "Do not guess it from the duration"). And the ranking is
STALE rather than merely unverified: #1009 landed as #1041 and #1208 landed as
LTX25-TEXT-LINEAR-SEAM, and neither was re-measured end to end, so the profile
the ranking describes is not the profile in this tree. W1 is therefore an
explicit gate on the order itself, and ## Now is amended with the re-derived
order before W2 starts — unless W1 itself reports BLOCKED, in which case W2 and
W3 proceed on their byte-compare and RSS gates and W4/W5 do not start. A lever
whose rank does not survive re-measurement is re-placed or dropped there, in
writing.

Three corrections to the framing, each with a file:line at this base

The denoise IS device-routed: ltx2_video.cpp:847 selects
Ltx2StreamDitToDevice and :3864-3866 selects Ltx2DitForwardDevice, which
calls CheckWeightsResident at ltx2_device.cpp:1144 and drives 48 blocks of
device ops. The spike's own record says the sampled window had written no frame,
which excludes the decode too. So #1024's GPU-zero window is neither the denoise
nor the decode, and the campaign's headline measurement does not identify its own
subject.

#1015 does NOT gate device residency. Ltx2StreamDitToDevice refuses
widen_to_f32 by name (ltx2_loader.cpp:759-765) and keeps one host buffer live
per tensor, so the double-hold at :739-754 is a host-arm defect. It stays early
because the host f32 arm is the reference W4's and W5's correctness gates compare
against. #1016 is the one that gates device headroom, because on GB10's unified
memory the device copy and the dead file cache come out of the same 119 GiB.

The conditioning stage is host-only BY TYPE and was in no lever table. Filed as
#1269 and staged as W4: ltx2_video.cpp:2085, :2799, :4638 hard-code a CPU
queue, ltx2_text_encoder.cpp:446 hard-codes a second one inside the extractor,
and Gemma4Weights is OwnedTensor over OwnedBytes with no device field.
LTX25-TEXT-LINEAR-SEAM found it, wrote "it needs its own issue", and filed
none.

Two levers this campaign does not carry as stages

#1011 becomes a rider on W5 rather than a stage, because once the decode is on
the device, upstream's memory-efficient HOST decode optimizes a path production
no longer takes; its portable half is the memory format W5's arm consumes. #1202
is deferred behind W1 with its measured number attached (2.3% of one pass), not
carried as debt with no number. Both conditions are written down so a later
session can see what would bring them back.

Records

Hazards are written as gates a run script asserts, not prose: the GB10 OOM
reboot, the ephemeral /mnt and root overlay against COS_PERSISTENT
/usr/local, the rc lease, and the lease that carries bytes rather than
executables. No docs/STATUS.md or docs/BENCHMARKS.md edit is owed: no
capability changes lifecycle state and no measurement is taken. No matrix row and
no claim file, argued in ## Risks/decisionscheck-agent-record.py builds
its row-ID pattern from prefixes that admit no LTX25- id, so such a row would
be one no checker reads inside a file every future edit must write. The one
matrix cell this campaign genuinely invalidates is updated:
ENG-CUDAGRAPH-DIFFUSION now names the row that owns #1164's unblock order.

check-agent-record.py, check-public-doc-tables.py,
check-issue-index-append-only.py, check-commit-style.py and
check-commit-trailers.py pass. The record checker's green is weak evidence
about this spec, and the spec now says why: check_spec takes a ClaimRow, so
its structured-section requirement reaches only a spec linked from a matrix row,
and this one is linked from none. No checker in this tree reads a bare
path.cpp:123 written in prose either — check_links validates markdown link
targets and #L<n> fragments only. A person reading them is the whole
instrument, which ## Port map now discloses beside its per-stage
re-derivation obligation.

Applied from the fresh review

The review returned PASS with four LOW findings, all text inside the spec, all
applied on this branch. The central gate admitted two readings — ## Now said
the order is re-derived before W2 unconditionally while ## Risks let a
BLOCKED W1 proceed with no amendment — and both sections now carry the same
stop condition, with W3 named rather than inferred. Four anchors named a line
they do not sit on at the stated base 27d5432f9, re-derived here with
grep -n: CheckWeightsResident is :1144 not :1145, the bf16 buffer push is
:729 not :728, the f32 push is :752 not :753, and Ltx2RebindDitLoras
runs :808-912 not :806-830; the W7 row's capture primitive starts at
cuda_backend.cu:206, not :203. Two prose slips beside correct anchors:
Ltx2DitForwardDevice takes vt::Queue&, not vt::Backend&, and 14 other
files call MaybeReleaseSourcePages, not 15. And OwnedBytes "has no device
field" now cites owned_bytes.h:42, where the type is defined, beside the
qwen3_5_weights.h:47-56 that only holds one.

The issues this row stages

The thirteen ltx25-decode-speed.md owns under ## Owed, plus #1269 which this
row filed:

Stage Issues
W0 the instrument #1010, #1040 (artifact contract)
W1 re-derive the ranking #1040 (closes), #1024 (re-measured, with the control it owes)
W2 the load path #1016, #1015, #1210
W3 the staging path #1021
W4 the conditioning stage #1269
W5 the video VAE decode #1007, with #1011 as a rider
W6 the residency question #1014
W7 the graph decision #1164 is decided here, not implemented
O1 the oracle lane #1012
deferred behind W1 #1202, with its measured 2.3% attached
closed, listed so the count closes #1009, landed as #1041

Closes #1264.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]

mudler added 2 commits August 18, 2026 20:27
…ed them, so the instrument is stage zero (#1264)

`ltx25-decode-speed.md` is a `SPIKE` that ranked the LTX-2.5 device-residency
levers, read every oracle and filed thirteen issues it owns, and states in its
own stop conditions that it has no implementation authority and no fresh review.
This row takes that ownership. It cites the spike and restates none of its
evidence, oracle analysis or provenance.

`.agents/specs/ltx25-device-residency.md` is `READY` with the nine structured
sections and a `## Now`. It stages fourteen issues into W0-W7 plus a parallel
oracle lane, each stage landing on its own branch, reachable from a production
entry point at its own merge commit, revertible without touching the next, and
owing an open issue before it starts.

## The instrument is first, and the argument is not that instruments are virtuous

The ranking every later stage would inherit has three measurement defects. The
evidence is unretrievable (#1040 — the sampler CSVs and rung 2's `run.log` are on
a host that stopped answering, and the spike marks even its passing numbers
`REMOTE_UNVERIFIED`). The subject is unnamed (#1087 measures a 1731 s phase and
says in its own text "Do not guess it from the duration"). And the ranking is
STALE rather than merely unverified: #1009 landed as #1041 and #1208 landed as
`LTX25-TEXT-LINEAR-SEAM`, and neither was re-measured end to end, so the profile
the ranking describes is not the profile in this tree. W1 is therefore an
explicit gate on the order itself, and `## Now` is amended with the re-derived
order before W2 starts. A lever whose rank does not survive re-measurement is
re-placed or dropped there, in writing.

## Three corrections to the framing, each with a file:line at this base

The denoise IS device-routed: `ltx2_video.cpp:847` selects
`Ltx2StreamDitToDevice` and `:3864-3866` selects `Ltx2DitForwardDevice`, which
calls `CheckWeightsResident` at `ltx2_device.cpp:1145` and drives 48 blocks of
device ops. The spike's own record says the sampled window had written no frame,
which excludes the decode too. So #1024's GPU-zero window is neither the denoise
nor the decode, and the campaign's headline measurement does not identify its own
subject.

#1015 does NOT gate device residency. `Ltx2StreamDitToDevice` refuses
`widen_to_f32` by name (`ltx2_loader.cpp:759-765`) and keeps one host buffer live
per tensor, so the double-hold at `:739-754` is a host-arm defect. It stays early
because the host f32 arm is the reference W4's and W5's correctness gates compare
against. #1016 is the one that gates device headroom, because on GB10's unified
memory the device copy and the dead file cache come out of the same 119 GiB.

The conditioning stage is host-only BY TYPE and was in no lever table. Filed as
#1269 and staged as W4: `ltx2_video.cpp:2085`, `:2799`, `:4638` hard-code a CPU
queue, `ltx2_text_encoder.cpp:446` hard-codes a second one inside the extractor,
and `Gemma4Weights` is `OwnedTensor` over `OwnedBytes` with no device field.
`LTX25-TEXT-LINEAR-SEAM` found it, wrote "it needs its own issue", and filed
none.

## Two levers this campaign does not carry as stages

#1011 becomes a rider on W5 rather than a stage, because once the decode is on
the device, upstream's memory-efficient HOST decode optimizes a path production
no longer takes; its portable half is the memory format W5's arm consumes. #1202
is deferred behind W1 with its measured number attached (2.3% of one pass), not
carried as debt with no number. Both conditions are written down so a later
session can see what would bring them back.

## Records

Hazards are written as gates a run script asserts, not prose: the GB10 OOM
reboot, the ephemeral `/mnt` and root overlay against `COS_PERSISTENT`
`/usr/local`, the `rc` lease, and the lease that carries bytes rather than
executables. No `docs/STATUS.md` or `docs/BENCHMARKS.md` edit is owed: no
capability changes lifecycle state and no measurement is taken. No matrix row and
no claim file, argued in `## Risks/decisions` — `check-agent-record.py` builds
its row-ID pattern from prefixes that admit no `LTX25-` id, so such a row would
be one no checker reads inside a file every future edit must write. The one
matrix cell this campaign genuinely invalidates is updated:
`ENG-CUDAGRAPH-DIFFUSION` now names the row that owns #1164's unblock order.

`check-agent-record.py`, `check-public-doc-tables.py`,
`check-issue-index-append-only.py`, `check-commit-style.py` and
`check-commit-trailers.py` pass. The record checker's green is weak evidence for
the spec file itself: a deliberate bogus anchor added to it did not turn the
checker red, so the anchors above were verified by reading each line instead.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
Two commits landed on main after this branch's base 27d5432. Neither touches
the spec, the issue index rows this branch appends or the engine-matrix cell it
edits.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
mudler added 3 commits August 18, 2026 20:57
… and four anchors named lines they do not sit on

A fresh review of the spec-only #1271 returned PASS with four LOW findings. Each
is a text substitution inside .agents/specs/ltx25-device-residency.md, and each
is applied here with its anchor re-derived by grep rather than counted by eye.

LOW-1. `## Now` said the section is amended with the re-derived order "before W2
starts", unconditionally, while `## Risks to the plan itself` said a BLOCKED W1
lets the campaign proceed with no amendment at all. An operator reading the
first halts and one reading the second continues, which is the failure a stop
condition exists to prevent. `## Now` now carries the BLOCKED branch inline, and
the risk row names W3 explicitly instead of saying "stops at W2" and leaving the
staging path to inference.

LOW-2. Four anchors resolved to the right file and the right function and named
the wrong line, in both directions, at the spec's stated base 27d5432:

  $ grep -n 'CheckWeightsResident(weights, queue.device)' ltx2_device.cpp
  1144:  CheckWeightsResident(weights, queue.device);
  $ grep -n 'out.storage.push_back(std::move(buffer));' ltx2_loader.cpp
  729:    out.storage.push_back(std::move(buffer));
  $ grep -n 'checkpoint.storage.push_back(std::move(widened));' ltx2_loader.cpp
  752:    checkpoint.storage.push_back(std::move(widened));
  $ grep -n '^void Ltx2RebindDitLoras' ltx2_loader.cpp
  808:void Ltx2RebindDitLoras(vt::Queue* queue, const SafetensorsFile& file,
  $ awk 'NR>808 && /^}/ {print NR; exit}' ltx2_loader.cpp
  912

So :1145 becomes :1144, :728 becomes :729 (in two places, `## Our baseline`
finding 3 and the W2b row of `## Tests to port`), :753 becomes :752, and the
W2c row's :806-830 becomes the function's real extent :808-912. The same class,
found while checking the others: the W7 row labelled cuda_backend.cu:203-232
"the capture primitive", but BeginCapture starts at :206 and :203-205 is an
unrelated SupportsAsyncSampledTokenReadback override, so that row now cites
:206-222 and names BeginCapture, EndCapture and Replay.

LOW-3. Two prose slips beside otherwise correct anchors. Ltx2DitForwardDevice
takes `vt::Queue&`, not `vt::Backend&` (ltx2_device.cpp:1111, declared
ltx2_device.h:136); the backend is obtained inside via GetBackend at :1146. And
`grep -rl MaybeReleaseSourcePages src/vllm` returns 15 files of which one is the
defining safetensors_reader.cpp, so 14 others call it, one of those a header.

LOW-4. `OwnedBytes` "has no device field" cited qwen3_5_weights.h:47-56, which
is where an OwnedBytes is HELD (struct OwnedTensor). The type is defined at
owned_bytes.h:42, so a W4 implementer could not check the absence from the
anchor given. Both are now cited, with the grep that shows the count is 0.

Beside these, `## Port map` now discloses why they survived: no checker in this
tree reads a bare path.cpp:123 written in prose. check_links
(check-agent-record.py:862-886) parses markdown link targets and validates only
a #L<n> fragment, and check_spec (:1169) takes a ClaimRow, so its
structured-section requirement reaches only a spec linked from a matrix row and
this one is linked from none. Manual reading is the only check these anchors
receive, and the spec now says so beside its existing per-stage re-derivation
obligation.

docs/BENCHMARKS.md:494 is left as written: it was correct at 27d5432 and is
:495 at this head because of a merge inside this pull request, which is what the
"Base: 27d5432" contract exists to make checkable. Renumbering it to HEAD
would break that contract rather than honour it.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
Takes main so the committed range gates can report against an ancestor base, and
so the squashed shape does not revert main's newer commits.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
@localai-bot
localai-bot merged commit e399231 into main Aug 18, 2026
1 check failed
@localai-bot
localai-bot deleted the row/LTX25-DEVICE-RESIDENCY branch August 18, 2026 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

LTX-2.5 device residency: the spike ranked the levers but nothing stages them into landable work

2 participants