{"record":{"id":"e40bafa6b0836aba","repo":"apache/beam","slug":"data-should-not-come-in-via-process","errorCode":null,"errorMessage":"Data should not come in via process.","messagePattern":"Data should not come in via process\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"sdks/typescript/src/apache_beam/worker/operators.ts","lineNumber":257,"sourceCode":"              lastYield = new Date().getTime();\n            }\n          }\n        },\n        sendTimers: async function (timerFamilyId: string, timers: Uint8Array) {\n          throw Error(\"Not expecting timers.\");\n        },\n        close: function () {\n          endOfDataResolve();\n        },\n        onError: function (error: Error) {\n          endOfDataReject(error);\n        },\n      },\n    );\n  }\n\n  process(wvalue: WindowedValue<unknown>): ProcessResult {\n    throw Error(\"Data should not come in via process.\");\n  }\n\n  split(\n    desiredSplit: fnApi.ProcessBundleSplitRequest_DesiredSplit,\n  ): fnApi.ProcessBundleSplitResponse_ChannelSplit | undefined {\n    if (!this.started) {\n      return undefined;\n    }\n    // If we've already split, we know where the end of this bundle is.\n    // Otherwise, use the estimate the runner sent us (which is how much\n    // it expects to send us) as the end.\n    const end =\n      this.lastToProcessElement < Infinity\n        ? this.lastToProcessElement\n        : Number(desiredSplit.estimatedInputElements) - 1;\n    if (this.lastProcessedElement >= end) {\n      return undefined;\n    }","sourceCodeStart":239,"sourceCodeEnd":275,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/typescript/src/apache_beam/worker/operators.ts#L239-L275","documentation":"This operator processes data only through its own data channel; its process() entry point is deliberately unimplemented. Any windowed value delivered via process is an internal invariant violation and throws immediately.","triggerScenarios":"The Beam Fn API dispatch layer routes an element to this operator's process() method instead of its configured data channel (e.g. a wiring/mapping mismatch in the bundle descriptor).","commonSituations":"Runner/worker protocol mismatch; malformed process bundle descriptor mapping a PCollection to the wrong operator; bugs in the experimental TypeScript worker integration.","solutions":["Verify the bundle descriptor / instruction wiring maps PCollections to the correct operator.","Update the Beam runner and TypeScript SDK to matching versions.","Report/inspect as a worker bug if reproducible with a simple pipeline."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// validate bundle descriptor wiring: every PCollection id maps to an operator with a data channel\nfor (const d of descriptor.infos) {\n  if (!d.transformId) throw new Error(\"Bad operator wiring in bundle descriptor\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  operator.process(value);\n} catch (e) {\n  if (e.message.includes(\"Data should not come in via process\")) {\n    // log descriptor wiring and file a worker bug\n  }\n}","preventionTips":["Keep Beam runner and TS SDK versions aligned.","Test bundle wiring with minimal pipelines after upgrading."],"tags":["typescript","beam","worker","internal","protocol"],"backgroundTag":"internal-invariant-violation","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}