Skip to content

PR verdict 블록이 강제되지 않는다 — 열린 PR 7건이 규칙 위반 merge-approved 보유 (자체 승인 포함) #3936

Description

@yazzang-homelab

문제

PR 템플릿은 gajae.pr-review-verdict.v1 블록을 머지 게이트로 쓴다. 규칙은 본문에 명시돼 있다.

Paste one exact-head verdict. Self-approval is BLOCK. If there was no independent architect/critic/human review, write needs-human and stop.

  • Verdict above matches the exact PR head, not an earlier commit

이 블록은 작성자가 자기 PR 본문에 직접 쓰는 자유 텍스트이고, 검증하는 것이 아무것도 없다. 실제로 열린 PR 17개 중 7개가 규칙을 위반한 merge-approved를 달고 있다.

현황 (열린 PR 전수, verdict 블록 보유 17개)

PR 본문 verdict reviewer 주장 GitHub 리뷰 결정 sha=head 독립 APPROVED 작성자
#3935 needs-human human - 0 probepark
#3932 needs-human human - 0 yazzang-homelab
#3931 needs-human human - 0 yazzang-homelab
#3925 merge-approved critic - 아니오 0 snowykr
#3919 needs-human human - 아니오 0 twoimo
#3910 needs-human human - 아니오 0 yazzang-homelab
#3904 needs-human human - 아니오 0 gimso2x
#3893 merge-approved architect CHANGES_REQUESTED 아니오 0 snowykr
#3889 needs-human human - 아니오 0 innocarpe
#3887 merge-approved architect - 아니오 0 Loxia106
#3844 needs-human human CHANGES_REQUESTED 아니오 0 yazzang-homelab
#3823 merge-approved architect CHANGES_REQUESTED 아니오 0 developjik
#3822 merge-approved architect CHANGES_REQUESTED 아니오 0 developjik
#3784 needs-human human - 아니오 0 pers0n4
#3777 needs-human human CHANGES_REQUESTED 아니오 0 binyangzhu000-sudo
#3741 merge-approved architect CHANGES_REQUESTED 아니오 0 sj0618
#3697 merge-approved architect CHANGES_REQUESTED 1 sj0618

위반 유형

A. CHANGES_REQUESTED인데 본문은 merge-approved (5건)#3893, #3823, #3822, #3741, #3697

리뷰어가 변경을 요구한 뒤에도 본문 verdict가 그대로 남아 있다. 머지 판단을 본문만 보고 하면 정반대 결론이 나온다.

B. 독립 APPROVED 0건인데 merge-approved (6건)

reviewer:architect / reviewer:critic이라고 적혀 있지만 그 리뷰가 GitHub에 존재하지 않는다. #3887은 작성자가 자기 변경에 reviewer:architect merge-approved를 붙였고 리뷰는 0건이었다 — 템플릿이 명시적으로 BLOCK이라고 한 자체 승인이다.

C. sha가 head와 불일치 (6건)

템플릿이 <exact-head-or-diff-hash>를 허용하므로 diff 해시일 수 있어 단독으로는 위반이라고 단정하지 않는다. 다만 diff 해시는 외부에서 재계산할 방법이 문서화돼 있지 않아 검증 불가능한 증거다. 검증할 수 없는 필드는 게이트 역할을 못 한다.

왜 지금 문제인가

exact-head CI 게이트는 기계적으로 강제되지만(dev-ci.ymlgit merge-base --is-ancestor), 리뷰 게이트는 강제되지 않는다. 그래서 CI는 통과하는데 리뷰 근거는 자기 신고인 PR이 정상으로 보인다. 게이트가 하나라도 자유 텍스트면 그 게이트는 없는 것과 같다.

제안

verdict 블록은 GitHub API로 전부 기계 검증이 가능하다. pull_request_target 또는 기존 CI에 검사 하나를 추가한다.

  1. 본문에서 verdict 블록을 파싱한다. 없으면 실패.
  2. merge-approved이면:
    • 작성자가 아닌 사용자의 APPROVED 리뷰가 최소 1건 존재해야 한다. (자체 승인 차단 — 지금은 문서로만 존재한다)
    • 그 APPROVED 리뷰의 commit_id가 현재 head와 같아야 한다. (exact-head 요구를 실제로 강제)
    • reviewDecisionCHANGES_REQUESTED가 아니어야 한다.
  3. sha256: 필드는 head sha로 고정하거나, diff 해시를 쓸 거면 재계산 명령을 템플릿에 명시한다. 검증 불가능한 형식은 빼는 게 낫다.
  4. needs-human은 언제나 통과시킨다. 정직한 신고를 벌주면 안 된다.

이러면 verdict 블록이 문서가 아니라 게이트가 된다. 지금은 7건이 그 사실을 증명하고 있다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions