{"record":{"id":"041d2f710a607e1e","repo":"BigPizzaV3/CodexPlusPlus","slug":"error-live-restore-error-041d2f","errorCode":null,"errorMessage":"启动静默入口失败：{error}；回滚 live 配置也失败：{restore_error}","messagePattern":"启动静默入口失败：(.+?)；回滚 live 配置也失败：(.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"apps/codex-plus-manager/src-tauri/src/commands.rs","lineNumber":680,"sourceCode":"    F: FnOnce(&LaunchRequest) -> anyhow::Result<()>,\n{\n    let snapshot = if let Some(settings) = settings {\n        let snapshot = RelayLiveSnapshot::capture(home)?;\n        if let Err(error) = sync_active_relay_to_home(settings, home) {\n            if let Err(restore_error) = snapshot.restore(home) {\n                anyhow::bail!(\"同步当前供应商失败：{error}；回滚 live 配置也失败：{restore_error}\");\n            }\n            return Err(error);\n        }\n        Some(snapshot)\n    } else {\n        None\n    };\n\n    if let Err(error) = spawn(request) {\n        if let Some(snapshot) = snapshot {\n            if let Err(restore_error) = snapshot.restore(home) {\n                anyhow::bail!(\"启动静默入口失败：{error}；回滚 live 配置也失败：{restore_error}\");\n            }\n        }\n        return Err(error);\n    }\n    Ok(())\n}\n\n#[derive(Debug)]\nstruct RelayLiveSnapshot {\n    config: Option<Vec<u8>>,\n    auth: Option<Vec<u8>>,\n}\n\nimpl RelayLiveSnapshot {\n    fn capture(home: &Path) -> anyhow::Result<Self> {\n        Ok(Self {\n            config: read_optional_file_bytes(&home.join(\"config.toml\"))?,\n            auth: read_optional_file_bytes(&home.join(\"auth.json\"))?,","sourceCodeStart":662,"sourceCodeEnd":698,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/apps/codex-plus-manager/src-tauri/src/commands.rs#L662-L698","documentation":"Raised in restart_codex_plus_after_stop: spawning the silent Codex++ entry failed and the snapshot rollback of the live relay configuration also failed, so neither the launch nor the config restore succeeded. Both errors are chained into one message.","triggerScenarios":"Thrown at apps/codex-plus-manager/src-tauri/src/commands.rs:680 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the spawn error (executable path, permissions, port conflicts)","Manually re-apply the relay profile to repair live config","Review snapshot restore behavior for the secondary failure"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f2074595a281bc057525c748175c8eb9805b0673","analyzedAt":"2026-08-23T12:52:24.489Z","contentChangedAt":"2026-08-23T12:52:24.489Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}