paperclipai/paperclip · error

HTTPS exposure failed: Tailscale MagicDNS hostname unavailab

Error message

HTTPS exposure failed: Tailscale MagicDNS hostname unavailable

What it means

HTTPS exposure setup reserved ports and then tried to resolve a Tailscale MagicDNS hostname, which failed. Without a hostname the exposure cannot build a public HTTPS URL, so the reservation is torn down and the exposure attempt fails.

Source

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

    try {
      exposureHostname = await workspaceRuntimeExposureDeps.resolveHostname();
      reservedExposure.status.hostname = exposureHostname;
      reservedExposure.status.updatedAt = new Date().toISOString();
    } catch {
      await workspaceRuntimeExposureDeps.broker
        .remove(runtimeId, reservedExposure.handle)
        .catch(() => undefined);
      // The reservation deliberately keeps the winning pair's in-process claim for
      // the caller to release on stop/teardown. No runtime record exists yet, so
      // that teardown path can never run for this pair — releasing the broker
      // reservation alone would leave the claim held. A hostname outage would then
      // burn one pair per attempt, and a retry storm inside the claim TTL would
      // report the range exhausted rather than the real cause.
      exposurePortPairClaims.release({
        appPort: reservedExposure.appPort,
        hmrPort: reservedExposure.hmrPort,
      });
      throw new Error("HTTPS exposure failed: Tailscale MagicDNS hostname unavailable");
    }
  }
  const templateData = buildTemplateData({
    workspace: input.workspace,
    agent: input.agent,
    issue: input.issue,
    adapterEnv: input.adapterEnv,
    port,
  });
  const serviceCwd =
    port === identityPort
      ? identity.serviceCwd
      : resolveConfiguredPath(renderTemplate(asString(input.service.cwd, "."), templateData), input.workspace.cwd);
  const env: Record<string, string> = {
    ...sanitizeRuntimeServiceBaseEnv(process.env),
    ...input.adapterEnv,
  } as Record<string, string>;
  for (const [key, value] of Object.entries(renderRuntimeServiceEnv({ envConfig, templateData }))) {

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Enable Tailscale MagicDNS on the tailnet and ensure this machine has a MagicDNS hostname, then retry the exposure.
  2. Use a non-Tailscale exposure method if MagicDNS cannot be enabled.
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at server/src/services/workspace-runtime.ts:5332 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/1a42d0bc65d92ca2. Report an issue: GitHub.