Skip to content

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 07 Oct 17:54
· 11 commits to master since this release

hipfire v0.4.1

Released 2026-10-07. Measured on release candidate RC5 7dc9885eb0b2 (the release commit adds only documentation and the registry on top of it). Full detail: CHANGELOG.md.

Fixtures: Flash-Next = qwen3.8:flash-next, now the symmetric GPTQ3 requant; 27B = qwen3.8:27b-mq4-xts unless specified. Halo = Strix Halo (gfx1151); R9700 = Radeon AI PRO R9700 (gfx1201); XTX = 7900 XTX (gfx1100). Every number below names the build that produced it; cells that were not re-measured on RC5 say so. Synthetic pp8192 and Ciru prompt-file prefill are different workloads.


Highlights

  • Flash-Next: architecture-sized prefill chunks, PeaceMaker QSA and MQ6 kernels, native MTP with n-gram takeovers and a same-request AR floor, an engine-owned multi-session prompt cache with live continuation (building on @fivetide's #825/#826), exact HF byte-BPE whitespace tokenization, and PLE read/lookahead changes.
  • Flash-Next greedy MTP and AR now agree across the repaired Q8-state, HC-projection and conversation-history paths. Penalties-aware sampled native MTP applies repeat, presence and frequency penalties to the target and draft distributions, with a bit-exact GPU penalty prepass. Penalties are ~free on AR and cost at most ~1.5 % on sampled MTP (Halo). Sampled MTP preserves AR's sampling distribution, not its seeded token stream.
  • 27B: exact XTX gate/up specialization and Halo A4 epilogue; R9700 split-KV DFlash verification remains opt-in.
  • Serve: Flash-Next tools and OpenAI stops work with native MTP; reasoning budgets close the think span rather than fail the request. An optional browser UI is available.
  • Kernel packs cover Flash-Next long prefill, AR, native and sampled MTP, and serve on Halo/R9700 without cold-cache device compilation. PeaceMaker builds code objects natively; the NPU work remains experimental and outside inference.

Integrated feature modes

Feature Release mode
Prompt reuse Engine-owned session cache (default 8 GiB, HIPFIRE_SESSION_CACHE_BYTES=0 disables) plus live continuation inside a conversation, for AR and native MTP. Live continuation is session-exact, not cold-prefill identical; cross-session snapshots at prefill-chunk boundaries are cold-exact. The RC3 prefix and radix caches are removed.
MTP + n-gram Default auto: on for native Flash-Next MTP on gfx1151/gfx1201, triple 5/3/3, cost-aware takeovers. HIPFIRE_MTP_NGRAM=0 opts out. This is not a universal greedy-token identity claim.
Same-request AR floor Default-on. A measured calibration/probe compares speculative cost with ordinary AR and retires the request to head-free AR when no measured option wins. This bounds speculative probing, not total request wall time; HIPFIRE_MTP_AR_FLOOR=0 restores the pre-floor chooser.
R9700 VMM Automatic Flash-Next QSA context/workspace demand mapping on certified gfx1201 as well as gfx1151; committed pages grow with touched context. memory.kv_backend = "legacy" / HIPFIRE_KV_BACKEND=legacy opts out.

Flash-Next performance — Halo / R9700

Halo columns: RC5 7dc9885eb0b2 against the shipped beta 90d90306d8, medians of three fresh processes ([min–max]), same release-matrix cells, RC5 and RC3 interleaved on the same host. R9700 column: the RC3 d1faafea0c release-matrix lane, not re-measured on RC5 (RC5's card-B gates were correctness gates). Ciru 8K / 128K cold prefill were not re-run on RC5 on Halo; the beta numbers are shown for reference.

Metric Halo RC5 Halo beta R9700 RC3 lane
Synthetic pp8192, prompt tok/s 2072.9 [2072.7–2076.9] 2082.9 [2078.3–2084.9] 3817.0
Ciru cold prefill 8K, prompt tok/s not re-run 1559.7 [1526.5–1569.9] 2082.6
Ciru cold prefill 32K, prompt tok/s 1776.5 [1776.3–1780.3] 1788.2 [1772.6–1789.9] 2051.3
Ciru cold prefill 128K, prompt tok/s not re-run 1665.8 [1660.2–1670.8] 1814.6
Greedy AR decode, tok/s 33.8 [33.8–33.9] 33.8 [33.8–33.9] 34.92
Greedy native MTP decode, tok/s 58.7 [58.5–58.8] 56.7 [56.7–56.8] 40.71
Sampled native MTP decode, tok/s 57.0 [45.5–57.2] (presence-penalty cell, one disturbed repetition) 54.8 [54.8–55.0] (neutral sampling cell) 41.09

Judged by the release rule (median at least 2 % lower and disjoint repetition ranges): no Halo cell regresses against beta. pp8192 (−0.5 %) and Ciru 32K (−0.7 %) are inside the rule; greedy AR is equal and MTP is +3.5 %. Against RC3 the same cells are equal or faster (pp8192 −0.0 %, Ciru 32K −0.5 %, AR 0.0 %, MTP +1.7 %, penalized sampled MTP +1.9 %). One prompt looked slower in the first sweep: greedy MTP on humaneval_0_has_close_elements read 57.1 [56.7–57.2] against RC3's 60.1 [59.5–60.2] tok/s (−5.0 %, disjoint ranges, identical token IDs). A re-run of that cell with fresh processes, beta, RC3 and RC5 interleaved (three each), did not reproduce it: RC5 57.5 [56.5–58.0], RC3 58.0 [57.7–59.9] (−0.9 %, ranges overlap), beta 53.5 [53.4–53.5] (RC5 +7.5 %, ranges disjoint in RC5's favor). Greedy AR emits the same token IDs as RC3 on six of eight prompts (the two others have whitespace runs that the tokenizer fix re-encodes), and MTP equals AR on every prompt. The penalty prepass is neutral-to-positive on penalized sampled MTP (57.0 on, 56.6 off). One penalized-sampled repetition of the first sweep (45.5 tok/s) coincided with a long pause in the sweep log; the median is unaffected.

Halo keeps F32 QSA state with PM score/select by default; q8 QSA stays opt-in (--kv-mode q8). R9700 keeps fp8 QSA. Large PLE reads use wider reader pools; lookahead retains the next chunk's materialized rows. The first chunk remains SSD-dependent, and prefix-checkpoint quiescing can cancel the final chunk's lookahead.

The MTP head is built with row-chunked requantization scratch instead of a full-vocabulary F32 temporary. On R9700, automatic placement can retain another expert layer with MTP attached. The default chunk remains 4096 on R9700 and 8192 on Halo; a larger R9700 chunk is not promoted because its scratch reduces expert residency and regresses decode.

Task evaluations (Halo, RC5 7dc9885eb0b2, release defaults, native MTP)

Suite Result Board seconds
TC70–84, seed 123 / 124 / 125 23/30 (77) / 24/30 (80) / 21/30 (70) 169.87 / 158.21 / 162.86
TC70–84, 3-seed median 23/30 at 162.86 s (mean 22.7 at 163.6 s)
HermesAgent-20 pass 1 95 (18/20 binary), 89 primary tool calls 729.79
HermesAgent-20 pass 2 96 (18/20 binary), 117 primary tool calls 782.03
Hermes smoke 100 (3/3) 58.16

Board seconds follow Ciru's convention: TC is the sum of scenario durations; Hermes is the sum of case wall seconds. Sampled TC uses temperature 0.7, top-p 0.8, top-k 20, presence 1.5. Greedy TC panel ("Original TC70-84": T0, top-k 1, 8 turns, seed 123, release speculation; earlier candidates, not RC5): RC3 d1faafea0c 22/30 at 127.04 s and RC4c 486083f052 21/30 at 126.41 s.

Published reference results, quoted from Ciru's board (their numbers, their harness, not re-run here): Halogen TC recommended-sampler panel 80 (24/30) at 215.07 s; HermesAgent-20 99 at 673.02 s (pass 1) and 94 at 925.21 s (pass 2); greedy "Original TC70-84" panel 21/30 at 146.34 s; Gufo TC recommended panel 73 (22/30) at 240.07 s, greedy panel 22/30 at 162.47 s. Strata self-reports 23/30 in 183 s on TC (Niko1221/Strata; self-reported, not on Ciru's board and not verified here). Ciru's board is the comparison yardstick, not a controlled same-model A/B; no competing engine was run for these notes. Hermes results identify the harness and the served model id: GPT prompt injection and grading-rule differences make earlier local scores non-interchangeable.

