Skip to content

feat(BACKEND-ROCM-QUANT-GATHER): gather packed embeddings on ROCm - #3097

Merged
localai-org-maint-bot merged 25 commits into
mudler:mainfrom
VikashLoomba:row/BACKEND-ROCM-QUANT-GATHER
Sep 11, 2026
Merged

feat(BACKEND-ROCM-QUANT-GATHER): gather packed embeddings on ROCm#3097
localai-org-maint-bot merged 25 commits into
mudler:mainfrom
VikashLoomba:row/BACKEND-ROCM-QUANT-GATHER

Conversation

@VikashLoomba

@VikashLoomba VikashLoomba commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Row

BACKEND-ROCM-QUANT-GATHER. Refs #3093.

What changed

ROCm now keeps every admitted quantized embedding table packed and decodes selected rows directly into the caller's F32 or BF16 output. The provider covers all 19 codecs, preserves full-width ID checks, and binds the queue device before allocation and launch. The Qwen3.5 GGUF reader admits the existing Q8_K block geometry; its embedding materializer accepts decoder-only formats while ordinary matrix weights retain their dot-kernel requirement. Public load/completion tests reach every format and compare exact tokens and logits with same-binary dense controls.

Before starting

Issue #3093 tracks the missing ROCm quantized embedding registration. The committed spec and its reader/materializer amendments precede implementation. This row uses one pull request. Its spec owns the child inventory; the parent backend lifecycle remains unchanged.

The branch includes the separately reviewed full-attention prerequisite from #3101. Its later runner test correction is imported byte-for-byte from 694f04525174d0c2dac8030ba8f1398f2683ec82. The gather change does not modify that prerequisite's product implementation.

Evidence

The gfx1100 operator executed all 15 final CTests without a skip. The primitive suite passes nine cases and 11,784 assertions; the public suite passes 2,850 assertions. All 456 completion files equal the full trace capture byte-for-byte. All 76 operation outputs meet the pinned primary/secondary gates; 68 are byte-identical, with the remaining eight within the original primary tolerance. The applicable secondary GET_ROWS geometry passes six exact F32/BF16-RNE comparisons. The required two-device queue, bounds, and recovery witness passes.

Matching rocprofv3 1.3.5 traces preserve each arm's untraced output bytes. Native operation allocations exactly match packed tables, I64 IDs, requested outputs, and constant 16-byte error buffers. The primary runs packed GPU selections followed by native decoders; its tensor memory counters are labeled separately from its profiler-visible allocator pool. A complete public trace passes 228 engines and 2,850 assertions, with BF16 KV reads/writes and exact token/logit repeats.

The commands and their receipts are retained in native-final-v4-commands.json and native-final-v4-operator-results.json. The operator ran:

ctest --test-dir build-rocm-quant-gather --output-on-failure --verbose -R '^(test_rocm_embedding_quant|test_capi_rocm_embedding_quant|test_gguf_keep_quant|test_ops_embedding_quant|test_gguf_dequant|test_backend_cross_device|test_gguf|test_rocm_arch|test_rocm_backend|test_rocm_fp8_kv_cache|test_ops_rocm_silu_rounding|test_exl3_rocm|test_gemma4_rocm_fp8_seams|test_backend_multidevice|test_runner)$'

The implementation head is c5bb0f1f71f1db2bac5f436189a6a018fb62cbc3. Exact-SHA path classification, commit style, and trailer checks pass. All 4,233 committed source, test, and build files match the frozen review manifest.

