BloopAI/vibe-kanban · error

{err}

Error message

{err}

What it means

WorkspaceError::Repo(err) wraps an arbitrary repo-related error string from the workspace manager; map_workspace_manager_error passes the inner message through verbatim into ContainerError::Other. Unlike fixed-message variants, the message content is whatever the underlying git/repo layer reported.

Source

Thrown at crates/local-deployment/src/container.rs:144

            notification_service,
            remote_client,
        };

        container.spawn_workspace_cleanup();

        container
    }

    fn map_workspace_manager_error(err: WorkspaceError) -> ContainerError {
        match err {
            WorkspaceError::Database(err) => ContainerError::Sqlx(err),
            WorkspaceError::Worktree(err) => ContainerError::Worktree(err),
            WorkspaceError::GitService(err) => ContainerError::GitServiceError(err),
            WorkspaceError::Io(err) => ContainerError::Io(err),
            WorkspaceError::NoRepositories => {
                ContainerError::Other(anyhow!("No repositories provided"))
            }
            WorkspaceError::Repo(err) => ContainerError::Other(anyhow!(err)),
            WorkspaceError::WorkspaceNotFound => {
                ContainerError::Other(anyhow!("Workspace not found"))
            }
            WorkspaceError::RepoAlreadyAttached => {
                ContainerError::Other(anyhow!("Repository already attached to workspace"))
            }
            WorkspaceError::BranchNotFound { repo_name, branch } => ContainerError::Other(anyhow!(
                "Branch '{}' does not exist in repository '{}'",
                branch,
                repo_name
            )),
            WorkspaceError::PartialCreation(msg) => ContainerError::Other(anyhow!(msg)),
        }
    }

    async fn workspace_repo_inputs(
        &self,
        workspace_id: Uuid,

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Read the embedded {err} message for the concrete underlying cause and fix that.
  2. Verify the repository path exists and is a valid git repository (has .git).
  3. Re-add or re-register the repository in the app so its metadata is refreshed.
  4. Check filesystem permissions on the repo directory for the server user.

Example fix

// before
// WorkspaceError::Repo("path is not a git repository: /repos/foo")
// after: recreate/repair the repo
git init /repos/foo  # or re-point the workspace at the correct repo path
Defensive patterns

Strategy: try-catch

Validate before calling

// validate the path is a real git repo before registering
let meta = std::path::Path::new(&repo_path).join(".git");
if !meta.exists() {
    return Err(anyhow!("{repo_path} is not a git repository"));
}

Try / catch

match op().await {
    Err(e) => {
        let msg = e.to_string();
        if msg.contains("not a git repository") {
            // re-init or re-point the repo path
        } else if msg.contains("Permission denied") {
            // fix filesystem permissions
        } else {
            return Err(e.into());
        }
    }
    Ok(v) => v,
}

Prevention

When it happens

Trigger: Any workspace operation where the workspace manager's repo layer returns WorkspaceError::Repo(String) — e.g. repo path issues, missing git repo at path, failed repo validation — propagated through container APIs.

Common situations: Adding a repository whose directory is not a valid git repo, repo path moved/deleted after registration, or git-layer validation failures during workspace creation/branch operations.

Related errors


AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29). Data as JSON: /api/errors/e8fce33372b64f9c. Report an issue: GitHub.