Standing against those references: the TC median (162.86 s) is faster than Halogen's 215.07 s and than Strata's self-reported 183 s, at 23/30 against Halogen's 24/30; the greedy panel is faster than Halogen (126–127 s against 146.34 s) at 21–22/30 against its 21/30. Hermes pass 1 is slower than Halogen's published time (729.79 s against 673.02 s, 95 against 99); see Known issues.

27B

R9700 metric (RC2 cb1a90f90b lanes, cards A / C / E; not re-measured on RC5) Result
pp8192, prompt tok/s 5125.5 / 5108.0 / 5133.7
AR decode, tok/s 40.88 / 40.82 / 40.84
Native MTP and DFlash decode not measured in this release matrix

The 27B lanes ran on RC2; RC5 carries tokenizer, sampler and penalty edits in shared crates but no 27B kernel change, and the 27B lanes were not repeated. Against beta the RC2 lanes measured AR decode +0.3…+0.5 % and pp8192 −0.8…−1.0 %; a six-repetition bisect on all three cards found the pp8192 difference to be host noise (beta 5169 / 5162 / 5176 against RC 5162 / 5158 / 5176 tok/s).

  • XTX MQ4V2 gate/up specializes the 27B K5120 shape without changing accumulation order or adding a weight copy.
  • Halo dense IU4 prefill uses exact activation-producer twins and a fused gate/up-to-A4 epilogue on admitted shapes.
  • R9700 DFlash rollback skips the DeltaNet restore copy by default, byte-identically. No end-to-end speedup is claimed for that change.
  • Packed-Q8 split-KV DFlash verification is default-off: HIPFIRE_GFX12_FA2_SPLIT_VERIFY=1, with HIPFIRE_GFX12_FA2_SPLIT_COUNT=2|4|8. It applies only to eligible eager sequential verification; AR, tree, independent-batch, graph and retained recording keep their established routes. It matches the measured long-prompt token IDs, not a universal bit-exactness claim.
  • Dense tensor-parallel Qwen MTP is opt-in (--spec mtp); automatic TP serving remains AR. Flash-Next multi-card TP/EP is not part of this release.