The complete library builds cleanly with HIP and CPU-only configurations. The CPU runner suite passes 41 cases and 1,914 assertions. Exact recipes, hashes, source anchors, oracle outputs, raw traces, and operator receipts are in docs/bench-evidence/rocm-quant-gather/.

  • scripts/agent-preflight.sh --staged --quiet exits 0 with no failures and five argument-dependent skips. CPU ISA passes separately; ARM, CUDA code-generation, and CUDA Triton artifact checks do not apply to this HIP build.
  • Fresh review of the immutable implementation passed with no findings. The completed mutation runs detect all 44 injected faults, including all 19 codec changes, removal of production call sites, bounds handling, BF16 rounding, device selection, malformed metadata, and empty-table behavior. Four positive GPU controls pass. A separate reviewer build passes five CPU regressions; three accelerator-only controls explicitly skip in that CPU build. The reviewer and operator each ran the complete preflight on this head: all 31 affected translation units compiled. CPU ISA and PR classification checks cover the applicable generic skips. The operator then reran all 15 native CTests and the required two-device witness; all passed. All 456 completion captures and 81 generated corpus files match the previous frozen run byte-for-byte.
  • The changed feature statement is scoped to the existing gather row in docs/FEATURES.md.

Speed claims

  • This pull request makes no speed claim.

Honest gaps

The bounded oracle comparison is qualified at this head: the comparator now rejects any primary record that carries an exception after generation and verifies the sealed model, configuration, prompt, repeat, dtype, and runtime identities plus the complete cache-view bounds before accepting a report. A focused validator test keeps the successful Q4_0 captures as its positive control and reddens when a post-generation exception is injected. A second review round then pinned every qualification guard with its own negative case on both the token and memory report paths (status-only refusal, exception and traceback shapes, wrong pins and runtime identities, wrong workload seals, FP32 dtype, an FP8 request, non-greedy sampling, a changed capacity contract, and invalid storage geometry), and registered the suite in the preflight SUITES array and the CI python lane so a guard regression fails a standing gate. The operator comparison of the 96-run primary matrix records 93 of 96 token-identical cases.

The three IQ3_S first-prompt mismatches are an ORACLE-SIDE codebook difference, not a native defect: native IQ3_S decode is bit-exact with the format-defining llama.cpp grid, while the pinned vLLM gguf plugin decodes 150 of 2048 codebook byte positions at 62 where the grid has 15 (effective magnitude 15.5 vs 15, +3.333%). A CPU substitution experiment (plugin-codebook rows placed into an otherwise identical dense model) reproduces the primary's exact divergent tokens, and stock llama.cpp reproduces the native tokens byte-for-byte. The finding, receipts, and two-sided citations are recorded with the row evidence, and it is reported upstream as vllm-gguf-plugin#129; that grid correction decides whether the three IQ3_S-p0 cases then pass or stay recorded oracle-blocked.

The original-fixture coverage is satisfied at this head. All 32 upstream fixtures were downloaded with the developer's authority and verified at 289,655,872 bytes; their 160 exported tensors over the 16 primary codecs were compared native-versus-plugin and pass with 320 outputs, 140 byte-exact, and every remaining element inside the unchanged upstream tolerance (atol=0.01, rtol=0.04). IQ1_M and the F16 output case remain the documented exclusions, and Q8_K, MXFP4, and IQ1_XXXS stay with their separate secondary evidence. The comparison report now labels its own scope from the run rather than a fixed string; the label defect found during this round is filed and fixed in flow as #3126.

This is ready for review. The exact Q4_0 model reaches the pinned primary renderer but it refuses Qwen3_5TextConfig where Qwen3_5Config is required, before tokens. The secondary llama.cpp oracles run through their committed one-line s_copy overlay and match native on all 12 bounded requests; the pristine binaries abort on their first decode, and the upstream runtime pads the requested 64-cell context to its own 256-cell minimum, so the matched-memory claim is scoped to the native/primary pair (both 65,536 bytes) and the secondary runs claim tokens and logits only.

The original 32 upstream fixtures await authority for their 289,655,872-byte download. Generated operation tables do not replace those fixtures. The fork's real 2.4T model qualification remains separately owed under #933. The row stays ACTIVE until the remaining gates pass. No CUDA/HIP combined-device execution is claimed.

