📄 근거: docs/2026-07-19-github-api-rate-limit-audit.md (§2 R8)
배경
rate limit 버킷은 installation 단위로 분리되므로, 리포지토리가 여러 org에 분산된 경우 GitHub App 전환이 실효가 있다. 단 R1·R1.5로 이미 44배를 확보하므로 후순위다.
⚠️ 현재 구성에서는 전환 불가
이 저장소의 프로젝트는 user-owned다 — https://github.com/users/hojinzs/projects/14 (PVT_kwHOAPiKdM4BYPVD, owner __typename: User).
user 소유 Projects V2는 installation token으로 접근 자체가 불가하다. 전환하려면 org 소유로 이전이 선행되어야 한다.
조사 항목
| 블로커 |
위치 |
내용 |
GET /user 403 |
adapter.ts:823 fetchCurrentUserLogin |
installation token 불가. 현재 --assigned-only 구동 중이라 즉시 실패 |
viewer 쿼리 |
cli/src/github/client.ts:848, :869 |
부트스트랩/프로젝트 탐색 실패 (데몬 루프는 무관) |
| user-owned 프로젝트 |
— |
도달 불가. org 이전 필요 |
| 토큰 회전 캐시 churn |
adapter.ts:1625 fingerprintToken, orchestrator-adapter.ts:254 hashToken |
캐시 키가 토큰 값 기반. 1시간마다 만료되는 토큰에서 갱신 때마다 캐시 전부 무효화. 최우선 수정 대상 |
공개 URL은 불필요
installation token 흐름은 전부 outbound다 (JWT 서명 → POST /app/installations/{id}/access_tokens → GraphQL 호출). webhook을 쓰지 않으면 공개 엔드포인트가 필요 없다.
재사용 가능한 기반
tool-github-graphql/src/tool.ts:62 resolveGitHubGraphQLToken이 이미 { token, expiresAt } 브로커 패턴을 구현하고 있다(캐시 파일 0600, 60초 재사용 윈도우). 트래커는 정적 token: string을 가정하므로(adapter.ts:18), string | (() => Promise<string>)로 확장하면 된다.
배경
rate limit 버킷은 installation 단위로 분리되므로, 리포지토리가 여러 org에 분산된 경우 GitHub App 전환이 실효가 있다. 단 R1·R1.5로 이미 44배를 확보하므로 후순위다.
이 저장소의 프로젝트는 user-owned다 —
https://github.com/users/hojinzs/projects/14(PVT_kwHOAPiKdM4BYPVD, owner__typename: User).user 소유 Projects V2는 installation token으로 접근 자체가 불가하다. 전환하려면 org 소유로 이전이 선행되어야 한다.
조사 항목
GET /user403adapter.ts:823fetchCurrentUserLogin--assigned-only구동 중이라 즉시 실패viewer쿼리cli/src/github/client.ts:848,:869adapter.ts:1625fingerprintToken,orchestrator-adapter.ts:254hashToken공개 URL은 불필요
installation token 흐름은 전부 outbound다 (JWT 서명 →
POST /app/installations/{id}/access_tokens→ GraphQL 호출). webhook을 쓰지 않으면 공개 엔드포인트가 필요 없다.재사용 가능한 기반
tool-github-graphql/src/tool.ts:62resolveGitHubGraphQLToken이 이미{ token, expiresAt }브로커 패턴을 구현하고 있다(캐시 파일 0600, 60초 재사용 윈도우). 트래커는 정적token: string을 가정하므로(adapter.ts:18),string | (() => Promise<string>)로 확장하면 된다.