{"record":{"id":"fb632947ee799697","repo":"JuliusBrussee/caveman","slug":"caveman-cloud-platform-is-still-in-beta","errorCode":null,"errorMessage":"Caveman Cloud platform is still in beta.","messagePattern":"Caveman Cloud platform is still in beta\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cli/src/index.ts","lineNumber":9317,"sourceCode":"      const code = typeof body?.error?.code === \"string\" ? body.error.code : `HTTP ${response.status}`;\n      lastError = code;\n      // Invalid/expired grants are terminal. Infrastructure responses remain\n      // retryable so a committed ACK whose response was dropped can converge.\n      if (response.status < 500 && response.status !== 429) break;\n    } catch (error) {\n      lastError = error instanceof Error ? error.message : String(error);\n    }\n    if (attempt < 4) await sleep(Math.min(2000, 200 * 2 ** attempt));\n  }\n  throw new Error(`device credential delivery acknowledgement failed (${lastError}); credentials were persisted locally but the server may revoke them after the delivery window`);\n}\n\n// 0600 credentials file) — never in plaintext config. organization_id is bound\n// from the returned token, never from any local input.\n// Keep device-flow implementation dormant for later beta reopening. This gate\n// runs before argument parsing, network requests, browser launch, or local writes.\nfunction blockCloudLoginWhileBeta(): void {\n  throw new Error(\"Caveman Cloud platform is still in beta.\");\n}\n\nasync function login(argv: string[] = []) {\n  blockCloudLoginWhileBeta();\n  const { noBrowser } = validateLoginArgs(argv);\n  const baseURL = resolveLoginBaseUrl(argv);\n\n  const codeResp = await fetch(`${baseURL}/api/v1/auth/device/code`, {\n    method: \"POST\",\n    headers: { \"content-type\": \"application/json\" },\n    body: \"{}\",\n    signal: AbortSignal.timeout(5000),\n  });\n  if (!codeResp.ok) throw new Error(`device authorization failed: HTTP ${codeResp.status}`);\n  const code = await codeResp.json();\n  if (!code.device_code) throw new Error(`device authorization failed: ${JSON.stringify(code)}`);\n\n  const verificationURL = code.verification_uri_complete ?? code.verification_uri;","sourceCodeStart":9299,"sourceCodeEnd":9335,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/5184b3d11ac6a1acb7d44b9bfaa31698157cff97/packages/cli/src/index.ts#L9299-L9335","documentation":"blockCloudLoginWhileBeta is a hard gate that throws before any Cloud login work (argument parsing, network, browser, writes) because the Caveman Cloud platform is not yet open; device login is intentionally dormant.","triggerScenarios":"Thrown at packages/cli/src/index.ts:8472 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Wait until the cloud beta reopens and the gate is removed","Use local-only Caveman workflows in the meantime"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5184b3d11ac6a1acb7d44b9bfaa31698157cff97","analyzedAt":"2026-08-18T03:14:35.516Z","contentChangedAt":"2026-08-18T03:14:35.516Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}