Repairs after the review above, verified at this head. d896102f1 re-homes three evidence paths pr-size could not classify: the run's capture archive moves up beside its seven sibling archives with its sha256 unchanged (9f700062…a1bc7, still the value capture-manifest.json seals), and the two minimal-diff .patch artifacts become documents that reproduce each diff verbatim, record the original file's sha256, and point at the sealed full-context archive members. 74baf8c08 replaces the stale assertion that Q8_K never appears in a GGUF file — the reader's case 15 is correct and mirrors llama.cpp, which carries a real Q8_K traits row and validates its row data on load — with assertions that pin the reader geometry against vt::BlockElems/BlockBytes, the id round-trip, and the properties that actually distinguish Q8_K: no weight-side vec_dot, not keep-quant capable, and not taken by the generic composite. 79176b72e, 873807215 and fb4d78049 remove the same false claim from the four remaining comments that carried it, including the CUDA gather header that this branch is what made false, and repair the three line anchors this branch's own edits had made stale. A fresh reviewer mutated each guarantee in a scratch copy and returned PASS, including the classifier mutation that reproduces CI's unclassified-path error verbatim and the geometry, HasQuantDotKernel and restored-CHECK_THROWS mutations that each red the intended assertion; the operator independently reran the two CPU suites (10/10 cases and 6226/6226 assertions; 55/55 and 10350/10350).

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: Codex:gpt-6-astra [Codex CLI]

ROCm expands quantized embedding tables because its gather provider is
absent. Define all 19 codec contracts and the public model path before
changing residency. Require pinned runtime comparisons, memory evidence,
and independent mutation review. The primary fixture download and fork
model qualification remain pending.

Refs mudler#3093

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: Codex:gpt-6-astra [Codex CLI]
A full-attention Qwen3.5 model loads but fails completion because the
shared forward validates unused recurrent metadata against zero slots.
Define the consumer checks, existing input-builder reuse, public red,
pinned oracle workload, and mutation gates before implementation.

This specification on row/ENG-QWEN35-FULL-ATTN-STATE tracks mudler#3098.
Implementation and runtime verification remain pending. This commit
changes no product code and makes no performance claim.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: Codex:gpt-6-astra [Codex CLI]
Full-attention Qwen3.5 models have no recurrent cache but receive legacy
GDN metadata. Select validation and device preparation from the loaded
layer consumers. Keep hybrid cache and metadata checks strict, and pass
inert metadata into graph padding before copying indices.

The operator reproduced the public red and verified twelve fresh-engine
completions. Both registered siblings and graph drivers pass focused CPU
gates. Thirty scratch mutations prove the tests detect removed guards
and production calls.

Pinned vLLM rejects the exact text-only GGUF configuration before an
engine becomes usable. G4 stays pending in the row specification. This
change makes no performance claim and tracks mudler#3098 on
row/ENG-QWEN35-FULL-ATTN-STATE under draft PR mudler#3101.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: Codex:gpt-6-astra [Codex CLI]
The graph shape tests reject nonzero first offsets and descending internal
offsets for both model siblings. Each case fails when its guard is deleted,
so independent review can verify both offset guarantees. Production code
remains unchanged. Record the repair evidence under issue mudler#3098.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: Codex:gpt-6-astra [Codex CLI]
The public Q8_K case reaches a materializer that still requires a dot
kernel. Define an explicit embedding role and preserve the matrix default
before changing that shared loader. Issue mudler#3093 owns the correction and
its loader, public API, and mutation gates.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
The loader regression identifies an unknown-type refusal before the
materializer. Define the existing Q8_K byte geometry and its reader gate
before adding that trait. Preserve matrix refusals and correct the earlier
cause attribution under issue mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
…ssion

The full-attention-only runner test still expects the former forward-side
GDN refusal. Specify its successful execution and state checks before
correcting the test. Keep fixture geometry and runner topology unchanged.

Refs mudler#3098

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
The reviewed consumer checks make the full-attention runner fixture succeed,
so its old exception expectation now fails. Require completed execution,
changed attention state, a valid sampled token, and request feedback.
Preserve the existing fixture and keep GDN state absent.

The focused case passes 18 assertions. All 41 CPU runner cases pass with
1914 assertions. Restoring unconditional dense GDN validation fails the
corrected case at the original refusal. Product bytes remain unchanged.

