Skip to content

feat(ENG-EXPERT-STREAM-DEVICE): W0f — the dense weights were resident twice, and --device cuda now decodes a 369.97 GiB checkpoint on a 119.631 GiB GB10 (#1299) - #1427

Merged
localai-bot merged 6 commits into
mainfrom
row/ENG-EXPERT-STREAM-DEVICE-W0F-ON-MAIN
Aug 20, 2026
Merged

Conversation

@localai-bot

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

Copy link
Copy Markdown
Collaborator

Replaces #1326. That pull request is correct and reviewed, and its base is gone:
it was stacked on row/ENG-EXPERT-STREAM-DEVICE-W0 at 95883dcae, and #1377
squash-landed the same W0 work onto main as 5f4eb356e. A squash destroys the
merge base, so #1326 now presents product-code conflicts that are two unrelated
histories describing one change rather than a disagreement. This branch is that
same change rebuilt on main, with every one of main's later repairs kept.

What the defect was

With W0's lane on, Qwen3.8-2.4T-A95B UD-Q1_0 (369.97 GiB) LOADED on
--device cuda on a 119.631 GiB GB10 and then exhausted the machine inside its
first forward: zero decode steps, seven attempts, every one identical (#1299).

The measurements name it rather than a reading of the code. A 0.15 GiB slot
arena died exactly where an 18.55 GiB one did, so the arena is not the cost. A
1-token prompt, whose protected set fits with no in-place fallback at all,
behaved identically to a 5-token one, so prefill protection is not it. Growth was
ANONYMOUS (RssAnon 8.1 to 61.4 GB) while file-backed stayed flat, so nothing
was pinning the mapping. Host anon plus swap reached ~65 GB against system used
~119 GB, and the ~42 GB difference is device memory that unified memory does not
charge to RSS.

So every non-expert weight was resident twice: once as the host OwnedTensor,
once as ResidentWeight's device staging copy. On a part where device memory IS
host memory, the second copy buys nothing and costs everything.

The change

ResidentWeight now takes the same branch W0c gave KqExpertSlice, on the same
probed predicate: where Platform::host_memory_is_device_addressable(), it
returns a tensor over w.bytes.data() instead of Alloc + Copy into
w.d_dev. A DISCRETE device answers false, falls through, and is byte-identical
to before, asserted by its own case rather than by inspection.

Safety is by alignment, not by surveying kernels. The staging branch is a
verbatim byte copy returning the same dtype, shape and dropped marker set, so the
only thing a consumer can notice about the substitution is the pointer's
alignment. kDeviceAliasAlignment is 256 because cuBLASLt's
CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_A_BYTES defaults to 256 and this tree never
sets it, which dominates every explicit pointer gate in the CUDA kernels -- at
least seven across four files, the strictest asking 32. A plain
std::vector<uint8_t> gives 16 and no more, so MakeHostBytesDeviceAliasable
re-homes an OWNED misaligned buffer once into an aligned block: one memcpy that
REPLACES the host-to-device copy it removes. A misaligned BORROW declines and
stages instead, because copying a clean file-backed GGUF mapping into anonymous
memory would create the residency this change exists to remove.

Three fresh-review findings and one defect found in flow ride with it, each with
its own red-first case: MoeBlockBf16Cuda released host mirrors the aliased
device pointer table still pointed at, so the release now asks
HostMirrorIsRedundant; the dense release guarded on d_dev || d_dev_f32, and
d_dev_f32 is an f32 UPCAST that can never stand in for the raw bytes; the
no host bytes refusal fired ABOVE the device-copy memo and turned an
always-served case into a throw; an already-aligned direct-upload borrow re-ran
issue #150's madvise(MADV_DONTNEED) on every forward step; and #1320's
i8mm-repack tripwire was missing on both arms of ResidentWeight.

The result, and the gate that does not pass

It decodes. 32/32 steps, peak RSS 97.75 GiB, decode-phase exhausted delta 0
(G0-LIVE PASS). G0-CORRECT FAILS: the CUDA ids diverge from the CPU arm at step 7
on a near-tie, where the CPU arm's own runner-up is exactly the token CUDA
emitted, 1.4% behind, and one step later the margin is 0.1%. G0-SPEED is
therefore VOID by this row's own stop condition and no rate is claimed
anywhere
.

Can the alias move a logit? Measured on the target silicon, and no

The probe compares what a consumer can actually see. rc job
7c7a05e9-be87-48f4-94ae-1bbe0340f063 on dgx:gpu0 -- NVIDIA GB10 sm_121,
driver 580.173.02, cuBLASLt 130101, the predicate re-derived in the job's own
output as pageableMemoryAccess=1 integrated=1 -- ran six checkpoint shapes
crossed with both cuBLASLt formulations the dense path issues, 12 measurements,
PROBE_EXIT=0, PROBE_FAILURES=0. A repeated heuristic call is identical 12/12;
the tree's unset preference equals the documented 256 default 12/12; weakening
the promise to 16 moves nothing 12/12; and cublasLtMatmul output is bit-exact
between a cudaMalloc operand and a 256-aligned host block 12/12, differing=0.
At least five distinct algorithm configurations appear across the twelve and they
differ from the earlier thor:gpu0 leg's, so the heuristic was re-resolved rather
than replayed and the instrument discriminates.

The structural reason needs no lease: cublasLtMatmulAlgoGetHeuristic takes no
operand pointers, so alignment reaches it only through a preference this tree
never sets.

So the alias does not cause the step-7 divergence. Excluding one cause is not
identifying another. What DOES cause it is unmeasured, and it is carried under
## Owed with its next traceable step named: a two-arm dump of the step-7
forward that names the first differing tensor.

What main already had, and what this rebuild kept

Every repair #1377 and #1378 landed survives, unmodified. None of the files
carrying them is in this diff:

  • GgufExpertTowersReachSlotLane, the fifth lane term, in
    gguf_device_fit.{h,cpp} and read by the loader.
  • PeekRoute promoted into
    include/vllm/model_executor/model_loader/gguf_keep_quant.h.
  • HostMemoryIsDeviceAddressableFromAttrs extracted into
    src/vllm/platforms/platform.cpp and gated over all four attribute pairs.

Their gates are green with W0f in the tree, which is the live evidence rather
than an inspection: test_gguf_device_fit 17 cases / 130 assertions,
test_gguf_device_fit_reach 14 / 66, test_platform 14 / 114.

Two more of main's repairs are inside files this branch does touch, and both
are kept: the HostAddressable RAII guard in
test_expert_stream_device_slot.cpp (the one conflicting case now uses it,
including for its discrete arm, instead of writing the flag directly), and
docs/USAGE.md's limit list, which grows from four limits to six rather than
back to two, keeping the model-family bullet and the keep-quant OR keep-f16
residency bullet.

#1414 then landed the W0e measurement while this branch was gating. Its facts are
carried, not overwritten: the CPU arm's 11.05 s/token at 4000 slots on a live
cache is the standing figure and the 4000-slot count is what both recipes set,
and the 8000-slot slowdown keeps main's attribution -- the extra 9.27 GiB of
arena takes the free memory the borrowed 370 GiB mapping is served out of, which
is the page cache rather than an arena that fails to fit.

Records, and one union-merge duplicate

docs/STATUS.md, docs/BENCHMARKS.md and docs/FEATURES.md take one scoped row
edit each; every other key is byte-for-byte unchanged.
.agents/benchmark-record.md is a pure append of 208 lines with 0 deletions, and
it now carries TWO sections rather than one merged one, because #1414's run and
this one are different trees: 95883dcae (loads, generates nothing) and
9c783a8be (32/32 steps). The spec's ## Evidence mirrors that split, and each
side says which figures are its own and which must not be mixed.

.agents/issue-index.md appends one row (#1320). It appended two, and the second
was the union-merge duplicate AGENTS.md warns about: #1414 appended a #1299
row on main and this branch appended its own, and merge=union kept both without
a conflict. scripts/check-agent-record.py caught it. Main's row is kept
byte-for-byte and this branch's is dropped, which is the only resolution the
append-only rule allows.

Two record edits are consequences of this change rather than part of it, named so
a reviewer does not have to work out why they are in the diff. Adding 198 lines to
qwen3_5_weights.h moved struct Fp8Weight from line 342 to line 540, which
scripts/check-agent-record.py reported as a stale-anchor regression (33 against
a baseline of 32); the three citations of it are repointed, in
.agents/quantization-matrix.md (both the text and the #L fragment, which is
the one the checker reads) and in two specs. And appending a measurement to
.agents/benchmark-record.md obliges docs/FEATURES.md under
scripts/check-doc-checkpoint.py, so the routed-expert-streaming row now says the
staging device decodes and that its token gate fails. That is #1387's shape,
caught before the commit was published rather than after.

The fresh review returned FAIL, and this is the repair

Five findings, four of them in the record rather than in the product code, which
survived eleven of twelve mutations and is unchanged apart from one comment.

The alignment constant had no gate (MEDIUM). kDeviceAliasAlignment was 256
and every assertion about it in the tree is written
% vllm::kDeviceAliasAlignment == 0, which is a tautology in the constant. The
review lowered it to 16 and the whole suite reported SUCCESS at exit 0 -- the
promise this change's entire safety argument rests on could be deleted with no
gate saying so. That argument is that cuBLASLt is PROMISED 256:
CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_A_BYTES defaults to 256 and this tree never
overrides it, with grep -rn MIN_ALIGNMENT src/vt/ empty against a positive
control on CUBLASLT_MATMUL_PREF_MAX_WORKSPACE_BYTES in the same file. A case in
test_resident_weight_host_addressable.cpp now pins the literal.

RED-FIRST, and re-taken on the pushed head ac5e1ad8f. Before the case, the
constant at 16 left every one of the eight suites GREEN at exit 0 with identical
counts -- the reviewer's mutation 5 reproduced exactly. With the case, the same
mutation gives compile rc 0, git diff --stat 1 file / 1 insertion / 1 deletion,
test cases: 13 | 12 passed | 1 failed, Status: FAILURE!, exit 1. Restored
byte-for-byte by sha256 (7f1d10b8...), rebuilt, 13 cases / 72 assertions /
SUCCESS! / exit 0. The reviewer's mutation to 24 still reds with its original
std::bad_alloc and SIGABRT intact beside the new failure -- exit 134, 5 cases
failed while the assertions: line read 1 failed of 16, which is why the
Status: line is what was read. The pin masks nothing, and the existing %
assertions stay because they check the buffers.

The header stated two things that were false (MEDIUM). Its rationale block
said this row's CUDA-versus-CPU token divergence IS the two arms' GEMM
arithmetic, which the spec explicitly forbids asserting, and said the GB10 leg is
owed when the spec and .agents/benchmark-record.md both record it as RAN. The
block now says what the probe established -- the alias is EXCLUDED as the cause,
on the target silicon -- and says plainly that the cause is not identified.

Three public projections had carried that same error outward, so the correction
does not stop at the header. docs/BENCHMARKS.md and docs/STATUS.md both read
"G0-CORRECT FAIL on a near-tie ... not the alias"; both now say the cause is NOT
identified, in fewer characters than before. docs/USAGE.md said it hardest, in
a user-facing document: "the divergence is a measured near-tie rather than a
disagreement about the model" and "the two arms run genuinely different GEMM
kernels". What is measured there is the MARGIN, and that is what it now says.

The disowned ratio is deleted rather than restated (LOW). It was correctly
labelled VOID and not claimed, and no rate reaches any public document. But
digits survive a copy-paste and a disclaimer does not, and this repository has
watched a disowned number become a quoted one. Both medians stay in the table, so
anyone entitled to the quotient can divide; what is gone is the pre-computed
string. docs/FEATURES.md gets back "not throughput", which stops a reader
treating the lane as a speed feature and which survives in docs/USAGE.md.

One anchor went stale inside this pull request. The rewritten rationale block
adds 23 net lines above struct Fp8Weight, and check-agent-record.py caught
qwen3_5_weights.h:540 going stale, 33 against a baseline of 32. The anchor is
repaired, never the baseline: the struct moved 540 -> 563, and
sed -n '540,553p' before and sed -n '563,576p' after hash identically
(9f809a38...), so the shift maps the cited range byte for byte rather than
being re-derived by eye. Two prose citations the checker does not scan are
corrected with it. ANCHOR-ROT is back to 38.

NOT REACHED, and named here as ## Nothing lands dead requires

No CI gate reaches the alias branch through a production entry point.
test_expert_stream_wiring enters Qwen3_5Model::Forward and the reachability
mutation reds it, but it runs on the CPU device, where ResidentWeight returns
at the is_cpu() early return about ninety lines above the alias branch. In CI
the branch is reached only through detail::StageWeightForTest, a test-only
seam.

This is deliberate rather than an oversight. The branch is selected by
needs_weight_staging() && host_memory_is_device_addressable(), and no CPU tier
can register a platform that answers both -- exactly one machine this project can
reach does. The device evidence is real and is the stronger of the two: the W0e
run entered the branch 43,501 times through Qwen3_5Model::Forward on
dgx:gpu0. It is simply not repeatable in CI, and closing it needs either a GPU
CI lane on a probed-capable part or a production entry point a fake staging
platform can drive end to end.

The disclosure was in the spec and in neither the pull request body nor any
commit body. Because this repository sets squash_merge_commit_message = PR_BODY, this body IS the landed commit message, so a disclosure absent from it
is a disclosure that does not land.

origin/main merged, and the two keyed records resolved BY KEY

GitHub reported this pull request CONFLICTING while git merge-tree read clean
locally, which is the forge ignoring the merge=union driver on the append-only
.agents/issue-index.md. Materialising the merge here clears it.

origin/main moved TWICE during this repair, so there are two merges:
63d87805c (#1399) and then 7f9c6802e (#1436, #1428), which landed while the
gate was running. Both are clean, and both had their keyed records verified by
key rather than taken on the driver's word.

.agents/issue-index.md is the exact union at each step, ending at 454 rows with
every one of this branch's 452 and every one of main's 453 present, no extra row
and no duplicate; main's #1396 and #1411 rows arrive and this branch's #1320 row
stays. Eight files were co-edited across the two merges --
include/vllm/model_executor/models/qwen3_5_weights.h,
src/vllm/model_executor/models/qwen3_5_dense_weights.cpp,
.agents/specs/qwen38-27b-quant-arms.md, tests/CMakeLists.txt and the four
public pages -- and each line main added was checked line by line to be present
in the merged file: all are, and all five of this branch's edits in those pages
survive. The one line either merge drops relative to main is this branch's own
W0f change at 9c30dfe7d. struct Fp8Weight is still at
qwen3_5_weights.h:563, so the repaired anchor is still correct after both.

check-agent-record.py was re-run AFTER each merge, not before, because a shared
summary counter byte-identical on both sides merges without a conflict while both
row changes apply.

Conflict markers were checked with git grep under a positive control, because
four record checkers return 0 on a file that contains them (#1417).

Gate

Re-taken on the pushed head f423df992, from a FRESH build directory rather
than incrementally, because the second merge brought main's source in and an
incremental build masks -Werror. Clean-configure plus full build, CMAKE_RC=0
and BUILD_RC=0 read from the unpiped commands, 0 warnings, and
grep -c 'No space left on device' = 0 on every log with 61 GB free -- stated
because this box has hit 100% during a run of this row and an ENOSPC presents as
a code verdict rather than as infrastructure. Eight focused suites, each with a
non-zero case count and an explicit Status: SUCCESS!:

Suite cases assertions exit
test_expert_stream_device_slot 5 45 0
test_resident_weight_host_addressable 13 72 0
test_load_direct_upload 16 203 0
test_expert_stream_wiring 4 882 0
test_gguf_device_fit 17 130 0
test_gguf_device_fit_reach 14 66 0
test_platform 14 114 0
test_gguf_keep_quant 39 6093 0

check-agent-record.py, check-public-doc-tables.py,
check-issue-index-append-only.py and check-doc-checkpoint.py all exit 0, run
from this worktree's own scripts/ copy because a checker resolves its root from
its own path.

A full ctest on the pre-merge head was 561 of 564, with three failures none of
which is this change: test_qwen3_5_decode_graph_seam SEGFAULTs on main itself
(#1403), test_nemotron_h_paged_forward throws
No valid attention backend for device type 0, and test_qwen3_5_moe_vision
failed under parallel load with safetensors: empty file on a fixed /tmp path
while the disk was full, then passed 7 of 7 serially. test_cpu_x86_llamacpp_floor
is not registered in this tree, so there is nothing to re-run for it.

Issue: #1299
Row issue: #1124
Tripwire filed and covered in flow: #1320
Spec: .agents/specs/expert-stream-device-slots.md

#1124, #1299 and #1320 all stay OPEN: the row is not finished, the correctness
gate does not pass, and #1320's loader-policy half belongs to
QUANT-GGUF-KEEPQ-LOADER. Do not merge this before a fresh review, and note that
CI cannot give a verdict on this repository right now -- every completed workflow
run is cancelled (#1285), so treat it as REMOTE_UNVERIFIED and never as green.

FOLLOWING_AGENTS_PROTOCOL

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

mudler added 6 commits August 19, 2026 22:46
… twice, and `--device cuda` now decodes a 369.97 GiB checkpoint on a 119.631 GiB GB10 (#1299)

Replaces #1326. That pull request is correct and reviewed, and its base is gone:
it was stacked on `row/ENG-EXPERT-STREAM-DEVICE-W0` at `95883dcae`, and #1377
squash-landed the same W0 work onto `main` as `5f4eb356e`. A squash destroys the
merge base, so #1326 now presents product-code conflicts that are two unrelated
histories describing one change rather than a disagreement. This branch is that
same change rebuilt on `main`, with every one of `main`'s later repairs kept.

## What the defect was

With W0's lane on, `Qwen3.8-2.4T-A95B UD-Q1_0` (369.97 GiB) LOADED on
`--device cuda` on a 119.631 GiB GB10 and then exhausted the machine inside its
first forward: zero decode steps, seven attempts, every one identical (#1299).

The measurements name it rather than a reading of the code. A **0.15 GiB** slot
arena died exactly where an 18.55 GiB one did, so the arena is not the cost. A
1-token prompt, whose protected set fits with no in-place fallback at all,
behaved identically to a 5-token one, so prefill protection is not it. Growth was
ANONYMOUS (`RssAnon` 8.1 to 61.4 GB) while file-backed stayed flat, so nothing
was pinning the mapping. Host anon plus swap reached ~65 GB against system `used`
~119 GB, and the ~42 GB difference is device memory that unified memory does not
charge to RSS.

So every non-expert weight was resident twice: once as the host `OwnedTensor`,
once as `ResidentWeight`'s device staging copy. On a part where device memory IS
host memory, the second copy buys nothing and costs everything.

## The change

`ResidentWeight` now takes the same branch W0c gave `KqExpertSlice`, on the same
probed predicate: where `Platform::host_memory_is_device_addressable()`, it
returns a tensor over `w.bytes.data()` instead of `Alloc` + `Copy` into
`w.d_dev`. A DISCRETE device answers false, falls through, and is byte-identical
to before, asserted by its own case rather than by inspection.

Safety is by alignment, not by surveying kernels. The staging branch is a
verbatim byte copy returning the same dtype, shape and dropped marker set, so the
only thing a consumer can notice about the substitution is the pointer's
alignment. `kDeviceAliasAlignment` is 256 because cuBLASLt's
`CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_A_BYTES` defaults to 256 and this tree never
sets it, which dominates every explicit pointer gate in the CUDA kernels — at
least seven across four files, the strictest asking 32. A plain
`std::vector<uint8_t>` gives 16 and no more, so `MakeHostBytesDeviceAliasable`
re-homes an OWNED misaligned buffer once into an aligned block: one memcpy that
REPLACES the host-to-device copy it removes. A misaligned BORROW declines and
stages instead, because copying a clean file-backed GGUF mapping into anonymous
memory would create the residency this change exists to remove.

## The result, and the gate that does not pass

It decodes. **32/32 steps, peak RSS 97.75 GiB, decode-phase `exhausted` delta 0**
(G0-LIVE PASS). G0-CORRECT FAILS: the CUDA ids diverge from the CPU arm at step 7
on a near-tie, where the CPU arm's own runner-up is exactly the token CUDA
emitted, 1.4% behind, and one step later the margin is 0.1%. G0-SPEED is
therefore VOID by this row's own stop condition and **no rate is claimed
anywhere**.

## Can the alias move a logit? Measured on the target silicon, and no

The probe compares what a consumer can actually see. `rc` job
`7c7a05e9-be87-48f4-94ae-1bbe0340f063` on `dgx:gpu0` — `NVIDIA GB10 sm_121`,
driver 580.173.02, cuBLASLt 130101, the predicate re-derived in the job's own
output as `pageableMemoryAccess=1 integrated=1` — ran six checkpoint shapes
crossed with both cuBLASLt formulations the dense path issues, 12 measurements,
`PROBE_EXIT=0`, `PROBE_FAILURES=0`. A repeated heuristic call is identical 12/12;
the tree's unset preference equals the documented 256 default 12/12; weakening
the promise to 16 moves nothing 12/12; and `cublasLtMatmul` output is bit-exact
between a `cudaMalloc` operand and a 256-aligned host block 12/12, `differing=0`.
At least five distinct algorithm configurations appear across the twelve and they
differ from the earlier `thor:gpu0` leg's, so the heuristic was re-resolved rather
than replayed and the instrument discriminates.

The structural reason needs no lease: `cublasLtMatmulAlgoGetHeuristic` takes no
operand pointers, so alignment reaches it only through a preference this tree
never sets.

**So the alias does not cause the step-7 divergence.** Excluding one cause is not
identifying another. What DOES cause it is unmeasured, and it is carried under
`## Owed` with its next traceable step named: a two-arm dump of the step-7
forward that names the first differing tensor.

## What `main` already had, and what this rebuild kept

Every repair #1377 and #1378 landed survives, unmodified:

- `GgufExpertTowersReachSlotLane`, the fifth lane term, in
  `gguf_device_fit.{h,cpp}` and read by the loader. This branch does not touch
  those files.
- `PeekRoute` promoted into
  `include/vllm/model_executor/model_loader/gguf_keep_quant.h`. Untouched.
- `HostMemoryIsDeviceAddressableFromAttrs` extracted into
  `src/vllm/platforms/platform.cpp` and gated over all four attribute pairs.
  Untouched.
- The `HostAddressable` RAII guard `main` introduced in
  `test_expert_stream_device_slot.cpp`. The one conflicting case now uses it,
  including for its discrete arm, instead of writing the flag directly.
- `docs/USAGE.md`'s limit list keeps `main`'s model-family bullet and its
  keep-quant/keep-f16 residency bullet (#1378). It grows from four limits to
  five rather than back to three.

## Records

`docs/STATUS.md`, `docs/BENCHMARKS.md` and `docs/FEATURES.md` take one scoped row
edit each; every other key is byte-for-byte unchanged.
`.agents/benchmark-record.md` is a pure append (198 insertions, 0 deletions).
`.agents/issue-index.md` appends two rows and edits none.

Two record edits ride here that are not part of W0f and are consequences of it,
named so a reviewer does not have to work out why they are in the diff. Adding
198 lines to `qwen3_5_weights.h` moved `struct Fp8Weight` from line 342 to line
540, which `scripts/check-agent-record.py` reported as a stale anchor regression
(33 against a baseline of 32); the three citations of it are repointed, in
`.agents/quantization-matrix.md` (both the text and the `#L` fragment, which is
the one the checker reads) and in two specs. And appending a measurement to
`.agents/benchmark-record.md` obliges `docs/FEATURES.md` under
`scripts/check-doc-checkpoint.py`, so the routed-expert-streaming row now says the
staging device decodes and that its token gate fails. That is #1387's shape,
caught before the commit was published rather than after.

Issue: #1299
Row issue: #1124
Tripwire filed and covered in flow: #1320
Spec: `.agents/specs/expert-stream-device-slots.md`

#1124, #1299 and #1320 all stay OPEN: the row is not finished, the correctness
gate does not pass, and #1320's loader-policy half belongs to
`QUANT-GGUF-KEEPQ-LOADER`.

FOLLOWING_AGENTS_PROTOCOL

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

#1414 landed the W0e measurement while this branch was gating, so main and this
branch each appended a record of a run on a DIFFERENT tree: main's at `95883dcae`
(the CUDA arm loads and generates nothing) and this branch's at `9c783a8be` (the
same harness with W0f, 32/32 steps). Both are kept, in two clearly separated
sections, because an append-only record does not get to choose which measurement
happened. Where they disagree the standing figure is main's: 11.05 s/token at
4000 slots on a live cache is the CPU number, and this branch's CPU column is a
same-lease control rather than a second attempt at it.

Five conflicts, all resolved by taking main's version and re-applying the scoped
edit rather than by accepting a three-way merge:

- `.agents/benchmark-record.md`: pure append of both sections, main's first,
  0 deletions. This branch's heading is retitled W0e/W0f to W0f so the two runs
  are not read as two records of one.
- `.agents/specs/expert-stream-device-slots.md`: main's three-gate table, its
  `## Evidence` section and its `## Owed` rows all survive. The gate table now
  states what each gate read at `95883dcae` and where W0f moved it. Main's CUDA
  Evidence subsection is retitled to name the tree it was measured on and is kept
  verbatim; the W0f re-run is a second subsection beside it. Main's
  `CLOSED by W0e` row for the CPU denominator is taken as-is; its open row for
  the first-forward exhaustion is closed by W0f with the correction named.
- `docs/STATUS.md`, `docs/BENCHMARKS.md`: one row each, every other key
  byte-for-byte equal. Main's 11.05 s/token, the 4000-slot count and the
  8000-slot 3.6-4.1x figure are carried into the merged rows.
- `docs/USAGE.md`: the limit list goes from four to six rather than back to two.
  Main's model-family bullet, its keep-quant OR keep-f16 bullet, its 4000-slot
  figure and its page-cache attribution of the 8000-slot slowdown are all kept.

No superseded wording is reintroduced: the towers keep keep-quant OR keep-f16,
the recipes set 4000 slots, and more slots costs the page cache the borrowed
mapping is served out of rather than failing to fit an arena.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…MAIN, and drop the duplicate #1299 index row

The merge itself is clean. What it exposed is the union-merge duplicate
`AGENTS.md` warns about: #1414 appended a `#1299` row to
`.agents/issue-index.md` on main and this branch appended its own, and because
that file carries `merge=union` both survived without a conflict.
`scripts/check-agent-record.py` is what catches it, and it did:
"issue #1299 listed twice. Under `merge=union` a duplicate is what two branches
appending the same issue look like".

Main's row is kept BYTE-FOR-BYTE and this branch's is dropped, which is the only
resolution the append-only rule allows: an index row may never be edited, so the
row that is already on `main` cannot be rewritten to mention W0f, and the row
that is not on `main` yet is the one free to go. Nothing is lost that the record
needs. Main's row already links #1299 to `ENG-EXPERT-STREAM-DEVICE` and to the
spec, which is the traceability the index exists for, and the W0f fix is carried
by the spec's `## Now`, `## Evidence` and `## Owed`, by
`.agents/benchmark-record.md`, by the three public pages, and by the pull request
body. The `#1320` row this branch appends is new, is not duplicated, and stays.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
…te, and the header named a cause the spec forbids naming (#1299)

Five findings from the fresh review of #1427. The product code survived eleven
of twelve mutations and is unchanged here apart from one comment.

`kDeviceAliasAlignment` was 256 and nothing pinned it. Every assertion about it
in the tree is written `% vllm::kDeviceAliasAlignment == 0`, which is a
tautology in the constant: the review lowered it to 16 and the whole suite
reported SUCCESS at exit 0. That is the failure mode the header's own safety
argument cannot survive, because the argument is that cuBLASLt is PROMISED 256
(`CUBLASLT_MATMUL_PREF_MIN_ALIGNMENT_A_BYTES` defaults to 256 and this tree
never overrides it; `grep -rn MIN_ALIGNMENT src/vt/` returns nothing, while
`CUBLASLT_MATMUL_PREF_MAX_WORKSPACE_BYTES` in the same file is the positive
control). Someone lowers the constant to skip the re-home memcpy, the promise
is gone, and every gate stays green. A case in
`test_resident_weight_host_addressable.cpp` now pins the literal. Reproduced
red-first: at 256 the file is 13 cases / 72 assertions / SUCCESS / rc 0; with
the constant at 16 it is 13 cases, 1 failed, Status FAILURE, rc 1, compile rc 0
both times. The reviewer's mutation to 24 still reds with its original
`std::bad_alloc` and SIGABRT signal intact beside the new failure, so the pin
masks nothing. The existing `%` assertions stay; they check the buffers, which
is a different property.

The header's rationale block asserted two things that are false at this head.
It said the row's CUDA-versus-CPU token divergence IS the two arms' GEMM
arithmetic, which the spec explicitly forbids asserting -- excluding one cause
is not identifying another, and that hypothesis is not measured. And it said the
GB10 leg is owed, when the spec and `.agents/benchmark-record.md` both record it
as RAN (`rc` job `7c7a05e9-be87-48f4-94ae-1bbe0340f063`, NVIDIA GB10 sm_121,
12/12 identical algorithm selection, 12/12 bit-exact, `PROBE_FAILURES=0`). The
block now says what the probe established -- the alias is EXCLUDED as the cause,
on the target silicon -- and says plainly that the cause is not identified.

The disowned 1.97x ratio is deleted rather than restated. It was correctly
labelled VOID and not claimed, and no rate reaches any public document, but
digits survive a copy-paste and a disclaimer does not, and this repository has
already watched a disowned number become a quoted one. Both medians remain in
the table, so anyone entitled to the quotient can divide; what is gone is the
pre-computed string. `docs/FEATURES.md` gets back "not throughput", which stops
a reader treating the lane as a speed feature and which survives at
`docs/USAGE.md`.

Three record surfaces move with it. `.agents/quantization-matrix.md` and two
specs cited `Fp8Weight` at `qwen3_5_weights.h:540`, and the rewritten rationale
block adds 23 net lines above it; `scripts/check-agent-record.py` caught exactly
that one anchor going stale, 33 against a baseline of 32. The anchor is
repaired, never the baseline: the struct moved 540 -> 563, and
`sed -n '540,553p'` before and `sed -n '563,576p'` after hash identically
(`9f809a38...`), so the shift maps the cited range byte for byte instead of
being re-derived by eye. ANCHOR-ROT is back to 38.

Three public projections carried the header's error outward, so the correction
does not stop at the header. `docs/BENCHMARKS.md` and `docs/STATUS.md` both read
"G0-CORRECT FAIL on a near-tie ... not the alias", stating the unmeasured
hypothesis as the finding; both now say the cause is NOT identified, in fewer
characters than before. `docs/USAGE.md` said it hardest -- "the divergence is a
measured near-tie rather than a disagreement about the model" and "the two arms
run genuinely different GEMM kernels" -- which is a user-facing document
asserting a cause nobody measured. What IS measured there is the margin, and
that is what it now says.

NOT REACHED, AND NAMED HERE AS `## Nothing lands dead` REQUIRES. No CI gate
reaches the alias branch through a production entry point. `test_expert_stream_wiring`
enters `Qwen3_5Model::Forward` and the reachability mutation reds it, but it runs
on the CPU device, where `ResidentWeight` returns at the `is_cpu()` early return
about ninety lines above the alias branch. In CI the branch is reached only
through `detail::StageWeightForTest`, a test-only seam. The branch is selected by
`needs_weight_staging() && host_memory_is_device_addressable()`, and no CPU tier
can register a platform answering both -- one machine this project can reach
does. The device evidence is real and stronger (the W0e run entered the branch
43,501 times through `Qwen3_5Model::Forward` on `dgx:gpu0`); it is simply not
repeatable in CI. `ENG-EXPERT-STREAM-DEVICE` owns the wiring and
#1299 tracks it until either a GPU CI
lane on a probed-capable part or a fake-platform production entry point lands.
It is listed under `## Owed` in `.agents/specs/expert-stream-device-slots.md`.

FOLLOWING_AGENTS_PROTOCOL

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

GitHub reported this pull request CONFLICTING while `git merge-tree` read clean
locally, which is the forge ignoring the `merge=union` driver on the append-only
`.agents/issue-index.md`. Materialising the merge here is what clears it.

The merge is clean, and the two keyed records were verified by key rather than
taken on the driver's word. `.agents/issue-index.md` is the exact union: 452
rows, every one of this branch's 450 present, every one of main's 451 present,
no extra row and no duplicate. Main's #1396 and #1411 rows arrive; this branch's
#1320 row stays. `include/vllm/model_executor/models/qwen3_5_weights.h` and
`src/vllm/model_executor/models/qwen3_5_dense_weights.cpp` were both edited on
both sides, so each of main's added lines was checked to be present in the
merged file: all are. The one line the merge drops relative to main is this
branch's own W0f change at `9c30dfe7d`, not a #1396 repair.

`scripts/check-agent-record.py` was re-run AFTER the merge rather than before,
because a shared summary counter that is byte-identical on both sides merges
without a conflict while both row changes apply, and that has already bitten
this row.

FOLLOWING_AGENTS_PROTOCOL

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

`origin/main` moved twice under this branch during the repair, so this is the
second merge: #1436 and #1428 landed while the gate was running, and GitHub read
the pull request CONFLICTING against the newer head.

The merge is clean, and six files were edited on both sides, so each was checked
by key rather than taken on the driver's word. `docs/BENCHMARKS.md`,
`docs/FEATURES.md`, `docs/STATUS.md`, `docs/USAGE.md`,
`.agents/specs/qwen38-27b-quant-arms.md` and `tests/CMakeLists.txt` each carry
every line main added, verified line by line, and this branch's own five edits in
those files all survive. `.agents/issue-index.md` is the exact union: 454 rows,
every one of this branch's 452 and every one of main's 453 present, no extra row
and no duplicate. `struct Fp8Weight` is still at `qwen3_5_weights.h:563`, so the
anchor repaired in the previous commit is still correct.

Conflict markers were checked with `git grep` under a positive control, because
four record checkers return 0 on a file that contains them (#1417).

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [Claude Code]
@localai-bot
localai-bot merged commit e67b2a4 into main Aug 20, 2026
0 of 2 checks passed
localai-bot pushed a commit that referenced this pull request Aug 20, 2026
`origin/main` advanced again (#1427). Merged so the pull request stays
`MERGEABLE` and the scheduled workflow runs against a computable merge ref.

The keyed record is verified against this base: 454 rows on `origin/main`, 458
merged, zero duplicated keys, zero lost keys, every `origin/main` row
byte-for-byte equal, and the four branch-only keys (#926, #1290, #1416, #1431)
all present.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]
localai-bot added a commit that referenced this pull request Aug 20, 2026
…#1211)

The capability landed across #912, #1119, #1132, #1377, #1414 and #1427,
and
nothing a user reads said how to reach it. AGENTS.md binds the
checkpoint pin to
docs/USAGE.md, and revision 567d3e6ac26c5474b18311e619c04350fb9a5556
lived only
in the agent record: USAGE.md named this checkpoint three times and
pinned it
zero times, so nobody outside .agents/ could reproduce a single number
the
project publishes about it.

This lands the recipe as a fifth per-model section beside Muse Glimmer
30B,
Nemotron-3.5-Lightning-30B, MiniMax-H3 and MiniMax-Music3. It LINKS the
"Streaming routed experts from disk" section rather than restating it,
so the
schema, the precedence rule, the #1135 reach limits and the per-device
limits
each keep one home.

No docs/examples/ directory. `examples/` in this tree is runnable C++
CMake
targets and `docs/` is one topic per file listed in the README index, so
a new
markdown genre would have had exactly one member and would have
duplicated facts
that already have owners.

## The section was drafted on 18 August, and three changes have landed
since

The draft is reconciled against them rather than merged as written.

The decode subsection quoted a warm 667.0 s time to first token and 44.2
s/token. Neither figure names its expert-stream state, and no record in
the tree
carries either one outside a single commit message and a single index
row, so
both are deleted. What replaces them is measured: the CPU arm runs at
11.05
s/token at 4000 expert-stream slots, with 8000 slots at 39.98 to 45.40
s/token
and streaming off at 66.7 s/token. The streaming-off row carries no
ratio
against the other two, because it was taken on a different source tree
on a
different date.

The recipe served with expert streaming off, which is not the arm any
current
figure was measured on. It now turns streaming on at 4000 slots,
matching both
recipes in the mechanism section.

The subsection headed "The expert slot cache is off, and it has not yet
earned
being on" is gone. Its premise was the VOID steady-decode figure of #912
F1, and
W0e replaced that VOID with a live-cache measurement. Its second
premise, that
the fill copies from a pointer into the mmap and so still takes the page
fault
it exists to avoid, is retracted as unestablished in the same record.
What a
reader still needs from it, that the default is off and that 8000 slots
is worse
than 4000, is already carried by the section this one links.

No `--device cuda` speed number appears anywhere. That arm decodes the
checkpoint as of W0f, its token gate against the CPU arm fails at token
7 on a
measured near-tie, and docs/BENCHMARKS.md therefore carries G0-SPEED as
VOID.

The claim that `--offload-config` does not reach vllm-cli is deleted. It
reaches
vllm-cli, the server's generate and chat path, the server's pooling and
embedding path, and the C ABI. The transcription-only path is the one
that
refuses the flag, and the mechanism section already says so.

## The shard count is settled against the artifact

Two copy-paste commands named -00001-of-00008.gguf. A GGUF split writes
the
total into every member's name, so that is a different file name, and an
operator gets a file-not-found after a 370 GiB download. The report is
#1420.

Settled from the mirrored copy, rather than from a document and rather
than from
the HuggingFace tree API, whose lfs.oid is fabricated for a gated repo:

- shard 1's own metadata declares split.count = 10 and
split.tensors.count =
  1702, and it carries zero tensors;
- shard 1's sha256 recomputes to
b7770552b2ac24e7334c917bc92e90e218e87cfe29484db65e62e8ef2a60334d, equal
to the
  download manifest, which also gives shard 2 as
  2765517f833c736338d3ab34354e1c10eb8d79e62325f998285b435e5cf03dcd;
- the ten files sum to exactly 397,256,393,248 bytes, that is 369.97
GiB.

Both commands now name -00001-of-00010.gguf. Issue #1420 stays open for
the
operator, because this pull request repairs one document and that issue
also
asks whether any other document repeats the file name.

The per-token arithmetic is re-derived from the same metadata rather
than
transcribed. block_count 93, expert_count 512 and expert_used_count 10
give 93 x
10 x 3 = 2790 slices at 2,490,368 bytes, which is 6.95 GB (6.47 GiB) per
token,
so a ~5 GB/s NVMe puts the floor at 1.39 s/token, about 0.72 tok/s, and
not the
1.29 s and 0.77 tok/s a GiB-for-GB substitution produces.

Closes #1194.

## The fresh review returned FAIL, and this is the repair

The factual core was found sound: every number traced to a record, no
unsourced
figure, no CUDA speed claim, and no asserted cause for the step-7
divergence.
Five findings sat on top of it. None of them moves a verified fact.

**The issue was linked in two of the three required places.** AGENTS.md
binds
#1194 to the index row, the owning row's spec and this body, and only
the index
row carried it. No checker catches that, because check-agent-record.py
is
satisfied by the row naming an owning row ID.
.agents/specs/expert-streaming.md now carries a section recording what
landed,
why the pin is settled against the artifact rather than against a
document, and
which binary produced the figures. A git grep for the issue link now
returns the
spec and the index, run beside a control that proves the pattern reports
nothing
for a number that is absent.

**The section claimed to repeat nothing and repeated five facts.**
"Nothing here
repeats them" was false for the 4000-slot decode figure, the 8000-slot
figures,
the per-token expert bytes, the --device cpu guidance and the VOID speed
axis.
The copies agree today. The W0e re-measure this row owes would leave a
corrected
copy beside a stale one that still reads true, which is the shape that
put an
8000-slot figure under a 4000-slot heading on the first revision of this
change.
Every copy the reader does not need is gone, and the opener now names
the three
facts the recipe repeats on purpose and says why a recipe cannot omit
them:
which device to use, the expert bytes a token reads, and the two
streaming
decode figures. The decode figures name their one record,
ENG-EXPERT-STREAM-DEVICE W0e in .agents/benchmark-record.md, so a
re-measure has
one place to look.

**The published recipe is not the binary that was measured.** Every
figure came
from benchmarks/expert_stream_device_w0e.cpp, a purpose-built C ABI
client that
reports the token ids, a per-step timestamp and the expert-stream
counters
together. The section publishes a vllm-server command. That difference
is now
disclosed beside the prompt and environment differences the section
already
disclosed, and it is a disclosure rather than a caveat: at seconds per
token the
server's HTTP and SSE framing sits far below the run-to-run spread the
section
prints.

**A stated bound was false.** Rep 1's 11.22 against 11.05 is 1.5385%, so
"agrees within 1.5%" is a bound the numbers do not meet. It now reads
1.54%
above, recomputed rather than transcribed.

**The gate evidence was pinned to a SHA that would never land.** The
branch was
behind origin/main, which made the trailer and commit-style gates SKIP
while
reporting nothing about this tree, and the recorded evidence named a
commit one
behind the head. main is merged, and both trailer gates now EXECUTE.

## Gates

From this branch's own worktree, at caffae2, with origin/main at
d0eff4f and
verified an ancestor of that head. Every rc was captured unpiped.

- scripts/agent-preflight.sh: rc 0, zero gates failed and zero gates
skipped.
  commit-trailers and commit-style both report ok rather than SKIP.
- check-agent-record.py: rc 0, ENGINE=168 MODEL=377 QUANT=84 KERNEL=52
  BACKEND=85 ANCHOR-ROT=38.
- check-public-doc-tables.py: rc 0.
- check-issue-index-append-only.py: rc 0.
- check-doc-checkpoint.py: rc 0.
- check-commit-trailers.py --range origin/main..HEAD: rc 0.
- check-commit-style.py --range origin/main..HEAD: rc 0.
- All four record checkers resolve ROOT from their own __file__ to this
  worktree, asserted rather than assumed.
- git grep for conflict markers over the whole tree: no match, run
beside a
  positive control that proves the pattern matches.

The merge of origin/main touched one keyed record. Both incoming commits
append
to .agents/issue-index.md and neither edits an existing row, so the
merge applied
four appends and changed nothing else. UNOWNED_HIGH_WATER in
scripts/check-agent-record.py is byte identical on both sides and was
not
double-applied.

No build was run and none is needed. No src/, include/, tests/ or CMake
file is
touched by this branch.

## What this does not settle

The #1194 index row was rewritten in place on this branch, which the
append-only
rule permits only because the row has never been on main. Reviewers
should read
it as new rather than as an edit.

docs/BENCHMARKS.md line 8 and docs/STATUS.md still describe the
streaming-ON
decode figure as VOID per #912 F1, while BENCHMARKS.md line 9 records
11.05
s/token as replacing that VOID. That contradiction is #1442, it sits in
a record
this pull request does not own, and it stays with the ENG-EXPERT-STREAM
row.

FOLLOWING_AGENTS_PROTOCOL

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

---------

Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
localai-bot added a commit that referenced this pull request Aug 20, 2026
…bove its replacement (#1442) (#1449)

Two public pages and one row record all told a reader the streaming-ON
decode
figure was void, after the measurement that replaced it had landed.

## The public cells

`docs/BENCHMARKS.md:8`, the `ENG-EXPERT-STREAM` row, read "Streaming-ON
decode
**VOID** (#912 F1); re-measure owed" while line 9, the row directly
under it,
recorded 11.05 s/token at 4000 slots against a live cache with a
decode-phase
`exhausted` delta of 0, explicitly as replacing that VOID figure.
`docs/STATUS.md:129` also carried the VOID. A reader got the answer that
depended on which row they read first.

The two cells never said the same thing, so the repair is stated per
file:

* `docs/BENCHMARKS.md:8` named no cause and its replacement was one line
down.
  It keeps its `**VOID** (#912 F1)` and now reads "re-measured LIVE by
  `ENG-EXPERT-STREAM-DEVICE`" where it said "the next row". A positional
  pointer breaks the moment a row is inserted above it, and no checker
validates one; the table holds 253 rows, measured with the checker's own
  `_table_rows` parser.
* `docs/STATUS.md:129` never said a re-measure was owed, and its
replacement is
not adjacent: that figure is at `docs/STATUS.md:167`, 38 rows further
down
the SAME table, which runs 126-190 as one unbroken block. It keeps the
cause
  verbatim, the step clock that had no caller, and gains the same named
  pointer.

Neither cell repeats 11.05 s/token. `docs/BENCHMARKS.md:9` and
`docs/STATUS.md:167` already carry it, and one number stated in two
keyed rows
is what lets the two drift apart.

## The row record said the same thing one level down

`.agents/specs/expert-streaming.md`'s `## Owed` still read "Re-measure
decode
on a LIVE cache ... is void", with its "why it is open" naming an
unreachable
`dgx.casa`. So a fixed public cell routed a reader to the row record and
the
row record told them the measurement was still owed and blocked. The
entry is
struck as CLOSED by `ENG-EXPERT-STREAM-DEVICE` W0e and kept as a line,
using
the convention the sibling spec already uses, because the void's cause
is what
shaped the replacement: `EndStep()` had no caller, `protected_this_step`
never
cleared, and every slice from partway through token 3 came from the
mmap, which
is why W0e gates `exhausted` on its decode-phase DELTA rather than on a
total.

`.agents/specs/expert-stream-device-slots.md`'s `## Owed` listed issue
1387 as
open while the same flow closed it. Struck, with the measured evidence
beside
it and with issue 573 named as the surviving half.

## Evidence for the figures

The re-measure stopped being owed at `c805ccbb3`, recorded in
`.agents/benchmark-record.md` under `ENG-EXPERT-STREAM-DEVICE W0e`:
11.05 is
rep 2's median over steps 4 to 32, and rep 1's 11.22 sits 1.54% above
it. The
8000-slot arm is not a second figure for the same thing; it measures
39.98 to
45.40 s/token and consumed all 30,625 MiB of swap, which that record
reads as
page-cache displacement and states as a reading of its columns rather
than a
proven mechanism. No CUDA number moves: `e67b2a4ba` makes `--device
cuda`
decode 32/32 steps at peak RSS 97.75 GiB, G0-CORRECT fails on a step-7
near-tie
whose cause is not identified, and the row's own stop condition
therefore
leaves G0-SPEED VOID.

## What the pointer cost the cell

The pointer clause grew 31 characters, from `; re-measure owed` at 17 to
`; re-measured LIVE by ENG-EXPERT-STREAM-DEVICE` at 48. Two edits paid
for it
and both belong in this sentence, because the second alone does not
cover it:
the words "as 4 KiB faults" came out at 16 characters, and dropping bold
from
three supporting numbers and moving "streaming OFF" out of parentheses
freed 13
more. 31 against 29 is the +2 that takes the cell from 215 on `main` to
217
here, inside the 220 budget. No fact was lost. The 4 KiB demand-fault
mechanism
survives verbatim at `.agents/benchmark-record.md:22198` and
`.agents/specs/expert-streaming.md:880`, which is where this page's own
legend
sends a reader, and the index row discloses the displacement in full.
Bold now
marks the claim and the verdict. `docs/STATUS.md`'s cell measures 195,
and that
page's `oversized_cells` ratchet sits at 44 of 44, unmoved by this
change.

No gate catches this class, by design. The rows are keyed on different
IDs, so
`check-public-doc-tables.py` sees well-formed rows and
`check-agent-record.py`
sees individually consistent lifecycle states, and no checker here
compares a
claim in one keyed row against a claim in another.

## The index row is corrected in place

`.agents/issue-index.md` is append-only. This row is corrected rather
than
superseded by a second row, and the reason is the rule's own reason:
`check-issue-index-append-only.py` evaluates one aggregate diff against
the
merge base, and its docstring says a union merge duplicates an EDITED
line,
which needs that line to exist on both sides. Verified rather than
assumed: the
row appears in no ref but this branch, checked across all 513 remote
heads, and
`git show origin/main:.agents/issue-index.md | grep -c` returns 0 where
the
same command on `HEAD` returns 1, so the absence comes from an
instrument
proven to fire. The net diff against the merge base is one added line
and no
removed line. Appending a second row for the same issue would leave a
duplicate
key in an append-only log. This is flagged rather than done silently,
and it is
not a precedent: the argument holds only while no other branch carries
the row.

## Gates

Run from this worktree's own `scripts/`, exit status captured unpiped,
after
merging `origin/main` `4cde4762a`: `check-agent-record` 0, re-run after
the
merge; `check-public-doc-tables` 0, re-run after each edit;
`check-now-current`
0; `check-conflict-markers` 0, the gate #1450 had just landed;
`check-doc-checkpoint --base origin/main --head HEAD` 0;
`check-issue-index-append-only --base origin/main --head HEAD` 0, with a
detached scratch commit editing row 168, a row that DOES exist on
`main`, as
its positive control at 1 and the mutation proven applied by `git diff
--stat`;
`check-commit-trailers --range origin/main..HEAD` 0; `check-commit-style
--range origin/main..HEAD` 0; `git grep -n '^<<<<<<< \|^>>>>>>> '` 1
with a
two-line fixture as its positive control at 0.

`agent-preflight.sh` reports one red, `test_cpu_x86_llamacpp_floor`,
which
exits 4 `NO_QUIET_WINDOW` where its case asserts 2, at one-minute load
averages
of 49.77, 52.96, 58.34 and 211.99 across four observations. That is the
load
dependence tracked in issue 618. A quiet re-run was attempted and could
not be
taken: the box was polled for 30 minutes and never fell below load 8,
peaking
at 126. The independence argument is structural instead: this branch
changes
five files, all `.agents/` or `docs/` Markdown, so neither the test nor
anything it drives differs from `origin/main`.

## Issue 1387

It gets no product change here, and the reason is evidence rather than
scope.
Its record half already landed: the stale string "CPU keep-quant towers
only"
is absent from `docs/FEATURES.md` on `origin/main` and present at
`5f4eb356e^`, which is the positive control for that grep. `5f4eb356e`
(#1377)
wrote the row and `e67b2a4ba` (#1427) refined it again, so the page
names the
staging device and both accepted residencies, keep-quant and keep-f16.
Its
checker half, whether a per-commit record gate should be satisfiable
after the
commit is published, is issue 573 and stays open under
`ENG-RECORD-CONFLICT-SURFACES`. This branch touches no file under
`scripts/`.

Closes #1442

FOLLOWING_AGENTS_PROTOCOL

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

---------

Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
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