{"record":{"id":"b4b38229a5323342","repo":"BloopAI/vibe-kanban","slug":"remoteactionsprovider-name-is-unavailable-in","errorCode":null,"errorMessage":"[RemoteActionsProvider] ${name} is unavailable in remote web.","messagePattern":"\\[RemoteActionsProvider\\] (.+?) is unavailable in remote web\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"packages/remote-web/src/app/providers/RemoteActionsProvider.tsx","lineNumber":39,"sourceCode":"  resolveLabel,\n  type ProjectMutations,\n} from \"@/shared/types/actions\";\nimport { SettingsDialog } from \"@/shared/dialogs/settings/SettingsDialog\";\nimport { useAppNavigation } from \"@/shared/hooks/useAppNavigation\";\nimport { useAppRuntime } from \"@/shared/hooks/useAppRuntime\";\nimport { useOrganizationStore } from \"@/shared/stores/useOrganizationStore\";\nimport {\n  buildKanbanIssueComposerKey,\n  openKanbanIssueComposer,\n  type ProjectIssueCreateOptions,\n} from \"@/shared/stores/useKanbanIssueComposerStore\";\n\ninterface RemoteActionsProviderProps {\n  children: ReactNode;\n}\n\nfunction noOpSelection(name: string) {\n  console.warn(`[RemoteActionsProvider] ${name} is unavailable in remote web.`);\n}\n\nexport function RemoteActionsProvider({\n  children,\n}: RemoteActionsProviderProps) {\n  const appRuntime = useAppRuntime();\n  const appNavigation = useAppNavigation();\n  const queryClient = useQueryClient();\n  const { projectId, hostId } = useParams({ strict: false });\n  const userCtx = useContext(UserContext);\n  const selectedOrgId = useOrganizationStore((s) => s.selectedOrgId);\n  const [defaultCreateStatusId, setDefaultCreateStatusId] = useState<\n    string | undefined\n  >();\n  const [projectMutations, setProjectMutations] =\n    useState<ProjectMutations | null>(null);\n\n  const registerProjectMutations = useCallback(","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/BloopAI/vibe-kanban/blob/4deb7eca8f381f7cbc1f9d15515a9ab8f8009053/packages/remote-web/src/app/providers/RemoteActionsProvider.tsx#L21-L57","documentation":"Remote web replaces the local desktop ActionsProvider with a stub provider. Interactive selection dialogs that only work in the local (Tauri/desktop) app — status, priority, assignee, sub-issue, workspace, and relationship selection — are wired to `noOpSelection`, which does nothing but log this console.warn. No dialog opens and no state changes.","triggerScenarios":"Triggering a selection action from shared UI while running in remote web (e.g. opening the status/priority/assignee picker on an issue card, choosing 'select workspace' from a workspace action, opening sub-issue or relationship pickers).","commonSituations":"Users of the hosted/remote web UI clicking context-menu or kanban-card actions that are desktop-only; shared components invoking ActionsContext selection functions without checking runtime capability.","solutions":["Treat it as expected behavior in remote web — the action is intentionally a no-op there.","Hide or disable the selection affordances when `useAppRuntime()` indicates remote runtime, so users don't click unavailable actions.","Implement remote equivalents (e.g. inline dropdowns fetching from the remote API) if the feature is needed in remote web."],"exampleFix":"// before\n<MenuItem onClick={() => openStatusSelection(issue)} />\n\n// after\nconst appRuntime = useAppRuntime();\n{appRuntime.isLocal && (\n  <MenuItem onClick={() => openStatusSelection(issue)} />\n)}","handlingStrategy":"type-guard","validationCode":"const appRuntime = useAppRuntime();\nconst canOpenSelections = !appRuntime.isRemote; // only render selection triggers locally","typeGuard":"function isLocalRuntime(rt: AppRuntime): rt is LocalAppRuntime {\n  return rt.kind === 'local';\n}\n// usage: if (isLocalRuntime(appRuntime)) openStatusSelection();","tryCatchPattern":null,"preventionTips":["Gate selection/dialog UI on app runtime capability instead of rendering desktop-only affordances in remote web.","Consume ActionsContext only through components that check runtime support first.","Keep a list of no-op remote actions and hide them from kanban/context menus."],"tags":["remote-web","unsupported-feature","noop"],"backgroundTag":"feature-not-available-in-remote","analyzedSha":"4deb7eca8f381f7cbc1f9d15515a9ab8f8009053","analyzedAt":"2026-08-29T09:24:13.446Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}