Refs mudler#3098

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
ROCm expands quantized embeddings because its operation table lacks a
compressed gather. Register all 19 admitted codecs and decode selected rows
directly into the caller's F32 or BF16 output. Keep the error record fixed
at 16 bytes and validate full-width IDs before reading a packed row.

Admit the existing Q8_K file geometry and distinguish embedding storage
from matrix storage. The embedding role preserves packed decoder-only
formats; the default materializer still requires a dot kernel and refuses
embedding repacks. Bind allocation and launch to the queue's device.

The gfx1100 operator passed all 15 final CTests and the required two-device
witness. All 76 operation outputs meet the pinned oracle gates, including
68 byte-identical outputs. Matching traces preserve untraced outputs and
show native selected-row decode with requested output and BF16 KV storage.

The full staged preflight reports no failures and five argument-dependent
skips. The separate CPU ISA audit passes. The row evidence names each
skip and preserves the complete raw gate output.

Keep the row ACTIVE. Original upstream fixtures await download authority.
The pinned primary renderer refuses the exact bounded model, and both
secondary models abort before tokens. Model token equality, matched oracle
cache geometry, fresh mutation review, and reviewed-head operator gates
remain pending. This change makes no performance claim.

Refs mudler#3093. The branch retains the separately reviewed mudler#3101 prerequisite.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
The primary now runs the unchanged Q4_0 model through its registered text
class with the original rotary width. Preserve the failed launches and
successful compiled run as evidence for those harness corrections.

Match the secondary cache padding with 16 native and primary blocks.
Require new memory measurements and the complete token matrix. Scope a
separate secondary allocation overlay with pristine codec controls and
independent mutation review. Its model qualification remains pending.

The record, command, symbol, role, evidence-hash, and whitespace checks
pass. The full helper preflight is still running; its default-branch test
already fails under this host's global main setting. No product code or
test changes are included. A fresh implementer uses this committed spec.

Refs mudler#3093. Issue mudler#2719 retains the separate native admission gap.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
The primary plugin restores its multimodal architecture key during
loading. Select the pinned text class and preserve the original rotary
width without changing the source or production execution defaults.
Return plain JSON from the worker to capture live cache tensors safely.

Match physical KV capacity at 16 blocks. Preserve all 19 public fixtures
and compare every native quantized completion with its dense control.
Retain the unused recurrent copy input in separate stock and fork source
overlays. All 12 secondary completions match native tokens, and all 24
actual recurrent controls preserve tokens and logits byte-for-byte.

The amended HIP build passes 15 CTests and the required two-device case.
The CPU build passes six tests and skips two ROCm-only tests. Both
recurrent graph mutations fail for their intended reasons. The primary
observer measures an unchanged 65,536-byte BF16 cache during generation.

The complete primary matrix, matching model traces, full staged
preflight, fresh mutation review, and operator rerun remain required.
The original upstream fixture download still awaits developer authority.
Keep this row ACTIVE and preserve failed attempts with their receipts.

Refs mudler#3093. No performance or global oracle-gateability claim changes.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
Define the complete report qualification before repairing the comparator. A primary exception after generation can preserve valid tokens and must not qualify the run. Refs mudler#3113.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:gpt-6-astra [Codex]
A primary exception after generation can preserve valid tokens and must
not qualify the run. Require the exact successful status and reject any
capture that carries an exception, exception_type, or traceback field on
both the token and memory report paths, together with the sealed model
and configuration bytes, prompt, repeat, resolved BF16 dtype, and the
recorded runtime identities of the successful Q4_0 captures. Require an
integer cache storage offset at the storage origin and verify that the
complete strided view fits its storage before the existing allocator
bounds check, then compare the extended view metadata before and after
generation.

Centralize the checks in qualify_primary and add the focused validator
test, which keeps the successful Q4_0 reports as positive controls and
mutates a copy with a post-generation exception. The synthetic matrix is
a validator test, never an oracle measurement or model parity result.

