JuliusBrussee/caveman · error · Error

Caveman Cloud platform is still in beta.

Error message

Caveman Cloud platform is still in beta.

What it means

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.

Source

Thrown at packages/cli/src/index.ts:9317

      const code = typeof body?.error?.code === "string" ? body.error.code : `HTTP ${response.status}`;
      lastError = code;
      // Invalid/expired grants are terminal. Infrastructure responses remain
      // retryable so a committed ACK whose response was dropped can converge.
      if (response.status < 500 && response.status !== 429) break;
    } catch (error) {
      lastError = error instanceof Error ? error.message : String(error);
    }
    if (attempt < 4) await sleep(Math.min(2000, 200 * 2 ** attempt));
  }
  throw new Error(`device credential delivery acknowledgement failed (${lastError}); credentials were persisted locally but the server may revoke them after the delivery window`);
}

// 0600 credentials file) — never in plaintext config. organization_id is bound
// from the returned token, never from any local input.
// Keep device-flow implementation dormant for later beta reopening. This gate
// runs before argument parsing, network requests, browser launch, or local writes.
function blockCloudLoginWhileBeta(): void {
  throw new Error("Caveman Cloud platform is still in beta.");
}

async function login(argv: string[] = []) {
  blockCloudLoginWhileBeta();
  const { noBrowser } = validateLoginArgs(argv);
  const baseURL = resolveLoginBaseUrl(argv);

  const codeResp = await fetch(`${baseURL}/api/v1/auth/device/code`, {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: "{}",
    signal: AbortSignal.timeout(5000),
  });
  if (!codeResp.ok) throw new Error(`device authorization failed: HTTP ${codeResp.status}`);
  const code = await codeResp.json();
  if (!code.device_code) throw new Error(`device authorization failed: ${JSON.stringify(code)}`);

  const verificationURL = code.verification_uri_complete ?? code.verification_uri;

View on GitHub (pinned to 5184b3d11a)

Solutions

  1. Wait until the cloud beta reopens and the gate is removed
  2. Use local-only Caveman workflows in the meantime
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/cli/src/index.ts:8472 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@5184b3d11a (2026-08-18). Data as JSON: /api/errors/fb632947ee799697. Report an issue: GitHub.