{"record":{"id":"8ace777e1f5eb2d2","repo":"paperclipai/paperclip","slug":"local-trusted-mode-only-supports-private-exposure","errorCode":null,"errorMessage":"local_trusted mode only supports private exposure","messagePattern":"local_trusted mode only supports private exposure","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/src/index.ts","lineNumber":574,"sourceCode":"          try {\n            await embeddedPostgres.initialise();\n          } catch (err) {\n            logEmbeddedPostgresFailure(\"initialise\", err);\n            throw formatEmbeddedPostgresError(err, {\n              fallbackMessage: `Failed to initialize embedded PostgreSQL cluster in ${dataDir} on port ${port}`,\n              recentLogs: logBuffer.getRecentLogs(),\n            });\n          }\n        } else {\n          logger.info(`Embedded PostgreSQL cluster already exists (${clusterVersionFile}); skipping init`);\n        }\n\n        if (existsSync(postmasterPidFile)) {\n          logger.warn(\"Removing stale embedded PostgreSQL lock file\");\n          rmSync(postmasterPidFile, { force: true });\n        }\n        try {\n          await embeddedPostgres.start();\n        } catch (err) {\n          logEmbeddedPostgresFailure(\"start\", err);\n          throw formatEmbeddedPostgresError(err, {\n            fallbackMessage: `Failed to start embedded PostgreSQL on port ${port}`,\n            recentLogs: logBuffer.getRecentLogs(),\n          });\n        }\n        embeddedPostgresStartedByThisProcess = true;\n        embeddedPostgresSupervisor = createEmbeddedPostgresSupervisor({\n          initialInstance: embeddedPostgres,\n          createInstance: createEmbeddedPostgres,\n          beforeRestart: () => {\n            const runningPostgresPid = getRunningPid();\n            if (runningPostgresPid) {\n              throw new Error(`Refusing embedded PostgreSQL recovery because the data directory reports a live process (pid=${runningPostgresPid})`);\n            }\n            if (existsSync(postmasterPidFile)) rmSync(postmasterPidFile, { force: true });\n          },","sourceCodeStart":556,"sourceCodeEnd":592,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/server/src/index.ts#L556-L592","documentation":"Startup safety check in startServer: deploymentMode is local_trusted but deploymentExposure is not 'private' (e.g. 'public'). local_trusted mode carries no authentication, so it is only permitted with private exposure; any non-private exposure setting is rejected at boot.","triggerScenarios":"Thrown at server/src/index.ts:526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Keep exposure set to private when using local_trusted mode, or switch to authenticated mode for broader exposure."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f1d897a7c018d76563a21c6e39c3c9b03933622","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}