{"record":{"id":"f9f6de202b96031d","repo":"infiniflow/ragflow","slug":"none-of-the-specified-github-repositories-could-be","errorCode":null,"errorMessage":"None of the specified GitHub repositories could be found for owner: {self.repo_owner}","messagePattern":"None of the specified GitHub repositories could be found for owner: (.+?)","errorType":"validation","errorClass":"ConnectorValidationError","httpStatus":null,"severity":"error","filePath":"common/data_source/github/connector.py","lineNumber":748,"sourceCode":"                    user = self.github_client.get_user(self.repo_owner)\n\n                    # Check if we can access any repos\n                    total_count = user.get_repos().totalCount\n                    if total_count == 0:\n                        raise ConnectorValidationError(f\"Found no repos for user: {self.repo_owner}. Does the credential have the right scopes?\")\n\n        except RateLimitExceededException:\n            raise UnexpectedValidationError(\"Validation failed due to GitHub rate-limits being exceeded. Please try again later.\")\n\n        except GithubException as e:\n            if e.status == 401:\n                raise CredentialExpiredError(\"GitHub credential appears to be invalid or expired (HTTP 401).\")\n            elif e.status == 403:\n                raise InsufficientPermissionsError(\"Your GitHub token does not have sufficient permissions for this repository (HTTP 403).\")\n            elif e.status == 404:\n                if self.repositories:\n                    if \",\" in self.repositories:\n                        raise ConnectorValidationError(f\"None of the specified GitHub repositories could be found for owner: {self.repo_owner}\")\n                    else:\n                        raise ConnectorValidationError(f\"GitHub repository not found with name: {self.repo_owner}/{self.repositories}\")\n                else:\n                    raise ConnectorValidationError(f\"GitHub user or organization not found: {self.repo_owner}\")\n            else:\n                raise ConnectorValidationError(f\"Unexpected GitHub error (status={e.status}): {e.data}\")\n\n        except Exception as exc:\n            raise Exception(f\"Unexpected error during GitHub settings validation: {exc}\")\n\n    def validate_checkpoint_json(self, checkpoint_json: str) -> GithubConnectorCheckpoint:\n        return GithubConnectorCheckpoint.model_validate_json(checkpoint_json)\n\n    def retrieve_slim_document(\n        self,\n        start: SecondsSinceUnixEpoch | None = None,\n        end: SecondsSinceUnixEpoch | None = None,\n        callback: Any = None,","sourceCodeStart":730,"sourceCodeEnd":766,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/common/data_source/github/connector.py#L730-L766","documentation":"ConnectorValidationError raised on HTTP 404 when 'repositories' contains a comma (multi-repo mode). Because GitHub hides private repos you cannot access as 404, this means none of the listed repositories were visible to the credential under repo_owner.","triggerScenarios":"404 from the validation probe with repositories='a,b' — every name wrong, private-without-access, or the owner segment of owner/repo is incorrect.","commonSituations":"Typos in repo names; repo renamed or transferred; private repo with a public-only token (GitHub reports 404, not 403); owner set to the wrong org.","solutions":["Check each 'owner/repo' spelling via the GitHub UI or gh repo view owner/repo.","If repos are private, grant the token access (repo scope / fine-grained allowlist) — remember GitHub returns 404 for invisible private repos.","Confirm repo_owner matches the account that actually hosts the repos."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for name in repositories.split(','):\n    if not repo_exists(gh, owner, name.strip()):\n        collect_typo(name.strip())  # note: private+no-access also looks like a typo","typeGuard":null,"tryCatchPattern":"try:\n    connector.validate_connector_settings()\nexcept ConnectorValidationError as e:\n    return 400, str(e)","preventionTips":["Copy repo names exactly from the GitHub URL; beware renames/transfers.","Remember GitHub 404s invisible private repos — check token access before assuming a typo."],"tags":["github","not-found","http-404","repositories"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}