{"record":{"id":"b49f6f9efb5a2d9f","repo":"crewAIInc/crewAI","slug":"deployment-status-response-did-not-include-a-uuid","errorCode":null,"errorMessage":"Deployment status response did not include a uuid","messagePattern":"Deployment status response did not include a uuid","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"lib/cli/src/crewai_cli/deploy/main.py","lineNumber":344,"sourceCode":"            )\n        else:\n            self._standard_no_param_error_message()\n            return\n\n        self._validate_response(response)\n        self._display_deployment_info(response.json())\n\n    def _deployment_uuid_by_name(self) -> str:\n        \"\"\"Resolve the current project's deployment UUID by project name.\"\"\"\n        if not self.project_name:\n            raise ValueError(\"project_name is required to find a deployment\")\n\n        response = self.plus_api_client.crew_status_by_name(self.project_name)\n        self._validate_response(response)\n        json_response = response.json()\n        uuid = json_response.get(\"uuid\")\n        if not uuid:\n            raise ValueError(\"Deployment status response did not include a uuid\")\n        return str(uuid)\n\n    def create_crew(\n        self,\n        confirm: bool = False,\n        skip_validate: bool = False,\n        source: DeploySource = \"cli\",\n    ) -> None:\n        \"\"\"\n        Create a new crew deployment.\n\n        Args:\n            confirm (bool): Whether to skip the interactive confirmation prompt.\n            skip_validate (bool): Skip pre-deploy validation checks.\n            source (DeploySource): Where the deployment was initiated from.\n        \"\"\"\n        if not _prepare_project_for_deploy(skip_validate):\n            return","sourceCodeStart":326,"sourceCodeEnd":362,"githubUrl":"https://github.com/crewAIInc/crewAI/blob/754d7323beb2fd042e33444a115ea2d5a47193f0/lib/cli/src/crewai_cli/deploy/main.py#L326-L362","documentation":"Raised in __init__ when cluster.bucket(self.bucket_name) / bucket.scope(...) / scope.collection(...) throws any exception while COUCHBASE_AVAILABLE is true. The original exception is chained (`from e`) but the message is generic, so the real cause — auth failure, wrong connection string, bucket not found, network unreachable — is hidden in the chained exception.","triggerScenarios":"Wrong username/password (auth error), cluster_string pointing at a host/port that is unreachable, bucket_name not existing on the cluster, or TLS settings mismatch — anything that makes the three bucket/scope/collection calls fail.","commonSituations":"Expired/rotated Couchbase credentials, Capella connection string with wrong TLS mode, firewall/SG blocking port 11210, bucket dropped, or a connection string typo.","solutions":["Inspect the chained exception (`raise ... from e` — catch and print e.__cause__) to see the real couchbase error (AuthenticationFailure, BucketNotFound, timeouts).","Verify credentials and connection string with a minimal SDK snippet outside the tool.","Confirm the bucket exists and the user has a role granting access to it.","For Capella, use the correct couchbases:// string and TLS-enabled authenticator."],"exampleFix":"# before\ntool = CouchbaseFTSVectorSearchTool(bucket_name='travel', ...)  # ValueError: Error connecting to couchbase...\n# after\ntry:\n    tool = CouchbaseFTSVectorSearchTool(bucket_name='travel', ...)\nexcept ValueError as e:\n    raise RuntimeError(f'couchbase init failed: {e.__cause__}') from e  # surfaces the real cause","handlingStrategy":"try-catch","validationCode":"from couchbase.cluster import Cluster\nfrom couchbase.auth import PasswordAuthenticator\nfrom couchbase.options import ClusterOptions\ncluster = Cluster(conn_str, ClusterOptions(PasswordAuthenticator(user, password)))\ncluster.wait_until_ready(timedelta(seconds=5))  # fails here with the REAL error if connection is bad\ncluster.bucket(bucket_name)  # also fails fast if bucket is missing","typeGuard":null,"tryCatchPattern":"try:\n    tool = CouchbaseFTSVectorSearchTool(...)\nexcept ValueError as e:\n    cause = e.__cause__  # original couchbase exception carries the real reason\n    raise RuntimeError(f\"couchbase init failed: {cause!r}\") from e","preventionTips":["Connect and call cluster.wait_until_ready yourself before constructing the tool, so real errors surface directly.","Keep credentials in a secret manager and validate them at startup.","Always re-raise with e.__cause__ — the tool's message hides whether it was auth, network, or a missing bucket."],"tags":["couchbase","connection","auth","database"],"backgroundTag":null,"analyzedSha":"754d7323beb2fd042e33444a115ea2d5a47193f0","analyzedAt":"2026-08-15T04:06:56.746Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}