BloopAI/vibe-kanban · error · ContainerError
Container ref not found
Error message
Container ref not found
What it means
start_execution needs the workspace's container_ref (its on-disk directory path) to locate each repo and capture HEAD info. This error is thrown when the workspace's container_ref column is NULL, meaning the workspace has never been materialized on disk (container not yet created or creation failed).
Source
Thrown at crates/services/src/services/container.rs:1154
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,
merge_commit: None,
});
}
let create_execution_process = CreateExecutionProcess {
session_id: session.id,
executor_action: executor_action.clone(),
run_reason: run_reason.clone(),
};
View on GitHub (pinned to 4deb7eca8f)
Solutions
- Wait for workspace initialization to complete and confirm container_ref is set before starting executions.
- Inspect the workspaces row (SELECT container_ref FROM workspaces WHERE id = ...) to verify the path is populated.
- Retry workspace creation / setup if the container failed to materialize on disk.
- Check that the container creation step succeeded (logs for Docker/FS errors) before re-triggering execution.
Example fix
// before
let process = container.start_execution(&workspace, cmd, ...).await?;
// after
if workspace.container_ref.is_none() {
anyhow::bail!("workspace {} not initialized yet", workspace.id);
}
let process = container.start_execution(&workspace, cmd, ...).await?; Defensive patterns
Strategy: validation
Validate before calling
if workspace.container_ref.as_deref().map_or(true, |p| !Path::new(p).is_dir()) {
anyhow::bail!("workspace {} container not ready on disk", workspace.id);
} Try / catch
if let Err(e) = start_execution(&workspace, ...).await {
if e.to_string().contains("Container ref not found") {
reinitialize_workspace(&workspace).await?;
} else { return Err(e); }
} Prevention
- Wait for the workspace-created/initialized event before issuing executions.
- After a failed container setup, retry creation instead of queuing executions.
- Treat NULL container_ref as 'not ready' in application logic.
When it happens
Trigger: Calling start_execution (directly or via follow_up/start_review/run_setup_script/run_codex_setup/run_cursor_setup) on a workspace whose container_ref is NULL — e.g. before workspace initialization finished, or after it failed.
Common situations: Submitting a follow-up while workspace creation is still in progress; container creation failed earlier (disk, Docker, path error) leaving a NULL ref; DB rows created but setup aborted; race between workspace creation UI and immediate execution.
Related errors
- result.error
- No setup script configured for this project
- Cannot run script while another process is running
- Failed to run setup script
- No cleanup script configured for this project
AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29).
Data as JSON: /api/errors/8b76ff3bbebddb86.
Report an issue: GitHub.