BloopAI/vibe-kanban · error · Error

Action "${action.id}" requires project and issue selection

Error message

Action "${action.id}" requires project and issue selection

What it means

For actions with requiresTarget === ActionTargetType.ISSUE, executeAction requires a repoIdOrProjectId and a non-empty issueIds array; otherwise it throws 'Action "<id>" requires project and issue selection'. Issue actions (assign, status change, etc.) need the target project plus at least one selected issue.

Source

Thrown at packages/web-core/src/shared/providers/ActionsProvider.tsx:303

            await action.execute(executorContext, workspaceId);
            break;

          case ActionTargetType.GIT:
            if (!workspaceId || !repoIdOrProjectId) {
              throw new Error(
                `Action "${action.id}" requires both workspace and repository`
              );
            }
            await action.execute(
              executorContext,
              workspaceId,
              repoIdOrProjectId
            );
            break;

          case ActionTargetType.ISSUE:
            if (!repoIdOrProjectId || !issueIds || issueIds.length === 0) {
              throw new Error(
                `Action "${action.id}" requires project and issue selection`
              );
            }
            await action.execute(executorContext, repoIdOrProjectId, issueIds);
            break;
        }
      } catch (error) {
        // Show error to user via alert dialog
        ConfirmDialog.show({
          title: 'Error',
          message: error instanceof Error ? error.message : 'An error occurred',
          confirmText: 'OK',
          showCancelButton: false,
          variant: 'destructive',
        });
      }
    },
    [executorContext]

View on GitHub (pinned to 4deb7eca8f)

Solutions

  1. Disable issue actions when selectedIssueIds.length === 0 (standard selection-dependent toolbar behavior).
  2. Pass repoIdOrProjectId and the selected issueIds explicitly to executeAction.
  3. Reset/re-derive selection state when the project changes so handlers never see stale empty arrays.

Example fix

// before
executeAction(action);
// after
if (!repoIdOrProjectId || selectedIssueIds.length === 0) return;
executeAction(action, repoIdOrProjectId, selectedIssueIds);
Defensive patterns

Strategy: validation

Validate before calling

if (action.requiresTarget === ActionTargetType.ISSUE && (!repoIdOrProjectId || !issueIds?.length)) {
  return; // need a project and at least one selected issue
}
executeAction(action, repoIdOrProjectId, issueIds);

Try / catch

try {
  await executeAction(action, repoIdOrProjectId, issueIds);
} catch (err) {
  if (err instanceof Error && err.message.includes('requires project and issue selection')) {
    promptUserToSelectIssues();
  }
}

Prevention

When it happens

Trigger: Calling executeAction for an ISSUE action with no project/repo selected, or with issueIds undefined or an empty array (no issues selected in the board/list).

Common situations: Keyboard shortcut or bulk-action toolbar firing while the issue selection was cleared (e.g. after filter change); invoking issue actions from a view without an active project; selection state reset by a refetch.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


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