{"record":{"id":"ae267ac9d44b035e","repo":"windmill-labs/windmill","slug":"runnable-not-found-runnableid","errorCode":null,"errorMessage":"Runnable not found: ${runnableId}","messagePattern":"Runnable not found: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/src/commands/app/dev.ts","lineNumber":1161,"sourceCode":"        );\n\n        const { type, reqId, runnable_id, v, jobId } = message;\n\n        // Helper to send response\n        const respond = (responseType: string, result: any, error: boolean) => {\n          ws.send(JSON.stringify({ type: responseType, reqId, result, error }));\n        };\n\n        // Helper to execute and wait for result\n        const runAndWaitForResult = async (\n          runnableId: string,\n          args: any,\n        ): Promise<{ uuid: string; result: any }> => {\n          const runnables = await loadRunnables();\n          const runnable = runnables[runnableId];\n\n          if (!runnable) {\n            throw new Error(`Runnable not found: ${runnableId}`);\n          }\n\n          const uuid = await executeRunnable(\n            runnable,\n            workspaceId,\n            appPath,\n            runnableId,\n            args,\n            appTempRefs,\n          );\n          log.info(colors.gray(`[backend] Job started: ${uuid}`));\n\n          const result = await waitForJob(workspaceId, uuid);\n          return { uuid, result };\n        };\n\n        switch (type) {\n          case \"backend\": {","sourceCodeStart":1143,"sourceCodeEnd":1179,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/cli/src/commands/app/dev.ts#L1143-L1179","documentation":"Lookup miss inside the app dev server's WebSocket backend handler: a client message requested execution of a runnable by id, but runnables[runnableId] (from loadRunnables) has no entry for it. This is the sync-path handler (runAndWaitForResult); the id in the message is the faulting input. It usually means the dev server's runnable registry is stale relative to the browser app — a runnable was renamed/deleted locally, or the app preview was built against an older snapshot than the one the dev server currently serves.","triggerScenarios":"Thrown at cli/src/commands/app/dev.ts:1161 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restart the wmill app dev session so loadRunnables re-scans and the preview uses the current runnable set","Check the app definition for references to a runnable id that no longer exists (renamed or removed component) and fix or delete the stale reference","Save/re-sync the app in the editor so the dev server's registry and the served bundle agree"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}