{"record":{"id":"e8fce33372b64f9c","repo":"BloopAI/vibe-kanban","slug":"err","errorCode":null,"errorMessage":"{err}","messagePattern":"\\{err\\}","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/local-deployment/src/container.rs","lineNumber":144,"sourceCode":"            notification_service,\n            remote_client,\n        };\n\n        container.spawn_workspace_cleanup();\n\n        container\n    }\n\n    fn map_workspace_manager_error(err: WorkspaceError) -> ContainerError {\n        match err {\n            WorkspaceError::Database(err) => ContainerError::Sqlx(err),\n            WorkspaceError::Worktree(err) => ContainerError::Worktree(err),\n            WorkspaceError::GitService(err) => ContainerError::GitServiceError(err),\n            WorkspaceError::Io(err) => ContainerError::Io(err),\n            WorkspaceError::NoRepositories => {\n                ContainerError::Other(anyhow!(\"No repositories provided\"))\n            }\n            WorkspaceError::Repo(err) => ContainerError::Other(anyhow!(err)),\n            WorkspaceError::WorkspaceNotFound => {\n                ContainerError::Other(anyhow!(\"Workspace not found\"))\n            }\n            WorkspaceError::RepoAlreadyAttached => {\n                ContainerError::Other(anyhow!(\"Repository already attached to workspace\"))\n            }\n            WorkspaceError::BranchNotFound { repo_name, branch } => ContainerError::Other(anyhow!(\n                \"Branch '{}' does not exist in repository '{}'\",\n                branch,\n                repo_name\n            )),\n            WorkspaceError::PartialCreation(msg) => ContainerError::Other(anyhow!(msg)),\n        }\n    }\n\n    async fn workspace_repo_inputs(\n        &self,\n        workspace_id: Uuid,","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/BloopAI/vibe-kanban/blob/4deb7eca8f381f7cbc1f9d15515a9ab8f8009053/crates/local-deployment/src/container.rs#L126-L162","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n// WorkspaceError::Repo(\"path is not a git repository: /repos/foo\")\n// after: recreate/repair the repo\ngit init /repos/foo  # or re-point the workspace at the correct repo path","handlingStrategy":"try-catch","validationCode":"// validate the path is a real git repo before registering\nlet meta = std::path::Path::new(&repo_path).join(\".git\");\nif !meta.exists() {\n    return Err(anyhow!(\"{repo_path} is not a git repository\"));\n}","typeGuard":null,"tryCatchPattern":"match op().await {\n    Err(e) => {\n        let msg = e.to_string();\n        if msg.contains(\"not a git repository\") {\n            // re-init or re-point the repo path\n        } else if msg.contains(\"Permission denied\") {\n            // fix filesystem permissions\n        } else {\n            return Err(e.into());\n        }\n    }\n    Ok(v) => v,\n}","preventionTips":["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."],"tags":["workspace","git","error-wrapping"],"backgroundTag":"repository-path-invalid","analyzedSha":"4deb7eca8f381f7cbc1f9d15515a9ab8f8009053","analyzedAt":"2026-08-29T09:24:13.446Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}