{"record":{"id":"92f9f95a9e5f1af7","repo":"Hmbown/CodeWhale","slug":"does-not-list","errorCode":null,"errorMessage":"{} does not list {}","messagePattern":"(.+?) does not list (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"warning","filePath":"crates/cli/src/update.rs","lineNumber":941,"sourceCode":"\n    bail!(\n        \"no release source published a usable {CHECKSUM_MANIFEST_ASSET} for this platform:\\n{}\",\n        failures.join(\"\\n\")\n    )\n}\n\nfn probe_release_source(\n    candidate: &ReleaseSourceCandidate,\n    fetch_manifest: &ManifestFetcher,\n) -> Result<HashMap<String, String>> {\n    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}","sourceCodeStart":923,"sourceCodeEnd":959,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/cli/src/update.rs#L923-L959","documentation":"probe_release_source fetched and parsed one candidate source's checksum manifest, but the map has no key for that source's binary_name. The source loses the concurrent probe and its failure is recorded; if all sources fail this way you get the aggregated 'no release source published a usable manifest' error.","triggerScenarios":"A mirror whose checksum manifest is older than its release assets (asset renamed or newly added), or a source whose asset naming differs from its own manifest keys.","commonSituations":"Stale CDN mirrors, release processes that upload binaries before regenerating SHA256SUMS, manifest name typos on secondary sources.","solutions":["Rely on another source: selection is concurrent, so a healthy mirror wins automatically once available","If all sources report this, treat it as a release publishing bug and report the tag","Mirror operators: regenerate the manifest after every asset change, not before"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// For custom release-source setups, check a source before trusting it:\nfn source_lists_binary(manifest_url: &str, binary_name: &str) -> Result<bool, ureq::Error> {\n    let text: String = ureq::get(manifest_url).call()?.into_string()?;\n    Ok(text.lines().any(|l| l.contains(binary_name)))\n}","typeGuard":null,"tryCatchPattern":"Treat this as a per-source loss inside concurrent selection: record the failure, let other sources compete, and only surface an error if every source failed this way.","preventionTips":["Mirror operators: regenerate checksum manifests after uploading assets","Publish assets and their manifest atomically per tag","Monitor mirrors for manifest/asset drift"],"tags":["release","checksums","self-update","mirrors"],"backgroundTag":"checksum-manifest-missing-entry","analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}