{"record":{"id":"fca8c5d0a2ea51fe","repo":"stablyai/orca","slug":"accessibility-error-fca8c5","errorCode":"accessibility_error","errorMessage":"computer sidecar queue was invalidated; retry the computer-use request","messagePattern":"computer sidecar queue was invalidated; retry the computer-use request","errorType":"error_code","errorClass":"RuntimeClientError","httpStatus":null,"severity":"warning","filePath":"src/main/computer/sidecar-client.ts","lineNumber":132,"sourceCode":"    return null\n  }\n}\n\nclass ComputerSidecarProcess {\n  private child: ChildProcess | null = null\n  private childListenerCleanup: (() => void) | null = null\n  private nextId = 1\n  private pending = new Map<number, PendingRequest>()\n  private queueTail: Promise<void> | null = null\n  private queueGeneration = 0\n\n  constructor(private readonly entryPath: string) {}\n\n  call(method: ComputerSidecarMethod, params: unknown): Promise<unknown> {\n    const generation = this.queueGeneration\n    const run = () => {\n      if (generation !== this.queueGeneration) {\n        throw new RuntimeClientError(\n          'accessibility_error',\n          'computer sidecar queue was invalidated; retry the computer-use request'\n        )\n      }\n      return this.send(method, params)\n    }\n    const result = this.queueTail ? this.queueTail.then(run, run) : run()\n    const tail = result.then(\n      () => undefined,\n      () => undefined\n    )\n    this.queueTail = tail\n    void tail.finally(() => {\n      if (this.queueTail === tail) {\n        this.queueTail = null\n      }\n    })\n    return result","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/src/main/computer/sidecar-client.ts#L114-L150","documentation":"ComputerSidecarProcess serializes calls through queueTail and snapshots queueGeneration when enqueueing. shutdown(), handleExit, handleError, and failActiveChild all bump queueGeneration. When a queued request wakes and its captured generation no longer matches, it throws 'accessibility_error' ('computer sidecar queue was invalidated; retry the computer-use request') instead of dispatching onto a dead/replaced child.","triggerScenarios":"Sidecar IPC child died (exit/error) or was explicitly shut down while one or more computer-use calls were queued behind an in-flight request; the next caller catches this rather than a raw IPC error.","commonSituations":"The sidecar child crashed mid-action and N requests were queued; an idle-shutdown or test reset killed the child; OOM or a native crash inside the forked process between two queued sends.","solutions":["Retry the computer-use request — the next ensureStarted forks a fresh child.","Inspect the sidecar child's stderr/stdout for the crash root cause if retries keep failing.","If the crash is reproducible for a specific action, validate params (e.g. pasteText) before enqueueing via the public callComputerSidecar* wrappers."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":"import { RuntimeClientError } from './runtime-client-error'\n\nfunction isSidecarQueueInvalidated(e: unknown): e is RuntimeClientError {\n  return (\n    e instanceof RuntimeClientError &&\n    e.code === 'accessibility_error' &&\n    /queue was invalidated/.test(e.message)\n  )\n}","tryCatchPattern":"try {\n  await callComputerSidecarAction('click', params)\n} catch (e) {\n  if (isSidecarQueueInvalidated(e)) {\n    // queue was bumped because the child died; retry — ensureStarted forks fresh\n  } else throw e\n}","preventionTips":["Wrap sidecar calls in a bounded retry for transient queue invalidation.","Capture the forked child's stderr/stdout to diagnose recurring crashes.","Validate params (e.g. pasteText) via the public wrappers before enqueueing."],"tags":["computer-use","sidecar","ipc","queue","retry","accessibility"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}