BloopAI/vibe-kanban · error · ContainerError

Workspace has no repositories configured

Error message

Workspace has no repositories configured

What it means

start_execution requires the workspace to have at least one repository configured, because each execution captures per-repo HEAD state (ExecutionProcessRepoState). If WorkspaceRepo::find_repos_for_workspace returns an empty list, the execution cannot proceed and this error is returned.

Source

Thrown at crates/services/src/services/container.rs:1145

            .await?
        };

        Ok(execution_process)
    }

    async fn start_execution(
        &self,
        workspace: &Workspace,
        session: &Session,
        executor_action: &ExecutorAction,
        run_reason: &ExecutionProcessRunReason,
    ) -> Result<ExecutionProcess, ContainerError> {
        // Create new execution process record
        // Capture current HEAD per repository as the "before" commit for this execution
        let repositories =
            WorkspaceRepo::find_repos_for_workspace(&self.db().pool, workspace.id).await?;
        if repositories.is_empty() {
            return Err(ContainerError::Other(anyhow!(
                "Workspace has no repositories configured"
            )));
        }

        let workspace_root = workspace
            .container_ref
            .as_ref()
            .map(std::path::PathBuf::from)
            .ok_or_else(|| ContainerError::Other(anyhow!("Container ref not found")))?;

        let mut repo_states = Vec::with_capacity(repositories.len());
        for repo in &repositories {
            let repo_path = workspace_root.join(&repo.name);
            let before_head_commit = self.git().get_head_info(&repo_path).ok().map(|h| h.oid);
            repo_states.push(CreateExecutionProcessRepoState {
                repo_id: repo.id,
                before_head_commit,
                after_head_commit: None,

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Add at least one repository to the workspace before starting executions.
  2. Check workspace_repos rows for the workspace id to confirm associations exist.
  3. Re-run the workspace/project creation flow so repos get attached.
  4. If the workspace is genuinely empty, don't start executions on it — guard the call first.

Example fix

// before
let process = container.start_execution(&workspace, cmd, ...).await?;
// after
let repos = WorkspaceRepo::find_repos_for_workspace(&pool, workspace.id).await?;
if repos.is_empty() {
    anyhow::bail!("workspace {} has no repos; attach one before starting execution", workspace.id);
}
let process = container.start_execution(&workspace, cmd, ...).await?;
Defensive patterns

Strategy: validation

Validate before calling

let repos = WorkspaceRepo::find_repos_for_workspace(&pool, workspace.id).await?;
if repos.is_empty() {
    anyhow::bail!("attach a repository to workspace {} before running tasks", workspace.id);
}

Try / catch

match result {
    Err(e) if e.to_string().contains("no repositories configured") => prompt_user_to_attach_repo(),
    other => other,
}

Prevention

When it happens

Trigger: Any call chain that reaches start_execution (follow_up, start_review, run_setup_script, run_codex_setup, run_cursor_setup, start_queued_follow_up) for a workspace with zero rows in workspace_repos.

Common situations: Creating a workspace without adding repos via the repos API; the repo association row was deleted; workspace created from an empty/failed project setup; running a review or follow-up on a workspace where repo setup never completed.

Related errors


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