Content Quality: Compact, well-structured Briefing (669 words, inside the 300-800 range). Lists the headline features, ten upgrade notes, upgrade command and an honest 'What We Don't Know' section.
Source Verification: Read all three gzipped snapshots (source-0 release page, source-1 PR #28403, source-2 PR #39627); sha256s in the manifest, all HTTP 200, no archive fallback, suspicious_patterns null for all three (also grepped the extracted text for 'ignore previous', 'AI agent', 'system prompt': 0 hits). Snapshots are full, raw page text, not thin, so no live fetch was needed for the release or #39627; I did one live WebFetch of PR #28403 only as a cross-check (it confirmed the opening paragraph, merge by ShangmingCai, authored by inkcherry; its summary was not treated as authoritative, the snapshot text is). source-0: confirmed '779 PRs from 227 contributors'; 'PD instances can switch between prefill and decode on the fly, no restart needed (#28403)'; 'The prefix cache now runs on a Rust core by default (#39627)'; 22% faster first token on long prompts for DeepSeek-V4.1 (#40352); 20.6% higher prefill throughput in PD serving for Kimi K3 (#40045); GLM-5.3-Flash on AMD MI355X with FP8 / MXFP4 MoE and MTP (#38546, #39341, #39778); /v1/decisions quote 'turns an LLM / VLM into a low-latency classifier and scorer' verbatim; /v1/score; the full model list (5 LLM/VLM, 5 diffusion); 'Introduce runtime role switching between prefill and decode' (changelog entry, #28403); the uv pip command; Docker list (NVIDIA CUDA 13, AMD MI35x/MI30x, Intel GPU, Intel CPU); 'experimental Rust router and frontend'. All ten 'Breaking Changes & Upgrade Notes' entries checked individually against the release text and match: (1) Rust core default with Python fallback and SGLANG_UNIFIED_RADIX_TREE_CORE_BACKEND=python (#39627); (2) FlashInfer MoE fused finalize off, SGLANG_FLASHINFER_MOE_FUSED_FINALIZE=1 restores, 'costs some W4A4 MoE latency' (#40105); (3) PD deferred KV release on Mooncake/NIXL, 30 s timeout, SGLANG_DISAGGREGATION_DEFERRED_DECODE_KV_RELEASE=False (#41023); (4) chat_template rejection / --trust-request-chat-template (#28135); (5) removed endpoints/env vars/aliases incl. /model_info, /v1/loads, --elastic-ep-rejoin -> --elastic-ep-join-mode recover (#40795); (6) legacy radix caches removed, UnifiedRadixCache migration (#40313, #40787); (7) CustomLogitProcessor full-shape logits (#39234); (8) begin_weight_update()/end_weight_update() (#40777); (9) parallel-state getters deprecated (#40342, #40344, #40707); (10) Ascend A2 (910b) images dropped, A3 and 950 (A5) only (#40524). No PR number or author attributions are asserted in the article beyond the release notes' own numbers; #28403 and #39627 are attributed exactly as the release does. source-1 (PR #28403, merged): quotes 'pins each instance's role (prefill / decode) at startup' and 'without restarting the server or reloading weights' are verbatim (the article adds backticks around prefill/decode inside the first quote, immaterial). source-2 (PR #39627, merged): the 'Use Rust as the default unified tree core and resolve unsupported configurations to Python in one central place' quote is verbatim from the PR description. The writer's note that PR content was partly obtained through a summarizing tool was checked: every PR-derived quote appears in the raw snapshot text, no fabricated PR text found. Issue: the PR #28403 description states the feature 'lands as a first PoC on the mori transfer backend', 'Gated by --enable-pd-role-switch (default off ...)', 'Only the mori backend's teardown/rebuild hooks are implemented' and 'Validated with pure-TP MoE'; the article omits these scope limits.
Factual Accuracy: Every number, name, flag, env var, date-free claim and attribution traces to the snapshots. One omission of material scope: runtime PD role switching is opt-in and was introduced as a first proof of concept validated on the mori backend (the article presents it without qualification, and the headline follows the release page, which also gives no qualification). This is a clarification, not a false statement, and is recoverable with a single corrections note. Minor: the 'What We Don't Know' sentence 'The release notes are the only source cited here' is loose since two PRs are also cited; not material.
Overall Assessment: Accurate, well-sourced Briefing. APPROVE_WITH_CORRECTIONS solely to attach a public clarification about the scope of the runtime role-switching feature. Checks run: validate:content, orphan-link diff (all 3 body URLs are in article.sources, no orphans), word count 669.