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
- Read the embedded {err} message for the concrete underlying cause and fix that.
- Verify the repository path exists and is a valid git repository (has .git).
- Re-add or re-register the repository in the app so its metadata is refreshed.
- 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
- Read the wrapped {err} message — it names the concrete repo-layer cause.
- Verify repo paths exist, contain .git, and are accessible to the server user.
- Re-register repositories after moving or rebuilding them.
- Keep repos on stable paths; avoid symlinks into ephemeral dirs.
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
- Branch '{}' does not exist in repository '{}'
- Container reference not found
- result.error
- Force push required. The remote branch has diverged.
- Failed to push changes
AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29).
Data as JSON: /api/errors/e8fce33372b64f9c.
Report an issue: GitHub.