spec(LTX25-DEVICE-RESIDENCY): the levers were ranked and nothing staged them, so the instrument is stage zero (#1264) - #1271
Merged
Conversation
…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]
… 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]
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.
ltx25-decode-speed.mdis aSPIKEthat ranked the LTX-2.5 device-residencylevers, 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.mdisREADYwith the nine structuredsections and a
## Now. It stages fourteen issues into W0-W7 plus a paralleloracle 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.logare ona host that stopped answering, and the spike marks even its passing numbers
REMOTE_UNVERIFIED). The subject is unnamed (#1087 measures a 1731 s phase andsays 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 profilethe ranking describes is not the profile in this tree. W1 is therefore an
explicit gate on the order itself, and
## Nowis amended with the re-derivedorder before W2 starts — unless W1 itself reports
BLOCKED, in which case W2 andW3 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:847selectsLtx2StreamDitToDeviceand:3864-3866selectsLtx2DitForwardDevice, whichcalls
CheckWeightsResidentatltx2_device.cpp:1144and drives 48 blocks ofdevice 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.
Ltx2StreamDitToDevicerefuseswiden_to_f32by name (ltx2_loader.cpp:759-765) and keeps one host buffer liveper tensor, so the double-hold at
:739-754is a host-arm defect. It stays earlybecause 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,:4638hard-code a CPUqueue,
ltx2_text_encoder.cpp:446hard-codes a second one inside the extractor,and
Gemma4WeightsisOwnedTensoroverOwnedByteswith no device field.LTX25-TEXT-LINEAR-SEAMfound it, wrote "it needs its own issue", and filednone.
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
/mntand root overlay againstCOS_PERSISTENT/usr/local, therclease, and the lease that carries bytes rather thanexecutables. No
docs/STATUS.mdordocs/BENCHMARKS.mdedit is owed: nocapability changes lifecycle state and no measurement is taken. No matrix row and
no claim file, argued in
## Risks/decisions—check-agent-record.pybuildsits row-ID pattern from prefixes that admit no
LTX25-id, so such a row wouldbe one no checker reads inside a file every future edit must write. The one
matrix cell this campaign genuinely invalidates is updated:
ENG-CUDAGRAPH-DIFFUSIONnow 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.pyandcheck-commit-trailers.pypass. The record checker's green is weak evidenceabout this spec, and the spec now says why:
check_spectakes aClaimRow, soits 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:123written in prose either —check_linksvalidates markdown linktargets and
#L<n>fragments only. A person reading them is the wholeinstrument, which
## Port mapnow discloses beside its per-stagere-derivation obligation.
Applied from the fresh review
The review returned
PASSwith four LOW findings, all text inside the spec, allapplied on this branch. The central gate admitted two readings —
## Nowsaidthe order is re-derived before W2 unconditionally while
## Riskslet aBLOCKEDW1 proceed with no amendment — and both sections now carry the samestop 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 withgrep -n:CheckWeightsResidentis:1144not:1145, the bf16 buffer push is:729not:728, the f32 push is:752not:753, andLtx2RebindDitLorasruns
:808-912not:806-830; the W7 row's capture primitive starts atcuda_backend.cu:206, not:203. Two prose slips beside correct anchors:Ltx2DitForwardDevicetakesvt::Queue&, notvt::Backend&, and 14 otherfiles call
MaybeReleaseSourcePages, not 15. AndOwnedBytes"has no devicefield" now cites
owned_bytes.h:42, where the type is defined, beside theqwen3_5_weights.h:47-56that only holds one.The issues this row stages
The thirteen
ltx25-decode-speed.mdowns under## Owed, plus #1269 which thisrow filed:
Closes #1264.
FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]