{"record":{"id":"e19d2f15589767e3","repo":"infiniflow/ragflow","slug":"100-e19d2f","errorCode":"100","errorMessage":"Could not resolve {resolver_type} '{entity_id}' to a folder","messagePattern":"Could not resolve (.+?) '(.+?)' to a folder","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"api/apps/restful_apis/file_commit_api.py","lineNumber":104,"sourceCode":"\ndef _register_commit_routes(prefix, param_name, resolver_type=None):\n    \"\"\"Register all 8 commit endpoints for a given URL prefix.\n\n    Args:\n        prefix: URL prefix like '/folders/<folder_id>'\n        param_name: The URL parameter name (e.g. 'folder_id', 'dataset_id')\n        resolver_type: If set, resolve param_name → folder_id before calling logic\n    \"\"\"\n    # Unique suffix for this call to prevent Blueprint endpoint name collisions\n    _route_suffix[0] += 1\n    _n = _route_suffix[0]\n\n    def _resolve(entity_id):\n        if resolver_type is None:\n            return entity_id  # already a folder_id\n        folder_id = _resolve_folder_id(resolver_type, entity_id)\n        if folder_id is None:\n            raise ValueError(f\"Could not resolve {resolver_type} '{entity_id}' to a folder\")\n        return folder_id\n\n    # ── Create commit ──────────────────────────────────────────────────────\n    @manager.route(f\"{prefix}/commits\", methods=[\"POST\"], endpoint=f\"create_commit_{_n}\")  # noqa: F821\n    @login_required\n    @validate_request(\"message\", \"files\")\n    async def create_commit(entity_id):\n        folder_id = _resolve(entity_id)\n        req = await get_request_json()\n        try:\n            commit = FileCommitService.create_commit(\n                folder_id=folder_id,\n                author_id=current_user.id,\n                message=req[\"message\"],\n                file_changes=req[\"files\"],\n            )\n            return get_json_result(\n                data={","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/api/apps/restful_apis/file_commit_api.py#L86-L122","documentation":"Raised by the folder resolver in the file-commit API when a URL entity (e.g. dataset_id) cannot be mapped to an internal folder id via _resolve_folder_id — the lookup returned None. Commits are scoped to folders, so an unresolvable entity means there is no commit target.","triggerScenarios":"POST /datasets/<dataset_id>/commits (or sibling commit routes) where dataset_id does not exist, belongs to another tenant, or the dataset has no root folder initialized yet (FileService.init_knowledgebase_docs never ran for that tenant).","commonSituations":"Using a copied/wrong dataset id, hitting the commit API on a freshly created dataset before its folder structure exists, or tenant mismatch after data migration.","solutions":["Verify the dataset_id via GET /datasets/<id> before creating commits.","For new datasets, ensure normal document upload/folder init has run once so the KB folder exists.","Pass a real folder_id to the folder-scoped route variant if you have one, bypassing resolution.","Check the entity belongs to the authenticated tenant."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"from api.db.services.file_service import FileService\n\ndef folder_exists_for(dataset_id, tenant_id):\n    root = FileService.get_root_folder(tenant_id)\n    if not root:\n        return False\n    kb_root = FileService.get_kb_folder(tenant_id)\n    return kb_root is not None\n\nassert folder_exists_for(dataset_id, tenant_id), \"KB folder not initialized - upload one doc first\"","typeGuard":null,"tryCatchPattern":"try:\n    commit = create_commit(dataset_id, message, files)\nexcept ValueError as e:\n    if \"to a folder\" in str(e):\n        raise ValueError(f\"Unresolvable dataset id {dataset_id} - verify via GET /datasets/{dataset_id}\") from e\n    raise","preventionTips":["Always GET the dataset before issuing commit requests.","Initialize KB folders by completing one normal document upload on new datasets.","Never hardcode dataset ids; resolve them from creation responses."],"tags":["file-commit-api","folder-resolution","dataset","not-found"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}