{"record":{"id":"4f3d5d9c509b8dcf","repo":"infiniflow/ragflow","slug":"codeexec-business-output-name-must-not-contain","errorCode":null,"errorMessage":"CodeExec business output name must not contain '.': {name}","messagePattern":"CodeExec business output name must not contain '\\.': (.+?)","errorType":"validation","errorClass":"ContractError","httpStatus":null,"severity":"error","filePath":"agent/tools/code_exec.py","lineNumber":61,"sourceCode":"        \"_ATTACHMENT_CONTENT\",\n        \"raw_result\",\n        \"_created_time\",\n        \"_elapsed_time\",\n    }\n)\n\n\nclass ContractError(ValueError):\n    pass\n\n\ndef _validate_business_output_name(name: str) -> None:\n    if not name or not name.strip():\n        raise ContractError(\"CodeExec business output name must not be empty\")\n    if name in SYSTEM_OUTPUT_KEYS:\n        raise ContractError(f\"CodeExec reserved output name is not allowed: {name}\")\n    if \".\" in name:\n        raise ContractError(f\"CodeExec business output name must not contain '.': {name}\")\n\n\ndef select_business_output(outputs: Mapping[str, object]) -> tuple[str, object]:\n    if len(outputs) == 1:\n        only_name, only_meta = next(iter(outputs.items()))\n        _validate_business_output_name(only_name)\n        return only_name, only_meta\n\n    business_outputs = [(name, meta) for name, meta in outputs.items() if name not in SYSTEM_OUTPUT_KEYS]\n    if len(business_outputs) != 1:\n        raise ContractError(f\"CodeExec contract must contain exactly one business output, got {len(business_outputs)}\")\n    _validate_business_output_name(business_outputs[0][0])\n    return business_outputs[0]\n\n\ndef normalize_output_value(value):\n    if isinstance(value, (tuple, list)):\n        return [normalize_output_value(item) for item in value]","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/agent/tools/code_exec.py#L43-L79","documentation":"Error \"CodeExec business output name must not contain '.': {name}\" thrown in infiniflow/ragflow.","triggerScenarios":"Thrown at agent/tools/code_exec.py:61 when the library encounters an invalid state.","commonSituations":"Output names containing dots conflict with CodeExec result path resolution; using flat identifiers without '.' prevents this error.","solutions":["Remove '.' from the business output name; use a flat identifier."],"exampleFix":"# replace 'user.name' with 'user_name'\noutputs = [{'name': 'user_name', 'type': 'String'}]","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}