{"record":{"id":"a8a5b46480353237","repo":"paperclipai/paperclip","slug":"missing-required-env-key","errorCode":null,"errorMessage":"missing required env: ${key}","messagePattern":"missing required env: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/tailscale-https-broker/src/config.ts","lineNumber":28,"sourceCode":"  socketPath: string;\n  registryPath: string;\n  auditPath: string;\n  tailscaleBinPath: string;\n  nodeIdentity: string;\n  serviceUid: number;\n  serviceGid: number;\n  runtimeUid: number;\n  /**\n   * Operator-declared ports the broker must never mutate, parsed from\n   * `BROKER_PROTECTED_PORTS` (PAP-17285). Empty when unset.\n   */\n  protectedPorts: number[];\n}\n\nfunction requireEnv(env: NodeJS.ProcessEnv, key: string): string {\n  const value = env[key];\n  if (!value || value.trim().length === 0) {\n    throw new Error(`missing required env: ${key}`);\n  }\n  return value;\n}\n\nfunction requireUid(env: NodeJS.ProcessEnv, key: string): number {\n  const raw = requireEnv(env, key);\n  if (!/^[0-9]+$/.test(raw)) throw new Error(`${key} must be a non-negative integer`);\n  return Number(raw);\n}\n\nexport function loadHostConfig(env: NodeJS.ProcessEnv): BrokerHostConfig {\n  const config: BrokerHostConfig = {\n    socketPath: env.BROKER_SOCKET_PATH ?? \"/run/paperclip-tailscale-broker/broker.sock\",\n    registryPath: env.BROKER_REGISTRY_PATH ?? \"/var/lib/paperclip-tailscale-broker/registry.json\",\n    auditPath: env.BROKER_AUDIT_PATH ?? \"/var/log/paperclip-tailscale-broker/audit.log\",\n    tailscaleBinPath: env.BROKER_TAILSCALE_BIN ?? \"/usr/bin/tailscale\",\n    nodeIdentity: requireEnv(env, \"BROKER_NODE_IDENTITY\"),\n    serviceUid: requireUid(env, \"BROKER_SERVICE_UID\"),","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/packages/tailscale-https-broker/src/config.ts#L10-L46","documentation":"requireEnv guard used by loadHostConfig for mandatory broker env vars (e.g. BROKER_NODE_IDENTITY). The variable is unset or whitespace-only. Fails at startup so a missing identity cannot degrade broker behavior at runtime.","triggerScenarios":"Thrown at packages/tailscale-https-broker/src/config.ts:28 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the named required environment variable before starting the broker."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"120ae5428fa29bee300bcf806491cd4d965fbb7c","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}