Serve / API

  • Flash-Next AR and native MTP support tools and answer-only OpenAI stop matching, including streamed partial matches. Tool argument strings retain the model's whitespace and JSON spelling, with conversion driven by the declared schema.
  • EOS inside reasoning returns stop with reasoning_content, possibly no answer, rather than a stream error. Explicit max_think_tokens closes reasoning and leaves the remaining output budget for the answer.
  • Multi-slot thinking follows the rendered template; reasoning_effort is accepted. Omitted sampling fields and context-fitted output budgets use the sequential route's rules. timings.decode_tok_s is omitted when no daemon-measured decode rate exists; wall rate remains hipfire.tok_s.
  • Invalid requests return typed 400 errors; missing models return 404. n != 1 is rejected rather than silently returning one choice. Vision and pipeline routes report length when the output budget expires.
  • /ui is opt-in (--ui, serve.ui, or HIPFIRE_SERVE_UI=1). Flash-Next local trunks appear in /v1/models.
  • Serve by tag: hipfire serve qwen3.8:flash-next. Serving by a filename or path containing "gpt" makes Hermes inject GPT prompt blocks. Tag serving exposes the tag as the model id and avoids that confound.
  • CPU sampling now honors top_k and min_p on the repaired routes. Some other model routes still ignore these fields; standard serving still accepts but does not enforce response_format. See SERVE.md.

