You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(SPEC-DFLASH2): W6 -- DFlash2 drafts token-exact against a beyond-pin vLLM oracle, and the speed axis is owed (#1314) (#1637)
DFlash2 (`DFlash2DraftModel`) now drafts on this engine, token-exact
against a
beyond-pin vLLM oracle. W6 is the final wave of the six-wave port and
the one
that reads the oracle: W1-W5 landed the config surface, the grouped
dynamic
convolution, the candidate selector, the pair-emitting top-k, the path
walk and
the GGUF arm.
WHAT THE GATE MEASURED. G2 compares our draft blocks against a vLLM
capture on
the published `z-lab/Qwen3.8-27B-DFlash2` checkpoint: 4 of 4 prompts
token-exact,
45 of 47 draft blocks byte-identical. G3 reads acceptance per prompt --
49/54/54/52 accepted over 15/10/10/12 blocks -- identical on both
engines. The
two divergent blocks reject the divergent slot on BOTH sides, which is
why `len`
stays in sync and why G3 is recorded as a COROLLARY of G2 rather than an
independent instrument: on this capture it is arithmetically entailed.
WHAT THE ORACLE DID. Running vLLM against itself across its own
attention
backends, the outputs diverge on 1 of 4 prompts and acceptance moves
0.597 vs
0.657. That is upstream disagreeing with itself, recorded because it
bounds what
any single-backend comparison can claim.
THE PIN IS A DATED EXCEPTION. vllm-project/vllm#52816 MERGED 2026-08-21
at
05:27:22Z (merge commit `b389ac29`, head `3406ec1d`). The gate stays
pinned at
`66e5414c` because that is the wheel that executed; re-labelling a
capture to a
head it never ran would be a false pin. #1561 owns moving it.
The `#1538` index row was SUPERSEDED, not corrected:
`.agents/issue-index.md` is
append-only and a landed row is never edited, so the first repair wave
appended
#1561 rather than editing #1538. The spec's `## Upstream chain` table is
the
authority on what that row's superseded text says.
WHAT IS OWED, NAMED RATHER THAN LEFT TO BE FOUND.
- The SPEED axis is NOT TAKEN. No idle-host A/B was reached, our draft
is off
the paged CUDA-graph fast path, and wall clocks were
CIFS-load-dominated. This
is an open gap, not a ceiling.
- O24: the `at_end` fixture is committed but its `<` to `<=` mutation
was never
run in-suite. An out-of-suite compilation of `ReconstructAcceptance`
shows the
case DOES discriminate (`verified` 1 vs 2), which removes the risk that
the
fixture proves nothing -- it does NOT discharge the owed run.
- O25 / #1607: the DFlash2 startup notice prints TWICE per load.
`CheckDflash2DraftArm`
is reached from `FromModelDir` and again through the engine
constructor's
speculative-config resolution, and carries no once-flag. No weights are
loaded
twice; the classification and its paragraph re-run.
- #1562: the capture harness exists only as prose, so the FLASH_ATTN
golden's
backend label is a post-hoc relabel that cannot be re-derived from this
tree.
INHERITED RED. `test_runner`'s "refuses a non-multiple-of-16 block size"
case
fails on this tree and on pristine `origin/main` for x86 CPU builds. It
is #1608,
introduced by #1273 and owned by `BACKEND-ROCM`: `build-test-cpu` was
green at
`483cd319` and red at `e2a9e035`, while `build-test-cpu-arm64` passes at
both.
Not caused here and not repaired here. `test_ltx2_video` (#1559) is
load-sensitive
and passed on the sibling branch at the same pin.
Full ctest on the merged tree: 586 tests, 581 passed, 3 skipped, 2
failed, both
named above.
FOLLOWING_AGENTS_PROTOCOL
Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: ClaudeCode:claude-opus-5 [Claude Code]
---------
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
Copy file name to clipboardExpand all lines: .agents/benchmark-record.md
+243Lines changed: 243 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26067,3 +26067,246 @@ never construct `Qwen3NextAttention`. The `Qwen3.8-27B` rows ran through
26067
26067
`tools/bench/run_serve_low.py`, which has passed `--language-model-only` since it
26068
26068
was written. The Qwen3.5-4B GDN prefill kernel row is conv and post-conv timing
26069
26069
on the LINEAR-attention path, which the full-attention preamble does not touch.
26070
+
26071
+
## SPEC-DFLASH2 W6 — the gates, taken against a beyond-pin oracle that had to be made to answer (2026-08-21, `row/SPEC-DFLASH2-W6`, `dgx:gpu0`, #1314 / #1456 / #1538)
26072
+
26073
+
**The first time either engine has been asked what the OTHER's DFlash2 draft
26074
+
proposed.** Everything before this wave measured mechanisms; this measures the
26075
+
two claims the mechanisms were built to make.
26076
+
26077
+
### The two engines, pinned
26078
+
26079
+
| | ours | oracle |
26080
+
|---|---|---|
26081
+
| revision | tree `0ac277b3a66b5deabe4871959f0f03566c08deda` (RECONSTRUCTED, see below), base `origin/main` `5702d8f83` | vLLM `0.1.dev1+g66e5414c6` ([vllm#52816](https://github.com/vllm-project/vllm/pull/52816) head `66e5414c6`, **MERGED** `2026-08-21T05:27:22Z` at `3406ec1d`, merge commit `b389ac29`) |
3 cases / 90 assertions and `test_qwen38_dflash2_spec_decode` 4 cases / 70, both
26291
+
`SUCCESS!` / rc 0.
26292
+
26293
+
| mutation | result |
26294
+
|---|---|
26295
+
| **M1** — the DFlash2 startup notice reverted to its pre-repair `"is OPEN upstream at head 66e5414c"` text (match 1, `+3/-5`, compile rc 0) | 1 case / **4 of 90** red, `Status: FAILURE!`, rc 1 — the four new merged-state assertions and nothing else |
26296
+
| **M2** — `len < out.size()` -> `len <= out.size()` on `Reconstructed::verified` | **NOT TAKEN.** Attempted and VOIDED by a harness race: two instances ran concurrently and the second took its baseline after the first had mutated, so it read `match count: 0` — its "before" hash `770bee0a` is the MUTATED file, against the clean `843d610b`. Tree verified undamaged (both files byte-identical to `HEAD`); harness now takes a `flock`. A clean retake was unaffordable because every cycle rebuilds the whole 464-object library and the box ran at loadavg 145 / 12 objects per 10 min. The `at_end` boundary fixture IS committed and is UNPROVEN; taking M2 on a quiet box is owed |
26297
+
| liveness by TOTAL block count instead of per record | 1 case / 1 red |
26298
+
| every golden declared live | 1 case / 2 red |
26299
+
| `with_blocks` counts drafts-less records too | 1 case / 4 red |
26300
+
| the `hook_stats` residual claimed 0 instead of 3 | 1 case / 1 red |
26301
+
26302
+
**The third one is why a doctest assertion line is not a verdict.** It prints
26303
+
`assertions: 64 | 64 passed | 0 failed` — one FEWER than green and all passing —
26304
+
while the case failed and the process died on a signal. `Status:` and the exit
26305
+
code bind; the assertions line reads like a pass.
26306
+
26307
+
NOT mutated, and named rather than assumed: the e2e case's own `gd.live` guards
26308
+
and its two new ours-vs-theirs assertions. That case is dgx-only and SKIPs here,
26309
+
so no mutation of it — and no production-call-site deletion — can be executed on
26310
+
this box. The always-on case exists so the liveness RULE is gated where it runs;
| Claim | Row IDs | Agent | Worktree / remote dir | Branch | Owned scope | State | Last update |
4
+
|---|---|---|---|---|---|---|---|
5
+
| `CLAIM-SPEC-DFLASH2-W6` | `SPEC-DFLASH2` (`ACTIVE`) | Claude Code (opus-5), helper role — W6 took the gates; a FRESH IMPLEMENTER, who wrote none of W6, repaired the fresh review's findings | W6: `dgx:gpu0` through an `rc` lease, wheel built in-lease at `66e5414c`, `nvcc` 13.0, `sm_121a`. Repair wave: isolated worktree, CPU only, no lease, no GPU, no oracle run, no checkpoint | `row/SPEC-DFLASH2-W6`, issue [#1314](https://github.com/mudler/vllm.cpp/issues/1314) | Owns ONLY wave W6 of the spec's `## Work breakdown`: reading `## Gates` G2 (draft-token identity) and G3 (acceptance, same-trajectory) against the beyond-pin oracle on a leased GPU, and the records that result invalidates. That is `tests/parity/test_qwen38_dflash2_spec_decode.cpp` and the two committed goldens under `tests/parity/goldens/dflash2_27b/`; the `SPEC-DFLASH2` engine-matrix row; `docs/STATUS.md`, `docs/BENCHMARKS.md`, `docs/FEATURES.md` and `docs/SPECULATIVE-DECODING.md`; the spec's `## Upstream chain`, `## Gates`, `## Oracle`, `## Dependencies`, `## Work breakdown`, `## Owed` and `## Now`; and one `.agents/benchmark-record.md` entry. EXCLUDES any throughput ratio, which `## Gates` defers and which no wave has taken. EXCLUDES reconciling the port onto merged upstream ([#1561](https://github.com/mudler/vllm.cpp/issues/1561)), which the repair wave opened and did NOT do. EXCLUDES the probabilistic draft-sample arm (`## Owed` O12) and the CUDA top-k NaN ordering ([#1489](https://github.com/mudler/vllm.cpp/issues/1489)). EXCLUDES any parity-pin advance: the oracle is BEYOND-PIN and `.agents/upstream-sync.md`'s pin block is untouched | `ACTIVE` | 2026-08-21 — W6 read G2 (4/4 prompts token-exact, 45/47 draft blocks byte-identical) and G3 (acceptance identical per prompt, 209 both engines) on `dgx:gpu0`, and G4/O17 end to end on a published GGUF artifact. A fresh review returned FAIL on one HIGH and six MEDIUM findings; a fresh implementer repaired them on the same branch. HIGH: vllm#52816 had MERGED 46 minutes before W6's work commit and five statements plus the gate-head rule said otherwise — corrected, the head kept as a DATED exception because the capture predates the merge, and [#1561](https://github.com/mudler/vllm.cpp/issues/1561) opened for the reconciliation. MEDIUM: a golden with zero drafts passed the liveness precondition and produced a structural verdict about OUR engine — repaired with `InspectGoldenDrafts`, per record rather than by total, VOID rather than failed, and gated on every box by a new checkpoint-free case; G3 was declared teacher-forced and is an admission condition; G3's headline is a COROLLARY of G2 on this capture, verified by recomputing both divergent blocks; the near-tie attribution named an op the block shape argues against and is WITHDRAWN ([#1564](https://github.com/mudler/vllm.cpp/issues/1564)); the pinned tree was the FAILING run's and the passing tree is reconstructed as `0ac277b3`; and W6 recorded no mutations anywhere — seven are recorded now, each with match count, compile rc and sha256-verified restore. The oracle harness is prose only and is owed ([#1562](https://github.com/mudler/vllm.cpp/issues/1562)) |
0 commit comments