Skip to content

Fine-grained PAT authenticates on Windows but not Debian Linux #2249

Description

@rsocko

Summary

A supported fine-grained PAT authenticates successfully with the Node SDK on Windows, but the same token remains Not authenticated in Debian Bookworm on Linux/amd64. This reproduces the behavior reported in #867 on current GA SDK/runtime versions; the 60-second settle/retry workaround does not recover.

Environment

Component Windows control Linux failure
@github/copilot-sdk 1.0.8 1.0.8
@github/copilot package/platform binary 1.0.76-0 1.0.76-0
Runtime-reported version 1.0.76-0 1.0.76-0
Protocol 3 3
Node 24.14.0 22.22.2
OS Windows node:22.22.2-bookworm-slim, Linux/amd64
Docker N/A Server 29.6.2

The credential is a github_pat_ fine-grained PAT with Copilot Requests permission. It was compared byte-for-byte across hosts without printing it. On both hosts, GET https://api.github.com/user returns 200 for the expected user. It is unexpired. The exact token completes a real one-turn SDK request on Windows.

Minimal reproduction

const client = new CopilotClient({
  mode: "empty",
  baseDirectory: "/state",
  workingDirectory: "/work",
  env: {
    PATH: process.env.PATH,
    HOME: "/state",
    COPILOT_HOME: "/state",
    TMPDIR: "/tmp",
  },
  gitHubToken: token,
  useLoggedInUser: false,
  logLevel: "none",
});

await client.start();
console.log(await client.getStatus());
console.log(await client.getAuthStatus());
await client.stop();

Linux output:

{"status":{"version":"1.0.76-0","protocolVersion":3},"auth":{"isAuthenticated":false,"statusMessage":"Not authenticated"}}

Polling getAuthStatus() on the same running client at 0, 10, 20, 30, 40, 50, and 60 seconds returns the same unauthenticated status every time.

Additional isolation

  • Passing the same token through documented COPILOT_GITHUB_TOKEN and GH_TOKEN child environments also remains unauthenticated.
  • An A/B Linux image using node:22.13-slim, @github/copilot-sdk@1.0.6, and @github/copilot@1.0.69 (the versions used by the public Tagvico container integration) also returns Not authenticated with this PAT.
  • The CLI process starts normally and reports status/protocol, and direct GitHub API access succeeds, so this is not a missing binary, token mount, DNS, CA, or general egress failure.
  • The same Linux image uses ephemeral writable /state, /work, and /tmp; HOME, COPILOT_HOME, and SDK baseDirectory are aligned.

Expected behavior

Per the SDK authentication documentation, github_pat_ fine-grained PATs are supported by explicit gitHubToken and environment authentication. Linux should authenticate the same supported token that authenticates on Windows.

A content-free hardened reproduction and version pins are available in rsocko/mission-control#2127 and rsocko/mission-control#2136.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions