warpdotdev/warp · error

All private repositories in an environment must belong to th

Error message

All private repositories in an environment must belong to the same owner. Found multiple owners: {}.\nIf you need support for private repos from multiple owners, please submit a GitHub issue.

What it means

Thrown during the auth check in auth_repos_then_execute when more than one distinct owner appears among private repositories in a single environment create/update. The server-side constraint (enforced client-side here) is that all private repos attached to one environment must share a single owner; the owners are collected from statuses with is_public == false and the combined list is printed in the error. The message explicitly points to GitHub issues for multi-owner support.

Source

Thrown at app/src/ai/agent_sdk/environment.rs:587

                                    private_repo_owners.insert(status.owner.clone());
                                } else {
                                    has_public_auth_gaps = true;
                                }
                            }
                            UserRepoAuthStatusEnum::UserNotConnectedToGithub => {
                                eprintln!("User not connected to GitHub");
                                has_blocking_private_issues = true;
                                break;
                            }
                        }
                    }

                    // Check that all private repos have the same owner
                    if private_repo_owners.len() > 1 {
                        let owners_str = private_repo_owners.into_iter().collect::<Vec<_>>().join(", ");
                        ctx.terminate_app(
                            warpui::platform::TerminationMode::ForceTerminate,
                            Some(Err(anyhow::anyhow!(
                                "All private repositories in an environment must belong to the same owner. Found multiple owners: {}.\nIf you need support for private repos from multiple owners, please submit a GitHub issue.",
                                owners_str
                            ))),
                        );
                        return;
                    }

                    if !has_blocking_private_issues {
                        // No blocking issues with private repos.
                        // Public repos without auth can proceed with warnings.
                        if has_public_auth_gaps {
                            for status in &response.statuses {
                                if status.is_public
                                    && matches!(
                                        status.status,
                                        UserRepoAuthStatusEnum::NoInstallationOrAccessForRepo
                                    )
                                {

View on GitHub (pinned to e72fd7aacb)

Solutions

  1. Split the environments so each contains private repos from only one owner
  2. Drop the extra-owner private repos from the command and add them to a second environment
  3. Use public repos where possible — public repos do not count toward the single-owner constraint (they only produce warnings)
  4. If you genuinely need multi-owner private repos, upvote/file the GitHub issue referenced in the error message

Example fix

# before
warp environment create --name dev --repo orgA/private-one --repo orgB/private-two

# after
warp environment create --name dev-a --repo orgA/private-one
warp environment create --name dev-b --repo orgB/private-two
Defensive patterns

Strategy: validation

Validate before calling

// Rust: pre-validate single-owner constraint for private repos before create
fn check_single_private_owner(repos: &[(String, String)], is_private: impl Fn(&str, &str) -> bool) -> Result<(), String> {
    let mut owners = std::collections::HashSet::new();
    for (o, r) in repos {
        if is_private(o, r) { owners.insert(o.clone()); }
    }
    match owners.len() {
        0 | 1 => Ok(()),
        _ => Err(format!("multiple private owners: {}", owners.into_iter().collect::<Vec<_>>().join(", "))),
    }
}

Type guard

fn all_private_repos_same_owner(repos: &[GithubRepo], owners: impl Fn(&GithubRepo) -> bool) -> bool {
    let distinct: HashSet<_> = repos.iter().map(owners).collect();
    distinct.len() <= 1
}

Prevention

When it happens

Trigger: `warp environment create --repo orgA/private-one --repo orgB/private-two` (or mixing a private user repo with a private org repo) where both private repos pass auth — private_repo_owners ends with 2+ entries and the command force-terminates before creating anything.

Common situations: Merging tooling from a personal account and an employer org into one environment; aggregating private repos from two different organizations; refactoring an existing multi-owner environment during update (adding a repo from another owner).

Related errors


AI-assisted analysis of warpdotdev/warp@e72fd7aacb (2026-08-16). Data as JSON: /api/errors/34b51d8dbcf47a4e. Report an issue: GitHub.