{"record":{"id":"f88c549d5c5558d9","repo":"Hmbown/CodeWhale","slug":"linux-riscv64-release-assets-are-temporarily-unava","errorCode":null,"errorMessage":"Linux riscv64 release assets are temporarily unavailable because rquickjs-sys 0.12.0 does not ship riscv64gc-unknown-linux-gnu bindings. See docs/INSTALL.md for the current platform matrix.","messagePattern":"Linux riscv64 release assets are temporarily unavailable because rquickjs-sys 0\\.12\\.0 does not ship riscv64gc-unknown-linux-gnu bindings\\. See docs/INSTALL\\.md for the current platform matrix\\.","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/cli/src/update.rs","lineNumber":952,"sourceCode":"    let bytes = fetch_manifest(candidate)\n        .with_context(|| format!(\"failed to fetch {}\", candidate.manifest_url))?;\n    let text = std::str::from_utf8(&bytes)\n        .with_context(|| format!(\"{} is not valid UTF-8\", candidate.manifest_url))?;\n    let checksums = parse_checksum_manifest(text)\n        .with_context(|| format!(\"failed to parse {}\", candidate.manifest_url))?;\n    if !checksums.contains_key(&candidate.binary_name) {\n        bail!(\n            \"{} does not list {}\",\n            candidate.manifest_url,\n            candidate.binary_name\n        );\n    }\n    Ok(checksums)\n}\n\nfn ensure_supported_release_target(os: &str, arch: &str) -> Result<()> {\n    if os == \"linux\" && arch == \"riscv64\" {\n        bail!(\n            \"Linux riscv64 release assets are temporarily unavailable because \\\n             rquickjs-sys 0.12.0 does not ship riscv64gc-unknown-linux-gnu bindings. \\\n             See docs/INSTALL.md for the current platform matrix.\"\n        );\n    }\n    Ok(())\n}\n\npub(crate) fn release_arch_for_rust_arch(arch: &str) -> &str {\n    match arch {\n        \"aarch64\" => \"arm64\",\n        \"x86_64\" => \"x64\",\n        other => other,\n    }\n}\n\n/// Returns true when the binary name belongs to the pre-rebrand `deepseek-tui` era.\npub(crate) fn is_legacy_binary(current_exe: &Path) -> bool {","sourceCodeStart":934,"sourceCodeEnd":970,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/cli/src/update.rs#L934-L970","documentation":"ensure_supported_release_target hard-refuses linux/riscv64 self-updates: rquickjs-sys 0.12.0 does not ship prebuilt riscv64gc-unknown-linux-gnu bindings, so no release asset exists for that target and the updater stops with a pointer to docs/INSTALL.md. This is a deliberate, documented platform gap rather than a transient failure.","triggerScenarios":"Invoking self-update (or anything that validates the release target) on Linux riscv64 - ensure_supported_release_target sees os == \"linux\" && arch == \"riscv64\" and bails before any network work.","commonSituations":"Users on riscv64 hardware or SBCs/containers reporting riscv64 trying the in-app updater.","solutions":["Use the CLI on a supported architecture (see the matrix in docs/INSTALL.md)","Run under emulation/qemu-user with a supported arch if you must stay on this host","Track the issue tracker for riscv64 support and upgrade once a release ships bindings","Do not retry: this refusal is deterministic until the platform matrix changes"],"exampleFix":"// before\nif let Some(cmd) = parse_cli() {\n    if cmd.is_update() {\n        run_update()?; // bails on linux/riscv64\n    }\n}\n\n// after\nfn release_target_supported() -> bool {\n    !(std::env::consts::OS == \"linux\" && std::env::consts::ARCH == \"riscv64\")\n}\n\nif cmd.is_update() {\n    if !release_target_supported() {\n        eprintln!(\"self-update unavailable on this platform; see docs/INSTALL.md\");\n    } else {\n        run_update()?;\n    }\n}","handlingStrategy":"validation","validationCode":"fn release_target_supported() -> bool {\n    !cfg!(all(target_os = \"linux\", target_arch = \"riscv64\"))\n        && !(std::env::consts::OS == \"linux\" && std::env::consts::ARCH == \"riscv64\")\n}\n\nif !release_target_supported() {\n    eprintln!(\"self-update unavailable on linux/riscv64; see docs/INSTALL.md\");\n    return Ok(());\n}","typeGuard":"fn is_supported_release_target() -> bool {\n    !(std::env::consts::OS == \"linux\" && std::env::consts::ARCH == \"riscv64\")\n}","tryCatchPattern":"Prefer guarding before the call; if the error is reached anyway, catch it and show the docs/INSTALL.md pointer verbatim - the refusal is deterministic, so do not retry.","preventionTips":["Gate self-update entry points on the platform matrix","Track the rquickjs-sys bindings issue for riscv64 support","Offer a from-source or emulation path for unsupported arches"],"tags":["riscv64","linux","platform-support","self-update"],"backgroundTag":"unsupported-platform-release","analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}