BloopAI/vibe-kanban · error

{msg}

Error message

{msg}

What it means

map_workspace_manager_error passes through WorkspaceError::PartialCreation verbatim as the error message. This is thrown when creating a workspace only partially succeeded (some repos/worktrees were set up, others failed) and the manager aborts, wrapping whatever descriptive message the partial-failure produced. The message content therefore varies and describes which step of the multi-repo creation failed.

Source

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

            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,
    ) -> Result<(Vec<Repo>, Vec<RepoWorkspaceInput>), ContainerError> {
        let workspace_repos =
            WorkspaceRepo::find_by_workspace_id(&self.db.pool, workspace_id).await?;
        if workspace_repos.is_empty() {
            return Err(ContainerError::Other(anyhow!(
                "Workspace has no repositories configured"
            )));
        }

        let repositories =
            WorkspaceRepo::find_repos_for_workspace(&self.db.pool, workspace_id).await?;
        let target_branches: HashMap<_, _> = workspace_repos

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Read the inner msg to identify which repo/step failed and fix that specific cause (bad branch, permissions, disk).
  2. Clean up the partially created workspace (delete workspace / remove worktrees) and retry creation from a clean state.
  3. Make workspace creation transactional or add rollback so partial state does not persist.
  4. Fix the underlying per-repo issue then re-run the create call.

Example fix

// before
let ws = container.create(&CreateWorkspaceReq { repos: all_repos, .. }).await?;
// after
match container.create(&req).await {
    Err(ContainerError::Other(e)) if !e.to_string().is_empty() => {
        container.delete_workspace(ws_id).await.ok(); // roll back partial state
        return Err(e);
    }
    r => r?,
}
Defensive patterns

Strategy: fallback

Validate before calling

// pre-validate every repo/branch in the request before creating the workspace
for r in &req.repos {
    ensure_branch_exists(&r.repo_path, &r.target_branch).await?;
}

Try / catch

match container.create(&req).await {
    Err(ContainerError::Other(e)) => {
        container.delete_workspace(ws_id).await.ok(); // clean partial state
        Err(e)
    }
    ok => ok,
}

Prevention

When it happens

Trigger: Creating a multi-repo workspace where one repo's worktree/branch setup fails after others already succeeded, causing the manager to return PartialCreation(msg).

Common situations: One repo in a multi-repo project has a bad branch or permission problem while the rest initialize fine; network failure mid-clone; disk-full during worktree creation.

Related errors


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