paperclipai/paperclip · error

Readiness check failed: could not resolve health URL for ${i

Error message

Readiness check failed: could not resolve health URL for ${input.url}

What it means

waitForRuntimeServiceReadiness needs to probe an HTTP health URL, but resolveRuntimeServiceHealthUrl could not derive a valid health URL from the provided service/readiness URL. The readiness check cannot run without a target.

Source

Thrown at server/src/services/workspace-runtime.ts:4781

export async function waitForRuntimeServiceReadiness(input: {
  service: Record<string, unknown>;
  serviceName?: string | null;
  command?: string | null;
  url: string | null;
  readinessUrl: string | null;
  fetchImpl?: typeof fetch;
  now?: () => number;
}) {
  const readiness = parseObject(input.service.readiness);
  const readinessType = asString(readiness.type, "");
  const readinessTargetUrl = input.readinessUrl ?? input.url;
  if (readinessType !== "http" || !readinessTargetUrl) return;
  const readinessUrl = resolveRuntimeServiceHealthUrl(readinessTargetUrl, {
    serviceName: input.serviceName,
    command: input.command,
  });
  if (!readinessUrl) {
    throw new Error(`Readiness check failed: could not resolve health URL for ${input.url}`);
  }
  const fetchImpl = input.fetchImpl ?? fetch;
  const now = input.now ?? Date.now;
  const timeoutSec = resolveWorkspaceRuntimeReadinessTimeoutSec(input.service);
  const intervalMs = Math.max(100, asNumber(readiness.intervalMs, 500));
  const deadline = now() + timeoutSec * 1000;
  let lastError = "service did not become ready";
  while (now() < deadline) {
    const probeBudgetMs = Math.max(1, Math.min(RUNTIME_SERVICE_READINESS_PROBE_TIMEOUT_MS, deadline - now()));
    try {
      const response = await fetchImpl(readinessUrl, { signal: AbortSignal.timeout(probeBudgetMs) });
      if (response.ok) return;
      lastError = `received HTTP ${response.status}`;
    } catch (err) {
      lastError = err instanceof Error ? err.message : String(err);
    }
    if (now() >= deadline) break;
    await delay(Math.min(intervalMs, Math.max(0, deadline - now())));

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Provide a valid absolute http(s) URL for the readiness check so a health URL can be resolved.
  2. Fix the service URL configuration so the host and port are known before the readiness check runs.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/services/workspace-runtime.ts:4628 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18). Data as JSON: /api/errors/083b52fb71a94dc9. Report an issue: GitHub.