50 commits since v0.8.1. Pre-1.0 minor bump — contains a real Rust
semver break in addition to two big perf wins and a new dispatch
pre-bake infrastructure.
Breaking:
- SdpaParams gains do_causal: bool (ADR-030 iter-87, c24beb4).
Struct is not #[non_exhaustive], so callers using fully-explicit
construction will fail to compile with "missing field do_causal".
An impl Default for SdpaParams was added (default = true,
matching pre-iter-87 causal behavior), so callers using
`SdpaParams { ..Default::default() }` are unaffected. The flag
flips to false at the DFlash drafter full_attention layer to
enable bidirectional block-diffusion. GPU params layout grew
28 → 32 bytes accordingly (39a9e68).
Perf wins (default-on):
- MoE routing V3 — parallel SG-tournament top-K (5119eee), +11.5%
measured wall, with safety hardening (93a3083 lex-on-tie +
OOR-shuffle guard) and batched prefill counterpart (720e763),
V3↔V2 divergence closed to byte-identical via tree-reduce in
the batched softmax (9496c22).
- Precompiled .metallib (3378f86 infra + 7fd679f default-on after
multi-regime validation), +5.89% (b32b81e dispatch_tracked
migration, 536210e empirical bench).
- Env-flag caching wave at hot-path sites (step 1ao→1bb), ~1%
cumulative wall.
ADR-029 dispatch pre-bake:
- DispatchRecord type (1f86fbd)
- build_q6k_id_nr2_m1_record (5d0a140), build_q8_0_id_decode_record
(12d3259), build_rms_norm_decode_record (5d75def)
ADR-030 — new prefill / cache kernels:
- F16 D=256 resume dispatcher (a37ed31)
- F16 D=512 resume + validate_buffer_size (b55ba4e)
- BF16 D=512 resume dispatcher (42350bc)
- BF16 → BF16 head-major KV cache copy + byte-identity test
(83cb002, bf1befd)
- SDPA do_causal flag (c24beb4) — see Breaking above
Defense — dtype coherence guards (non-breaking, tightens behavior):
- rms_norm weight + output (f865e34)
- sdpa Q/K/V/output (f13ec33)
- rms_norm fused + no_scale (0ea781a)
- softmax / gelu / softcap / rope (245d34c)
- transpose input/output (146ddce)
Correctness:
- HF2Q_PIPELINE_TG_MULT_HINT runtime safety check (cddf39e)
caught a silent corruption bug in qwen3.6; e7a6b33 unblocks
the universal hint by fixing ssm_conv tg=255 + label panic.
Plus: README refreshed for v0.7.0–v0.9.0 surface (previous commit).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>