{"record":{"id":"31b0a2852b4d568e","repo":"Kuberwastaken/claurst","slug":"github-api-returned-for","errorCode":null,"errorMessage":"GitHub API returned {} for {}","messagePattern":"GitHub API returned (.+?) for (.+?)","errorType":"http","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src-rust/crates/cli/src/upgrade.rs","lineNumber":190,"sourceCode":"        (format!(\"{}-{}.zip\", APP, target), true)\n    } else {\n        (format!(\"{}-{}.tar.gz\", APP, target), false)\n    }\n}\n\n// ---------------------------------------------------------------------------\n// GitHub API: latest version\n// ---------------------------------------------------------------------------\n\nasync fn fetch_latest_version() -> Result<String> {\n    let url = format!(\"https://api.github.com/repos/{}/releases/latest\", REPO);\n    let client = reqwest::Client::builder()\n        .timeout(Duration::from_secs(10))\n        .user_agent(format!(\"claurst-upgrade/{}\", env!(\"CARGO_PKG_VERSION\")))\n        .build()?;\n    let resp = client.get(&url).send().await?;\n    if !resp.status().is_success() {\n        bail!(\"GitHub API returned {} for {}\", resp.status(), url);\n    }\n    let json: serde_json::Value = resp.json().await?;\n    let tag = json\n        .get(\"tag_name\")\n        .and_then(|v| v.as_str())\n        .ok_or_else(|| anyhow!(\"no tag_name in GitHub API response\"))?;\n    Ok(tag.trim_start_matches('v').to_string())\n}\n\n// ---------------------------------------------------------------------------\n// Download\n// ---------------------------------------------------------------------------\n\nasync fn download_to_file(url: &str, dest: &Path) -> Result<()> {\n    let client = reqwest::Client::builder()\n        .timeout(Duration::from_secs(120))\n        .user_agent(format!(\"claurst-upgrade/{}\", env!(\"CARGO_PKG_VERSION\")))\n        .build()?;","sourceCodeStart":172,"sourceCodeEnd":208,"githubUrl":"https://github.com/Kuberwastaken/claurst/blob/b0637c97ec34144387cbf2f74f65df6d16a6cef1/src-rust/crates/cli/src/upgrade.rs#L172-L208","documentation":"The GitHub Releases API request (GET /repos/Kuberwastaken/claurst/releases/latest) returned a non-success HTTP status — the formatted values are the status code and URL. Typical causes: API rate limiting (403/429 with no token), a network proxy, or GitHub being unreachable.","triggerScenarios":"Thrown at src-rust/crates/cli/src/upgrade.rs:190 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry after a minute — unauthenticated GitHub API requests are limited to 60/hour per IP","Check network/proxy access to api.github.com","If the repo moved or the release is missing, fetch the latest tag from the releases page manually"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b0637c97ec34144387cbf2f74f65df6d16a6cef1","analyzedAt":"2026-09-10T00:24:58.650Z","contentChangedAt":"2026-09-10T00:24:58.650Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}