Repository navigation
fix(platform): pr-open 라벨러가 본문의 두 번째 Closes 를 놓친다 #2082
Description
작업 유형
bug — 버그·오동작
주 담당 모듈
platform — Android 앱·CI·빌드·릴리스·저장소 운영
개요
pr-open 라벨러가 PR 제목의 대표 이슈 하나만 본다. 한 PR 이 본문에 Closes 를 둘 이상 적어도 두 번째부터는 라벨도 링크 코멘트도 받지 못한다.
.github/scripts/label-issues-with-open-prs.mjs 70행이 판정의 전부다.
const issueNumber = extractTitleIssueNumber(pullRequest.title);
if (issueNumber === null) {
skipped.push(pullRequest);
continue;
}Repository Quality 가 PR 제목에 (#N) 을 정확히 하나만 허용하므로 제목에서 나오는 이슈는 구조적으로 최대 한 건이다. 본문은 아예 읽지 않는다. 열린 PR 을 긁는 GraphQL 질의에도 body 가 없다.
실제 피해가 오늘 확인됐다. PR #2051 제목은 fix(setting): 수신자 목록 조회 상태와 재시도 연결 (#1281) 이고 본문 첫 절에 Closes #1281 과 Closes #2045 가 나란히 있다. 지금 #1281 에는 pr-open 이 붙어 있고 #2045 에는 없다. 그래서 미착수 이슈 조사에서 #2045 가 구현이 이미 존재하는데도 미착수로 보였고, 중복 착수로 이어질 뻔했다.
이 PR 은 base 가 fix/579-receiver-reentry 라 기본 브랜치가 아니다. 그런 PR 은 GitHub 이 closing 키워드를 closingIssuesReferences 로 승격하지 않아 이슈의 Development 칸도 비어 있다. 라벨러가 유일한 신호인데 그 신호가 절반만 나온다.
제안
본문의 closing 키워드도 함께 읽어, 한 PR 이 닫는 이슈 전부에 라벨과 링크 코멘트가 가게 한다.
파일 상단 주석(51~58행)은 제목만 보는 이유를 "본문의 느슨한 Refs #N 까지 주우면 참고로 언급한 이슈에까지 라벨이 붙어 라벨의 뜻이 무너진다" 로 적어 두었다. 그 우려는 closing 키워드만 읽으면 그대로 지켜진다. Refs·Part of·Related to 는 계속 무시한다.
새 정규식은 만들지 않는다. validate-pr-issue-link.mjs 의 extractClosingIssueNumbers 를 그대로 쓴다. 이 추출기는 이미 세 가지를 정해 두었고 pr-issue-link-policy.test.mjs 가 그 결정을 고정하고 있다.
- 키워드 변형
Close·Closes·Closed·Fix·Fixes·Fixed·Resolve·Resolves·Resolved - 다른 저장소 참조 제외,
owner/repo#N과 이슈 URL 형태 인식 - 코드 블록·인라인 백틱·HTML 주석 안의 참조 제외
같은 공백을 같은 방식으로 메운 선례가 있다. #1189 가 merge-order-guard 에 제목·본문 정규식 합집합을 넣었고, 그 패턴이 extractClosingIssueNumbers 와 같은 모양이라는 사실은 validate-pr-issue-link.mjs 주석에 적혀 있다. 라벨러만 빠져 있었다.
완료 조건
- 제목의 대표 이슈와 본문
Closes가 가리키는 이슈 전부가 라벨을 받는다. - 같은 번호가 제목과 본문에 겹쳐도 이슈마다 한 번만 처리한다.
Refs·Part of·Related to로만 언급된 이슈에는 라벨이 붙지 않는다.- base 가 기본 브랜치가 아닌 PR 은 라벨을 받는 이슈마다 링크 코멘트를 받는다.
- 정책 테스트가 위 분기를
.github/scripts/label-issues-with-open-prs.test.mjs에 고정한다.
참고
- 피해 PR: fix(setting): 수신자 목록 조회 상태와 재시도 연결 (#1281) #2051 (본문
Closes #1281,Closes #2045, basefix/579-receiver-reentry) - 라벨을 못 받은 이슈: fix(core): 수신자 목록의 로딩·실패 결과를 보존한다 (#1281 분리) #2045
- 라벨러 도입 이슈: chore(ci): 열린 PR 을 대표 이슈에 라벨로 드러내 base≠develop PR 의 미구현 오인을 없앤다 #1532
- 같은 공백을 merge-order-guard 에서 메운 선례: fix(ci): merge-order-guard 가 closing 참조 0건이면 무검사 통과 — 제목·본문 정규식과 합집합으로 보강 #1189
- 대상:
.github/scripts/label-issues-with-open-prs.mjs, 호출 워크플로.github/workflows/conflict-label.yml
Activity
github-actions commentedon Sep 13, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.