{"record":{"id":"5a8b07aec9b251cf","repo":"iflytek/astron-agent","slug":"eng-protocol-validate-error-node-configuration-information","errorCode":"ENG_PROTOCOL_VALIDATE_ERROR","errorMessage":"Node configuration information not found, node id = {node_id}","messagePattern":"Node configuration information not found, node id = (.+?)","errorType":"error_code","errorClass":"CustomException","httpStatus":null,"severity":"error","filePath":"core/workflow/engine/entities/variable_pool.py","lineNumber":343,"sourceCode":"        \"\"\"\n        if node_id not in self.stream_node_has_sent_first_token:\n            self.stream_node_has_sent_first_token[node_id] = False\n            return False\n        return self.stream_node_has_sent_first_token[node_id]\n\n    def get_node_protocol(self, node_id: str) -> NodeData:\n        \"\"\"\n        Get the protocol data for a specific node.\n\n        :param node_id: ID of the node\n        :return: Node data protocol\n        :raises CustomException: If node is not found\n        \"\"\"\n        for node in self.nodes:\n            if node_id == node.id:\n                return node.data\n\n        raise CustomException(\n            err_code=CodeEnum.ENG_PROTOCOL_VALIDATE_ERROR,\n            err_msg=f\"Node configuration information not found, node id = {node_id}\",\n        )\n\n    def protocol_inputs_parser(self) -> None:\n        \"\"\"\n        Parse protocol inputs and populate input variable mapping.\n        \"\"\"\n        for node in self.nodes:\n            node_id = node.id\n            node_inputs = node.data.inputs\n\n            for node_input in node_inputs:\n                input_key = node_input.name\n                input_schema = node_input.input_schema\n                input_value = input_schema.value\n                json_input_type = input_schema.type\n                python_input_type_list = schema_type_map_python.get(json_input_type, [])","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/core/workflow/engine/entities/variable_pool.py#L325-L361","documentation":"Raised by VariablePool.get_node_protocol when iterating the workflow's node list finds no node whose id matches the requested node_id, as a CustomException with code ENG_PROTOCOL_VALIDATE_ERROR. It means the workflow protocol (node definitions) loaded into the pool does not contain the node being looked up.","triggerScenarios":"Calling get_node_protocol(node_id) — directly or indirectly via _add_chat_history_if_needed, _process_llm_output_stream, or execute — with a node_id absent from self.nodes.","commonSituations":"Stale node references after a workflow was edited (node deleted/recreated with a new id); nodes imported from another workflow; case-mismatched or whitespace-polluted node ids; referencing a node that failed to deserialize.","solutions":["Print the workflow's node ids and verify the requested node_id exists (exact string match)","Fix the referencing node's config to point at the correct current node id","Re-export/re-publish the workflow so the protocol contains all referenced nodes","Normalize ids (strip whitespace, consistent casing) when constructing the workflow definition"],"exampleFix":"// before\nprotocol = pool.get_node_protocol(node_id)\n// after\nnode_ids = {n.id for n in pool.nodes}\nif node_id not in node_ids:\n    raise ValueError(f\"unknown node {node_id}, known: {node_ids}\")\nprotocol = pool.get_node_protocol(node_id)","handlingStrategy":"validation","validationCode":"node_ids = {n.id for n in pool.nodes}\nif node_id not in node_ids:\n    raise ValueError(f\"node {node_id} not in workflow; known ids: {sorted(node_ids)}\")","typeGuard":"def node_exists(pool, node_id: str) -> bool:\n    return any(n.id == node_id for n in pool.nodes)","tryCatchPattern":"try:\n    data = pool.get_node_protocol(node_id)\nexcept CustomException as e:\n    if e.err_code == CodeEnum.ENG_PROTOCOL_VALIDATE_ERROR:\n        data = None  # handle missing node\n    else:\n        raise","preventionTips":["Never hardcode node ids; resolve them from the workflow definition","Re-validate all cross-node references after editing a workflow","Strip whitespace and normalize casing of node ids at import time"],"tags":["workflow","protocol","node-not-found","python"],"backgroundTag":"entity-not-found","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"}