Yeachan-Heo/oh-my-codex · error
manifest_invalid_url
manifest_invalid_url
Error message
[native-assets] manifest_invalid_url: ${asset.download_url} What it means
asset.download_url could not be parsed as a URL. The validator requires an absolute, parseable URL for each asset before checking protocol and basename.
Source
Thrown at src/native-assets/policy.ts:183
if (binaryPath !== asset.binary_path || binaryPath.split('/').at(-1) !== expectedBinaryPath) {
throw policyError('manifest_binary_basename_mismatch', asset.binary_path);
}
const key = nativeReleaseAssetLogicalKey(asset);
if (logicalKeys.has(key)) throw policyError('manifest_duplicate_logical_key', asset.archive);
logicalKeys.add(key);
const basename = nativeReleaseAssetBasename(asset);
if (asset.archive !== basename || !nativeArchiveSuffix(basename)) {
throw policyError('manifest_archive_invalid', asset.archive);
}
if (archiveHintMismatch(asset, basename)) throw policyError('manifest_archive_hint_mismatch', basename);
if (basenames.has(basename)) throw policyError('manifest_duplicate_archive_basename', basename);
basenames.add(basename);
let downloadUrl: URL;
try {
downloadUrl = new URL(asset.download_url);
} catch {
throw policyError('manifest_invalid_url', asset.download_url);
}
if ((downloadUrl.protocol !== 'https:' && downloadUrl.protocol !== 'http:')
|| downloadUrl.pathname.split('/').at(-1) !== basename) {
throw policyError('manifest_url_basename_mismatch', asset.download_url);
}
}
}
View on GitHub (pinned to 3ad79a8a6f)
Solutions
- Use a fully qualified absolute URL including scheme and host
- Check for unfilled template variables in generated manifests
- Add a unit test asserting every download_url parses
Example fix
// before "download_url": "releases/v1/omxd-linux-x64.tar.zst" // after "download_url": "https://github.com/acme/omx/releases/download/v1/omxd-linux-x64.tar.zst"
Defensive patterns
Strategy: validation
Validate before calling
const ok = assets.every((a) => { try { new URL(a.download_url); return true; } catch { return false; } }); Type guard
function isParseableDownloadUrl(a: NativeAsset): boolean { try { new URL(a.download_url); return true; } catch { return false; } } Prevention
- Fail manifest generation if any URL fails new URL()
- Check for unfilled template placeholders
When it happens
Trigger: download_url is undefined, empty, a relative path like '/releases/foo.tar.zst', or otherwise rejected by the URL constructor.
Common situations: Template placeholders left unfilled (e.g. ${VERSION}), or a base-URL concatenation bug producing a relative string.
Related errors
- manifest_url_basename_mismatch
- [native-assets] failed to fetch native release manifest (${r
- [native-assets] manifest version mismatch: expected ${versio
- manifest_binary_product_mismatch
- manifest_binary_basename_mismatch
AI-assisted analysis of Yeachan-Heo/oh-my-codex@3ad79a8a6f (2026-08-27).
Data as JSON: /api/errors/5a014c9b9176f799.
Report an issue: GitHub.