github-authentication: education.github.com telemetry call fires on every window launch and is unnecessary for EMU accounts
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.4k
- PR merge metrics
- PR metrics pending
Description
Does this issue occur when all extensions are disabled?: Yes (built-in extension)
- VS Code Version: [`1.130.0`](https://github.com/microsoft/vscode/releases/tag/1.130.0)
- OS Version:
```text
ProductName: macOS
ProductVersion: 26.5.2
BuildVersion: 25F84
```
### Summary
The built-in `github-authentication` extension calls `https://education.github.com/api/user` to enrich a telemetry event with student/faculty status. This was previously raised in #173645 (2023), where the GitHub Education team reported ~85k calls/hour and noted the data is telemetry-only. The call still exists today in `extensions/github-authentication/src/githubServer.ts` (`checkUserDetails`).
Two aspects make it heavier than intended:
1. **It fires once per account on every window launch.** The dedup guard (`_accountsSeen` in `src/github.ts`, `afterSessionLoad`) is an in-memory `Set`, so it resets whenever the extension host restarts.
2. **For Enterprise Managed Users (EMUs) the call is guaranteed useless.** EMU accounts cannot be GitHub Education students/faculty. The method already detects EMUs — but only *after* the fetch, purely to populate the `isManaged` telemetry property:
```ts
// Apparently, this is how you tell if a user is an EMU...
isManaged: session.account.label.includes('_') ? 'true' : 'false'
```
### Real-world impact
Large enterprises commonly route all developer traffic through a single NAT egress IP. At start of business hours, thousands of developers launching VS Code produce a burst of these requests from one IP. education.github.com appears to treat them as anonymous traffic and applies IP-based rate limiting — and GitHub support has attributed enterprise-wide 429s on github.com web properties to this traffic pattern. The end-user symptom is sporadic rate-limit pages on github.com during peak hours for users who never visited education.github.com themselves.
### Proposed fix
Minimal change in `checkUserDetails`:
- Evaluate the EMU heuristic (`session.account.label.includes('_')`) before any network call.
- If EMU, skip the education.github.com fetch and report `isEdu: 'none'`.
- Telemetry event name and properties are unchanged, so no GDPR annotation changes are needed.
Possible follow-up (separate change): persist the edu result in `globalState` keyed by account id, making the check once-per-machine rather than once-per-launch for non-EMU users as well.
> [!note]
> I have a PR ready implementing the minimal fix and am happy to adjust the approach based on feedback.
Contributor guide
Assessment
This issue has not been assessed yet.