paperclipai/paperclip · error

reconciled persisted runtime services from a previous server

Error message

reconciled persisted runtime services from a previous server process

What it means

Startup reconciliation log in startServer. Fires when reconcilePersistedRuntimeServicesOnStartup repaired persisted runtime service state from a previous process (reconciled/restarted/backfilled counts non-zero); services are restored to match DB state.

Source

Thrown at server/src/index.ts:963

  let startupListenerBound = false;
  try {
  setupRunnerPrpWebSocketServer(server, { apiUrl: configuredApiUrl });
  setupEnvironmentCustomImageTerminalWebSocketServer(server, db as any, {
    pluginWorkerManager,
  });
  setupLiveEventsWebSocketServer(server, db as any, {
    deploymentMode: config.deploymentMode,
    resolveSessionFromHeaders,
    // Cloud-proxied browsers carry trusted x-paperclip-cloud-* headers instead
    // of a local Better Auth session; without this lane every live-events
    // upgrade behind the Cloud front door 403s forever. The resolver is
    // self-gating: it returns null unless PAPERCLIP_CLOUD_TENANT_SERVER_TOKEN
    // is configured and the request presents the matching trust token, so
    // self-hosted deployments never take this path.
    resolveCloudActor: async (req) => {
      const actor = await resolveCloudTenantActor(
        db as any,
        cloudActorHeaderSourceFromHeaders(req.headers),
      );
      if (!actor?.userId || !actor.companyIds) return null;
      return { userId: actor.userId, companyIds: actor.companyIds };
    },
  });

  setStartupRecoveryPhase("recovering");
  // Bind the shared HTTP/PRP listener before native startup recovery. A
  // runnerd process that survived a controller crash is already reconnecting
  // to this address; delaying listen until after orphan reconciliation makes
  // authenticated adoption impossible and turns a healthy process into a
  // duplicate-provider risk.
  await new Promise<void>((resolveListen, rejectListen) => {
    const onError = (err: Error) => {
      server.off("error", onError);
      rejectListen(err);
    };
    server.once("error", onError);

View on GitHub (pinned to 01ad858492)

Solutions

  1. Informational only; persisted runtime service records from a previous process were reconciled with actual state.
  2. If services appear stuck, verify the managed runtime processes are actually running and restart them if needed.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at server/src/index.ts:842 when the library encounters an invalid state.

Common situations: Logged at startup when runtime service records persisted by a previous server process are reconciled against current reality.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18). Data as JSON: /api/errors/7e65a4c85557aeae. Report an issue: GitHub.