{"record":{"id":"787de93c9d7b3a31","repo":"stablyai/orca","slug":"unknown-keybinding-action-actionid","errorCode":null,"errorMessage":"Unknown keybinding action \"${actionId}\".","messagePattern":"Unknown keybinding action \"(.+?)\"\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/main/keybindings/keybinding-file.ts","lineNumber":433,"sourceCode":"  document.platforms = {\n    ...platforms,\n    darwin: isJsonObject(platforms.darwin) ? platforms.darwin : {},\n    linux: isJsonObject(platforms.linux) ? platforms.linux : {},\n    win32: isJsonObject(platforms.win32) ? platforms.win32 : {},\n    [keybindingPlatform]: activePlatform\n  }\n  writeJsonDocument(path, document)\n  return readKeybindingFile(path, platform)\n}\n\nexport function writeKeybindingOverride(\n  path: string,\n  platform: NodeJS.Platform,\n  actionId: string,\n  bindings: unknown\n): KeybindingFileSnapshot {\n  if (!isKeybindingActionId(actionId)) {\n    throw new Error(`Unknown keybinding action \"${actionId}\".`)\n  }\n  const normalizedBindings = normalizeWriteBindingValue(actionId, bindings)\n\n  const keybindingPlatform = getKeybindingPlatform(platform)\n  const currentSnapshot = readKeybindingFile(path, platform)\n  const candidateOverrides = { ...currentSnapshot.overrides }\n  if (normalizedBindings === null) {\n    delete candidateOverrides[actionId]\n  } else {\n    candidateOverrides[actionId] = normalizedBindings\n  }\n  const blockingConflict = findKeybindingConflicts(keybindingPlatform, candidateOverrides).find(\n    (conflict) => conflict.actionIds.includes(actionId)\n  )\n  if (blockingConflict) {\n    throw new Error(\n      `${formatKeybindingList([blockingConflict.binding], keybindingPlatform)} conflicts with another shortcut.`\n    )","sourceCodeStart":415,"sourceCodeEnd":451,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/src/main/keybindings/keybinding-file.ts#L415-L451","documentation":"Thrown by writeKeybindingOverride when the actionId is not a recognized KeybindingActionId (isKeybindingActionId returns false). The keybinding schema is a closed set of action ids; writing an unknown one would create an entry no command listens for, so it is rejected before any normalization or file IO.","triggerScenarios":"Calling writeKeybindingOverride with a typo'd, renamed, or invented actionId. Common after upgrading Orca where an action was renamed, or when a caller hardcodes an id that was never valid.","commonSituations":"Renderer bug sending an old action name. Custom plugin assuming an action exists. Action renamed across versions without updating caller.","solutions":["Use a current KeybindingActionId — enumerate valid ids from the keybinding registry.","If the action was renamed, update the caller to the new id.","Remove calls for actions that no longer exist."],"exampleFix":"// before\nwriteKeybindingOverride(path, platform, 'commandPallet.open', ['Cmd+P'])\n// after\nwriteKeybindingOverride(path, platform, 'command.palette.open', ['Cmd+P'])","handlingStrategy":"validation","validationCode":"if (!isKeybindingActionId(actionId)) throw new Error(`unknown action: ${actionId}`)","typeGuard":"function isKnownActionId(actionId: string): actionId is KeybindingActionId {\n  return isKeybindingActionId(actionId)\n}","tryCatchPattern":"try { writeKeybindingOverride(path, platform, actionId, bindings) }\ncatch (e) { if (/Unknown keybinding action/.test(String((e as Error).message))) refreshActionRegistry(); else throw e }","preventionTips":["Source actionIds from the live keybinding registry, not hardcoded strings.","Update callers when actions are renamed across Orca versions.","Drop writes for actions that no longer exist."],"tags":["keybindings","validation","write","unknown-action"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}