{"record":{"id":"97e9661f4f03d31e","repo":"infiniflow/ragflow","slug":"invalid-connector-settings-repo-owner-must-be-p","errorCode":null,"errorMessage":"Invalid connector settings: 'repo_owner' must be provided.","messagePattern":"Invalid connector settings: 'repo_owner' must be provided\\.","errorType":"validation","errorClass":"ConnectorValidationError","httpStatus":null,"severity":"error","filePath":"common/data_source/github/connector.py","lineNumber":674,"sourceCode":"        checkpoint: GithubConnectorCheckpoint,\n    ) -> CheckpointOutput[GithubConnectorCheckpoint]:\n        return self._load_from_checkpoint(start, end, checkpoint, include_permissions=False)\n\n    @override\n    def load_from_checkpoint_with_perm_sync(\n        self,\n        start: SecondsSinceUnixEpoch,\n        end: SecondsSinceUnixEpoch,\n        checkpoint: GithubConnectorCheckpoint,\n    ) -> CheckpointOutput[GithubConnectorCheckpoint]:\n        return self._load_from_checkpoint(start, end, checkpoint, include_permissions=True)\n\n    def validate_connector_settings(self) -> None:\n        if self.github_client is None:\n            raise ConnectorMissingCredentialError(\"GitHub credentials not loaded.\")\n\n        if not self.repo_owner:\n            raise ConnectorValidationError(\"Invalid connector settings: 'repo_owner' must be provided.\")\n\n        try:\n            if self.repositories:\n                if \",\" in self.repositories:\n                    # Multiple repositories specified\n                    repo_names = [name.strip() for name in self.repositories.split(\",\")]\n                    if not repo_names:\n                        raise ConnectorValidationError(\"Invalid connector settings: No valid repository names provided.\")\n\n                    # Validate at least one repository exists and is accessible\n                    valid_repos = False\n                    validation_errors = []\n\n                    for repo_name in repo_names:\n                        if not repo_name:\n                            continue\n\n                        try:","sourceCodeStart":656,"sourceCodeEnd":692,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/common/data_source/github/connector.py#L656-L692","documentation":"ConnectorValidationError raised when the 'repo_owner' setting is empty (falsy) during validate_connector_settings(). The owner is the organization or user whose repos will be indexed; without it the connector cannot form any 'owner/repo' API path. It is purely a configuration error — no GitHub API call has happened yet.","triggerScenarios":"Saving/validating a GitHub connector where the repo_owner field was omitted, left blank, or sent as an empty string in the request payload.","commonSituations":"UI form submitted without the owner field; API/terraform payload missing the key; whitespace-stripped value becoming '' after normalization upstream.","solutions":["Set repo_owner to the GitHub org or user name that owns the target repositories.","Add a required-field check in the form/API layer so the request fails before connector construction.","Re-save the credential/connector pair so both owner and repositories travel together."],"exampleFix":"// before\nGithubConnector(repo_owner='', repositories='my-repo', ...)\n\n// after\nGithubConnector(repo_owner='my-org', repositories='my-repo', ...)","handlingStrategy":"validation","validationCode":"if not (settings.get('repo_owner') or '').strip():\n    raise ValueError(\"'repo_owner' is required\")","typeGuard":null,"tryCatchPattern":"try:\n    connector.validate_connector_settings()\nexcept ConnectorValidationError as e:\n    return 400, str(e)  # user-fixable configuration problem","preventionTips":["Mark repo_owner as a required field in the connector form.","Validate required settings at request time, before constructing the connector."],"tags":["github","configuration","validation"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}