{"record":{"id":"6a67905550305d2c","repo":"CloakHQ/CloakBrowser","slug":"cloakbrowser-pro-license-could-not-be-validated-6a6790","errorCode":null,"errorMessage":"CloakBrowser Pro: license could not be validated (server unreachable and no cached validation). Retry in a moment, or unset CLOAKBROWSER_LICENSE_KEY to use the free binary.","messagePattern":"CloakBrowser Pro: license could not be validated \\(server unreachable and no cached validation\\)\\. Retry in a moment, or unset CLOAKBROWSER_LICENSE_KEY to use the free binary\\.","errorType":"exception","errorClass":"CloakBrowserLicenseError","httpStatus":null,"severity":"error","filePath":"cloakbrowser/download.py","lineNumber":247,"sourceCode":"            except Exception as e:\n                # Transient failure with no cached Pro binary to use — surface a\n                # clear error rather than silently downloading the free binary.\n                raise RuntimeError(\n                    f\"Pro binary unavailable: {e}. Your license is valid but the \"\n                    f\"Pro binary could not be downloaded right now. Retry in a \"\n                    f\"moment. To use the free binary instead, unset \"\n                    f\"CLOAKBROWSER_LICENSE_KEY.\"\n                ) from e\n        elif info:\n            # Key supplied but rejected — abort, never downgrade to free.\n            raise CloakBrowserLicenseError(\n                f\"CloakBrowser Pro: license key is invalid or expired \"\n                f\"(plan={info.plan}). Check CLOAKBROWSER_LICENSE_KEY, or unset it \"\n                f\"to use the free binary.\"\n            )\n        else:\n            # Key supplied but unvalidatable (server down, no cache) — abort.\n            raise CloakBrowserLicenseError(\n                \"CloakBrowser Pro: license could not be validated (server \"\n                \"unreachable and no cached validation). Retry in a moment, or \"\n                \"unset CLOAKBROWSER_LICENSE_KEY to use the free binary.\"\n            )\n\n    # Fail fast if no binary available for this platform\n    check_platform_available()\n\n    if requested_version:\n        binary_path = get_binary_path(requested_version)\n        if binary_path.exists() and _is_executable(binary_path):\n            logger.debug(\n                \"Pinned binary found in cache: %s (version %s)\",\n                binary_path,\n                requested_version,\n            )\n            _show_welcome()\n            return str(binary_path)","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/CloakHQ/CloakBrowser/blob/d6bad5de261bedf025280ace1d14e800aee13923/cloakbrowser/download.py#L229-L265","documentation":"A license key was supplied but it could not be validated because the license server is unreachable and no cached validation exists. cloakbrowser fails closed rather than guessing, but tells you how to fall back to the free binary.","triggerScenarios":"CLOAKBROWSER_LICENSE_KEY set, license server unreachable/timeout, and no cached validation on this machine (e.g. first run offline).","commonSituations":"CI with restricted egress; offline development; DNS/firewall blocking the license API.","solutions":["Retry when the server is reachable","Open network access to the license endpoint","Unset CLOAKBROWSER_LICENSE_KEY to use the free binary"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"from cloakbrowser.download import CloakBrowserLicenseError\ntry:\n    ensure_binary()\nexcept CloakBrowserLicenseError as e:\n    if \"could not be validated\" in str(e):\n        os.environ.pop(\"CLOAKBROWSER_LICENSE_KEY\", None)\n        ensure_binary()  # free binary fallback\n    else:\n        raise","preventionTips":["Pre-validate the license while online (run install in the image build)","Allow a config flag to gracefully degrade to the free binary"],"tags":["license","network","offline","validation"],"backgroundTag":"license-server-unreachable","analyzedSha":"d6bad5de261bedf025280ace1d14e800aee13923","analyzedAt":"2026-08-28T14:13:12.918Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}