You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(platform): 스택 안내 코멘트가 pull-requests 쓰기 권한 부족으로 403 에 막힌다 #2068
stack-integrity-notify.yml 의 notify-affected-pull-requests job 이 스택 상위 PR 에 조치 안내를 남기려다 403 으로 죽는다. 스택 멤버가 미병합으로 닫혔을 때 상위 PR 에 무엇을 해야 하는지 알려 주는 경로가 통째로 막혀 있다.
실측 근거는 job 103442105482 이다. CLOSED_PR: 1763 으로 돌았고 gh: Resource not accessible by integration (HTTP 403) 뒤 exit 1 로 끝났다. 6초 실패지만 로그에 실제 판정 문구가 있으니 installation 토큰 rate limit 이 아니다. 이 run 의 대상은 #1626, #1839, #1837, #1838 로 전부 PR 이다.
원인은 job 권한이다. stack-integrity-notify.yml 의 job permissions 는 contents: read · issues: write · pull-requests: read 인데, 워크플로가 쓰는 엔드포인트는 다음 둘이다.
POST /repos/{owner}/{repo}/issues/{n}/comments
PATCH /repos/{owner}/{repo}/issues/comments/{id}
GitHub 은 이 엔드포인트의 필요 스코프를 대상 타입으로 가른다. {n} 이 이슈면 issues: write, 풀 리퀘스트면 pull-requests: write 다. 이 job 은 언제나 PR 에 쓰므로 목록 조회(GET)는 통과하고 첫 쓰기에서 403 이 난다.
저장소 안 대조군이 이를 확정한다.
screenshot.yml 은 issues 스코프 없이 pull-requests: write 만으로 PR 에 코멘트를 성공시킨다
conflict-label.yml 과 형제 narrow bridge 인 merge-queue-dequeue.yml 은 둘 다 issues: write + pull-requests: write 를 갖는다
issues: write + pull-requests: read 조합은 auto-close-issue.yml 뿐인데, 그쪽은 if (issue.pull_request) { continue; } 로 PR 을 명시적으로 건너뛰고 진짜 이슈에만 쓴다
재실행으로는 풀리지 않는다. 쓰기에 도달하는 모든 run 에서 결정적으로 재현된다.
완료 조건
notify-affected-pull-requests job 의 pull-requests 스코프를 write 로 올린다. 워크플로 최상단 permissions: {} 와 job 의 issues: write 는 그대로 둔다
merge-order-guard-policy.test.mjs 의 stack-integrity 권한 단언에 pull-requests: write 를 더해 같은 칸이 다시 read 로 머물지 못하게 한다
수정 뒤 스택 멤버가 닫힐 때 상위 PR 에 안내 코멘트가 실제로 남는 것을 확인한다
자식 이슈
참고
최상단 permissions: {} 는 narrow bridge 불변식이라 create-ci-config.test.mjs 가 행 첫머리 앵커로 잠그고 있다. 들여쓴 job 레벨 permissions 는 그 단언 대상이 아니므로 이 변경은 해당 테스트를 깨지 않는다. 스크래치패드 사본에 같은 한 줄을 적용해 node --test .github/scripts/merge-order-guard-policy.test.mjs .github/scripts/create-ci-config.test.mjs 를 돌린 결과 패치 전후 모두 34/34 통과였다.
merge-order-guard-policy.test.mjs 는 issues: write 를 이미 계약으로 박아 두면서 pull-requests 쪽만 비워 뒀고, 그 빈칸이 read 로 머문 채 머지된 경로다.
Activity
github-actions commentedon Sep 13, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.
maintenance(platform): base 브랜치 삭제로 닫힌 PR 을 되살린다 (#2076)
maintenance(platform): base 브랜치 삭제로 닫힌 PR 을 되살린다 (#2076)
maintenance(platform): base 브랜치 삭제로 닫힌 PR 을 되살린다 (#2076)
maintenance(platform): base 브랜치 삭제로 닫힌 PR 을 되살린다 (#2076)
Merge pull request #2070 from Afternote/fix/2068-stack-notify-permission