Fixes

  • QSA threshold-tie counts no longer overflow at long context; gfx1151 GDN tail WMMAs stay outside partial-row EXEC masks.
  • GDN LDS handoffs explicitly wait for stores before barriers. Scratch growth invalidates captured graphs/tapes; AR graph replay checks its bound device pointers. Effect-incomplete or unbindable Redline tapes fail closed to HIP.
  • Flash-Next MTP stops at end-of-turn, respects per-token Q8 quantization, uses single-row HC accumulation order, and shares emitted-history token caching with AR.
  • Serve now forwards Flash-Next's prior reasoning_content into the thinking-history template, as it already did for Qwen3.5/3.6. Earlier reasoning is no longer replaced by an empty think block, repairing canonical prompt extension for prefix continuation. The shared history-reasoning architecture table is pinned by carrier tests.
  • Qwen3.x native MTP now applies repeat, presence and frequency penalties in sampled and greedy verification instead of silently dropping them; DFlash combinations that do not implement penalties route to penalty-aware AR. The pre-existing 27B greedy-plus-presence MTP/AR divergence is separate and is not claimed fixed here.
  • VL mrope forwards grow the VMM mapped prefix before writes. Oversized Flash-Next context is rejected before allocation. Model switches unload the admitted prior model before construction; a subsequent load failure explicitly leaves no model loaded.
  • Legacy 6-bit Qwen/MoE weights select the correct kernels, and their residual GEMV is recorded for retained replay. Uniform MQ6 MoE attention is admitted by multi-slot serving.
  • gfx1201 oversized grid axes are split/folded or rejected instead of silently aliasing rows. gfx11 fused DeltaNet and RoPE decode use the unfused FMA operand order.
  • Windows/WSL2 daemon startup and GPU identity/locking are repaired. WSL2 falls back to HIP and legacy KV unless explicitly overridden; native Linux is unchanged.
  • Bench speculation no longer silently runs AR, and JSON records the resolved route, tau and power/memory state. Matrix loads size context to their requested shape.
  • Release eval lanes install the matching kernel pack and check for zero new JIT objects, so a missing pack's cold compilation is not reported as model prefill performance. This complements the shipped long-prefill/native-MTP/serve pack coverage fix; it is not an invented startup-time discount.
  • Quantize rejects unknown formats and unread flags, resolves HF snapshots deterministically, records supplied provenance, and fails writes atomically without partial output. Audited V2 Promote6 routes use MQ6V2; existing artifacts are unchanged.

Defaults that changed — exactness and opt-outs

The gfx1201 FN dense GDN scan and IU4-sym MoE on gfx1201/gfx1151 are KLD-gated, not bit-exact. IU4-sym trades increased BF16-reference KLD for prefill speed; task scores tie within seed spread. Dense GDN improves the code KLD result; the WikiText-2 change is not significant. Each switch below restores its corresponding previous route, not all previous-release numerics at once.

Numerical / sampling / artifact changes (not byte-exact)

Default Opt-out / previous behavior
gfx1201 FN dense GDN scan HIPFIRE_FN_GDN_DENSE_SCAN=0 — prior pipe128 prefill, prior output exactly for this route.
Symmetric IU4 MoE on gfx1151/gfx1201, eligible symmetric expert headers only HIPFIRE_QWEN4_MOE_SYM_IU4=0 — F16 MoE; KLD-gated, not bit-exact.
Gathered F16 WMMA QSA on gfx1151/gfx1201 HIPFIRE_QWEN4_QSA_WMMA_GATHER=0 — previous attention; F16 operand rounding, admitted against an f64 reference/BF16-storage error bar, not bit-exact. Short-context near-tied argmax can flip.
gfx1201 F16 WMMA HC/projection route HIPFIRE_QWEN4_F16_WMMA_GFX1201=0 — previous multirow/SIMT arms; KLD-gated, not bit-exact.
Architecture-sized FN chunks: Halo 8192 / R9700 4096 HIPFIRE_PREFILL_CHUNK_ROWS=1536 — previous chunk ceiling; results are not bit-exact across chunk sizes. Admission may reduce the requested ceiling for memory.
Sampled native MTP HIPFIRE_MTP_SAMPLED=0 — sampled AR. Distribution-exact, not byte-identical to AR for a seed.
Flash-Next prompt reuse: engine-owned session cache plus live continuation HIPFIRE_SESSION_CACHE_BYTES=0 — no cache; every turn prefills cold (default 8 GiB). Live continuation inside a conversation is session-exact, not cold-prefill exact (its state descends from decode). Cold-exact snapshots at prefill-chunk boundaries serve other sessions. The RC3 prefix/radix caches are removed; HIPFIRE_QWEN_RADIX_CACHE is read by nothing.
MTP + n-gram takeovers (default auto: on for native Flash-Next MTP on gfx1151/gfx1201) HIPFIRE_MTP_NGRAM=0 — native MTP without takeovers. Greedy output can differ; do not treat it as a byte-exact replacement.
Byte-level BPE tokenizer whitespace boundaries (all byte-BPE families) No switch. Prompt token IDs change for text with whitespace runs before non-space characters (the Hugging Face \s+(?!\S) alternative); generation for the same text is not expected to match older releases.
qwen3.8:flash-next resolves to GPTQ3 Keep an explicitly selected previous artifact/tag. No env switch changes the downloaded artifact; IU4 opt-out changes only its execution route.
Gemma4 lowered full-attention KV uses Q8 for auto HIPFIRE_KV_MODE=legacy-asym3 — previous cache. Default greedy text changes; sliding attention stays Q8.

