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

  1. Read the thrown message — it mirrors the backend result.error and names the failing input.
  2. Verify repoId and targetBranch exist and are correct before invoking the action.
  3. Confirm the issueIdentifier is valid and resolvable on the tracker.
  4. 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

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


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