JuliusBrussee/caveman · error
githubapp: decode token response: %w
Error message
githubapp: decode token response: %w
What it means
MintInstallationToken got a 201 from GitHub's access_tokens endpoint but the body did not decode into the InstallationToken struct. GitHub returned success with an unexpected payload — likely an API contract change, an HTML interstitial, or a proxy mangling the response.
Source
Thrown at shared/platform/githubapp/githubapp.go:221
}
scopedPermissions[name] = level
}
jwt, err := a.AppJWT()
if err != nil {
return InstallationToken{}, err
}
body := map[string]any{"permissions": scopedPermissions, "repositories": []string{repository}}
status, raw, err := a.do(ctx, "Bearer "+jwt, http.MethodPost,
"/app/installations/"+strconv.FormatInt(installationID, 10)+"/access_tokens", body)
if err != nil {
return InstallationToken{}, err
}
if status != http.StatusCreated {
return InstallationToken{}, fmt.Errorf("githubapp: mint token: HTTP %d: %s", status, snippet(raw))
}
var out InstallationToken
if err := json.Unmarshal(raw, &out); err != nil {
return InstallationToken{}, fmt.Errorf("githubapp: decode token response: %w", err)
}
if out.Token == "" {
return InstallationToken{}, fmt.Errorf("githubapp: token response carried no token")
}
return out, nil
}
// RevokeToken DELETEs /installation/token authenticated with the token itself —
// the job-end "drop all agency" step. A best-effort revoke; the ~1h natural
// expiry is the backstop.
func (a *App) RevokeToken(ctx context.Context, token string) error {
status, raw, err := a.do(ctx, "Bearer "+token, http.MethodDelete, "/installation/token", nil)
if err != nil {
return err
}
if status != http.StatusNoContent {
return fmt.Errorf("githubapp: revoke token: HTTP %d: %s", status, snippet(raw))
}View on GitHub (pinned to 766dce6b13)
Solutions
- Retry the mint; if persistent, inspect the raw body for API schema drift
- Confirm the API version header matches the expected response format
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at shared/platform/githubapp/githubapp.go:221 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18).
Data as JSON: /api/errors/b6fa95d8eef5664e.
Report an issue: GitHub.