{"record":{"id":"25809e6e098d2d61","repo":"sgl-project/sglang","slug":"enable-linear-replayssm-spec-is-not-supported-on","errorCode":null,"errorMessage":"--enable-linear-replayssm-spec is not supported on a PD prefill server: the ring is spec-verify-only scratch and the prefill server never runs spec verify.","messagePattern":"--enable-linear-replayssm-spec is not supported on a PD prefill server: the ring is spec-verify-only scratch and the prefill server never runs spec verify\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/server_args.py","lineNumber":7021,"sourceCode":"                # never writes the ring -> a stale ring would be folded; keep\n                # refusing those combinations.\n                _algo = (cfg.speculative_algorithm or \"\").upper()\n                verify = cfg.linear_attn_verify_backend\n                if _algo not in (\"DSPARK\", \"DFLASH\") or verify not in (\n                    \"triton\",\n                    \"nv_cutedsl\",\n                ):\n                    raise ValueError(\n                        \"--enable-linear-replayssm-spec with \"\n                        f\"SGLANG_RAGGED_VERIFY_MODE={ragged_mode.value} requires the \"\n                        \"KDA fold-every-commit family (DSPARK/DFLASH) and a \"\n                        \"ring-writing verify kernel (--linear-attn-verify-backend \"\n                        \"triton or nv_cutedsl); got \"\n                        f\"algorithm={cfg.speculative_algorithm!r}, \"\n                        f\"verify={verify!r}. Use SGLANG_RAGGED_VERIFY_MODE=static.\"\n                    )\n            if cfg.disaggregation_mode == \"prefill\":\n                raise ValueError(\n                    \"--enable-linear-replayssm-spec is not supported on a PD \"\n                    \"prefill server: the ring is spec-verify-only scratch and \"\n                    \"the prefill server never runs spec verify.\"\n                )\n            if cfg.enable_linear_replayssm:\n                raise ValueError(\n                    \"--enable-linear-replayssm-spec and --enable-linear-replayssm are \"\n                    \"mutually exclusive: they share the ring storage but drive it \"\n                    \"with incompatible cursor protocols (per-decode-forward vs \"\n                    \"per-verify-commit advance).\"\n                )\n            if cfg.mamba_ssm_dtype is None:\n                logger.info(\n                    \"--enable-linear-replayssm-spec: setting --mamba-ssm-dtype \"\n                    \"float32 (the closed-loop exact fold keeps the SSM checkpoint \"\n                    \"bit-identical to the recurrent baseline).\"\n                )\n                self._declare(","sourceCodeStart":7003,"sourceCodeEnd":7039,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/server_args.py#L7003-L7039","documentation":"ReplaySSM spec-verify cannot be enabled on a PD-disaggregation prefill server: the ReplaySSM ring is spec-verify-only scratch memory and the prefill server never executes spec verify, so allocating/enabling it there is invalid.","triggerScenarios":"--enable-linear-replayssm-spec together with --disaggregation-mode prefill.","commonSituations":"Applying one shared flag template to both PD servers; enabling the spec flag globally in a disagg cluster where the prefill node also parses it.","solutions":["Remove --enable-linear-replayssm-spec from the prefill server's args (keep it only on the decode server)","Or scope the flag per-role in your launcher/templating so prefill and decode get different arg sets"],"exampleFix":"# before (prefill server)\n--disaggregation-mode prefill --enable-linear-replayssm-spec\n# after (prefill server)\n--disaggregation-mode prefill","handlingStrategy":"validation","validationCode":"def validate(disagg_mode, enable_spec):\n    return not enable_spec or disagg_mode != \"prefill\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Template PD launch args per role (prefill vs decode), never share one flag list","Run a config dry-parse per role before deploying"],"tags":["sglang","replayssm","pd-disaggregation","speculative-decoding"],"backgroundTag":"unsupported-feature-combination","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}