Remaining performance defaults (exact replacements)

These replacements are byte-exact against their corresponding incumbent routes; this does not override the numerical, sampling, chunk-size or artifact exceptions above.

Default / scope Env opt-out
PM gathered QSA, gfx1151/gfx1201 HIPFIRE_QWEN4_QSA_PM=0
PM QSA score and select, gfx1151 (also the opt-in q8 state) HIPFIRE_QWEN4_QSA_SCORE_PM=0; HIPFIRE_QWEN4_QSA_SELECT_PM=0 independently; score opt-out restores the fused q8 selector.
PM MQ6 trunk, gfx1201 and selectively large gfx1151 shapes HIPFIRE_QWEN4_MQ6_X4_PM=0
MQ6 X-LDS trunk / Halo tile table and region fold HIPFIRE_QWEN4_MQ6_X4_GFX1201=0; HIPFIRE_QWEN4_MQ6_X4_TILE=0; HIPFIRE_QWEN4_MQ6_X4_REGIONS=0
HC fuse (Halo level 3; R9700 level 1), up tile and down tile HIPFIRE_QWEN4_HC_FUSE=0; HIPFIRE_QWEN4_HC_UP_TILE=0; HIPFIRE_QWEN4_HC_DOWN_TILE=0
Halo HC row fold / GDN conv+QK norm HIPFIRE_QWEN4_HC_ROW_FOLD=0; HIPFIRE_QWEN4_GDN_CONV_QKNORM=0
MoE combine zero-init, fast router and fused PLE, gfx1151/gfx1201 HIPFIRE_QWEN4_MOE_COMBINE_ZINIT=0; HIPFIRE_QWEN4_ROUTER_FAST=0; HIPFIRE_QWEN4_PLE_FUSE=0
gfx1201 pipe128 GDN fallback recurrence HIPFIRE_QWEN4_GDN_PIPE=0 (dense-scan opt-out is separate)
gfx1201 long-prefill expert staging HIPFIRE_QWEN4_EXPERT_STAGE=0
Wide PLE readers / Halo batched MTP fill HIPFIRE_QWEN4_PLE_WIDE_READERS=0; HIPFIRE_QWEN4_MTP_BATCHED_FILL=0
Halo / R9700 FN demand-mapped QSA VMM (certified gfx1151/gfx1201) HIPFIRE_KV_BACKEND=legacy
Native FN MTP with gfx1201 host-mapped experts HIPFIRE_MTP_MODE=off / HIPFIRE_SPECULATION=off
Retained PM4 for gfx1201 FN with MTP off HIPFIRE_REPLAY_BACKEND=hip
gfx1100 K5120 MQ4V2 gate/up specialization HIPFIRE_MQ4V2_GATEUP_K5120=0
gfx1201 DFlash snapshot flip HIPFIRE_DN_SNAPSHOT_FLIP=0
Halo dense A4 epilogue / batched RMSNorm producers HIPFIRE_V2B_A4_EPI=0; HIPFIRE_RMSNORM_P1A_BATCHED=0 (RMSNorm/fold symbols)
gfx1151 FA2 wide automatic envelope HIPFIRE_GFX11_Q8_FA2_WIDE=0
gfx1201 Gemma4 lowered graph replay HIPFIRE_GEMMA4_GRAPH=0
Flash-Next GPU penalty prepass (greedy AR rows and sampled-MTP verify rows) HIPFIRE_QWEN4_PENALTY_PREPASS=0 — host penalties; emitted IDs bit-exact against the host path on both arches (24/24 prompts each).

