{"record":{"id":"b8a0471bf26ce565","repo":"github/copilot-sdk","slug":"unknown-github-token-provider-registration-id-q","errorCode":null,"errorMessage":"unknown GitHub token provider registration ID %q","messagePattern":"unknown GitHub token provider registration ID %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/client.go","lineNumber":2589,"sourceCode":"\t\t\tdelete(c.sessionOperations, sessionID)\n\t\t}\n\t\tc.sessionOperationsMux.Unlock()\n\t}\n}\n\ntype gitHubTokenAdapter struct {\n\tclient *Client\n}\n\nfunc (a *gitHubTokenAdapter) GetToken(request *rpc.GitHubTokenAcquireRequest) (rpc.GitHubTokenAcquireResult, error) {\n\tif request == nil {\n\t\treturn nil, fmt.Errorf(\"missing GitHub token acquire request\")\n\t}\n\ta.client.gitHubTokenProvidersMux.RLock()\n\tprovider := a.client.gitHubTokenProviders[request.RegistrationID]\n\ta.client.gitHubTokenProvidersMux.RUnlock()\n\tif provider == nil {\n\t\treturn nil, fmt.Errorf(\"unknown GitHub token provider registration ID %q\", request.RegistrationID)\n\t}\n\n\tresult, err := provider(GitHubTokenProviderArgs{\n\t\tHost:      request.Host,\n\t\tSessionID: request.SessionID,\n\t\tReason:    request.Reason,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif result != nil && result.Cancelled {\n\t\treturn &rpc.GitHubTokenAcquireResultCancelled{}, nil\n\t}\n\tif result == nil || result.Token == nil {\n\t\treturn nil, fmt.Errorf(\"GitHub token provider returned neither a token nor cancellation\")\n\t}\n\treturn &rpc.GitHubTokenAcquireResultToken{\n\t\tAccessToken: result.Token.AccessToken,","sourceCodeStart":2571,"sourceCodeEnd":2607,"githubUrl":"https://github.com/github/copilot-sdk/blob/cd8cf15dc3f9e762615790aaed0a771a0f392755/go/client.go#L2571-L2607","documentation":"Returned by gitHubTokenAdapter.GetToken when the request's RegistrationID does not match any provider previously registered on the Client via the GitHub token provider registry. The lookup under gitHubTokenProviders returns nil and the call fails with the offending ID quoted.","triggerScenarios":"The CLI requests a GitHub token with a RegistrationID that was never registered (or was already unregistered) on the client, e.g. the provider map lookup returns nil.","commonSituations":"Registration ID typo or hardcoded stale ID; provider registered on a different Client instance; client restarted and registrations lost while the CLI still remembers the old ID; registration ID from an older session after reconnect.","solutions":["Register the provider with the exact RegistrationID the CLI sends before the token request arrives (RegisterGitHubTokenProvider).","Log the set of registered IDs and compare with request.RegistrationID to spot stale/typo'd IDs.","Re-register providers after any client restart or reconnect.","Ensure the ID used at registration time is the one passed back by the registration API rather than a locally invented value."],"exampleFix":"// before\nc.RegisterGitHubTokenProvider(\"my-provider\", providerFn) // CLI asks for id \"github-main\"\n\n// after\nid, err := c.RegisterGitHubTokenProvider(providerFn) // use returned canonical ID\nif err != nil { log.Fatal(err) }\nlog.Printf(\"registered GitHub token provider id=%s\", id)","handlingStrategy":"validation","validationCode":"c.gitHubTokenProvidersMux.RLock()\n_, ok := c.gitHubTokenProviders[wantedID]\nc.gitHubTokenProvidersMux.RUnlock()\nif !ok { return fmt.Errorf(\"provider %q not registered\", wantedID) }","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"unknown GitHub token provider registration ID\") {\n    // re-register providers and retry once\n}","preventionTips":["Use the canonical registration ID returned by the registration API, never a hand-written one.","Re-register all providers immediately after client restart/reconnect.","Log registered IDs at startup for cross-checking."],"tags":["github","token","registration","rpc","go"],"backgroundTag":"resource-not-found","analyzedSha":"cd8cf15dc3f9e762615790aaed0a771a0f392755","analyzedAt":"2026-09-09T18:32:31.973Z","contentChangedAt":"2026-09-09T18:32:31.973Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}