Refs mudler#3113. No product code, oracle pin, or model workload changes.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
Fresh review of 92813f4 found the focused validator negatively pinned only
the exception guard. This round adds one negative case per qualification
guard on both the token and memory report paths: status-only refusal,
traceback-only and executed-with-exception records, wrong primary and plugin
pins, wrong runtime identities, wrong model, config, prompt, and repeat
seals, an FP32 resolved dtype, an FP8 request, non-greedy sampling, a
changed capacity contract, and invalid storage geometry (nonzero, negative,
float, and boolean offsets, shrunk storage, grown shape, an inactive
allocator, a changed layout, and generation-time changes). Guard-removal
mutations redden exactly their matching cases. The suite is registered in
the preflight SUITES array and the CI python lane so a guard regression
fails a standing gate. Refs mudler#3113.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
The comparison report carried a fixed scope line written for the generated
corpus, so the original-fixture coverage run was labelled "synthetic". Make the
scope a command-line argument whose default preserves the previous text, and
re-run the comparison over the 32 verified upstream fixtures so the report's
label matches its inputs. Refs mudler#3126.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
The 32 upstream fixtures are downloaded and verified, the 160 exported tensors
pass the native-versus-plugin comparison inside the upstream tolerance, the
96-request primary matrix is classified (93 identical; three IQ3_S cases are the
plugin grid defect reported upstream as vllm-gguf-plugin#129), the comparator
review statuses are recorded, and the secondary matched-memory claim is scoped
around the upstream 256-cell context padding. Refs mudler#3093. Refs mudler#3126.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
compare.py carried no standing coverage, so the `--scope` parameter added for
the original-fixture label was unpinned and a later edit to its default would
change the report's scope line without failing any gate. Run the whole tool over
one synthesized Q4_0 case and read the written report back, asserting the exact
previous literal for the command-line default and for the module API default,
and asserting that an explicit `--scope` value reaches the report. Refs mudler#3126.
Refs mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
… evidence roots

The acceptance row claimed two fresh reviews without a retained report, and the
bench evidence named two relative paths that resolve under different roots. Cite
each operator-transcribed report with its path and sha256, the artifacts beside
it, and what it concluded, and give each evidence path its absolute root. Refs
mudler#3093. Refs mudler#3126.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
…ence the size gate cannot classify

`pr-size` fails this pull request on three paths no class admits: the evidence arm
matches exactly `docs/bench-evidence/<run-id>/<file>.<ext>` for the extensions it
names, and `.patch` is one it deliberately does not name
(`.agents/specs/gate-pr-size-bench-evidence.md` forbids a general suffix rule and
requires each sibling artifact its own justified classification). Re-home the
archive to the run directory, beside the seven sibling `*.tar.gz` captures whose
`.gz` already classifies there, and record the two minimal diffs as documents,
which classify at any depth. The archive bytes stay identical and its
`capture-manifest.json` sha256 still matches, so no hash in the tree goes stale
and no claim, number, or verdict moves.
Refs mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
…d of a false absence

`test_ops_quant_traits` special-cased id 15 and asserted `GgmlTraits(15)` throws,
on the premise that Q8_K "never appears in a GGUF file". That premise is false,
and c5bb0f1 falsified it in this same branch: the reader admits Q8_K's file
geometry exactly as llama.cpp does at the recorded pin, where
`ggml/src/ggml.c:879-884` carries a real traits row with a nonzero `type_size`
and no `.vec_dot` or `.to_float`, and the file loader validates Q8_K row data as
it reads a tensor (`src/llama-model-loader.cpp:1416` reaching
`ggml/src/ggml-quants.c:5590-5598`). Replace the absence with the stronger TRUE
assertions -- reader geometry, the id round-trip, no weight-side dot kernel, and
not keep-quant capable through the public predicate the loader itself calls --
and correct the same stale absolute in the two `gguf_keep_quant` comments. The
reader's `case 15` is unchanged. Refs mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
…K's file geometry

Three comments still carried the belief that produced the stale `CHECK_THROWS`
this branch repaired: that Q8_K never appears in a GGUF file. The reader admits
id 15 and the decode-only embedding gather takes it packed, so the tree must not
keep the claim that justified the old assertion — in a test case, in
`vt/dtype.h`, or beside the loader's predicate. The `continue` in the
byte-for-byte case stays, and its comment now says why it is there: the loader's
`DequantGgufRowToF32` expansion path has no Q8_K arm. The IQ3_S matrix row also
loses the `#L250` anchor the previous commit moved to 266. Refs mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
…ms and two stale anchors

The falsified invariant this branch corrects still sat in a live production
comment: `DequantQ8_K`'s header said Q8_K never appears in a GGUF file, which a
reader would act on. A GGUF file can carry it, the reader admits id 15, and only
the decode-only embedding gather takes it packed; the three lines stay three
lines so every `cpu_quant_dequant.cpp` anchor the quantization matrix cites
still resolves. The same commit re-points the two IQ2_XS/IQ4_XS `#L156` anchors
at 172, the line the previous commit moved that TEST_CASE to; this branch is
what made them stale, and the base borrowed no such debt. Refs mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
…er exists

The `DqQ8_K` header claimed Q8_K "never appears as a FILE weight, so it can
never reach the gather from the loader". This branch made that false: the reader
now admits id 15 and `KeepQuantGatherDType` admits it, so a Q8_K embedding table
does arrive from the loader. The code already says so — `cuda_quant_dot.cu:224`
wires `X(kQ8_K, DqQ8_K)` into the gather dispatch and `:201` pins the 292-byte
stride against the CPU block — so only the prose was wrong, and it now gives the
real reason the decoder belongs here. Refs mudler#3093.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:deepseek-v4-flash [DeepSeek Harness]
@VikashLoomba

Copy link
Copy Markdown
Contributor Author

CI triage after the repair push — head fb4d78049.

Two branch-local failures were repaired here, and the corrections they implied were carried through the rest of the tree:

  • pr-size rejected three paths in docs/bench-evidence/rocm-quant-gather/oracle-qualification/: the two minimal-diff .patch files, which have no admitted evidence class, and the run's capture archive, which sat one directory too deep. d896102f1 moves qualification-captures.tar.gz up beside the row's seven sibling archives (its sha256 is unchanged, 9f700062…a1bc7, still the value capture-manifest.json seals) and re-homes the two .patch artifacts as documents that reproduce each diff verbatim, record the original file's sha256, and point at the sealed full-context archive members. The checker now reports OK: every explicit path class is within its review budget. (rc=0); all 131 changed paths classify under origin/main's own copy of the checker as well.
  • build-test-cpu (and both sanitize-cpu lanes) failed test_ops_quant_traits at tests/vt/test_ops_quant_traits.cpp:136, where CHECK_THROWS( vllm::GgmlTraits(15) ) asserted that Q8_K never appears in a GGUF file. The reader's case 15 on this branch is correct and mirrors llama.cpp, which carries a real Q8_K traits row (block geometry 256/292, ggml.c:879-884 at the pinned b10451) and validates Q8_K row data as it loads a tensor (llama-model-loader.cpp:1416 into ggml-quants.c:5590-5598). 74baf8c08 replaces the false absence with stronger assertions: the reader geometry agrees with vt::BlockElems/BlockBytes, the id round-trips, and Q8_K has no weight-side vec_dot, is not keep-quant capable, and is not taken by the generic composite. The operator independently reran it: test_ops_quant_traits 10/10 cases and 6226/6226 assertions, test_gguf_keep_quant 55/55 and 10350/10350.
  • 79176b72e, 873807215 and fb4d78049 then removed the same falsified claim from the four remaining comments that carried it (two in the test file, plus include/vt/dtype.h, src/vt/cpu/cpu_quant_dequant.cpp, and src/vt/cuda/cuda_quant_dequant.cuh, where this branch is what made the claim false) and repaired the three line anchors this branch's own edits had made stale (quantization-matrix.md rows 72, 76 and 78). A fresh reviewer mutated each guarantee in a scratch copy and returned PASS: the classifier mutation reproduces CI's unclassified-path error verbatim, and the test mutations (wrong geometry, forced HasQuantDotKernel, the restored CHECK_THROWS shape) each red the intended assertion.

The remaining red checks are red in the same way on origin/main itself, in main's own run 34538060205:

Check Failure Main evidence
sanitize-cpu (address,undefined) test_dots3_note_vision, test_dots3_note_audio, test_openai_api_server_dots3_mm_forward job 103074166410 fails the same three tests
sanitize-cpu (thread) test_gemma4_moe_fp8_native_arm_guard job 103074166517 fails the same test (numbered 162 there, 163 here)
windows-msvc-cpu test_openai_api_server.exe exits -1073740791 (0xC0000409) at localiser cases 58/59/61 job 103074166371 is the same crash and exit code
windows-msvc-vulkan the same crash and exit code job 103074166311

Both sanitize-cpu lanes also carried this branch's own test_ops_quant_traits failure, which 74baf8c08 removes. pr-size passes. mergeStateStatus is UNSTABLE because of the four pre-existing checks above.

…is branch still carries OPEN

This branch carries the six ENG-QWEN35-FULL-ATTN-STATE commits that landed
separately as mudler#3101. That squash rewrote them under one new sha, so the only
collision is the canonical issue record: main reads State CLOSED because mudler#3101
discharged it, and this branch still reads OPEN. Main's copy is the correct one
and is taken verbatim; no product file conflicts.

FOLLOWING_AGENTS_PROTOCOL

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

# Conflicts:
#	.agents/issues/ENG-QWEN35-FULL-ATTN-STATE/ISSUE-GH-3098.md
…tes and never created

Four commit bodies and the spec reference mudler#3113, and four commit bodies plus
tests/scripts/test_rocm_quant_gather_compare.py reference mudler#3126, but neither
had a canonical record anywhere under .agents/issues/. The pull request body
states that the label defect "is filed and fixed in flow as mudler#3126", and nothing
in the tree filed it. Local files are the issue authority, so a cited issue
with no local record is an unowned reference rather than a tracked one.

No gate catches this: check-agent-record.py resolves a bare `#N` and silently
continues when it finds nothing, so the omission is invisible to preflight and
to CI. Imported with scripts/agent-issue.py import-github so the quoted GitHub
text is recorded as historical evidence and the local record is authoritative.

Records only; no product code changes.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5-1m [claude-code]
@localai-org-maint-bot
localai-org-maint-bot merged commit 82de418 into mudler:main Sep 11, 2026
6 of 20 checks passed
mudler added a commit that referenced this pull request Sep 11, 2026
…ation

Commit 96c5e47 reached main without a row/ branch, freezing the
agent-record gate: every PR based on current main fails it. Advances
the enforcement floor from e1b5df1 to 96c5e47, the third advance,
forgiving that one unrepairable violation. Re-pins the floor test
assertion in lockstep and adds the third-advance section to the spec.

The spec change surfaced two untriaged _intake records (#558, #664)
whose issue numbers appear in the forgiven-commits table. Both are
already fixed by the tree; triaged #558 to BENCH-ORACLE-PIN-RECONCILE
and #664 to GATE-WINDOWS-PORTABILITY-TARGET-SCOPE so the agent-record
gate passes.

The windows-msvc-cpu job fails at test_openai_api_server.exe
(STATUS_STACK_BUFFER_OVERRUN) but is not a required check: PR #3097
merged while it was red. The macos, sanitize-address, and sanitize-
thread failures named in #3135 were fixed by #3136, #3138, and #3141.
This commit resolves the last blocking failure.

Paths: checker data (scripts/ci-enforcement-floor.txt), test
(tests/scripts/test_check_commit_trailers.py), document
(.agents/specs/ci-enforcement-floor.md), record
(.agents/issues/BENCH-ORACLE-PIN-RECONCILE/ISSUE-GH-558.md,
.agents/issues/GATE-WINDOWS-PORTABILITY-TARGET-SCOPE/ISSUE-GH-664.md)

Closes #3135

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:regolo/glm5.2 [maki]
localai-org-maint-bot added a commit that referenced this pull request Sep 11, 2026
…radicts the canonical record (#3144)

`GATE-PR-BODY-TRAILERS`. Refs ISSUE-LOCAL-01M298Q7PPM145DQA5C30GRYJA.

## What changed

`squash_merge_commit_message = PR_BODY` makes a pull request body the
landed
commit message, so `Closes #N` in a body closes the GitHub mirror the
moment the
squash lands. Local files under `.agents/issues` are the issue
authority, and
nothing checked that the branch also carries `ISSUE-GH-N.md` reading
`State: CLOSED`. The two authorities diverge at the merge, and the
authoritative
half is the one left reading OPEN.

`scripts/agent-pr-body.py` now refuses such a body. It already fetches
the live
body and already runs before a merge, which is exactly when this
matters.

## Why here, and why only closing keywords

`check-agent-record.py` cannot catch it: it is offline and never sees a
body,
and `check_canonical_issue_references` silently `continue`s on an
unresolvable
bare `#N`. Making that strict was the obvious repair and is the wrong
one.
Measured over four open pull requests, bare citations lacking a local
record run
6 of 7, 4 of 4, 8 of 8 and 10 of 11 — so failing them would fire the
gate on
ordinary work, which AGENTS.md names as the defect rather than the
discipline.
The rule therefore keys on the closing keyword alone.

## Evidence

Red before: a body closing an issue with no record exits 1 naming the
missing
path. Green after: a bare `Refs #N` still exits 0. Both are committed as
cases
in `tests/scripts/test_agent_pr_body.py` (suite: 21 passed, 16
subtests), and
the spec's `## Tests` table is updated because that table is compared
with the
loaded suite rather than sampled.

Found live on four pull requests in one review pass: #3101 carried a
closing keyword for #3098, whose
record read OPEN; #3095 did the same for #3092 while that row's own gate
table reads
FAILING; #3096 carries five closing keywords against four OPEN records
and one
issue with no local record at all; #3097 likewise for #3093, against a
spec saying the
row is not ready to land. On its first live run against #3095 it also
caught a closing keyword for #3106, which the human review pass and I
had both missed — that record
reads OPEN and its Resolution says it stays open until the reviewed
production
repair lands.

The spec's `Kind` line is amended in the same change, because it claimed
this
row edits no checker rule and now it does.

FOLLOWING_AGENTS_PROTOCOL

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

Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
localai-org-maint-bot added a commit that referenced this pull request Sep 12, 2026
…3142)

Commit 96c5e47 reached main without a row/ branch, freezing the
agent-record gate: every PR based on current main fails it. Advances the
enforcement floor from e1b5df1 to 96c5e47, the third advance,
forgiving that one unrepairable violation. Re-pins the floor test
assertion in lockstep and adds the third-advance section to the spec.

The spec change surfaced two untriaged _intake records (#558, #664)
whose issue numbers appear in the forgiven-commits table. Both are
already fixed by the tree; triaged #558 to BENCH-ORACLE-PIN-RECONCILE
and #664 to GATE-WINDOWS-PORTABILITY-TARGET-SCOPE so the agent-record
gate passes.

The windows-msvc-cpu job fails at test_openai_api_server.exe
(STATUS_STACK_BUFFER_OVERRUN) but is not a required check: PR #3097
merged while it was red. The macos, sanitize-address, and
sanitize-thread failures named in #3135 were fixed by #3136, #3138, and
#3141. This commit resolves the last blocking failure.

Paths: checker data (scripts/ci-enforcement-floor.txt), test
(tests/scripts/test_check_commit_trailers.py), document
(.agents/specs/ci-enforcement-floor.md), record
(.agents/issues/BENCH-ORACLE-PIN-RECONCILE/ISSUE-GH-558.md,
.agents/issues/GATE-WINDOWS-PORTABILITY-TARGET-SCOPE/ISSUE-GH-664.md)

Closes #3135

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:regolo/glm5.2 [maki]

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.

3 participants