# Ordinary offline identity diagnosis Installed `RplMode` values are None=0, Client=1, Listen=2 and Dedicated=3. The observed regular offline run's mode=0 therefore does not enter the dedicated-server branch of `SCR_PlayerIdentityUtils`. A native local controller exists; the remaining issue is identity conversion/binding, not absence of a player object. The installed utility calls `BackendApi.GetPlayerIdentityId` and only attempts its non-dedicated PeerTool name fallback when the returned string is **empty**. A nonempty null UUID sentinel or malformed string bypasses that fallback. This is a possible explanation, not yet the observed raw result. The installed UUID type remains a string: invalid-format strings are considered null, and both empty and all-zero strings are null despite not being string-equal. The installed `int.ToString(8, true)` uses hexadecimal formatting (the boolean means `hex`), so decimal width growth is not a supported explanation for the fallback result. The optional admission diagnostic now records raw cached identity string length, emptiness, UUID null/format status, equality to the null UUID sentinel, returned helper length/format status and the actual Dedicated comparison. Raw length=-1 denotes an unavailable backend API object. It is compiled outside WORKBENCH and executes only for the explicit `errOrdinaryScenario core/chat` diagnostic. It logs neither identity contents nor player name contents, does not call authentication/initialization methods, creates no replacement identity and leaves strict `Players().Bind` behavior unchanged. Interpretation of the next native sample: - rawLength>0, rawNullSentinel=1: native backend supplied the initialized null UUID; vanilla's empty-string test bypasses its fallback. - rawLength>0, rawNull=1, rawNullSentinel=0: a nonempty invalid/native sentinel value bypasses fallback. - rawEmpty=1, dedicated=0, helperLength>0, helperFormatValid=0: vanilla returned its fallback string, but UUID validation rejected its format. - rawEmpty=1, dedicated=0, helperLength=0: the expected fallback did not produce a string; inspect native/local initialization rather than inferring from player-name length. None of these observations authorizes using a name-derived or generated ordinary player identity. A valid production fix requires evidence for a supported native local platform/session identity path and its reconnect/account guarantees. Offline diagnostic admission remains failed until that exists; no backend contact or identity policy change is included here. Native `game-2026-09-19-081359` confirms the first case: `rawLength=36 rawEmpty=0 rawNull=1 rawFormatValid=1 rawNullSentinel=1 helperLength=36 helperFormatValid=1 dedicated=0`. The normal local audit callback occurred; the helper returned the native null sentinel unchanged. A narrowly scoped standalone round-local roster key is being designed separately; network identity behavior remains unchanged.