{"record":{"id":"fb61d8e31246dd28","repo":"apache/beam","slug":"unsupported-windowing-output-time-windowingstrategy","errorCode":null,"errorMessage":"Unsupported windowing output time: \" + windowingStrategy","messagePattern":"Unsupported windowing output time: \" \\+ windowingStrategy","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/typescript/src/apache_beam/runners/direct_runner.ts","lineNumber":214,"sourceCode":"    );\n    const inputPc =\n      context.descriptor.pcollections[\n        onlyElement(Object.values(transform.inputs))\n      ];\n    this.keyCoder = context.pipelineContext.getCoder(\n      context.descriptor.coders[inputPc.coderId].componentCoderIds[0],\n    );\n    const windowingStrategy =\n      context.descriptor.windowingStrategies[inputPc.windowingStrategyId];\n    if (\n      windowingStrategy.mergeStatus !== runnerApi.MergeStatus_Enum.NON_MERGING\n    ) {\n      throw new Error(\"Unsupported non-merging WindowFn: \" + windowingStrategy);\n    }\n    if (\n      windowingStrategy.outputTime !== runnerApi.OutputTime_Enum.END_OF_WINDOW\n    ) {\n      throw new Error(\n        \"Unsupported windowing output time: \" + windowingStrategy,\n      );\n    }\n    this.windowCoder = context.pipelineContext.getCoder(\n      windowingStrategy.windowCoderId,\n    );\n  }\n\n  process(wvalue: WindowedValue<any>) {\n    for (const window of wvalue.windows) {\n      const wkey =\n        operators.encodeToBase64(window, this.windowCoder) +\n        \" \" +\n        operators.encodeToBase64(wvalue.value.key, this.keyCoder);\n      if (!this.groups.has(wkey)) {\n        this.groups.set(wkey, []);\n      }\n      this.groups.get(wkey)!.push(wvalue.value.value);","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/typescript/src/apache_beam/runners/direct_runner.ts#L196-L232","documentation":"After verifying the windowing strategy is non-merging, the direct runner also requires outputTime to be END_OF_WINDOW; any other output-time behavior is not implemented and throws. The runner stamps elements with the window end when emitting, so alternative output-time semantics cannot be honored.","triggerScenarios":"A windowing strategy whose outputTime field is set to a value other than OutputTime_Enum.END_OF_WINDOW (e.g. END_OF_WINDOW_EXTRA or custom timestamp policies) while running on the direct runner.","commonSituations":"Constructing windowing strategies programmatically with custom output time; strategies produced by a newer SDK or another language binding with different output-time defaults; custom timestamp combinators.","solutions":["Leave the windowing strategy at its default output time (END_OF_WINDOW).","If building strategies manually, set outputTime: runnerApi.OutputTime_Enum.END_OF_WINDOW.","Use a different runner if you need alternate output-time semantics."],"exampleFix":"// before\nwindowingStrategy.outputTime = runnerApi.OutputTime_Enum.CUSTOM;\n// after\nwindowingStrategy.outputTime = runnerApi.OutputTime_Enum.END_OF_WINDOW;","handlingStrategy":"validation","validationCode":"if (windowingStrategy && windowingStrategy.outputTime !== undefined &&\n    windowingStrategy.outputTime !== runnerApi.OutputTime_Enum.END_OF_WINDOW) {\n  console.warn('Direct runner requires outputTime END_OF_WINDOW');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not override outputTime when building windowing strategies for the direct runner.","Keep windowing strategy construction centralized so defaults hold.","Review serialized pipelines from other SDKs for non-default outputTime values."],"tags":["windowing","unsupported","direct-runner","timestamps"],"backgroundTag":"unsupported-enum-value","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"}