{"record":{"id":"aa6ae3fc345b792f","repo":"langchain-ai/langgraph","slug":"encryption-path-must-be-a-file-resolved","errorCode":null,"errorMessage":"Encryption path must be a file: {resolved}","messagePattern":"Encryption path must be a file: (.+?)","errorType":"exception","errorClass":"IsADirectoryError","httpStatus":null,"severity":"error","filePath":"libs/cli/langgraph_cli/config.py","lineNumber":986,"sourceCode":"def _update_encryption_path(\n    config_path: pathlib.Path, config: Config, local_deps: LocalDeps\n) -> None:\n    \"\"\"Update encryption.path to use Docker container paths.\"\"\"\n    encryption_conf = config.get(\"encryption\")\n    if not encryption_conf or not (path_str := encryption_conf.get(\"path\")):\n        return\n\n    module_str, sep, attr_str = path_str.partition(\":\")\n    if not sep or not module_str.startswith(\".\"):\n        return  # Already validated or absolute path\n\n    resolved = config_path.parent / module_str\n    if not resolved.exists():\n        raise FileNotFoundError(\n            f\"Encryption file not found: {resolved} (from {path_str})\"\n        )\n    if not resolved.is_file():\n        raise IsADirectoryError(f\"Encryption path must be a file: {resolved}\")\n\n    # Check faux packages first (higher priority)\n    for faux_path, (_, destpath) in local_deps.faux_pkgs.items():\n        if resolved.is_relative_to(faux_path):\n            new_path = f\"{destpath}/{resolved.relative_to(faux_path)}:{attr_str}\"\n            encryption_conf[\"path\"] = new_path\n            return\n\n    # Check real packages\n    for real_path in local_deps.real_pkgs:\n        if resolved.is_relative_to(real_path):\n            new_path = (\n                f\"/deps/{real_path.name}/{resolved.relative_to(real_path)}:{attr_str}\"\n            )\n            encryption_conf[\"path\"] = new_path\n            return\n\n    raise ValueError(","sourceCodeStart":968,"sourceCodeEnd":1004,"githubUrl":"https://github.com/langchain-ai/langgraph/blob/38031739e551638e373fb553453256c23feeb41f/libs/cli/langgraph_cli/config.py#L968-L1004","documentation":"Raised during langgraph.json config preparation when encryption.path uses the relative 'module:attribute' form but the resolved file (config directory joined with the module path) does not exist. The encryption provider module could not be located, so the config is invalid. Correct the path or place the file where the config expects it.","triggerScenarios":"Thrown at libs/cli/langgraph_cli/config.py:986 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Point encryption.path at the specific .py file, e.g. './encryption.py:key'.","Add the ':<attribute>' suffix."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"38031739e551638e373fb553453256c23feeb41f","analyzedAt":"2026-08-26T18:02:49.312Z","contentChangedAt":"2026-08-26T18:02:49.312Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}