{"record":{"id":"dd13e5d898880220","repo":"ruvnet/ruflo","slug":"manifest-endpoint-mismatch-expected-endpoint","errorCode":null,"errorMessage":"Manifest endpoint mismatch: expected ${endpoint}","messagePattern":"Manifest endpoint mismatch: expected (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/plugin-agent-federation/src/domain/services/discovery-service.ts","lineNumber":107,"sourceCode":"            maxConcurrentSessions: 1,\n            supportedProtocols: ['websocket', 'http'],\n            complianceModes: [],\n          },\n          metadata: { discoveryMechanism: 'static' },\n        });\n        this.knownPeers.set(node.nodeId, node);\n        discovered.push(node);\n        this.deps.onPeerDiscovered?.(node);\n      }\n    }\n\n    return discovered;\n  }\n\n  async addStaticPeer(endpoint: string, manifest?: FederationManifest): Promise<FederationNode> {\n    if (manifest) {\n      if (manifest.endpoint !== endpoint) {\n        throw new Error(`Manifest endpoint mismatch: expected ${endpoint}`);\n      }\n      const valid = await this.deps.verifyManifest(manifest);\n      if (!valid) {\n        throw new Error(`Invalid manifest signature for endpoint: ${endpoint}`);\n      }\n    }\n\n    const nodeId = manifest?.nodeId ?? `static-${this.hashEndpoint(endpoint)}`;\n    const existing = this.knownPeers.get(nodeId);\n    if (existing) {\n      existing.markSeen();\n      return existing;\n    }\n\n    const node = FederationNode.create({\n      nodeId,\n      publicKey: manifest?.publicKey ?? '',\n      endpoint,","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/plugin-agent-federation/src/domain/services/discovery-service.ts#L89-L125","documentation":"addStaticPeer() verified that the supplied manifest's endpoint field differs from the endpoint argument the caller is registering it under. A manifest must describe the endpoint it is being attached to; a mismatch means the wrong manifest or a copy-paste error.","triggerScenarios":"A discovered peer manifest declares an endpoint different from the endpoint the manifest was fetched from.","commonSituations":"Stale or spoofed manifest, misconfigured endpoint in the peer's published manifest, or a proxy rewriting URLs.","solutions":["Fetch the manifest from the endpoint it declares, or fix the endpoint field in the peer's manifest.","Treat persistent mismatch as a potential spoof and refuse the peer until resolved."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}