{"record":{"id":"8e90564d84f4019d","repo":"Yeachan-Heo/oh-my-codex","slug":"native-assets-failed-to-fetch-native-release-man","errorCode":null,"errorMessage":"[native-assets] failed to fetch native release manifest (${response.status} ${response.statusText}) from ${url}","messagePattern":"\\[native-assets\\] failed to fetch native release manifest \\((.+?) (.+?)\\) from (.+?)","errorType":"http","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/cli/native-assets.ts","lineNumber":243,"sourceCode":"    const rightRank = rightLibc ? (preferenceIndex.get(rightLibc) ?? preference.length + 1) : preference.length;\n    if (leftRank !== rightRank) return leftRank - rightRank;\n    return left.archive.localeCompare(right.archive);\n  });\n}\n\nexport function isRepositoryCheckout(packageRoot = getPackageRoot()): boolean {\n  return existsSync(join(packageRoot, '.git'));\n}\n\nexport async function loadNativeReleaseManifest(\n  packageRoot = getPackageRoot(),\n  version?: string,\n  env: NodeJS.ProcessEnv = process.env,\n): Promise<NativeReleaseManifest> {\n  const url = await resolveNativeManifestUrl(packageRoot, version, env);\n  const response = await fetch(url);\n  if (!response.ok) {\n    throw new Error(`[native-assets] failed to fetch native release manifest (${response.status} ${response.statusText}) from ${url}`);\n  }\n  const manifest = await response.json() as NativeReleaseManifest;\n  validateNativeReleaseManifest(manifest as never);\n  if (version && manifest.version !== version) throw new Error(`[native-assets] manifest version mismatch: expected ${version}, received ${manifest.version}`);\n  return manifest;\n}\n\nfunction isUnavailableManifestError(error: unknown): boolean {\n  if (!(error instanceof Error)) return false;\n  return /\\[native-assets\\] failed to fetch native release manifest/i.test(error.message)\n    || /fetch failed/i.test(error.message);\n}\n\nfunction isUnavailableArchiveError(error: unknown): boolean {\n  if (!(error instanceof Error)) return false;\n  return /\\[native-assets\\] failed to download /i.test(error.message)\n    || /fetch failed/i.test(error.message);\n}","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/Yeachan-Heo/oh-my-codex/blob/3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2/src/cli/native-assets.ts#L225-L261","documentation":"Fetching the native release manifest (a JSON asset descriptor published with a GitHub release) returned a non-2xx status. The manifest URL is built from the resolved repository base plus the package version, so failures usually mean the release tag or manifest asset doesn't exist at that version, or the network/proxy rejected the request.","triggerScenarios":"loadNativeReleaseManifest / hydrateNativeBinary when the GitHub release for the pinned package version is not published yet, the manifest asset was renamed, a proxy returns 403/407, GitHub rate-limits (403/429), or a typo'd NATIVE_RELEASE_BASE_URL yields 404.","commonSituations":"Installing a version published to npm before the GitHub release assets finished uploading; air-gapped environments; corporate proxies; GitHub API rate limits in CI; NATIVE_RELEASE_BASE_URL pointing at a repo without the expected manifest.json asset.","solutions":["Verify the GitHub release 'v<packageVersion>' exists and includes the manifest asset.","Check NATIVE_RELEASE_BASE_URL correctness and network/proxy reachability of the URL printed in the message.","Pre-hydrate the native cache or vendor the binary via NATIVE_RELEASE_BASE_URL on an internal mirror.","If rate-limited, wait/retry or authenticate the release host."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"async function manifestReachable(baseUrl: string, version: string): Promise<boolean> {\n  const res = await fetch(`${baseUrl}/manifest.json`); // adjust asset name to your layout\n  return res.ok;\n}","typeGuard":null,"tryCatchPattern":"try { await loadNativeReleaseManifest(root, version); } catch (e) { if (\\[native-assets\\] failed to fetch native release manifest/i.test(String(e))) { /* check release exists / proxy / rate limit */ } throw e; }","preventionTips":["Pre-hydrate the native cache in Docker images","Verify the GitHub release for your exact version exists in CI","Mirror release assets internally for air-gapped networks"],"tags":["native-assets","network","http-status","github-releases","manifest"],"backgroundTag":"http-download-failed","analyzedSha":"3ad79a8a6fe6e95fdbb8c00e40716fffe4011ce2","analyzedAt":"2026-08-27T22:18:39.783Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}