{"record":{"id":"4b33c11f4e0be99e","repo":"jdx/mise","slug":"aqua-package-does-not-have-repo-owner-and-or-re","errorCode":null,"errorMessage":"aqua package {} does not have repo_owner and/or repo_name.","messagePattern":"aqua package (.+?) does not have repo_owner and/or repo_name\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/aqua.rs","lineNumber":2227,"sourceCode":"                        for tag in tags.into_iter().rev() {\n                            let (version, _) = match versioned_package_from_tag(\n                                &pkg,\n                                &tag,\n                                target_os,\n                                target_arch,\n                                target_libc.as_deref(),\n                            ) {\n                                Ok(Some(versioned)) => versioned,\n                                Ok(None) => continue,\n                                Err(e) => {\n                                    warn!(\"[{}] aqua version filter error: {e}\", self.ba());\n                                    continue;\n                                }\n                            };\n                            versions.push((version, tag));\n                        }\n                    } else {\n                        bail!(\n                            \"aqua package {} does not have repo_owner and/or repo_name.\",\n                            self.id\n                        );\n                    }\n                    Ok(versions)\n                },\n                // Don't cache an empty tag list: the all-filtered happy path can\n                // produce `[]` (valid repo, but no platform-matching release), and\n                // a transient registry blip could too. Caching it would persist a\n                // miss — same class as #9444 \"don't cache empty version lists\".\n                |versions| !versions.is_empty(),\n            )\n            .await\n    }\n\n    /// Returns `(url, url_api, checked, digest)` where `url_api` is the GitHub API asset\n    /// endpoint used as a download fallback for private repositories.\n    async fn get_url(","sourceCodeStart":2209,"sourceCodeEnd":2245,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/aqua.rs#L2209-L2245","documentation":"Listing versions for an aqua package backed by a GitHub release requires repo_owner and repo_name to build the GitHub release query. When the package config lacks either field, the backend cannot enumerate versions and throws this error naming the package id.","triggerScenarios":"Calling the aqua backend's version-listing path for a package whose config (registry entry or override) is missing repo_owner and/or repo_name while the chosen branch expects a GitHub-release-style package.","commonSituations":"Hand-written custom aqua registry entry missing the repo fields; typo in the key name (e.g. `owner` instead of `repo_owner`); overriding a built-in package and dropping required fields.","solutions":["Add both `repo_owner` and `repo_name` to the aqua package config","Check for key typos and for config schema changes after registry updates","If the package is not GitHub-release-based, use the correct package type (e.g. http, github_content) with its own required fields"],"exampleFix":"# before\npackages:\n  - type: github_release\n    repo_name: sometool\n# after\npackages:\n  - type: github_release\n    repo_owner: someowner\n    repo_name: sometool","handlingStrategy":"validation","validationCode":"if pkg.package_type() == AquaPackageType::GithubRelease && (pkg.repo_owner.is_none() || pkg.repo_name.is_none()) {\n    return Err(anyhow!(\"{} requires repo_owner and repo_name\", pkg.id()));\n}","typeGuard":"fn github_release_fully_qualified(pkg: &AquaPackage) -> bool {\n    pkg.repo_owner.as_deref().map(|s| !s.is_empty()).unwrap_or(false)\n        && pkg.repo_name.as_deref().map(|s| !s.is_empty()).unwrap_or(false)\n}","tryCatchPattern":"match backend.list_versions(&pkg_id).await {\n    Err(e) if e.to_string().contains(\"does not have repo_owner and/or repo_name\") => {\n        eprintln!(\"add repo_owner and repo_name to the package config for {pkg_id}\");\n    }\n    r => r?,\n}","preventionTips":["For github_release packages always set both repo_owner and repo_name","Validate custom registry entries after every schema change or registry update","Watch for key renames in the aqua package config schema when upgrading"],"tags":["aqua","config","github"],"backgroundTag":"missing-required-config-field","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}