Skip to content

feat(LTX25-PHASE-RESIDUE): three phase anchors, held by position rather than by a tolerance (#1668) - #1888

Merged
localai-bot merged 6 commits into
mainfrom
row/LTX25-PHASE-RESIDUE-1668
Aug 25, 2026
Merged

feat(LTX25-PHASE-RESIDUE): three phase anchors, held by position rather than by a tolerance (#1668)#1888
localai-bot merged 6 commits into
mainfrom
row/LTX25-PHASE-RESIDUE-1668

Conversation

@localai-bot

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

Copy link
Copy Markdown
Collaborator

FOLLOWING_AGENTS_PROTOCOL

The LTX-2.5 phase table reported its residue as one number. #1711 landed the gap
decomposition that split it into the intervals between consecutive leaves, and
the largest regions it named had no anchors. This adds the three #1668 owes:
load.dit_config between load.dit and load.video_vae, artifacts.mux over
the result assembly and mux argv build after the last named leaf, and
denoise.update over the sampler's post-process and Euler step, counted by a
new Ltx2ConditioningTrace::sampler_updates. The fourth item #1668 listed,
Record::instrument_seconds, had already landed as be432e8e3 (#1711), so the
issue's own text is partly stale and this does not redo it.

Neither ratio moved, and nothing re-proposes the withdrawn bound

## Design 3 of the row's spec records that residue <= 2 * instrument went
red 4 times in 45 at the table bound and 28 in 160 on a standalone probe, and
that a 20-run sample of that quantity saw none of the tail that decided the
gate. Both wall-clock ratios stay exactly as they were: leaves >= 0.95 * wall,
kSpanSlackPerRecord = 0.03, min_coverage >= 0.5 and all three
denoise_min_coverage=0.75 call sites are byte-identical to base. The only
numeric edit in the tests is {0.0} becoming {0.0, 0.0}, which adds the
second part's entry rather than widening anything.

So the new gate carries no constant. CheckSeamAnchor asserts POSITIONS: the
anchor is emitted once, is not a span, is not nested, opens at or after its
predecessor's end, closes at or before its successor's start, and no other leaf
lies inside the window it claims. artifacts.mux has no successor, so its
far-side clause is the stronger one that nothing follows it — it is the last
leaf of its render. An anchor left open across the next leaf marks that leaf
nested and removes it from sum_leaf_seconds altogether, which is why closing
before the next open is the load-bearing part rather than tidiness.

denoise.update is held by the record count against a counter the RENDER
maintains, for the reason video_decode_chunks is: a denominator derived from
the phase table cannot falsify a phase table. It is nested on purpose, so the
sum does not move and only the decomposition of denoise gains a name.

sampler_updates agrees with dit_evaluations on the first-order arm, so that
arm cannot tell a real counter from an alias. The res_2s arm can, and is in the
gate for it: Ltx2Res2sDenoisingLoop never reaches this statement, so it counts
7 and 11 evaluations against zero updates.

What the gate does NOT prove, measured rather than assumed

A position is not a magnitude, and this is filed as #1884 by the change that
introduced the gate.
Collapse either anchor onto its own Close() — the shape
of a refactor that hoists work out from under an anchor — and the full suite
stays green at 102 of 102 cases. Every clause survives a zero-width window, the
containment one vacuously, because a window with no interior contains nothing.
It hands about 229 us back to the residue on a fixture whose whole residue is
about 1.2 ms, while the anchor that was meant to name it measures 16.5 us. The
(4b) gap gate cannot see it either, because the collapse splits one gap into
two and leaves their sum alone.

It is disclosed rather than closed, and the records say precisely what may not
close it: any floor whose denominator is the INSTRUMENT, the wall, or a
written-down number of seconds. Each of those asks how many seconds a seam
SHOULD hold, and ## Design 3 is the measured record that the honest answer is
a property of the box rather than of the tree.

That ban does not reach every magnitude clause, and the next traceable
hypothesis is named rather than left open: the anchor's own extent against the
SEAM its two neighbours define, both measured in the same run — near 1 honest,
near 0 collapsed, with the region being named as the denominator instead of the
instrument. It is recorded in the spec, the issue index and #1884 as a candidate
needing its own constant, its own cross-box distribution, its own red-first
measurement and its own fresh review.

This is the third appearance of one shape. test_ltx2_video already records the
first for decode.audio.mel, and #1568 is the second one level down.

Evidence

Red first, and captured: the anchors absent (emitted 0 time(s)), then the
counter at zero, then each assertion failing before it passed. Seven mutations,
each with its anchor asserted UNIQUE before it was applied, its application
verified by hash, its build's exit code checked, and the tree restored and
re-hashed byte-for-byte. Six are guarantees and all six red; the seventh is the
#1884 hole and is green by disclosure. The harness rejected three earlier
mutations of its own first — one non-unique anchor, one semantic no-op that read
green, one that did not compile — which is why it checks those things.

Reachability is proven by deleting each production call site in a tree that
still compiles: both red. The anchors sit in Ltx2VideoEngine::Load and
::Generate, which the loader path the gate uses, the C ABI and the server all
reach.

Not load-flaky, which is the property a structural gate should have and the
reason the instrument-relative bound was withdrawn: 8 runs of 8 green at loadavg
25.98 to 37.92, on one binary, while a second build saturated the box.

Three fresh reviews, each followed by a repair. The first falsified four claims
the tree made about itself — including the assertion that any wrong placement
fails outright, which is false for the placement that names nothing — and
reproduced the #1884 collapse on both anchors at once. The second found that
repair had replaced a correct citation with src/capi/vllm_c.cpp:1667, a blank
line, and that the prohibition protecting #1884 was worded so broadly it
forbade the candidate discriminator recorded beside it. The third found that
contradiction still standing in the ### M7 section that ## Stop conditions
cites as its authority, and in #1884's own forge body. All are repaired; nothing
in any repair changed an assertion.

What this does not do

#1567 and #1568 are UNBLOCKED and neither is closed. #1567 wants the res_2s
arm's anchor, which needs a hook rather than a statement and which no gate in
this tree renders, so landing it beside the first-order arm would land dead
code; the zero it reads is now asserted, so any hook that lands has a counter to
check against. #1568 wants the seconds-transfer gate; denoise.update's
part_min_coverage is 0.0 and the note beside it carries the measured reason
rather than a number, because the honest share and the transfer overlap and any
floor that reds one reds the other. #1439 stays open and is not touched.

The row still has no matrix row. Its spec said whoever landed #1668 would create
it; that is declined with a reason recorded in ## Now, because #1567, #1568,
#1570, #1572 and now #1884 are open under this spec, and a row announcing DONE
would contradict five of its own entries.

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

mudler added 6 commits August 24, 2026 22:24
…er than by a tolerance (#1668)

FOLLOWING_AGENTS_PROTOCOL

The LTX-2.5 phase table reported its residue as one number. #1711 landed the
gap decomposition that split it, and the largest regions it named had no
anchors. This adds the three: `load.dit_config` between `load.dit` and
`load.video_vae`, `artifacts.mux` over the result assembly and mux argv build
after the last named leaf, and `denoise.update` over the sampler's post-process
and Euler step, counted by `Ltx2ConditioningTrace::sampler_updates`.

Neither wall-clock ratio moved, and nothing here re-proposes `residue <= 2 *
instrument`. Three fresh reviews measured that bound and found a heavy right
tail; the spec's `## Design` 3 withdrew it, and a seam's honest share is a
property of the box, which is exactly why. So `CheckSeamAnchor` carries no
constant at all. It asserts positions: the anchor is emitted once, is not a
span, is not `nested`, opens at or after its predecessor's end, closes at or
before its successor's start, and no other leaf lies in the window it claims.
`artifacts.mux` has no successor, so its far-side clause is the stronger one
that nothing follows it. Under a correct placement every clause holds by
construction; under a wrong one at least one fails outright, whatever the clock
did, because a seam anchor left open across the next leaf marks that leaf
`nested` and removes it from `sum_leaf_seconds` entirely.

`denoise.update` is held by the record count against a counter the RENDER
maintains, for the reason `video_decode_chunks` is: a denominator derived from
the phase table cannot falsify a phase table. It is nested on purpose, so the
sum does not move and only the decomposition of `denoise` gains a name.

`sampler_updates` agrees with `dit_evaluations` on the first-order arm, so that
arm cannot tell a real counter from an alias. The res_2s arm can, and is in the
gate for it: `Ltx2Res2sDenoisingLoop` never reaches this statement, so it counts
7 and 11 evaluations against zero updates.

Six mutations, each with its anchor asserted unique before it was applied, its
application verified by hash, its build's exit code checked, and the tree
restored and re-hashed byte-for-byte: all six detected. The harness rejected
three of its own earlier mutations first -- one non-unique anchor, one semantic
no-op that read green, one that did not compile -- which is why it checks those
things. M5 and M6 delete the production call sites and leave a tree that still
compiles, so the gate is what notices; both anchors are reached through
`vllm_video_generate`, not by a test constructing a `phase::Scope`.

#1567 and #1568 are unblocked and neither is closed. #1567 wants the res_2s
arm's anchor, which needs a hook rather than a statement and which no gate in
this tree renders; the zero it reads is now asserted, so any hook that lands has
a counter to check against. #1568 wants the seconds-transfer gate;
`denoise.update`'s `part_min_coverage` is 0.0 and the note beside it carries the
measured reason rather than a number, because the honest share and the transfer
overlap and any floor that reds one reds the other.

The row still has no matrix row. Its spec said whoever landed #1668 would create
it; that is declined with a reason recorded in `## Now`, because #1567, #1568,
#1570 and #1572 are open under this spec and a row announcing `DONE` would
contradict four of its own entries.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
…tude, and M7 says so (#1884)

FOLLOWING_AGENTS_PROTOCOL

Filed against the gate the previous commit introduced, by the change that wrote
it. `CheckSeamAnchor` carries no constant on purpose, and mutating it shows what
that costs: close `artifacts.mux` immediately after opening it, drop the late
`Close()`, and the render's whole tail is un-named again while 796 of 796
assertions pass. Every clause survives a zero-width window, the containment one
vacuously, because a window with no interior contains nothing.

This is the third appearance of one shape. `test_ltx2_video` already records the
first for `decode.audio.mel` -- an anchor covering half its call passes 0.50 and
is not detected, and closing it needs a scope inside the callee -- and #1568 is
the second, one level down. So the entry says what must NOT close it: a share
floor on a seam is `residue <= 2 * instrument` with a different denominator, and
`## Design` 3 is the measured record of why that does not work.

Also records the load measurement the structural gate was built for: 8 runs of 8
green at loadavg 25.98 to 37.92, on one binary, while a second build saturated
the box. Stated as a lower bound rather than a distribution, because the same
section records that a 20-run sample of a scheduler-dependent quantity on this
table saw none of the tail that decided the gate. These assertions read order
and count, and neither has a tail.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
…#1668, #1884)

FOLLOWING_AGENTS_PROTOCOL

None of these changes an assertion. All four are claims the tree made about
itself that a fresh review measured and found wrong, and a comment that is wrong
is worse than no comment because a reader spends the effort trusting it.

The load-bearing one: the spec asserted that under a wrong placement at least
one clause of the seam gate fails outright. That is false for the placement that
matters most -- an anchor that names NOTHING. The review reproduced it on BOTH
anchors, not just the one that was filed, by moving each scope declaration onto
its own `Close()`, which is the shape of a refactor that hoists work out from
under an anchor rather than a contrived edit. Green on the full suite, 102 cases
and 4668 assertions, line-count preserving so the reader-anchor ledger is not
what fails. It hands about 229 us back to the residue on a fixture whose whole
residue is about 1.2 ms, while the anchor measures 16.5 us. The `(4b)` gap gate
cannot see it either, because the collapse splits one gap into two and leaves
their sum alone. Those numbers are now in the spec and on #1884, together with
the review's candidate discriminator -- the anchor's extent against the seam its
neighbours define, both in the same run -- recorded as the next traceable
hypothesis so the next attempt starts from it. It is a candidate, not a
conclusion, and it does not license a share floor against the instrument.

The second: `denoise` gaining a second part was said to make (1b) and (2b)
non-vacuous. Only (1b). Both of this leaf's floors are 0.0 and the (2b) loop
skips a 0.0 floor, so it executes zero checks here and `decode.audio` is still
the only leaf it asserts anything about.

The third: the reachability sentence named `vllm_video_generate`, but the case
that reds on the call-site deletions enters through `LoadVideoEngine` and
`VideoEngine::Generate`. Both satisfy `.agents/reachability.md`, and the C ABI
reaches the same `Ltx2VideoEngine::Generate` one frame up, so the substance held
and only the sentence pointed at a render that is in a different case.

The fourth: the driver quoted one magnitude per anchor as though it were a
property of the code. Measured on the box that landed them, `load.dit_config` is
0.109-0.127 ms against the 0.822 ms quoted, and `artifacts.mux` is 0.009-0.018
ms against 0.210 ms -- the same order as the instrument's own per-record charge,
so on that box the tail anchor is close to naming its own cost. Both boxes are
quoted now, and each says that no gate reads the number.

Also softens the spec's past tense: it described `main` while the change is on a
branch, and it becomes true at the squash.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
… and a prohibition that forbade its own successor (#1668, #1884)

FOLLOWING_AGENTS_PROTOCOL

Records only. A second fresh review, scoped to the previous repair, returned two
findings and four notes; no assertion changed and `src/` and `tests/` are
untouched by this commit.

The first is the sharper of the two. The previous commit set out to make a
reachability sentence precise, and in doing so replaced a correct citation with
`src/capi/vllm_c.cpp:1667`, which is a blank line. The entry point
`vllm_video_generate` is `:1623` and the `Ltx2VideoEngine::Generate` call is
`:1668`; both are now named, both read out of the file, and the sentence says
that an earlier draft of itself was wrong. Nothing in this tree gates a
citation, which is exactly why it has to be right in the file.

The second is a contradiction the previous commit created. It recorded a
candidate discriminator for #1884 -- the anchor's own extent against the seam
its two neighbours define -- while `## Stop conditions` and the #1884 `## Owed`
row both said, in words that read as covering it, not to close #1884 with a
share floor. The durable records pointed only at the prohibition, so a reader
arriving from `.agents/issue-index.md` would have met the ban and never the
candidate. Both are now narrowed to what they were always arguing: no floor
whose denominator is the INSTRUMENT, the wall, or a written-down number of
seconds, because that is the withdrawn bound renamed. The seam-extent ratio is
named in all three places as the one shape the prohibition does not cover, still
owing a constant and a cross-box distribution.

The notes: the #1668 `## Owed` row still said the anchors are on `main` while
the change is on a branch; the M7 mutation row credited only `artifacts.mux`
when the review reproduced the collapse on both anchors at once; a sentence
attributed to `.agents/reachability.md` a phrase it does not use; a full-suite
assertion total was quoted as though it were fixed when the seam clause moves it
between runs; and two inserted lines ran to 144 and 146 columns in an 80-column
file.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
…1884's own candidate, in the section cited as its authority (#1668, #1884)

FOLLOWING_AGENTS_PROTOCOL

Records only; `src/` and `tests/` are untouched. A third fresh review, scoped to
the previous records commit, found that its central repair was incomplete in the
place that mattered most.

That commit narrowed the prohibition protecting #1884 -- no floor whose
denominator is the instrument, the wall, or an absolute number of seconds -- in
three places, and added a pointer from `## Stop conditions` reading "One shape
is NOT covered by this prohibition, and `### M7` names it". `### M7` still
carried the unnarrowed sentence, five lines below the candidate it proposed, and
still gave THE DENOMINATOR as the disqualifier, which is the one axis on which
the candidate differs. So a reader following that pointer arrived at the
candidate and then read that it was banned. The section is rewritten to say what
the other three places say and to record that an earlier draft of itself did
not.

The same contradiction stood in #1884's forge body, which is where a future
implementer starts and which no commit here can reach. Edited on the forge:
the ban is now the family of three denominators, the seam-extent ratio is the
first of the three things that could close the issue rather than a thing the
issue forbids, and the revision says the earlier text over-reached.

`## Now` counted four open entries under this spec and there are five, because
this branch appended #1884 to `## Owed` and did not update the count beside it.

Also drops a line range this spec quoted for a comment on `main`. It sat at
:4324-4331 when it was written and is at :4408 on this head, and the paragraph
arguing that nothing in this tree gates a citation is four lines away from it.
Pre-existing rather than caused here, and repaired because it is the same defect
the review had just found twice.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
…omputing the reader anchors

`main` advanced while this pull request's checks settled, and #1882 landed in
`src/vllm/multimodal/ltx2_video.cpp`, so this branch conflicted there as well as
on the issue index.

The source conflict is the READER ANCHORS list, and BOTH SIDES ARE WRONG. Each
side had updated the line numbers for its own edit, and the merged file matches
neither:

  ours   930 940 941 1027 1123 1139 1205 1209 1312 1374 1482 1524 1566 1568
  theirs 930 940 941 1012 1108 1124 1213 1217 1310 1372 1480 1522 1564 1566
  merged 930 940 941 1027 1123 1139 1228 1232 1335 1397 1505 1547 1589 1591

Taking either side would have shipped stale anchors, which is the defect the
comment above the list already records: an earlier hand-written set "named nine
lines that were readers of NOTHING, in this very file, and a later merge moved
the real ones again". Checked rather than assumed: at the merged line numbers,
our `1205` lands inside #1882's refusal string literal and our `1568` on a `for`
loop, while the recomputed anchors each land on a `VideoExtra(params.extras,
...)` reader.

So the list was DERIVED from the merged file by replicating the algorithm in
`test_ltx2_video`'s "the recorded reader anchors are the ones in the source" case
-- locate the unique `kKnownLoadExtras[]` declaration, take the first line at or
after its closing brace that mentions each of the fourteen served tokens, sort --
rather than chosen from a side. Five of the fourteen were spot-checked against
the source text.

`.agents/issue-index.md` resolved by AGENTS.md's keyed-record rule: main's
complete version, then this branch's row re-appended. 695 rows, 695 distinct, 0
duplicates, `#1884` last, and sha256 of main's whole file equal to sha256 of this
file minus its last line.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
@localai-bot
localai-bot merged commit ced0ab6 into main Aug 25, 2026
3 of 17 checks passed
@localai-bot
localai-bot deleted the row/LTX25-PHASE-RESIDUE-1668 branch August 25, 2026 07:50
localai-bot added a commit that referenced this pull request Aug 25, 2026
…ate, and #1567's blocker was never true (#1668, #1567, #1568, #1884)

FOLLOWING_AGENTS_PROTOCOL

`ced0ab639` landed the three anchors #1668 owed and left three siblings open. This
re-checks all four against the tree rather than against the record, closes the one
that is genuinely done, and measures the discriminator the row named as its next
step. No product code, no test code and no assertion changes: the gate is
byte-identical to `ced0ab639`.

## #1668 is closed, item by item

All four items are on `origin/main` and gated. `load.dit_config` at
`ltx2_video.cpp:979`, `artifacts.mux` at `:5440`, `denoise.update` at `:4576`,
`Ltx2ConditioningTrace::sampler_updates` at `:4577` and `ltx2_video.h:920`.
`Record::instrument_seconds` is at `render_phase_log.h:70` and landed as
`be432e8e3` (#1711), so the issue's own text is stale on that item.

Its scope note also asked that `denoise.update` reach "the phase names published in
`docs/models/ltx-2-5.md`". That document publishes no phase names -- a grep for a
leaf name over `docs/` returns MiniMax-Music3 and MiniMax-H3 rows only -- so the
obligation is void rather than skipped. Checked because a scope note is where an
owed edit hides.

## The seam-extent ratio is measured, and it is shut

`### M7`, `## Stop conditions` and #1884 all named one non-banned candidate for the
magnitude hole: the anchor's own extent against the seam its two neighbours define,
"near 1 honest, near 0 collapsed". It was measured before it was adopted, 67 honest
runs against 25 collapsed, one box and one binary pair, loadavg 39 to 84.

For `artifacts.mux` the collapsed range [0.1414, 0.4766] lies entirely INSIDE the
honest range [0.0156, 0.8779], so no constant separates them at all -- and in each
load regime separately, 11 honest reds in 44 quieter runs and 15 in 90 busier ones,
so the overlap is a property of the anchor and not of the box. For
`load.dit_config` a constant in (0.2122, 0.7187] catches every collapse and reds 2
of 67 honest renders, 0 of 22 quieter and 2 of 45 busier -- contention, and the
same order as the 4-in-45 that withdrew `residue <= 2 * instrument`.

The premise fails too, and without any tail: `artifacts.mux`'s honest MEDIAN extent
is 0.5977, because that anchor has a median duration of 14.5 us against a median
`instrument_seconds` of 7.0 us, and per record `instrument_seconds / duration` runs
0.394 to 0.997 with a median of 0.495. Half of what that anchor measures is this
instrument's own charge inside it.

The mechanism is the withdrawn bound's mechanism, visible in the table. The honest
outliers are ordinary anchors beside a preempted instrument boundary: a 234 us
`load.dit_config` beside a 3473 us gap, a 39 us `artifacts.mux` beside a 2446 us
gap, where both gaps are one `Close` stamp followed by one `Open` stamp and are
~3 us on a quiet run. `## Design` 3 already says the un-instrumented remainder of a
boundary dilates faster than the instrumented part under contention; the seam-extent
ratio puts that remainder in its denominator, so it inherits the same tail. It asks
a different QUESTION than the withdrawn bound and is conditioned on the same
QUANTITY, and the conditioning is what decided the earlier one.

Nothing is re-proposed and nothing is widened. The record now says to ask of any
successor what its denominator dilates with, not only what it means.

## ...and what the same data says to try next

A fresh review mutated that CONCLUSION rather than only checking its arithmetic,
and narrowed it: the negative result belongs to the DEFINITION, not to the family.
Subtract the record's own `instrument_seconds` from the numerator and
`net / (net + gap_after)` separates `load.dit_config` by two orders of magnitude
with 0 honest reds in 67, and leaves `artifacts.mux` with 1 in 134. That one red is
named rather than averaged away: `h2-38` render 2, where the anchor's whole 2968.0
us extent was its own 2957.8 us instrument charge, which is the same mechanism one
level in. One measurement, not a conclusion -- it still owes its own constant,
cross-box distribution, red-first mutation and fresh review, which is what #1884
asks of any candidate. Recorded so the next attempt starts from the definition that
worked rather than from the one that did not.

## #1567's recorded blocker was never true

Both the spec and the forge issue said no gate in this tree renders the res_2s arm,
so an anchor beside the first-order one would land dead. One command falsifies it.
`test_ltx2_video -tc="ltx2 video: the HQ pipeline evaluates the DiT twice per step"`
renders `res2s_two_stage` four times through `LoadVideoEngine` and
`VideoEngine::Generate`, and leaves `hq3/phase-log.json` and `hq5/phase-log.json`
carrying a `denoise` leaf and 7 and 11 `denoise.step` records -- the loop's own
2n+1 evaluation counts -- and no `denoise.update`. The instrument is already live
inside that loop and the arm already writes a table a gate can read. That case has
existed since `4d7748646` (#1125), which predates the issue, so the claim was never
true of any tree. #1567 stays open; what it owes is the hook and the assertion.

The same false sentence was also in the product tree, in the comment at
`test_ltx2_video.cpp:9079-9081` inside the very case that falsifies it. It is
corrected here in the same flow, because a record correction that leaves the false
sentence where a reader will meet it has repaired nothing. That comment is the only
edit outside `.agents/`; it changes no assertion and the suite is green at 105 of
105 cases either side of it. The forge issue body still carries the claim and is
answered by a comment rather than rewritten.

## #1568 stays open, and its own mutation says so

Mutation `T1`, the empty-sibling form of the issue's `R1b`: `denoise.update`
collapsed onto its own `Close()` at the same statement, line-count preserving, so
the record is still emitted once per step and still sits between two `denoise.step`
records while naming ~0 s. Focused case green 5 runs of 5. The anchor was
asserted unique before it was applied, the application was verified by hash, the
build exit code was read, and the tree was restored byte-for-byte and re-hashed. A
fresh review reproduced it independently at 3 of 3, after checking that the mutated
BINARY differed by hash from the unmutated one -- its first attempt built in a
copied tree whose `build/` was bound to the original path, exited 0 on
`ninja: no work to do`, and would have read as a pass.

## #1884 stays open

M7 reproduces here: both anchors collapsed onto their own `Close()`, line-count
preserving, green in 24 of 25 focused runs. The one red is `decode.audio`'s
coverage floor, which is the #1470 flake class and not an anchor clause. What
remains for it is the other repair the row already names -- an anchor inside the
callee -- because a position clause cannot bound a magnitude, so no further clause
on `CheckSeamAnchor` closes it. A MAGNITUDE clause there is not forbidden, and an
earlier draft of this change said it was; that non-sequitur is what the review
caught.

#1570 is CLOSED, by `be432e8e3` on 2026-08-23. Three passages written by this
change treated it as outstanding and are corrected, and `## Now`'s count of five
open issues under this spec is corrected to four.

Restored tree green: 105 of 105 cases, 4721 assertions.

## Issues

Closes #1668. #1567, #1568 and #1884 stay OPEN and each says what it still owes;
none of them is closed here, and none was closed because a neighbour landed.

## Review

One fresh review by an agent that did not write the change. It confirmed the
anchors, the doc check, the #1567 falsification, the T1 mutation and every cell of
the measurement table from its own extractor, and returned eight findings. All
eight are repaired above: the res_2s render count, the "no further clause closes
this" non-sequitur, #1570's forge state, the far-side citation, the mux magnitude
ranges, the k-interval endpoint, the un-matched load regimes, and the false comment
left in the product tree. The review's own process note is worth carrying: its
first mutation attempt read as a pass because the copied tree's `build/` was bound
to the original path and ninja had no work to do.

## Authority

NO merge authority is recorded for this row in `.agents/developer-preferences.md`.
The 2026-08-25 LTX-2.5 close-out grant is scoped to #1873, #1869, #1882, #1871 and
#1888 "and to no others". This pull request is prepared and not merged.

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
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.

2 participants