{"record":{"id":"5e7d6a030651549a","repo":"ipfs/kubo","slug":"failed-to-load-remote-pinning-services-info-v","errorCode":null,"errorMessage":"failed to load remote pinning services info (%v)","messagePattern":"failed to load remote pinning services info \\((.+?)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/commands/config.go","lineNumber":682,"sourceCode":"\n\tpkstr, ok := keyF.Value.(string)\n\tif !ok {\n\t\treturn errors.New(\"private key in config was not a string\")\n\t}\n\n\tnewCfg.Identity.PrivKey = pkstr\n\tid, err := nodePeerID(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\tnewCfg.Identity.PeerID = id.String()\n\n\t// Handle Pinning.RemoteServices (API.Key of each service is a secret)\n\n\tnewServices := newCfg.Pinning.RemoteServices\n\toldServices, err := getRemotePinningServices(r)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to load remote pinning services info (%v)\", err)\n\t}\n\n\t// fail fast if service lists are obviously different\n\tif len(newServices) != len(oldServices) {\n\t\treturn errors.New(\"cannot add or remove remote pinning services with 'config replace'\")\n\t}\n\n\t// re-apply API details and confirm every modified service already existed\n\tfor name, oldSvc := range oldServices {\n\t\tif newSvc, hadSvc := newServices[name]; hadSvc {\n\t\t\t// fail if input changes any of API details\n\t\t\t// (interop with config show: allow Endpoint as long it did not change)\n\t\t\tif len(newSvc.API.Key) != 0 || (len(newSvc.API.Endpoint) != 0 && newSvc.API.Endpoint != oldSvc.API.Endpoint) {\n\t\t\t\treturn errors.New(\"cannot change remote pinning services api info with `config replace`\")\n\t\t\t}\n\t\t\t// re-apply API details and store service in updated config\n\t\t\tnewSvc.API = oldSvc.API\n\t\t\tnewCfg.Pinning.RemoteServices[name] = newSvc","sourceCodeStart":664,"sourceCodeEnd":700,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/core/commands/config.go#L664-L700","documentation":"During 'ipfs config replace', loading the current Pinning.RemoteServices from the existing repo config failed, so the sanity check comparing old and new service lists cannot run and the replace is aborted. %v is the underlying read error, typically a corrupt or unreadable config.","triggerScenarios":"Thrown at core/commands/config.go:682 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the wrapped error and the current config file's Pinning.RemoteServices section","Restore a valid config backup, then retry the replace"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}