Known issues

  • Flash-Next greedy chain: a turn can end inside its reasoning. In serve_harness's five-turn chain (greedy, T=0) turn 4 (the four-sentence story) emits <|im_end|> instead of </think>, so the visible answer is empty and the story sits in reasoning_content. It is deterministic, identical with MTP on and off, and also occurs with the session cache disabled (HIPFIRE_SESSION_CACHE_BYTES=0), so it is the model's greedy trajectory at that prompt, not cache state; beta passes the same chain on a different trajectory. The server reports stop with reasoning_content and no answer, as documented under Serve / API. Seen on gfx1151 and gfx1201.
  • R9700 hardware tests: session_cache_hw and mtp_takeover_fill_hw run out of memory at weight load on the 34 GB R9700 because the hw-test loader does not honour expert residency. This is a test-harness limit, not a product failure; both pass on Strix Halo.
  • Hermes pace vs Halogen on Halo: pass 1 scores 95 in 729.79 s against Halogen's published 99 in 673.02 s (4 points lower, 56.8 s / 8.4 % slower); pass 2 scores 96 in 782.03 s against its published 94 in 925.21 s (faster and higher). Single runs per pass (Ciru's convention); Hermes score noise between runs is several points. The pass-1 gap is generation volume, not decode speed.
  • TC-75 and TC-76 score 0 on every sampled Halo seed of RC5 (presence 1.5), and TC-75/76 stayed at or near 0 in every arm since RC3, also with the session cache off; RC3's greedy panel scores TC-76 2.
  • Tool-call conversations do not reuse the session cache. A turn whose history contains earlier tool calls is re-rendered differently from the committed live record, so it is not a strict extension and gets no live continuation (measured on RC4c: Halo TC prefill equals the cache-off count), and TC-shaped cross-session traffic gets no cross-session hits either (0 of 13 turns on R9700, RC5). Plain chat conversations and cross-session prefixes do hit (68–78 % of prompt tokens on R9700). The TC numbers above therefore carry no cache speedup.

Upgrade notes

hipfire stop
hipfire update
hipfire pull qwen3.8:flash-next
hipfire serve qwen3.8:flash-next
  • Reinstall matching release kernel packs for compiler-free use, including the new XTX specialization. Gemma4 and LFM2.5 still have documented pack gaps and need a device compiler; DeepSeek4 pack coverage was not traced.
  • Review the numerical-route switches above if preserving prior output is required. Re-pulling Flash-Next selects a different artifact; disabling IU4 alone does not restore the old artifact.
  • Unset Flash-Next expert placement now falls back to auto when a discrete card cannot fit everything. HIPFIRE_QWEN4_EXPERT_VRAM_LAYERS=N or auto explicitly selects placement; use a full layer count only when it fits. Discrete FN startup also sets ROCm host-memory backing/copy defaults before HIP loads; explicit HSA_USERPTR_FOR_PAGED_MEM and GPU_PINNED_MIN_XFER_SIZE values override them.
  • PFlash and CASK/TriAttention remain deprecated, scheduled for removal in 0.5.0. Use the session cache rather than PFlash. MTP + n-gram is default-on for native Flash-Next MTP; HIPFIRE_MTP_NGRAM=0 disables takeovers. Its pool persists across requests and greedy text can differ.
  • q8 QSA, W4A8 MoE, GDN Q8-inline, naive sampled verification, and Flash-Next projection-region experiments are not new automatic defaults. ROCm 10.1 and FN multi-card mesh work are outside this release.

Contributors

External author credits below were collected from v0.4.0..90d90306d8 using the credits script's owner-exclusion convention; the release candidate's integrated feature owners and commits are recorded in the CHANGELOG.

  • @fivetide / Bjoern Agent: Flash-Next/QSA series from #774, GDN tail fix #797, FA2 scratch guard #802, VL VMM growth #803, experimental NPU ring #818, and the engine-owned session cache and message-end snapshot work (#825 / #826), which this release's Flash-Next prompt reuse is built on.
  • @HUSRCF: packed-Q8 split-KV verifier #760 and gfx1100 K5120 specialization #816.
  • @ghazni101: decode timings #807, browser UI #808 and multi-slot reasoning #811.
  • @aldrouil / Avery Drouillard: legacy 6-bit residual dispatch/recording #810 and model-discovery follow-up to #787.
  • @alpineQ: dense-TP MTP #769, ported onto the current serving split with co-author credit.

#759's gfx1100 AWQ producer and #814's pageable staging are held, not release features. The range also contains maintainer/automation commits by Kaden Schutt, Claude, composer, FnTrunkIu4 and TeacherS4; these are not additional external PR authors.