BloopAI/vibe-kanban · error
result.error
Error message
result.error
What it means
A workspace action invoked a create/move operation (with repoId, targetBranch, issueIdentifier) through an API that returns a result envelope; when the operation fails, the backend's error string is re-thrown as a JS Error so the action's caller (command bar / UI) can display it. The message text is entirely server-defined via result.error.
Source
Thrown at packages/web-core/src/shared/actions/index.ts:883
// Resolve vibe-kanban identifier from remote workspace + issue
let issueIdentifier: string | undefined;
const remoteWs = ctx.remoteWorkspaces.find(
(w) => w.local_workspace_id === workspaceId
);
if (remoteWs?.issue_id && ctx.projectMutations?.getIssue) {
const issue = ctx.projectMutations.getIssue(remoteWs.issue_id);
issueIdentifier = issue?.simple_id || remoteWs.issue_id;
}
const result = await CreatePRDialog.show({
attempt: workspace,
repoId,
targetBranch: repo?.target_branch,
issueIdentifier,
});
if (!result.success && result.error) {
throw new Error(result.error);
}
},
},
GitLinkPR: {
id: 'git-link-pr',
label: 'Link Pull Request',
icon: LinkIcon,
requiresTarget: ActionTargetType.GIT,
isVisible: (ctx) => ctx.hasWorkspace && ctx.hasGitRepos && !ctx.hasOpenPR,
execute: async (ctx, workspaceId, repoId) => {
const result = await workspacesApi.attachPr(workspaceId, {
repo_id: repoId,
});
if (result.success && result.data.pr_attached && result.data.pr_number) {
invalidateWorkspaceQueries(ctx.queryClient, workspaceId);
ctx.queryClient.invalidateQueries({View on GitHub (pinned to 4deb7eca8f)
Solutions
- Read the thrown message — it mirrors the backend result.error and names the failing input.
- Verify repoId and targetBranch exist and are correct before invoking the action.
- Confirm the issueIdentifier is valid and resolvable on the tracker.
- Refresh workspace/repo state and retry if the failure stemmed from stale data.
Example fix
// before
await runAction('CreatePR', ctx, workspaceId, repoId); // throws raw backend error
// after
try {
await runAction('CreatePR', ctx, workspaceId, repoId);
} catch (e) {
showToast({ variant: 'error', message: e.message });
} Defensive patterns
Strategy: validation
Validate before calling
// before invoking the action
if (!repoId) throw new Error('Select a repository first');
const branchOk = await repoBranchExists(repoId, targetBranch);
if (!branchOk) throw new Error(`Target branch '${targetBranch}' not found`); Type guard
function isFailedResult<T>(r: { success: boolean; error?: string }): r is { success: false; error: string } {
return r.success === false && typeof r.error === 'string';
} Try / catch
try {
await action.execute(ctx, workspaceId, repoId);
} catch (e) {
notify({ variant: 'error', message: e instanceof Error ? e.message : 'Action failed' });
} Prevention
- Validate repoId, targetBranch, and issueIdentifier against current server state before executing.
- Refresh workspace/repo queries before running actions after remote changes.
- Display result.error messages directly in the UI so users see the backend cause.
- Keep issue identifiers sourced from pickers/search APIs rather than free text.
When it happens
Trigger: Calling the action's execute() where the underlying API resolves with { success: false, error: '<message>' } — e.g. invalid target branch, missing repo, or backend validation failure for the given issueIdentifier.
Common situations: Target branch renamed or deleted upstream; repo not found for repoId; issue identifier typo'd or issue moved to another tracker; stale workspace state after a remote change.
Related errors
- result.message || 'Failed to attach PR'
- Action "${action.id}" requires a workspace target
- Action "${action.id}" requires both workspace and repository
- Action "${action.id}" requires project and issue selection
- No repositories provided
AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29).
Data as JSON: /api/errors/0a1bf1f5e7a0d18e.
Report an issue: GitHub.