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
- Disable issue actions when selectedIssueIds.length === 0 (standard selection-dependent toolbar behavior).
- Pass repoIdOrProjectId and the selected issueIds explicitly to executeAction.
- 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
- Disable bulk issue actions when selectedIssueIds.length === 0
- Re-derive selection state after project switches or refetches
- Route issue actions only through UI surfaces that always have project context
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
- Action "${action.id}" requires a workspace target
- Action "${action.id}" requires both workspace and repository
- result.error
- Provide `prompt`, or `issue_id` that has a non-empty title/d
- Failed to list projects (${res.status})
AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29).
Data as JSON: /api/errors/1fded3cc62e2731b.
Report an issue: GitHub.