{"record":{"id":"713529d1e0138f98","repo":"apache/beam","slug":"ambiguous-unnamed-transform-transform-type","errorCode":null,"errorMessage":"'Ambiguous unnamed transform {transform[\"type\"]}'","messagePattern":"'Ambiguous unnamed transform (.+?)'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/yaml_testing.py","lineNumber":425,"sourceCode":"    options = beam.options.pipeline_options.PipelineOptions(\n        pickle_library='cloudpickle',\n        **yaml_transform.SafeLineLoader.strip_metadata(\n            pipeline_spec.get('options', {})))\n\n  providers = yaml_provider.merge_providers(\n      yaml_provider.parse_providers('', pipeline_spec.get('providers', [])),\n      {\n          'AssertEqualAndRecord': yaml_provider.as_provider_list(\n              'AssertEqualAndRecord', AssertEqualAndRecord)\n      })\n\n  def get_name(transform):\n    if 'name' in transform:\n      return str(transform['name'])\n    else:\n      if sum(1 for t in transform_spec['transforms']\n             if t['type'] == transform['type']) > 1:\n        raise ValueError('Ambiguous unnamed transform {transform[\"type\"]}')\n      return str(transform['type'])\n\n  input_transforms = [\n      t for t in transform_spec['transforms'] if t['type'] != 'Create' and\n      not yaml_transform.empty_if_explicitly_empty(t.get('input', []))\n  ]\n\n  mock_outputs = [{\n      'name': get_name(t),\n      'elements': [\n          _try_row_as_dict(row)\n          for row in _first_n(t, options, max_num_inputs, providers)\n      ],\n  } for t in input_transforms]\n\n  output_transforms = [\n      t for t in transform_spec['transforms'] if t['type'] == 'LogForTesting' or\n      yaml_transform.empty_if_explicitly_empty(t.get('output', [])) or","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/yaml_testing.py#L407-L443","documentation":"Raised by create_test's get_name helper when generating a test from a pipeline spec: multiple transforms share the same 'type' and none has an explicit 'name', so a stable generated name cannot be assigned. get_name falls back to the transform type only when it is unique in the spec; with two or more unnamed transforms of the same type, the name would be ambiguous, so construction aborts.","triggerScenarios":"Thrown at sdks/python/apache_beam/yaml/yaml_testing.py:425 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a unique 'name' field to each transform of that type in the pipeline YAML","Rename one of the duplicate-type transforms so unnamed fallback naming is unambiguous"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}