{"record":{"id":"12569779e0e714f7","repo":"iflytek/astron-agent","slug":"variable-pool-get-parameter-error","errorCode":"VARIABLE_POOL_GET_PARAMETER_ERROR","errorMessage":"Node {node_id} does not have value {key}","messagePattern":"Node (.+?) does not have value (.+?)","errorType":"error_code","errorClass":"CustomException","httpStatus":null,"severity":"error","filePath":"core/workflow/engine/entities/variable_pool.py","lineNumber":623,"sourceCode":"                )\n                mapping_schema = cast(\n                    Dict[str, Any],\n                    self.output_variable_mapping[mapping_key].get(\"schema\", {}),\n                )\n                key_type = cast(str, mapping_schema.get(\"type\", \"\"))\n                key_i += 1\n                continue\n            if key_type == \"array\":\n                mapping_schema = cast(Dict[str, Any], mapping_schema.get(\"items\", {}))\n                array_type = cast(str, mapping_schema.get(\"type\", \"\"))\n                if array_type == \"object\":\n                    mapping_schema = cast(\n                        Dict[str, Any], mapping_schema.get(\"properties\", {})\n                    )\n                    if key not in mapping_schema:\n                        cause_error = f\"key {key} not in {mapping_schema_orig}\"\n                        msg = f\"Node {node_id} does not have value {key}\"\n                        raise CustomException(\n                            err_code=CodeEnum.VARIABLE_POOL_GET_PARAMETER_ERROR,\n                            err_msg=msg,\n                            cause_error=cause_error,\n                        )\n                    mapping_schema = cast(Dict[str, Any], mapping_schema[key])\n                    key_type = cast(str, mapping_schema.get(\"type\", \"\"))\n\n                    mapping_value = cast(list, mapping_value)\n                    return self._extract_array_value(\n                        mapping_value,\n                        key,\n                        key_type,\n                        mapping_schema,\n                        key_name_list[key_i:],\n                        first_only,\n                    )\n                else:\n                    return mapping_value","sourceCodeStart":605,"sourceCodeEnd":641,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/core/workflow/engine/entities/variable_pool.py#L605-L641","documentation":"Raised by VariablePool.get_output_variable while descending into a nested object-typed output: a key segment is not found in the mapping schema's 'properties', so the pool concludes the node has no such value. CustomException with code VARIABLE_POOL_GET_PARAMETER_ERROR and a cause_error string showing the original schema.","triggerScenarios":"get_output_variable(node_id, key) — reached via get_variable, async_execute, or _resolve_configured_value — where key contains a nested path whose object segment is absent from that node's output schema properties at that nesting level.","commonSituations":"Downstream node references `upstream.result.field` but upstream's schema dropped/renamed `field`; key casing mismatch; consuming output of a conditional branch whose schema lacks the key.","solutions":["Inspect cause_error to see the actual schema and correct the key path in the consuming node's config","Update the producing node's output schema to include the missing nested key","Guard with a schema check (key in properties) before calling get_output_variable","Handle CustomException VARIABLE_POOL_GET_PARAMETER_ERROR in the caller to supply a default"],"exampleFix":"// before\nval = pool.get_output_variable(node_id, \"a.b.c\")\n// after\nprops = get_output_schema(node_id).get(\"properties\", {})\nif \"b\" in props.get(\"a\", {}).get(\"properties\", {}):\n    val = pool.get_output_variable(node_id, \"a.b.c\")\nelse:\n    val = None","handlingStrategy":"try-catch","validationCode":"props = get_output_schema(node_id).get(\"properties\", {})\nseg = key.split(\".\")[1] if \".\" in key else key\nif seg not in props:\n    return None","typeGuard":"def output_key_exists(pool, node_id: str, key: str) -> bool:\n    schema = pool.get_output_variable_mapping().get(assemble_mapping_key(node_id, key.split('.')[0]), {}).get('schema', {})\n    return key in str(schema)","tryCatchPattern":"try:\n    val = pool.get_output_variable(node_id, key)\nexcept CustomException as e:\n    if e.err_code == CodeEnum.VARIABLE_POOL_GET_PARAMETER_ERROR:\n        log.warning(f\"missing output {key} on {node_id}: {e.cause_error}\")\n        val = default\n    else:\n        raise","preventionTips":["Check cause_error to see the actual schema when debugging","Re-validate downstream references after changing an upstream output schema","Handle conditional branches where a key may not always exist"],"tags":["workflow","variable-pool","schema","nested-object","python"],"backgroundTag":"schema-validation-failed","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}