Skip to content

fix(ci): 재리뷰 요청 누락으로 리뷰 적체 가드가 무력 — 대기 7건을 빚 0건으로 판정 #1450

Closed

Description

@OnlyReadOneBook

작업 유형

bug — 버그·오동작

주 담당 모듈

platform — Android 앱·CI·빌드·릴리스·저장소 운영

개요

review-debt-guard 가 리뷰 응답을 기다리는 PR 7건을 「빚 0건」으로 판정하고 있습니다. 가드가 서 있지만 아무도 막지 못합니다.

8/29 01:39 에 #1449(작성자 Sadturtleman)로 돌아간 가드 run 33226967880 은 열린 PR 33건을 훑고 「응답을 기다리는 PR 없음 — 통과」로 끝났습니다. 같은 시점에 열린 PR 을 전수 실측하면 이렇습니다.

PR 작성자 변경요청 낸 사람 최신 변경요청 뒤 반영 커밋 재요청 가드 판정
#1379 koongmai 1hyok 1 ❌ 빚 아님
#1371 1hyok Sadturtleman 1 ❌ 빚 아님
#1365 koongmai 1hyok 1 ❌ 빚 아님
#1355 dependabot 1hyok 1 ❌ 빚 아님
#1265 Sadturtleman 1hyok 1 ❌ 빚 아님
#966 Sadturtleman 1hyok 1 ❌ 빚 아님
#882 koongmai 1hyok 1 ❌ 빚 아님
#1316 1hyok Sadturtleman 0 (merge 5건) ✅ 변경요청 미반영

8건 전부 「리뷰어가 봐야 하는데 가드에는 안 잡히는」 상태이고, 원인은 서로 다른 두 개입니다.

구멍 A — 재요청은 손으로 걸어야 하는데 아무도 안 건다 (7건)

review-debt-guard.yml:93-101 은 변경요청을 빚으로 세는 조건을 셋으로 둡니다. ①최신 판정이 CHANGES_REQUESTED ②그 리뷰어에게 재요청이 다시 걸려 있음 ③그 뒤 작성자의 반영 커밋. #1206 이 ②를 넣으면서 「수정 커밋만으로 리뷰 의무를 만들지 않는다」를 명문화했는데, GitHub 은 변경요청 리뷰를 제출하는 순간 그 리뷰어의 요청을 떼어 내므로 ②는 작성자가 매번 손으로 되살려야 합니다. 그리고 실제로는 아무도 안 겁니다 — 위 7건 중 7건 모두.

이건 개인의 부주의로 볼 수 없습니다. 누락이 세 사람과 봇에 고루 퍼져 있고, 특히 #1355 는 dependabot 이 작성자라 재요청을 걸 주체가 아예 없습니다 — 자동화 없이는 구조적으로 영원히 빚이 되지 않습니다.

같은 종류의 구멍을 이미 액션으로 막은 선례가 있습니다. review-request-all.yml 이 그것이고, 헤더 주석이 문제 진술까지 같습니다 — 「리뷰 요청을 손으로 걸다 보면 빠뜨린다」 / 「요청을 손으로 걸던 때는 아예 걸지 않는 것으로 가드를 통과할 수 있었다」. 다만 트리거가 opened / reopened / ready_for_review 뿐이라 반영 커밋(synchronize)에는 걸리지 않습니다.

구멍 B — merge 로 반영하면 「미반영」으로 샌다 (#1316)

#1316 은 재요청이 걸려 있어(8/28 07:38) ②를 통과했지만 ③에서 탈락했습니다. 가드는 반영 커밋을 select((.parents | length) < 2) 로만 세는데, 최신 변경요청(8/28 04:05:58) 이후 커밋 5건이 전부 병합 커밋이기 때문입니다.

그런데 실제로는 반영돼 있습니다. 리뷰 지적이 「base(fix/562)의 fake 를 가져와 달라」였고 작성자가 rebase 대신 base 를 merge 로 끌어와 처리했습니다 — 69f5e1f9 는 리뷰가 지목한 TestHiltModules.kt 를 실제로 바꿉니다(+4/-0). 작성자 응답 코멘트도 2건(8/28 07:38, 21:34) 달려 있습니다. 즉 공은 리뷰어에게 넘어갔는데 가드만 「공은 작성자에게」로 읽습니다.

처방 후보

  • A — review-request-all.yml 에 synchronize 트리거를 더해, PR 전체의 최신 판정이 CHANGES_REQUESTED 인 리뷰어를 자동 재요청한다. 권한·수단은 이미 같은 워크플로가 GITHUB_TOKEN + pull-requests: write 로 gh pr edit --add-reviewer 를 돌려 실증돼 있고, force-push 마다 오는 synchronize 중복은 기존 current 체크 패턴을 그대로 쓰면 된다. review_requested 를 소비하는 워크플로가 이 저장소에 0건이라, GITHUB_TOKEN 이 만든 이벤트가 다른 워크플로를 못 깨우는 제약도 무해하다.
  • B — 반영 커밋 계수에서 병합 커밋을 무조건 빼지 않는다. first-parent 대비 실변경이 있으면 센다. 또는 변경요청 이후의 작성자 코멘트를 반영 신호로 함께 본다.

결정이 필요한 지점

A 를 넣으면 재요청이 자동이 되므로 #1206 이 명시적으로 세운 「수정 커밋만으로 리뷰 의무를 만들지 않는다」가 사실상 뒤집힙니다. review-debt-policy.test.mjs 는 가드 파일만 검사하므로 새 워크플로를 더하는 것만으로는 red 가 나지 않지만, 정책 자체를 바꾸는 변경이라 팀 합의가 먼저여야 합니다. 그리고 넣는 즉시 위 표의 빚이 살아나 그 뒤 새 PR 을 여는 사람부터 가드에 닫힙니다.

참고

Activity

  1. added
    bugSomething isn't working
    area:platformCI·빌드·릴리스·저장소 운영 영역
    on Aug 29, 2026
  2. github-actions commented on Aug 29, 2026

    @github-actions
    Contributor

    bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:

    • Urgent: 치명 — 크래시·데이터 소실·보안 무력화·핵심 경로 차단·가짜 성공
    • High: 심각 — 실패·틀린 값의 정상 위장, 핵심 기능 무동작
    • Medium: 불편 — 우회로가 있는 오동작·틀린 표시, 핵심 흐름은 유지
    • Low: 경미 — 문구·정렬·마감 품질 흠, 기능 영향 없음

    등록 후 24시간이 지나도 비어 있으면 자동으로 닫습니다. 닫힌 뒤에는 값을 지정하고 다시 열어 주세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:platformCI·빌드·릴리스·저장소 운영 영역bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions