pub fn parse_payload<T: DeserializeOwned>( payload: &str, ) -> Result<Option<T>, String>
Parse a checkpoint payload: empty → Ok(None) (legacy fallback); non-empty malformed → Err(detail); valid → Ok(Some(T)).
Ok(None)
Err(detail)
Ok(Some(T))