{"record":{"id":"b8c8bc4e2f622ed4","repo":"OpenBMB/ChatDev","slug":"node-node-id-missing-literal-configuration","errorCode":null,"errorMessage":"Node {node.id} missing literal configuration","messagePattern":"Node (.+?) missing literal configuration","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"runtime/node/executor/literal_executor.py","lineNumber":20,"sourceCode":"\nfrom typing import List\n\nfrom entity.configs import Node\nfrom entity.configs.node.literal import LiteralNodeConfig\nfrom entity.messages import Message\nfrom runtime.node.executor.base import NodeExecutor\n\n\nclass LiteralNodeExecutor(NodeExecutor):\n    \"\"\"Emit the configured literal message whenever triggered.\"\"\"\n\n    def execute(self, node: Node, inputs: List[Message]) -> List[Message]:\n        if node.node_type != \"literal\":\n            raise ValueError(f\"Node {node.id} is not a literal node\")\n\n        config = node.as_config(LiteralNodeConfig)\n        if config is None:\n            raise ValueError(f\"Node {node.id} missing literal configuration\")\n\n        self._ensure_not_cancelled()\n        return [self._build_message(\n            role=config.role,\n            content=config.content,\n            source=node.id,\n            preserve_role=True,\n        )]\n\n","sourceCodeStart":2,"sourceCodeEnd":30,"githubUrl":"https://github.com/OpenBMB/ChatDev/blob/4fb2db0ea90375ce1059f44fe03ffbd191a7a169/runtime/node/executor/literal_executor.py#L2-L30","documentation":"The node is typed 'literal' but has no LiteralNodeConfig payload, so there is no role/content to emit.","triggerScenarios":"node.as_config(LiteralNodeConfig) returns None — config dict missing or shape-incompatible.","commonSituations":"Workflow builder skipped config for literal nodes; schema drift after upgrades; YAML/JSON workflow missing the config key.","solutions":["Add a LiteralNodeConfig with role and content to the node","Validate the workflow graph before execution","Regenerate workflows with the current builder APIs after version upgrades"],"exampleFix":"# before\nNode(id='n1', node_type='literal')\n\n# after\nNode(id='n1', node_type='literal', config={'role': 'assistant', 'content': 'Done'})","handlingStrategy":"validation","validationCode":"assert node.as_config(LiteralNodeConfig) is not None","typeGuard":"def has_literal_config(node) -> bool:\n    return node.as_config(LiteralNodeConfig) is not None","tryCatchPattern":null,"preventionTips":["Always materialize configs when building nodes programmatically"],"tags":["literal-node","missing-config"],"backgroundTag":"missing-node-config","analyzedSha":"4fb2db0ea90375ce1059f44fe03ffbd191a7a169","analyzedAt":"2026-08-27T14:35:29.622Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}