{"record":{"id":"3fa923e691c664ed","repo":"paperclipai/paperclip","slug":"unsupported-version","errorCode":"unsupported_version","errorMessage":"unsupported protocol version: ${String(obj.v)}","messagePattern":"unsupported protocol version: (.+?)","errorType":"error_code","errorClass":"ProtocolError","httpStatus":null,"severity":"error","filePath":"packages/tailscale-https-broker/src/protocol.ts","lineNumber":101,"sourceCode":"  }\n  if (buf.byteLength > MAX_REQUEST_BYTES) {\n    throw new ProtocolError(\"malformed_request\", \"request frame exceeds size limit\");\n  }\n\n  let parsed: unknown;\n  try {\n    parsed = parseJsonNoDuplicateKeys(buf.toString(\"utf8\"));\n  } catch (error) {\n    throw new ProtocolError(\n      \"malformed_request\",\n      `invalid JSON: ${(error as Error).message}`,\n    );\n  }\n\n  const obj = asObject(parsed);\n\n  if (obj.v !== BROKER_PROTOCOL_VERSION) {\n    throw new ProtocolError(\n      \"unsupported_version\",\n      `unsupported protocol version: ${String(obj.v)}`,\n    );\n  }\n\n  const requestId = requireStringField(obj, \"requestId\", REQUEST_ID_RE, \"malformed_request\", null);\n\n  const op = obj.op;\n  if (op !== \"reserve\" && op !== \"expose\" && op !== \"remove\" && op !== \"list\") {\n    throw new ProtocolError(\"unknown_operation\", `unknown operation: ${String(op)}`, requestId);\n  }\n\n  if (op === \"list\") {\n    assertExactKeys(obj, [\"v\", \"op\", \"requestId\"], requestId);\n    return { op: \"list\", requestId };\n  }\n\n  if (op === \"remove\" || op === \"expose\") {","sourceCodeStart":83,"sourceCodeEnd":119,"githubUrl":"https://github.com/paperclipai/paperclip/blob/120ae5428fa29bee300bcf806491cd4d965fbb7c/packages/tailscale-https-broker/src/protocol.ts#L83-L119","documentation":"Version handshake in decodeRequest: the request's `v` field does not equal BROKER_PROTOCOL_VERSION. ProtocolError('unsupported_version') fires before any operation handling — the client and broker speak different protocol revisions and cannot proceed safely.","triggerScenarios":"Thrown at packages/tailscale-https-broker/src/protocol.ts:101 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use a protocol version supported by this broker; upgrade the client or broker so versions match."],"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"}